web-dev-qa-db-fra.com

Avertissements Xcode 7: le fichier objet a été créé pour une version iOS plus récente que celle liée

J'ai récemment intégré Google Cloud Messaging dans une application ciblant iOS 7 et iOS 8. Il suffit de saisir Xcode 7 beta 4 pour commencer à utiliser le support iOS 9, et maintenant, une erreur s'est produite dans l'éditeur de liens:

ld: warning: object file (.../Pods/GoogleInterchangeUtilities/Libraries
/libProtocolBuffers.a(Descriptor.pb.o)) was built for newer iOS version (8.3)
than being linked (7.0)

et une poignée de plus comme cela pour toutes les parties de libProtocolBuffers.a.

Est-ce que cela signifie que iOS 8.3 est requis pour utiliser la bibliothèque GCM? Si tel est le cas, pourquoi Xcode 6 a-t-il heureusement craché du code qui (selon toutes les apparences dans mes tests avec des appareils iOS 7) livrait des notifications Push à iOS 7.3 sans problème?

Comme ce ne sont que des avertissements, je peux toujours bien compiler, mais je préfère ne pas envoyer de code erroné.

Edit: J'ai envoyé un e-mail à Google et ils ont dit que les meilleures personnes vont se pencher sur la question. En attendant, si vous lisez ceci et êtes dérangé par l'avertissement, peut-être aussi un email pour qu'ils soient encouragés à le gérer.

50
Jony Thrive

Cela signifie simplement que l’une des bibliothèques (tampons de protocole ici) dont dépend GCM a été construite pour 8.3 bien qu’elle soit compatible avec la version sdk min de GCM, c’est-à-dire 7.0. XCode 7 est juste plus sévère et le signale comme un avertissement, mais les versions précédentes ne l'ont toujours pas signalé.

Dans l’ensemble, c’est inoffensif, tout devrait bien fonctionner. En outre, vous ne pouvez pas faire grand chose à moins que Google ne corrige GCM en construisant toutes ses dépendances avec la version min sdk (7.0).

35
evanescent

Cela signifie en fait que cible de déploiement minimale de la bibliothèque incluse était à 8.3 et que le lien avec la cible de déploiement minimale inférieure produit cet avertissement.

La bibliothèque ne supporte pas officiellement les cibles inférieures à 8.3 dans ce cas. Bien que la liaison de cette bibliothèque à la cible avec ower Minimum Deployment Target fonctionne toujours, elle risque de provoquer des plantages à l'exécution, si du code uniquement 8.3 est exécuté sur un appareil qui exécute un système plus ancien que 8.3.

Il y a une raison pour laquelle les développeurs ont défini 8.3 comme cible minimale et que cet avertissement NE devrait PAS soit ignoré. Cela pourrait être inoffensif dans ce cas, mais ce n'est pas nécessairement inoffensif dans d'autres cas!

Pour résoudre ces avertissements, utilisez une version plus ancienne de la bibliothèque ou définissez votre cible de déploiement minimale sur 8.3.

34
Legoless

Ma façon de réparer:

  1. Vérifiez que "Cible de déploiement" est égal à "Plate-forme" Podfile
  2. Supprimer DerivedData (/ Users/yourUser/Library/Developer/Xcode)
  3. Installation du pod (terminal)
  4. Projet de nettoyage/construction

P.s. Peut ajouter plus d'informations si nécessaire.

21
OMGHaveFun

Dans cibles/Paramètres de construction/Liaison/Autres drapeaux de l'éditeur de liens, ajoutez

-w

faites taire l'avertissement pour moi.

8
wj2061

Pour votre information, la dernière version des modules correspondants semble avoir résolu ce problème.

Plus précisément, il semble que ce soit la mise à niveau de GoogleInterchangeUtilities de 1.0.0 à 1.1.0 qui ait fait l'affaire.

Si vous voyez cela, une "mise à jour de pod" devrait améliorer tout cela!

3
Codiak

Dans mon cas, la raison en était que je venais de mettre à jour pods puis de modifier deployment target Pour qu'il soit plus bas que précédemment et que de tels avertissements se produisaient. Lancer à nouveau pod update résout le problème.

1
Injectios