2017-09-26 4 views
2

J'ai mis à jour vers Xcode 9 et maintenant lorsque je compile ma cible bundle, elle ne contient plus les ressources d'images xcasset.Xcode 9 ne copie plus les xcassets dans la cible du bundle

Configuration:

  1. Le xcasset est associé à la cible Xcode 9 showing association with target

  2. Le xcasset est inclus dans les "ressources Bundle copie" des phases de génération de la cible du faisceau.

Xcode 9 showing copy bundle resources

Résultat

Les images dans les xcassets ne sont pas présents avec le produit bundle. Terminal showing result of build

Sur une machine différente avec Xcode 8, je peux construire la même cible de bundle et les images dans le TestCatalog sont présentes.

Note: le TestImage.png (qui existe en dehors de tout xcassets) est inclus comme prévu sur Xcode 9. Cela me conduit à penser que le problème est lié à la façon dont les xcassets sont inclus.

Merci pour toute aide.

Répondre

2

Ça marche très bien! Vous supposent que Assets.car n'est pas votre catalogue d'actifs, mais il est. Et vous supposons que vos images ne sont pas à l'intérieur, mais ils le sont.

Si Xcode extrayait précédemment les images du catalogue d'actifs et les plaçait au niveau supérieur de l'infrastructure, était un comportement incorrect! Les images de catalogue d'actifs doivent être compilées dans la version compilée du catalogue d'actifs (le fichier .car). Et c'est maintenant exactement ce qui se passe. Et il n'y a aucune raison pour que le catalogue d'actifs ne soit pas renommé au cours de la compilation (puisque vous ne pouvez en aucun cas vous référer directement à un catalogue d'actifs par son nom dans le code).

Vous pouvez confirmer que c'est ce qui s'est passé en lisant le rapport généré lors de la compilation. Vous ne l'incluez pas dans votre capture d'écran, cependant. Je vais te montrer. Voici mon projet, semblable à la vôtre:

enter image description here

Et voici la partie pertinente du rapport:

enter image description here

Voir les deux dernières lignes? MyFrameworkAssets.xcassets a été compilé dans le catalogue d'actifs appelé /MyCoolFramework.framework/Assets.car, exactement comme dans votre projet.

Donc, je pense que le problème est simplement que vous essayons de regarder cela "de l'extérieur" (c.-à-d.en utilisant Terminal) et vous ne comprennent pas ce que vous voyez. La façon de savoir si cela fonctionne est que votre code cadre se réfère à une image et l'affiche, et vous n'avez pas ce code. (En fait, votre framework n'a pas de code du tout, donc c'est un framework plutôt inutile.) Ou téléchargez AssetCatalogTinkerer et regardez dans le fichier assets.car. Vous verrez que votre image est là!

(Soit dit en passant, je pense aussi que votre projet est très mal organisé. L'image et le catalogue actif appartenant au cadre devrait être dans le dossier du cadre.)

+1

Vous avez raison, merci! FYI: Lorsque vous utilisez l'actool avec --minimum-deployment-target <7.0, il crée le fichier Assets.car et copie également tous les png de l'ensemble des xcassets vers le bundle. C'est la mise à jour de ma cible de déploiement minimale vers 8.0 qui a provoqué le changement et non Xcode 9 (bien que Xcode 9 ait été la raison pour laquelle j'ai dû mettre à jour la cible de déploiement minimum car elle ne supporte pas xibs pour iOS!). –

+0

"AUSSI copie tous les pngs de l'ensemble des xcassets dans l'ensemble" Parce que vous demandez d'exécuter sur une version du système si follement vieux que les catalogues d'actifs n'avaient même pas encore été inventés! – matt