Nouveaux avertissements dans iOS 9: «tous les bitcode seront supprimés»

387

J'ai ce nouvel avertissement concernant Google Framework dans mon application:

(null): URGENT: tous les bitcode seront supprimés car '/ Users / myname / Library / Mobile Documents / com ~ apple ~ CloudDocs / foldername / appname / GoogleMobileAds.framework / GoogleMobileAds (GADSlot + AdEvents.o)' a été construit sans bitcode . Vous devez le reconstruire avec le code bit activé (paramètre Xcode ENABLE_BITCODE), obtenir une bibliothèque mise à jour auprès du fournisseur ou désactiver le code bit pour cette cible. Remarque: Ce sera une erreur à l'avenir.

Xcode 7 me donne environ 204 avertissements sur ce même concept, et je n'ai pas pu contourner cela. J'ai également un problème d'accès au réseau depuis mon application. C'est l'erreur de la zone de débogage:

-canOpenURL: échec pour l'URL: "kindle: // home" - erreur: "Cette application n'est pas autorisée à interroger le schéma kindle"

Tous ces problèmes n'étaient pas présents dans iOS 8.

C.Farrugia
la source
Vous avez donc activé le bitcode dans votre cible Xcode?
Droppy
Désolé, je suis nouveau dans ce domaine, pouvez-vous me dire comment, s'il vous plaît?
C.Farrugia
Je ne l'ai jamais fait, mais cela semble être quelque chose que vous devez définir délibérément. Vous semblez l'avoir fait.
Droppy
4
@Droppy AFAIK le paramètre est activé par défaut, mais vous pouvez le désactiver à tout moment dans les paramètres de votre projet.
A
Je les ai éteints et tous les avertissements ont disparu. J'ai fait des recherches un peu et Google doit mettre à jour leur cadre pour que cette erreur soit désactivée, jusqu'à présent, le désactiver fonctionnera. Est-ce que quelqu'un connaît l'URL -canOpenURL: a échoué pour l'URL: "kindle: // home" - erreur: "Cette application n'est pas autorisée à rechercher le schéma kindle"? Je n'ai aucune idée de ce dont parle Xcode
C.Farrugia

Réponses:

1023

Votre bibliothèque a été compilée sans bitcode, mais l'option bitcode est activée dans les paramètres de votre projet. Dites NOà Enable Bitcodedans vos paramètres de build cibles et les paramètres de build de la bibliothèque pour supprimer les avertissements.

Pour ceux qui se demandent si l'activation du bitcode est requise:

Pour les applications iOS, le bitcode est la valeur par défaut, mais facultatif. Pour les applications watchOS et tvOS, un bitcode est requis. Si vous fournissez le bitcode, toutes les applications et tous les frameworks du bundle d'applications (toutes les cibles du projet) doivent inclure le bitcode.

https://help.apple.com/xcode/mac/current/#/devbbdc5ce4f

Zia
la source
@Centurion la précédente bibliothèque google analytics est obsolète et ne se compile pas non plus avec xcode 7 / ios9
zonabi
1
@goelv oui, vous devriez être en mesure de soumettre des applications avec le code bit désactivé. c'est facultatif en ce moment. il pourrait devenir nécessaire à l'avenir.
zonabi
2
N'a PAS fonctionné pour moi pour l'archivage. Le projet pré XCODE 7 fonctionnait bien, ne peut plus ARCHIVER même si l'option Activer le bitcode est définie sur NO. C'est pour la bibliothèque AWS.
ort11
1
Obtient toujours l'erreur après avoir désactivé Bitcode sur toutes les cibles.
datWooWoo
110

Après Xcode 7, l'option bitcode sera activée par défaut. Si votre bibliothèque a été compilée sans bitcode, mais que l'option bitcode est activée dans les paramètres de votre projet, vous pouvez:

  1. Mettez à jour votre bibliothèque avec du code bit,
  2. Dites NON pour activer le Bitcode dans vos paramètres de build cibles

Entrez la description de l'image ici

Et les paramètres de création de bibliothèque pour supprimer les avertissements.

Pour plus d'informations, consultez la documentation de bitcode dans la bibliothèque de développeur .

