¿Las bibliotecas dinámicas son compatibles con iOS (iPhone / iPad)?
En Xcode, intenté crear un nuevo proyecto -> Framework & Library -> Cocoa Library (dinámico) . En la configuración del proyecto, que establezca el SDK base a iOS device 4.1
meta y para iOS4.1
, pero tiene un error de compilación:
target especifica el tipo de producto 'com.apple.product-type.library.dynamic', pero no existe tal tipo de producto para la plataforma 'iphonesimulator' ".
La compilación que seleccioné es Simulador -> Depurar -> i386 .
Respuestas:
En el momento en que se hizo esta pregunta, las bibliotecas dinámicas no eran compatibles con iOS y provocarán el rechazo de su aplicación. Solo se permiten bibliotecas estáticas.
Sin embargo, en iOS8 puede usar bibliotecas y marcos dinámicos. Debería "simplemente funcionar"
fuente
No estoy en desacuerdo con la respuesta de DarkDust , pero si se me permite canalizar mi interior Bill Clinton, que depende de cuál es el significado de la soportado es :)
Apple no quiere que hagas esto para las aplicaciones de la App Store, pero el sistema operativo ciertamente lo permite. Las aplicaciones de Jailbreak utilizan esta técnica todo el tiempo. Básicamente, usa una técnica UNIX estándar para abrir dinámicamente un marco / biblioteca y luego usa cosas en él. La función dlopen le permite abrir la biblioteca pasando la ruta a ese marco , o dylib. De algunos documentos para crear aplicaciones de jailbreak , aquí hay un ejemplo de
init()
cómo llamar a una función implementada dentro de su propio dylib separado:Además, la restricción predeterminada que no le permite crear un proyecto de biblioteca dinámica para iOS es algo en Xcode que tiene la capacidad de anular editando algunos archivos xml de XCode:
Compila y usa dylib en iOS
Una vez que haga esto, puede crear una biblioteca .dylib de iOS normal y usarla según el código de muestra anterior. (sí, probablemente tendrá que desbloquear esta capacidad nuevamente cada vez que instale una nueva versión de XCode).
Entonces, no es una limitación técnica, sino una limitación de la política de la App Store. Si no está limitado a la App Store, puede hacerlo. Tenga en cuenta que esta técnica no requiere jailbreak, aunque si la aplicación está en un espacio aislado, puede limitar desde dónde se pueden cargar los dylibs.
Editar: para asegurarse de que esta información no se pierda en el futuro enlace rot, aquí está el contenido del enlace que proporcioné sobre cómo habilitar iOS dylibs en Xcode. ( Nota: este proceso todavía funciona en Xcode 4, pero consulte los comentarios a continuación para obtener actualizaciones de las rutas, etc.) La fuente es el blog de iOS Place :
Xcode no le permite crear dylib para iOS. La aplicación será rechazada si no es un binario único. Pero tengo una aplicación que tiene una arquitectura de complementos para cargar módulos opcionales. Solo quiero un prototipo rápido para probar el concepto antes de portarlo completamente a iOS. Es más rápido hacerlo si dylib simplemente pudiera funcionar. Por lo tanto, esta publicación muestra cómo compilar 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. Localice el elemento 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 ”.3. Abra “ MacOSX Package Types.xcspec ” y “ iPhone Simulator PackageTypes.xcspec ” que se encuentran en los mismos lugares.
4. Busque el elemento en el " MacOSX Product Types.xcspec " que tiene el tipo de paquete
com.apple.package-type.mach-o-dylib
y arrástrelo al " iPhone Simulator PackageTypes.xcspec ".5. Repita los pasos para " iPhoneOS.platform " y reinicie Xcode si se estaba ejecutando.
Ahora, construyamos un dylib. Comience con la plantilla " Biblioteca estática de Cocoa Touch ". Eso debería incluir el marco Foundation.framework en el proyecto. Estos son los cambios que hice en la parte superior de la plantilla 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 " configurado en
@executable_path/
porque planeo colocar el dylib en el mismo directorio que el ejecutable de la aplicación.3. " Tipo de Mach-O " establecido en Biblioteca dinámica
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 constrúyalos.
Ahora, cree una aplicación para probarla. Esta vez, elijo la aplicación basada en vistas . Conecte un UIButton y un UILabel para llamar a la biblioteca y mostrar un mensaje de retorno. Puedes descargar el proyecto completo TestApp y jugar con él.
fuente
A partir de Xcode 11.4.1 no se permiten bibliotecas dinámicas (su proyecto no se compilará para todos los destinos). La nueva forma de usar libs / frameworks es create-xcframework de xcodebuild.
fuente