22
votes

La cible de construction Xcode 12 est dans le mauvais ordre pour le simulateur?

Mon projet fonctionne toujours correctement sur tous les appareils utilisant Xcode 11, mais après avoir installé Xcode 12 beta 4, il ne parvient pas à se construire sur le simulateur.

J'ai comparé les journaux de construction de Xcode 11 et Xcode 12 et il semble dans Xcode 12 que ma cible principale est en cours de construction avant la cible des cabosses de cacao, et donc le lien échouera car la bibliothèque de cocoapods ne sera pas trouvée.

Comment corriger l'ordre de la cible de construction?

Dans Xcode 11, tout va bien. Ma propre cible est construite après la cible des cocoapodes.

entrez la description de l'image ici

Dans Xcode 12, la construction est dans le désordre. Ma propre cible est construite avant la cible des cocoapodes.

entrez la description de l'image ici


6 commentaires

Peut-être que stackoverflow.com/questions/10285964/... ?


@Larme, pas la même question, le lien que vous postez est dans le même projet, mais mon projet en utilisant l'espace de travail, je ne peux pas définir explicitement la dépendance des cibles dans un projet différent


@Larme et en fait, mon projet est toujours construit correctement dans xcode 11, il échouera dans xcode 12 uniquement, donc je pense que c'est peut-être un mécanisme dans xcode qui cause ce problème


stackoverflow.com/questions/5752660/what-is-a-target-depende‌ ncy stackoverflow.com/questions/4219054/...


@ anki, en fait, je pense que le réglage de la dépendance est correct, car le même projet fonctionnera parfaitement dans les appareils xcode 11 et xcode 12 + ios, le problème se produira uniquement dans le simulateur xcode 12 +,


2 réponses fournies m'ont amené dans la bonne direction mais n'ont pas résolu le problème. C'est ce qui a fonctionné pour moi: stackoverflow.com/a/63955114/427969


3 Réponses :


45
votes

OK, j'ai une solution pour faire fonctionner la construction (cette façon de résoudre le problème n'est pas correcte, la bonne façon de résoudre est ajoutée dans ma mise à jour) :

1 vous devez ajouter le projet Pods à votre projet principal en tant que projet externe

2 ajoutez toutes les cibles cocodpods comme dépendance explicitement dans la phase de construction de votre projet principal

Mais je pense toujours que la nouvelle version bêta de xcode 12 résoudra ce problème. car cela semble être un bogue de xcode 12 ( mon projet fonctionne parfaitement dans xcode 11 et xcode 12 + ios device, a échoué dans xcode 12 + simulator uniquement)

### Mise à jour du 17/08/2020 ###

J'ai trouvé une raison plus exacte pour reproduire ce problème, il semble que mon fichier de projet ouvert dans xcode 12 générera automatiquement une macro VALID_ARCHS dans User-Defines, et cette macro fera échouer la construction

entrez la description de l'image ici

Et j'ai trouvé que, avec cette macro, pendant le LIEN de la construction, le type de cible de lien sera un type inconnu `` arm64-apple-ios11.0-simulator '' qui causera l'échec de la construction et le problème dans lequel toutes les cibles construisent le mauvais ordre semble ne se produire que lorsque cette macro est ajoutée

XcodeDefault.xctoolchain/usr/bin/clang -target x86_64-apple-ios11.0-simulator 

après avoir supprimé cette macro VALID_ARCHS, le type de cible du lien sera ' x86_64-apple-ios11.0-simulator ', et tout se passe bien

XcodeDefault.xctoolchain/usr/bin/clang -target arm64-apple-ios11.0-simulator 

#### 2020-09-11 add Ajoutez les commentaires d'Apple sur cette macro ####

