Qu'est-ce que libswiftRemoteMirror.dylib et pourquoi est-il inclus dans mon set d'applications?

J'ai une application iOS que j'ai récemment passée à Xcode 8. Dans ce cadre, nous sums passés de Swift 2.2 à 2.3 (Swift 3 viendra plus tard).

J'ai un pipeline de compilation automatisé qui exécute essentiellement xcodebuild pour produire un binary de sortie sur une machine de construction dédiée, et après avoir sortingé tout ça (la signature automatique de code de Xcode 8 vissera vraiment tout), maintenant quand je télécharge mon application sur iTunes connecter, il échoue avec cette erreur:

ERREUR ITMS-90171: "Structure de regroupement non valide – Le file binary 'MyApp.app/libswiftRemoteMirror.dylib' n'est pas autorisé Votre application ne peut pas contenir d'exécutables ou de bibliothèques autonomes, autres que CFBundleExecutable des bundles pris en charge. Guide sur https://developer.apple.com/go/?id=bundle-structure pour plus d'informations sur la structure du regroupement d'applications iOS. "

Effectivement, si je décompresser le file .ipa et jeter un coup d'oeil, il ya libswiftRemoteMirror.dylib assis là.

Si j'archive / exporte pour iTunes via Xcode, alors il produit un set d'applications qui n'a pas libswiftRemoteMirror.dylib , cependant toutes les autres versions de mon application semblent l'avoir. Même en faisant simplement une compilation de debugging dans Xcode, en regardant la sortie, vous voyez que libswiftRemoteMirror.dylib est assis dans l'set de mon application, indiquant que Xcode lui-même l'insère définitivement, pas n'importe quelle partie de mon script de compilation automatique.

Quel est ce dossier, pourquoi est-il mis là, et que dois-je faire à ce sujet? Je peux modifier mon script de construction pour supprimer ce file pour les versions de version, mais je crains que cela puisse affecter le process de signature du code. Je vais essayer quand même et voir ce qui se passe, mais j'ai l'printing que ce n'est pas tout à fait la bonne chose à faire.

Tout avis sera le bienvenu.

J'ai rencontré le même problème après l'installation de Xcode 8, en construisant via Shenzhen .

J'ai décidé de regarder Fastlane comme une alternative, et leur programme de gym produit un ipa qui peut être soumis à Apple.

Il était relativement facile pour moi de replace l'appel à ipa (l'exécutable de shenzhen) par un appel au gym , et le rest de mes scripts de build-and-upload ont fonctionné sans modifications.

Si vous préférez build directement, j'ai enlevé ce qui suit du readme du gym . Il produit un .xcarchive contenant un file .app sans le file libswiftRemoteMirror.dylib . Je n'utilise pas ce genre de stream moi-même, donc je ne peux pas dire comment vous allez procéder à partir de là.

 xcodebuild \ -scheme Scheme \ -workspace Project.xcworkspace \ -configuration 'Release' \ -destination 'generic/platform=iOS' \ -archivePath './Output.xcarchive' \ archive 

Je ne pourrais jamais utiliser la command line xcodebuild pour travailler avec la signature automatique du code. Je suppose que la machine de compilation automatique fonctionne comme un count différent qui n'est accessible que via SSH – Il n'y a jamais eu Xcode "complet" comme count d'user et il n'y a aucun certificate dans son trousseau de connection ou quelque chose comme ça.

Je ne voulais pas utiliser quelque chose comme shenzhen car je n'ai eu que de mauvaises expériences de ce genre de choses dans le passé. Le système de construction de Xcode est assez compliqué et assez fragile sans avoir à append plus de scripts et de choses qui pourraient mal tourner ou être obsolètes.

Voici ce que j'ai fini par faire pour résoudre le problème (c'est horrible, mais c'est la seule chose que j'ai pu find qui a fait fonctionner ça à la fin)

  1. Dans le script de génération automatique, modifiez le .pbxproj pour searchr et replace Provisioning Style = Automatic; avec Provisioning Style = Manual; . Remplacez également iOS Developer par iOS Dissortingbution pour les éléments de signature de code dans le même file pbxproj. Ces deux choses désactivent la signature automatique

  2. Exécutez xcodebuild pour build (mais pas archiver) le projet de la même manière que dans Xcode7. Xcode comstack l'application et la signe, mais elle n'est pas encore valide, car elle contient libswiftRemoteMirror.dylib et, pour une raison quelconque, n'a aucun file de droits.

  3. Supprimez libswiftRemoteMirror.dylib de l'set de l'application (ceci invalide la signature)

  4. Générez un Entitlements.plist dans le dossier du regroupement d'applications en extrayant le bit de droits d'access du profil d'approvisionnement (comme ce que fait le script SWSiOSResign.sh de BlackBerry )

    1. Re-signez l'set d'applications à l'aide de codesign --entitlements <file>

    2. De là, utilisez une technique similaire à celle de bq/package_ipa.sh et copyz le dossier SwiftSupport, puis compressez le file dans un ipa .

Je ne pouvais pas réellement utiliser le file package_ipa.sh , je devais ré-implémenter une logique similaire à la place parce que j'ai besoin de referencer Swift_2.3.toolchain pour get le SwiftSupport car mon application est toujours rapide 2.3 – pas XcodeDefault.toolchain (qui est rapide 3)

Il semble que je devrais être capable d'utiliser xcodebuild --archive en combinaison avec d'autres choses pour éviter certaines de ces étapes. Je ne pourrais jamais get cela sous Xcode7, mais je pourrais essayer à nouveau avec XC8 si j'ai le time

Dans mon cas, j'ai ERROR ITMS-90171 parce que j'utilise des frameworks personnalisés.

"Structure de regroupement invalide – Le file binary 'MyFramework.framework / libswiftRemoteMirror.dylib'

(Je ne l'ai pas eu pour mon application.)

J'ai essayé la gym mais ça s'est coincé à xcrun . J'ai donc essayé de faire rm -rf libswiftRemoteMirror dans la phrase de construction (avec un script run personnalisé) pour chaque framework personnalisé et, chose intéressante, je n'ai rien cassé: ça a marché.

Archivez votre build à partir de Xcode faites un clic droit sur archive -> show in finder -> clic droit -> show package content -> product -> appliction -> copyz le file .app générez la charge utile et téléchargez en utilisant Application Loader. Ça aide dans mon cas.

Il suffit d'aller au réglage de construction et faire comme c'est votre problème va résoudre.

entrez la description de l'image ici