¿Puedes construir bibliotecas dinámicas para iOS y cargarlas en tiempo de ejecución?

¿Son compatibles las bibliotecas dinámicas en iOS (iPhone / iPad)?

En Xcode, traté de crear un nuevo proyecto -> Framework & Library -> Cocoa Library (dynamic) . En la configuración del proyecto, configuro el SDK base para el iOS device 4.1 y me iOS4.1 a iOS4.1 , pero tiene un error de comstackción:

target especifica el tipo de producto ‘com.apple.product-type.library.dynamic’, pero no existe dicho tipo de producto para la plataforma ‘iphonesimulator’ “.

La comstackción que seleccioné es Simulator -> Debug -> i386 .

En el momento en que se formuló esta pregunta, iOS no admitió las bibliotecas dinámicas y su aplicación será rechazada. Solo las bibliotecas estáticas están permitidas.

Sin embargo, en iOS8 puede usar bibliotecas y marcos dynamics. Debería “solo funcionar”

No estoy realmente en desacuerdo con la respuesta de DarkDust , pero si puedo canalizar mi Bill Clinton interno, depende de cuál sea el significado de admitido 🙂

Apple no quiere que hagas esto para aplicaciones de App Store, pero el sistema operativo ciertamente lo permite. Las aplicaciones de Jailbreak usan esta técnica todo el tiempo. Básicamente, utiliza una técnica estándar de UNIX para abrir dinámicamente un marco / biblioteca, y luego usar cosas en él. La función dlopen le permite abrir la biblioteca pasando la ruta a ese marco , o dylib. A partir de algunos documentos para crear aplicaciones jailbreak , aquí hay un ejemplo de invocar una función init() implementada dentro de su propia, dylib por separado:

 #include  initWrapper() { char *dylibPath = "/Applications/myapp.app/mydylib2.dylib"; void *libHandle = dlopen(dylibPath, RTLD_NOW); if (libHandle != NULL) { // This assumes your dylib's init function is called init, // if not change the name in "". void (*init)() = dlsym(libHandle, "init"); if (init != NULL) { init(); } dlclose(libHandle); } } 

Además, la restricción predeterminada para permitirle crear un proyecto de biblioteca dinámica para iOS es algo en XCode que puede sobrescribir editando algunos archivos XCode xml:

Crea y usa dylib en iOS

Una vez que haga esto, puede construir una biblioteca .dylib de iOS normal, y usarla según el código de ejemplo anterior. (Sí, probablemente tendrá que desbloquear esta capacidad cada vez que instale una nueva versión de XCode).

Por lo tanto, no es una limitación técnica, sino una limitación de la política de la tienda de aplicaciones. Si no estás limitado a la App Store, entonces puedes hacerlo. Tenga en cuenta que esta técnica no requiere jailbreaking, aunque si la aplicación está en modo de espacio aislado, puede limitar desde dónde se pueden cargar dylibs.

Editar: para asegurarnos de que esta información no se pierda en futuros enlaces podridos, aquí está el contenido del enlace que proporcioné sobre cómo habilitar iOS dylibs en Xcode. ( Nota: este proceso aún funciona en Xcode 4, pero vea los comentarios a continuación para las actualizaciones de rutas, etc.) Fuente es el blog de iOS Place :


Xcode no te permite construir dylib para iOS. La aplicación será rechazada si no es un solo binario. Pero tengo una aplicación que tiene una architecture de complemento para cargar módulos opcionales. Solo quiero un prototipo rápido para probar el concepto antes de portarlo por completo a iOS. Es más rápido si dylib simplemente funcionara. Por lo tanto, esta publicación muestra cómo construir y usar dylib, pero tenga en cuenta que no se aprobará en App Store. (Probado con Xcode 3.2.4 en 10.6.4)

1. Abra estos archivos en el Editor de lista de propiedades: /Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Product Types.xcspec y /Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications / iPhone Simulator ProductTypes.xcspec

2. Ubique el artículo en ” MacOSX Product Types.xcspec ” que tiene el tipo de producto com.apple.product-type.library.dynamic y arrástrelo al ” iPhone Simulator ProductTypes.xcspec “.

Captura de pantalla de Xcode 1

3. Abra ” MacOSX Package Types.xcspec ” y ” iPhone Simulator PackageTypes.xcspec ” encontrados en los mismos lugares.

4. Ubique el artículo en ” MacOSX Product Types.xcspec ” que tiene el paquete tipo com.apple.package-type.mach-o-dylib y arrástrelo al ” iPhone Simulator PackageTypes.xcspec “.

Captura de pantalla 2 de Xcode

5. Repita los pasos para ” iPhoneOS.platform ” y vuelva a iniciar Xcode si se estaba ejecutando.

Ahora, construyamos un dylib. Comience con la biblioteca estáticaCocoa Touch Static “. Eso debería incluir el marco de la Fundación en el proyecto. Estos son los cambios que hice en la parte superior de la Templete para construir dylib.

1. Abra el archivo project.pbxproj (que se encuentra dentro del paquete de archivos del proyecto Xcode) en un Editor de texto. Busque la cadena ” producttype “, cambie su valor a com.apple.product-type.library.dynamic ;

Ahora, abra el proyecto con Xcode, vaya a Proyecto-> Editar configuración del proyecto

2.Directorio de instalación ” establecido en @executable_path/ porque planeo poner el dylib en el mismo directorio que el ejecutable de la aplicación.

3.Mach-O Type ” configurado en Dynamic Library

4.Extensión ejecutable ” establecida en dylib

5.Prefijo ejecutable ” configurado en vacío

6. Agregue uno o dos métodos simples a la biblioteca y compárelo.

Ahora, crea una aplicación para probarlo. Esta vez, elijo la aplicación basada en la vista . Conecte un UIButton y un UILable para llamar a la lib y mostrar el mensaje de devolución. Puede descargar el proyecto completo TestApp y jugar con él.

    Intereting Posts