mettre à jour les commentaires d'Apple sur VALID_ARCHS

  • Après avoir examiné vos commentaires, nous avons quelques informations supplémentaires pour vous:

  • Xcode n'ajoute pas VALID_ARCHS à votre projet. En effet, nous déconseillons d'utiliser VALID_ARCHS. Peut-être que certains CocoaPod le mettent dans votre projet pour une raison quelconque? Les CocoaPod ne font pas partie de Xcode, nous n'avons donc aucun contrôle sur ce qu'ils font.

    Une chose à noter est que dans Xcode 11 VALID_ARCHS est apparu sous la section architectures. Puisque nous vous déconseillons fortement de l'utiliser, il n'apparaît plus là-haut et apparaît maintenant dans la section Défini par l'utilisateur s'il est défini du tout.

  • Xcode 11 traduisait automatiquement la construction pour arm64 pour le simulateur en construction pour x86_64, mais maintenant que arm64 est une architecture de simulateur valide (c'est l'architecture Apple Silicon), cette traduction ne se produit plus.

  • Par conséquent, nous pensons que ce que vous devez faire est de supprimer complètement VALID_ARCHS de votre projet et de vous assurer que Architectures (ARCHS) est défini sur Architectures standard (ARCHS_STANDARD) et non sur quelque chose de spécifique (à moins que vous ne sachiez vraiment exactement pourquoi vous n'utilisez pas ARCHS_STANDARD) ).

#### Fin des commentaires ####

#### 2020-10-10 ajouté ####

la construction peut toujours ne pas fonctionner après la suppression de la macro VALID_ARCHS pour certains gars, vous pouvez vérifier la réponse des commentaires d'Apple ajoutés et la réponse de @Andrei Herford ci-dessous:

assurez-vous que Architectures (ARCHS) est défini sur Standard Architectures (ARCHS_STANDARD)

puis supprimez la macro, espérons que ces deux étapes fonctionnent pour tous :)

#### 2020-10-10 ajouté fin ####


19 commentaires

Vous devez le signaler à Apple s'il s'agit d'un bogue dans le simulateur uniquement.


@matt, en fait je ne sais pas comment faire des commentaires à Apple -_-


@ximmyxiao feedbackassistant.apple.com


Pouvez-vous expliquer les n ° 1 et 2 de ce que vous avez fait? J'ai un problème similaire et j'ajoute le projet de pods en tant que sous-projet essayant de créer le cadre de pods avant les composants dans les pods.


@SlashDevSlashGnoll voyez ma façon de résoudre ce problème dans la mise à jour de la réponse, je supprime simplement la nouvelle macro de définition de l'utilisateur dans xcode12. et tout va bien


désolé, cela ne fonctionne pas pour moi, je suis sur la version finale pas sur la bêta. Le projet était en cours d'exécution avant la mise à jour.


Je supprime VALID_ARHS et je peux créer un simulateur. J'ai passé 2 jours à trouver ce problème @ximmyxiao tu es super homme)) Merci mon frère)


@AndrewSas si heureux de vous aider à résoudre ce problème, frère :)


Dans mon cas, les cabosses de cacao ajoutaient ces configurations, je les ai simplement supprimées et je suis maintenant capable d'exécuter un projet sur un simulateur. Y a-t-il un moyen d'arrêter les cabosses de cacao pour les ajouter?


@AsadAli Il semble compliqué de décider lequel des cocoapodes ou de la pomme cause ce problème, tout ce que nous pouvons faire est de supprimer la macro et de faire fonctionner le projet :)


Merci pour le correctif, mais dans xCode 11, le paramètre VALID_ARCH se trouve dans une autre section - "Architectures", il est donc également présent dans xCode 11. mais xCode 12 ne s'appuiera pas sur Simulator avec ce paramètre


@ RemembranceNN, OUI, Apple dit que XCode12 déplace cette macro vers Défini par l'utilisateur (car ils n'ont pas recommandé cette macro), semble que ce mouvement soit à l'origine du problème


Tu as sauvé ma journée mon frère! Merci beaucoup!


Vous pouvez également ajouter x86_64 dans valid_archs. Cela fonctionne également dans mon projet.


@ximmyxiao Je ne parviens pas à trouver VALID_ARCHS dans Xcode 12.1 ?? Veuillez suggérer


@iMinion, Si votre problème est le même que ci-dessus, vous pouvez peut-être vérifier les architectures ou quelque chose comme la configuration arm64 etc dans votre fichier de projet.


J'utilise Xcode 12.1 et 12.2 rencontrent toujours cette erreur.


@ximmyxiao: J'ai supprimé les VALID_ARCHS toujours sans succès :(


@Harish, avez-vous essayé la réponse d'Andrei Herford?



23
votes

J'ai pu résoudre le problème à la fois dans le simulateur et sur l'appareil en utilisant $(ARCHS_STANDARD) non seulement pour ARCHS dans les paramètres d'architecture mais également dans VALID_ARCHS . Je ne sais pas quel effet secondaire pourrait avoir une modification des arcades de cette manière, mais jusqu'à présent, je n'ai pas rencontré de nouveaux problèmes.

entrez la description de l'image ici

Détails:

