AppIcon manquant dans l'organisateur

J'ai récemment migré mon application pour prendre en charge iOS7 et, au cours de ce process, mis à jour les icons de mes applications pour utiliser un catalogue d'actifs; ce qui fonctionne très bien dans l'application. Toutefois, dans Organizer et TestFlight, l'icône de mon application est manquante.

AppIcon manquant dans l'organisateur

La même chose se passe aussi dans TestFlight – ce qui implique qu'il manque quelque chose à mon bundle. Toute aide serait reçue avec gratitude.

Donc, il semble que vous ayez toujours besoin d'avoir l'input des Icon files dans le plist de l'application qui pointe vers une icône qui est une ressource dans l'application; même si Xcode l'a supprimé lors de ma conversion au catalogue; Voici l'input que j'ai créée manuellement tout en conservant le catalogue d'actifs:

entrée de plist

Notez que j'ai testé cela avec différentes icons et que ce paramètre n'a aucune incidence sur les icons que l'application utilise réellement au moment de l'exécution; cette input semble être uniquement utilisée par Organizer et TestFlight, ce qui résout mon problème.

Oui, lorsque vous utilisez le catalogue d'actifs , vous devrez peut-être effectuer les opérations suivantes pour que l'icône de l'application soit liée et fonctionne pour les dissortingbutions / productions Ad-Hoc à afficher dans Organizer , Test flight et éventuellement dans des locations AppStore inconnus.


Après avoir créé le catalogue d'actifs, prenez note du nom des images de lancement et des noms d'icons d'applications répertoriés dans le .xassets dans Xcode.

Par défaut, cela devrait être

  • AppIcon
  • LaunchImage

[Pour voir ce clic sur votre dossier / icône .xassets dans Xcode.] (Ceci peut être changé, donc prenez juste note de cette variable pour plus tard)


Ce qui est créé maintenant chaque construction est les data structures suivantes dans votre file .app:

Pour les icons d'application:

iPhone

  • AppIcon57x57.png (iPhone non retina) [ Notez le préfixe du nom de l'icône ]
  • [email protected] (iPhone rétine)

Et le même format pour chacune des autres résolutions d'icons.

iPad

  • AppIcon72x72~ipad.png (iPad non retina)
  • AppIcon72x72@2x~ipad.png (iPad rétine)

(Pour iPad c'est un postfix légèrement différent)


Problème principal

Maintenant, j'ai remarqué que dans mon Info.plist dans Xcode 5.0.1, il a automatiquement tenté et n'a pas réussi à créer une key pour les « Icon files (iOS 5) » après avoir terminé la création du catalogue d'actifs.

Si cela a réussi à créer une reference / cela peut avoir été corrigé par Apple ou simplement travaillé, alors tout ce que vous avez à faire est de revoir les noms des images pour valider le format indiqué ci-dessus.

Solution finale:

Ajoutez la key suivante à votre .plist principal .plist

Je vous suggère d'ouvrir votre .plist principal avec un éditeur de text externe tel que TextWrangler plutôt que dans Xcode pour copyr et coller la key suivante.

 <key>CFBundleIcons</key> <dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <ssortingng>AppIcon57x57.png</ssortingng> <ssortingng>[email protected]</ssortingng> <ssortingng>AppIcon72x72~ipad.png</ssortingng> <ssortingng>AppIcon72x72@2x~ipad.png</ssortingng> </array> </dict> </dict> 

S'il vous plaît noter que j'ai inclus seulement mes exemples de résolutions, vous devrez les append tous.


Si vous voulez append cette key dans Xcode sans éditeur externe, utilisez ce qui suit:

  • Icon files (iOS 5) – Dictionnaire
  • Primary Icon – Dictionnaire
  • Icon files – Array
  • Item 0 – Ssortingng = AppIcon57x57.png Et pour chaque autre icône d'élément / application.

Maintenant, lorsque vous archivez enfin votre projet, la dernière charge utile .xcarchive .plist inclura désormais les locations d'icons indiqués ci-dessus à build et à utiliser.

N'ajoutez pas ce qui suit à n'importe quel .plist: Juste un exemple de ce que Xcode va maintenant générer pour votre charge utile finale

 <key>IconPaths</key> <array> <ssortingng>Applications/Example.app/AppIcon57x57.png</ssortingng> <ssortingng>Applications/Example.app/[email protected]</ssortingng> <ssortingng>Applications/Example.app/AppIcon72x72~ipad.png</ssortingng> <ssortingng>Applications/Example.app/AppIcon72x72@2x~ipad.png</ssortingng> </array> 

Encore un hiccup possible avec la migration vers le catalogue d'actifs .

Il existe deux façons de définir des icons dans les parameters du projet: CFBundleIconFiles depuis iOS3 et CFBundleIcons depuis iOS5. Les plus âgés, en dépit d'être plus âgés, contrairement au sens commun sur la compatibilité vers l'arrière, a toujours la préséance . J'utilisais CFBundleIcons avant de migrer directement dans Asset Catalog. Et après avoir migré, j'ai supprimé les files originaux pointés par CFBundleIcons parce que, vous le savez, maintenant j'avais le nouveau catalogue d'actifs shiny, non? Et XCode a fait trois choses:

  • il masque l'édition visuelle des anciens CFBundleIcons partir des parameters généraux du projet. Pourquoi en auriez-vous besoin lorsque vous avez déjà opté pour le nouveau catalogue d'actifs, n'est-ce pas?
  • il ne supprime pas la key CFBundleIcons originale d'Info.plist, cependant, en optant pour le catalogue d'actifs, vous dites clairement que vous n'allez pas au-dessous de iOS5
  • il ne valide pas non plus la dite key. Pas de petits repères rouges partout, car l'interface user des parameters du projet qui pourrait les afficher n'est plus visible

Le résultat est caché, visuellement non modifiable, peut-être obsolète / mauvaise key dans Info.plist qui a préséance sur ce que le catalogue de biens créé pour vous .

Ouvrez votre Info.plist manuellement et supprimez CFBundleIcons , rebuild, reupload, et voilà, l'icône est de return.