Les bibliothèques dynamiques sont-elles prises en charge sur iOS (iPhone / iPad)?
Dans Xcode, j'ai essayé de créer un nouveau projet -> Framework & Library -> Cocoa Library (dynamique) . Dans les paramètres du projet, j'ai défini le SDK de base sur iOS device 4.1
et la cible sur iOS4.1
, mais il y a une erreur de construction:
target spécifie le type de produit 'com.apple.product-type.library.dynamic', mais il n'existe pas de type de produit pour la plate-forme 'iphonesimulator' ».
La version que j'ai sélectionnée est Simulator -> Debug -> i386 .
Réponses:
Au moment où cette question a été posée, les bibliothèques dynamiques n'étaient pas prises en charge par iOS et entraîneront le rejet de votre application. Seules les bibliothèques statiques sont autorisées.
Cependant, dans iOS8, vous pouvez utiliser des bibliothèques et des frameworks dynamiques. Cela devrait "juste fonctionner"
la source
Je ne conteste pas vraiment avec la réponse de DarkDust , mais si je peux canaliser mon intérieur Bill Clinton, cela dépend de ce que le sens de prise en charge est :)
Apple ne veut pas que vous fassiez cela pour les applications de l'App Store, mais le système d'exploitation le permet certainement. Les applications de jailbreak utilisent cette technique tout le temps. Vous utilisez essentiellement une technique UNIX standard pour ouvrir dynamiquement un framework / bibliothèque, puis utilisez des éléments dedans. La fonction dlopen vous permet d'ouvrir la bibliothèque en passant le chemin vers ce framework , ou dylib. À partir de certains documents sur la création d'applications de jailbreak , voici un exemple d'appel d'une
init()
fonction implémentée dans votre propre dylib distinct:De plus, la restriction par défaut qui vous permet de créer un projet de bibliothèque dynamique pour iOS est quelque chose dans Xcode que vous avez la possibilité de remplacer en modifiant certains fichiers xml XCode:
Construire et utiliser dylib sur iOS
Une fois que vous faites cela, vous pouvez créer une bibliothèque iOS .dylib normale et l'utiliser selon l'exemple de code ci-dessus. (oui, vous devrez probablement déverrouiller à nouveau cette fonctionnalité chaque fois que vous installerez une nouvelle version de XCode).
Ce n'est donc pas une limitation technique, mais une limitation de la politique de l'App Store. Si vous n'êtes pas limité à l'App Store, vous pouvez le faire. Notez que cette technique ne nécessite pas de jailbreaker, bien que si l'application est en bac à sable, elle peut limiter l' emplacement à partir duquel les dylibs peuvent être chargés.
Edit: afin de vous assurer que ces informations ne seront pas perdues lors de la pourriture future du lien, voici le contenu du lien que j'ai fourni sur la façon d'activer les dylibs iOS dans Xcode. ( Remarque: ce processus fonctionne toujours sur Xcode 4, mais voir le (s) commentaire (s) ci-dessous pour les mises à jour des chemins, etc.) La source est le blog iOS Place :
Xcode ne vous permet pas de créer dylib pour iOS. L'application sera rejetée s'il ne s'agit pas d'un binaire unique. Mais j'ai une application qui a une architecture plug-in pour charger des modules optionnels. Je veux juste un prototype rapide pour prouver le concept avant de le porter complètement sur iOS. C'est plus rapide à faire si dylib pouvait simplement fonctionner. Donc, cet article montre comment créer et utiliser dylib, mais sachez qu'il ne sera pas approuvé sur l'App Store. (Testé avec Xcode 3.2.4 sur 10.6.4)
1. Ouvrez ces fichiers dans l'éditeur de liste de propriétés: /Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Product Types.xcspec et /Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications / iPhone Simulator ProductTypes.xcspec
2. Localisez l'élément dans « MacOSX Product Types.xcspec » qui contient le type de produit
com.apple.product-type.library.dynamic
et faites-le glisser vers « iPhone Simulator ProductTypes.xcspec ».3. Ouvrez « MacOSX Package Types.xcspec » et « iPhone Simulator PackageTypes.xcspec » qui se trouvent aux mêmes endroits.
4. Localisez l'élément dans « MacOSX Product Types.xcspec » qui a le type de package
com.apple.package-type.mach-o-dylib
et faites-le glisser vers « iPhone Simulator PackageTypes.xcspec ».5. Répétez les étapes pour « iPhoneOS.platform » et relancez Xcode s'il était en cours d'exécution.
Maintenant, construisons un dylib. Commencez avec le modèle « Cocoa Touch Static Library ». Cela devrait inclure le cadre Foundation.fr dans le projet. Voici les modifications que j'ai apportées au-dessus du modèle pour créer dylib.
1. Ouvrez le fichier project.pbxproj (qui se trouve dans le lot de fichiers de projet Xcode) dans un éditeur de texte. Recherchez la chaîne " producttype ", remplacez sa valeur par
com.apple.product-type.library.dynamic
;Maintenant, ouvrez le projet avec Xcode, allez dans Projet-> Modifier les paramètres du projet
2. « Répertoire d'installation » défini sur
@executable_path/
parce que je prévois de placer le dylib dans le même répertoire que l'exécutable de l'application.3. « Mach-O Type » défini sur Dynamic Library
4. « Extension exécutable » définie sur dylib
5. « Préfixe exécutable » défini sur vide
6. Ajoutez une ou deux méthodes simples à la bibliothèque et créez-la.
Maintenant, créez une application pour la tester. Cette fois, je choisis l' application basée sur la vue . Connectez un UIButton et un UILabel pour appeler la lib et afficher le message de retour. Vous pouvez télécharger le projet complet TestApp et jouer avec.
la source
À partir de Xcode 11.4.1, les bibliothèques dynamiques ne sont pas autorisées (votre projet ne sera pas compilé pour toutes les destinations). La nouvelle façon d'utiliser les libs / frameworks est le create-xcframework de xcodebuild.
la source