Dans mon AppDelegate, j'appelle
[Fabric with:@[CrashlyticsKit]];
et tout fonctionne bien. Maintenant, j'ai tiré mon code sur une autre machine, et la même ligne me donne l'erreur suivante:
*** Terminating app due to uncaught exception 'FabricException', reason: '[Fabric] Value of Info.plist key "Fabric" must be a NSDictionary.'
Je ne suis au courant d'aucun ajout dans le plist de mon projet. Des idées de quoi cette erreur peut-elle se référer et comment la réparer?
Fabric insère automatiquement un bloc de texte dans le répertoire de votre application lorsque vous l'installez. Celles-ci sont essentielles et Fabric lève une exception lors de l'initialisation si elles ne sont pas présentes.
Malheureusement, il ne vous dit pas vraiment que c'est le cas, nous avons donc rencontré un blocage sur un projet où le plist était automatiquement généré par un outil - ce qui remplaçait ce que Fabric avait ajouté.
Pour référence, voici à quoi ressemble la partie Fabric du plist dans la version actuelle (vous ne savez pas exactement où se trouve le numéro de version, mais la dernière version en date du 15 juin 2015).
<key>Fabric</key>
<dict>
<key>APIKey</key>
<string>your-api-key</string>
<key>Kits</key>
<array>
<dict>
<key>KitInfo</key>
<dict/>
<key>KitName</key>
<string>Crashlytics</string>
</dict>
</array>
</dict>
Une autre façon de résoudre cette utilisation de Fabric App.
N'ajoutez pas manuellement la clé Fabric dans votre fichier .info.
C'est ce qui m'est arrivé et c'est comme ça que j'ai résolu le problème (merci à tous pour les pistes).
Contexte : Lorsque vous avez plusieurs cibles différentes dans votre projet Xcode, créer une nouvelle application dans l'application Mac Fabric ne semble pas suffire.
Solution : Si vous sélectionnez le même projet (par exemple pour votre version Pro), l’application Fabric ne touche pas correctement le fichier .plist du pro. . Il vous suffit donc de copier l’entrée du dictionnaire Fabric de votre La version non professionnelle de .plist et collez-la dans la version de votre Pro. La clé API va au niveau de l'organisation, c'est donc la bonne façon de le faire.
La solution nous a demandé de mettre à jour Crashlytics. Les autres cibles que nous avions configurées avaient la dernière version et celles-ci fonctionnaient bien, mais la dernière mise à jour (3.0.9 au moment de cet article) semble résoudre le problème.
Pour moi la raison était:
Lorsque vous créez une nouvelle cible, un nouveau fichier Info.plist est créé automatiquement. Vous devez donc affecter la propriété Fabric à tous les fichiers Info.plist.
<key>Fabric</key>
<dict>
<key>APIKey</key>
<string>43336ce109856f4452829a8e6b6783886fefb</string>
<key>Kits</key>
<array>
<dict>
<key>KitInfo</key>
<dict/>
<key>KitName</key>
<string>Crashlytics</string>
</dict>
</array>
</dict>
Au début, j'ai raté cela et mets ce code uniquement dans le premier, le fichier initial Info.plist.
Peut-être que ça aura l'air bizarre mais le même problème m'est arrivé et c'est comme ça que j'ai résolu le problème. J'ai un projet avec plusieurs cibles et schémas, j'ai aussi deux cibles supplémentaires pour les tests unitaires et les tests d'interface utilisateur. La solution consistait à décocher ces cibles de tests dans les onglets "Analyser", "Exécuter", "Profil" et "Archiver" sous Gérer les régimes> Modifier> Construire. Voir l'image ci-dessous:
mes deux centimes: dans tout ce que j'ajoute par erreur pour plist de "myAppTests" et non pour "myApp" plist. Donc, comme l'a également noté Eugene, veillez à bien ajouter TOUTES les listes.
il suffit de changer le type de clé Fabric de String en Dictionnaire. Accédez à votre-projet-info.plist> Fabric> kits> item0> KitName et changez le type en Dictionnaire. problème résolu pour moi