Et WWDC 2015 Session 102: "État des plates-formes de l'Union"

Entrez la description de l'image ici

ElonChan
la source
42

Dans mon cas pour éviter ce problème:

  1. Assurez-vous que vous avez affaire à Xcode 7 , PAS à des versions inférieures. Dans la version inférieure, ce drapeau n'existe pas.

  2. Configuration: Projet> Paramètres de build> Tous> Options de build> Activer le code bit = NON

entrez la description de l'image ici

Javier Calatrava Llavería
la source
2
Ainsi, vous devrez recompiler les bibliothèques incluses dans votre projet avec XCode7 et avec EnableBitcode réglé sur YES. Assez compliqué si vous travaillez avec des bibliothèques .a tierces.
Javier Calatrava Llavería
15

La méthode canOpenUrlest modifiée dans iOS 9 (en raison de la confidentialité) et n'est plus libre d'utiliser. Votre fournisseur de bannières recherche les applications installées afin de ne pas afficher les bannières d'une application déjà installée.

Cela donne toutes les instructions de journal comme

-canOpenURL: échec pour l'URL: "kindle: // home" - erreur: "Cette application n'est pas autorisée à interroger le schéma kindle"

Les fournisseurs devraient mettre à jour leur logique pour cela.

Si vous devez rechercher les applications installées / les schémas disponibles, vous devez les ajouter à votre info.plistfichier.

Ajoutez la clé «LSApplicationQueriesSchemes» à votre liste sous forme de tableau. Ajoutez ensuite des chaînes dans ce tableau comme «kindle».

Bien sûr, ce n'est pas vraiment une option pour les bannières publicitaires (car elles sont dynamiques), mais vous pouvez toujours interroger de cette façon pour vos propres applications ou d'autres applications spécifiques comme Twitter et Facebook.

Documentation de la méthode canOpenUrl: canOpenUrl:

Documentation sur la clé LSApplicationQueriesSchemes

Saren Inden
la source
Supposons qu'une bibliothèque statique vérifie un lien profond de l'application parent, comment utiliser l'exception 'LSApplicationQueriesSchemes' dans la bibliothèque statique? Normalement, vous n'avez pas d'Info.plist pour cela.
loretoparisi
Je ne suis pas vraiment sûr de cela, si une bibliothèque doit vérifier les applications en dehors de son parent, le parent doit définir l'URL dans son info.plist (alors documentez-le pour le cadre). Si canOpenUrl renvoie également non, l'application parente peut le gérer, alors vous devriez (je suppose) inclure également ceux dans info.plist
Saren Inden
13

Si vous utilisez CocoaPods et que vous souhaitez désactiver le Bitcode pour toutes les bibliothèques, utilisez la commande suivante dans le Podfile

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ENABLE_BITCODE'] = 'NO'
        end
    end
end
Eike
la source
8

Avertissement: il est destiné à ceux qui prennent en charge un flux de travail d' intégration continue qui nécessitent un processus automatisé. Si vous ne le faites pas, veuillez utiliser Xcode comme décrit dans la réponse de Javier .

Cela a fonctionné pour moi à définir ENABLE_BITCODE = NOvia la ligne de commande:

find . -name *project.pbxproj | xargs sed -i -e 's/\(GCC_VERSION = "";\)/\1\ ENABLE_BITCODE = NO;/g'

Notez que cela risque d'être instable dans toutes les versions de Xcode. Il a été testé avec Xcode 7.0.1 et dans le cadre d'un projet Cordova 4.0.

miraculixx
la source
-2

Ce problème a été récemment résolu (novembre 2010) par Google, voir https://code.google.com/p/analytics-issues/issues/detail?id=671 . Mais sachez que comme bonne solution, cela apporte plus de bugs :)

Vous devrez également suivre la méthode d'initialisation indiquée ici: https://developers.google.com/analytics/devguides/collection/ios/v2 .

Les dernières instructions vont vous donner mal à la tête car elles font référence à des utilitaires non inclus dans le pod. Ci-dessous échouera avec le cocoapod

// Configure tracker from GoogleService-Info.plist.
NSError *configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
user1119517
la source