L'excellente réponse de @ximmyxiao m'a mis sur la bonne voie. Cependant, la solution proposée par lui (supprimer VALID_ARCHS) n'a pas fonctionné pour moi. Cela a conduit à un nouveau problème lors de la compilation des cibles de pod (la Command PhaseScriptExecution failed with a nonzero exit code et ARCHS[@]: unbound variable dans le script de ARCHS[@]: unbound variable ).

Au lieu de cela, le remplacement de arm64 par x86_64 dans VALID_ARCHS a résolu le problème lors de la construction pour le simulateur. Il semble que arm64 n'a jamais été une plate-forme correcte et a été traduit en x86 par Xcode. Comme Apple a annoncé son passage aux processeurs ARM, cette traduction n'est plus correcte et il faut donc utiliser la plate-forme correcte x86_64 place.

Concernant Apple, VALID_ARCHS ne doit plus être utilisé. Cependant, ce correctif ne fonctionnait pas lors de la création d'appareils. Finalement, utiliser $(ARCHS_STANDARD) place (à la fois pour le simulateur et le périphérique) a fait l'affaire dans les deux cas.

Bon regard aux autres qui rencontrent ce genre de problèmes. Travailler avec Xcode n'est jamais ennuyeux ...


12 commentaires

Cela devrait être la réponse acceptée. Au moins, si vous utilisez des CocoaPods!


Merci @Andrei Herford, tout comme Apple le dit, nous devrions peut-être nous assurer que Architectures (ARCHS) est défini sur Standard Architectures (ARCHS_STANDARD) avant de supprimer VALID_ARCHS


@ximmyxiao Dans mon cas, ARCHS était déjà réglé sur ARCHS_STANDARD mais cela n'a pas résolu le problème. Quelle que soit la valeur que j'ai définie pour VALID_ARCHS. Suppression (= vide) VALID_ARCHS vides avec les standards ARCHS laissé à l' ARCHS[@]: unbound variable erreur de ARCHS[@]: unbound variable . Seule l'utilisation d'ARCHS_STANDARD à la fois dans ARCHS et dans VALID_ARCHS a résolu le problème.


Apparemment, cela ne fonctionne que pour la construction d'un simulateur, pas pour un appareil. Je vais continuer à essayer des solutions.


@JeroenJK Avez-vous vu ma modification que j'ai ajoutée il y a quelques jours? Le changement de arm64 en x86_64 résolu le problème uniquement dans le simulateur. Pour que le projet s'exécute sur l'appareil, j'ai dû remplacer VALID_ARCHS par $(ARCHS_STANDARD)


Ah je n'ai pas vu ça. En changeant cela en $(ARCHS_STANDARD) (donc en annulant le correctif x86_64 précédent), cela le corrige-t-il à la fois pour le simulateur et le périphérique?


En ce moment, je construis / télécharge (en utilisant Fastlane) et jusqu'ici ça va très bien; c'est au-delà du moment où j'avais auparavant des problèmes. Je n'ai pas encore testé cette solution pour le simulateur, mais je pense que cela fonctionnera aussi! Merci pour votre excellente solution, j'ai passé des heures à essayer différentes configurations de construction!


@AndreiHerford donc si je vous comprends bien, vous définissez VALID_ARCHS sur: simulator -> x86_64; appareil: $ (ARCHS_STANDARD. Fonctionne aussi pour moi, je dois vous rappeler de changer ce paramètre à chaque fois, mais au moins une solution de travail (enfin!).


@ HdN8 Non, j'ai mis VALID_ARCHS à $(ARCHS_STANDARD) fois pour le simulateur ET pour l'appareil.


Je ne parviens pas à trouver VALID_ARCHS dans Xcode 12.1 ?? Veuillez suggérer


Whoa cela a fonctionné pour moi pour le faire fonctionner sur le simulateur. J'étais en train de résoudre ce problème pour toujours!


Je suis sur Xcode 12.2 et toutes ces suggestions ne fonctionnent pas pour moi lors de la création d'une archive. Si j'ai besoin d'éditer le fichier de projet manuellement, quelqu'un peut-il me guider. Je suis bloqué dessus pendant quelques jours et je ne peux pas déployer mon application.



1
votes

Pour Xcode Version 12.1 Si vous ne trouvez pas VALID_ARCHS Ajouter ** $ (ARCHS_STANDARD) x86_64 i386 les trois dans Architectures résoudra le problème de l'exécution sur des simulateurs et des périphériques, l'archivage. il est également suggéré d'ajouter Build Active Architecture Only à « Yes ». entrez la description de l'image ici


0 commentaires