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.
Dans Xcode 12, la construction est dans le désordre. Ma propre cible est construite avant la cible des cocoapodes.
3 Réponses :
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
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 ####
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.
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 ...
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 ».