J'ai un projet Swift qui utilise un cadre dynamique ObjC, le cadre devait être lié à et intégré dans mon projet. Le projet s'exécute correctement sur les appareils. Une fois soumis à l'App Store, l'erreur s'est produite lors de la validation: Found an unexpected Mach-O header code: 0x72613c21
Vous trouverez ci-dessous les journaux de validation:
2015-10-12 02:32:33 +0000 [MT] Beginning distribution assistant for archive: MusicFans, task: Validate
2015-10-12 02:32:33 +0000 [MT] Automatically selecting the only availaable distribution method <IDEDistributionMethodiOSAppStoreValidation: 0x7f851c1d96c0>
2015-10-12 02:32:34 +0000 [MT] [OPTIONAL] Didn't find archived user entitlements for <DVTFilePath:0x7f851b42db10:'/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/Frameworks/libswiftDispatch.dylib'>: Error Domain=NSCocoaErrorDomain Code=4 "Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/Frameworks/libswiftDispatch.dylib" did not contain a "archived-expanded-entitlements.xcent" resource." UserInfo={NSLocalizedDescription=Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/Frameworks/libswiftDispatch.dylib" did not contain a "archived-expanded-entitlements.xcent" resource.}
2015-10-12 02:32:34 +0000 [MT] [OPTIONAL] Didn't find archived user entitlements for <DVTFilePath:0x7f8529a08050:'/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/wavpack.framework'>: Error Domain=NSCocoaErrorDomain Code=4 "Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/wavpack.framework" did not contain a "archived-expanded-entitlements.xcent" resource." UserInfo={NSLocalizedDescription=Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/wavpack.framework" did not contain a "archived-expanded-entitlements.xcent" resource.}
2015-10-12 02:32:34 +0000 [MT] [OPTIONAL] Didn't find archived user entitlements for <DVTFilePath:0x7f850da13de0:'/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/FLAC.framework'>: Error Domain=NSCocoaErrorDomain Code=4 "Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/FLAC.framework" did not contain a "archived-expanded-entitlements.xcent" resource." UserInfo={NSLocalizedDescription=Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/FLAC.framework" did not contain a "archived-expanded-entitlements.xcent" resource.}
2015-10-12 02:33:07 +0000 [MT] Canceled distribution assistant
Si je supprime le cadre dynamique de la section des cadres incorporés du projet, il peut alors passer la validation, mais se bloque lorsqu'il est exécuté sur des périphériques en raison de l'image manquante de mon cadre dynamique. Toute idée? BTW donc mon projet désactive également le bitcode, et n'est pas codé.
Vérifiez deux choses pour chaque cadre:
Si le type Mach-O du framework est "bibliothèque statique", il devrait pas être placé dans des frameworks intégrés; si le type Mach-O est "bibliothèque dynamique", il devrait être placé dans des cadres intégrés.
Dans mon cas, c’était SocketRocket que j’ai ajouté manuellement, qui possède à la fois une cible de bibliothèque statique et une cible de bibliothèque dynamique portant le même nom de structure. Après la suppression de la cible de la bibliothèque statique et l'intégration du cadre de la bibliothèque dynamique, le problème disparaît.
Note:
Si vous n'avez pas accès au projet source, vous pouvez vérifier manuellement s'il s'agit d'un framework dynamique ou statique en utilisant cette approche: https://stackoverflow.com/a/32591983/308315
Vérifiez les phases de construction -> Copiez les ressources d'un ensemble pour un framework ou un autre fichier binaire qui n'existera pas.
Dans mon cas, c’était une bibliothèque tierce (Parse) que j’avais ajoutée.
Dans mon cas, un framework a été glissé manuellement dans mon projet et il est répertorié dans General
-> Embedded Binaries
, ce qui provoque l'erreur Found an unexpected Mach-O header code: 0x72613c21
. Après que je l'ai déplacé de Embedded Binaries
à Linked Frameworks and Libraries
, le problème a été résolu.
J'ai eu le même problème. J'ai fait plusieurs choses et mon problème est parti. Je crois que mon problème était lié à la version de Cocoapods, mais vous pouvez essayer plusieurs choses ici.
Premier nettoyage de DerivedData par:
1. Désactiver Xcode
2.Allez sur ./Users/YourFile/Library/Developer/Xcode/DerivedData
3. Supprimer tout de ce dossier
4.Exécuter Xcode
5.Build & Clean
Deuxièmement pour une raison quelconque, avec la dernière version des gousses de cacao 0.39, je recevais un avertissement après avoir exécuté pod install
[!] La cible
MY_TARTGET
remplace le paramètre de constructionEMBEDDED_CONTENT_CONTAINS_Swift
défini dans `Pods/Fichiers de support cible/Pods/Pods.release.xcconfig '. Cela peut entraîner des problèmes lors de l'installation de CocoaPods
J'ai déclassé les cocoapodes en enlevant tous les cocoapodes installés:
Sudo gem désinstaller les cocoapods
puis installez l'ancienne version:
Sudo gem installer cocoapods -v 0.38.1
Cela a supprimé l'avertissement et j'ai pu supprimer l'erreur "Code de l'en-tête Mach-O inattendu: 0x72613c21".
Edit: Cela semble être corrigé dans Xcode 8 Beta 3.
Je rencontre actuellement ce problème avec Xcode 8 Beta 2 et Swift 3 avec des pods purement Swift (ce qui semble être à l'origine du problème).
Ajouter ce qui suit à mon fichier podfile a résolu le problème.
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ALWAYS_EMBED_Swift_STANDARD_LIBRARIES'] = 'NO'
end
end
end
Le crédit va à ce commentaire par YuAo sur GitHub.
Pour moi, j'avais des fichiers binaires Fabric dans mon script d'exécution Carthage /usr/local/bin/carthage copy-frameworks
.
Après avoir supprimé ceux-ci, le problème a été résolu.
J'utilise Xcode Version 9.4.1 (9F2000)
Jetez un coup d’œil à cette documentation AppleIntégration de cadres dans une application , allez à la section Bibliothèques statiques incorporées. Cette erreur s’explique ainsi:
Cela est dû au fait de placer une bibliothèque statique dans une structure d'ensembles qui ressemble à une structure. Ce packaging est parfois qualifié de framework statique par les développeurs de framework tiers. Étant donné que le binaire dans ces situations est une bibliothèque statique, les applications ne peuvent pas l'intégrer au bundle d'applications.
Ils fournissent également un moyen de corriger:
vous pouvez résoudre cette erreur en identifiant le framework statique et en le supprimant de la section Binaires incorporés.
Pour ce faire, suivez les instructions de Inspecter la liaison d’un binaire
Supprimez-les de Embedded Binaries
et ajoutez-les à Linked Frameworks and Libaries
, puis archivez à nouveau et transférez-les au magasin.
J'ai rencontré cette erreur avec un framework FacebookSDK. Je l'ai supprimé de la liste des infrastructures intégrées dans les phases de construction et le problème a été résolu. Inspectez le journal et recherchez le cadre à l'origine de l'erreur, comme mentionné par d'autres.
Dans mon cas, cela était dû au changement de certificat/équipe de développeur.
Je commence le projet avec un identifiant personnel Apple Dev et au moment où je l'ai changé en mon identifiant de travail . Lorsque nous essayons d'exporter .xcarchive, "l'entête Match-O" échouait. les sites ne changent rien.
Lorsque je redéfinis Team sur mon ID personnel, les journaux d'erreurs indiquent les fichiers .xcent manquants pour seulement quelques infrastructures (le plus récemment ajouté). Je lance donc un tout nouveau projet, colle toutes les sources et tous les fichiers, puis exécute cocoapod et tout fonctionne comme prévu.
Ma façon de résoudre ce problème était de revenir à l'installation de Fabric/Crashlytics
via Cocoapods au lieu de la configuration fantaisie de Carthage (qui semblait boguée).
J'ai eu ce problème avec un cadre ajouté manuellement PFFacebookUtils dans un projet Swift 2.3 non-CocoaPods. Je l'ai corrigé en supprimant ledit framework de la section des frameworks intégrés de la page "Général" de la cible de construction et en le liant dans Build Phases -> Link Binary With Libraries
Mike de Fabric ici.
C'était un bogue dans Xcode Beta 2 et 3, il a été corrigé dans la Bêta 4 et sa mise à jour le corrigera.
J'ai rencontré ce problème dans un projet Framework très simple. Je n'avais qu'un seul objectif dans mon projet pour le cadre et tout se déroulait bien. Comme je voulais ajouter des tests unitaires, j'ai ajouté deux nouvelles cibles: une cible Bundle de tests unitaires iOS et une cible d'application à vue unique (pour servir d'application hôte pour les tests). Cependant, les deux nouvelles cibles lançaient cette erreur.
J'ai découvert que le problème était dû au paramètre de génération Type de Mach-O sur les nouvelles cibles définies sur Bibliothèque statique. Apparemment, les nouvelles cibles héritaient du type Mach-O du projet parent. Lorsque j'ai réglé le type de Mach-O sur les paramètres corrects ("Bundle" pour les tests unitaires et "Exécutable" pour l'application hôte), tout a fonctionné! J'ai également dû nettoyer la construction, supprimer les données dérivées et réinitialiser le simulateur pour obtenir les nouveaux paramètres.