web-dev-qa-db-fra.com

les dylibs déplaçables (par exemple les frameworks intégrés) ne sont pris en charge que sur iOS 8.0 et versions ultérieures (@ rpath / libswift_stdlib_core.dylib)

Je viens de passer de Xcode 6 Beta 2 à Xcode Beta 3 et je reçois maintenant l'avertissement suivant lors de la construction de mon projet:

ld: warning: relocatable dylibs (e.g. embedded frameworks) are only supported on iOS 8.0 and later (@rpath/libswift_stdlib_core.dylib)

C'est un avertissement, mais semble signifier que ma configuration actuelle ne fonctionnera pas sur iOS 7.1, qui est ma cible de déploiement. Comment puis-je localiser les frameworks intégrés et comment résoudre ce problème pour iOS <8.0?

28
JuJoDi

Cela semble être un bogue de la Bêta 3. Comme l'a souligné Apple Engineer sur ce post .

J'ai également vécu cet avertissement lors de l'exécution d'applications sur un appareil iOS 7.1.

9
vladof81

Vous les voyez et les ajoutez sur la page du projet lorsque vous sélectionnez la cible: onglet Général-> Binaires intégrés (et ils apparaissent ensuite dans Phases de construction-> Intégrer les cadres ).

Example of embedded frameworks

Les frameworks intégrés pour OSX étaient disponibles dans Xcode 5, mais pas pour iOS.

Une session de la WWDC concernant les nouvelles fonctionnalités de Xcode 6 a spécifiquement promis des cadres dynamiques pour iOS 8 (quelqu'un doit ajouter une citation lorsque le centre des développeurs reviendra en ligne). Jusqu'à présent, avec toutes les versions bêta de Xcode 6, je n'ai eu aucun problème à compiler et à déboguer une application avec des frameworks sur iOS 7.

Mais comme cela n'a pas été promis, les cadres pour iOS7 ne sont pas fiables (par exemple, cela peut cesser de fonctionner dans les versions ultérieures; une application avec un cadre intégré pour iOS 7 peut être rejetée, etc.). Cela peut expliquer pourquoi ils ont ajouté un avertissement explicite.

Il n'y a pas grand-chose que vous puissiez faire si cette fonctionnalité s'avère effectivement non prise en charge, à part supprimer les frameworks de la cible et utiliser des bibliothèques statiques comme nous l'avons fait avec Xcode 5. Ou optez pour la voie iOS8 uniquement.

4
ilya n.

Après avoir utilisé XCode 6.1.1, je suis capable de mettre le code sur iOS 8+ iOS7.1.2 et iOS 6.1.3 Bien que l'avertissement soit toujours là, mais l'application fonctionne parfaitement sur les 3 systèmes d'exploitation

====================== Lucky guy ... Mon projet n'arrive toujours pas à compiler après avoir référencé le framework PushKit.

Le projet est un nouveau projet créé par Xcode avec seulement 3 nouvelles fonctions pour tester la notification push.

La solution de contournement consiste à mettre le framework PushKit en tant que "intégré", mais ce n'est pas une bonne solution puisque mon projet Xcode fonctionnel sera généré à partir d'Unity3d. Apporter les modifications manuellement interrompra le processus de génération automatique.

1
fatshoe

cela se produit car l'un des objectifs de déploiement de vos fichiers binaires intégrés est inférieur à celui de vos applications. abaissez la cible de construction de vos binaires intégrés et soyez bien.

ce fut la cause de l'erreur dans xcode 6.1.1

j'utilisais xcglogger avec la cible de déploiement ios 8.0 et la cible de déploiement de mon application 7.0. définissez la cible de déploiement de xcglogger ios 7.0 et le problème est résolu.

0
user3812138

Après avoir utilisé XCode 6.1.1, je suis capable de mettre le code sur iOS 8+ iOS7.1.2 et iOS 6.1.3 Bien que l'avertissement soit toujours là, mais l'application fonctionne parfaitement sur les 3 systèmes d'exploitation

Oui, impossible de soumettre l'application pour examen. Cela a dû être fait en changeant les cadres modernes en bibliothèques statiques.

0
Ravi Dalmia

J'ai eu cette erreur après avoir ajouté un framework C++ (DeepBelief) à un projet. L'ajout d'un fichier .cpp vide au projet l'a corrigé.

J'utilise Beta4 et j'ai trouvé la réponse sur le site github de DeepBelief:

XCode peut ignorer la bibliothèque C++ standard, et cela est requis par le code DeepBelief.framework. Une solution de contournement que j'ai trouvée consiste à inclure un fichier .mm ou .cpp vide dans le projet pour inciter XCode à le traiter comme un projet C++.

0
rob

Lisez cet article Github de ReactiveCocoa

Le bogue est toujours présent dans XCode6 GM et donc la version finale de XCode6:

Eh bien, j'obtiens exactement le même problème dans xcode6GM, que je crée ou non un framework pour Swift OR objc: - [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[L'euseModep>)) [[[[[[ [[[[[

Selon Apple Extension Programming Guide :

Vous pouvez mettre une application conteneur à la disposition des utilisateurs exécutant iOS 7 ou une version antérieure, mais vous devez ensuite prendre des précautions pour lier en toute sécurité les cadres intégrés lors de l'exécution dans iOS 8 ou version ultérieure.

parler d'extensions d'application, mais si vous le lisez, vous pouvez comprendre que cela s'applique aux cadres intégrés en général.

0
loretoparisi