Qu'est-ce que libswiftRemoteMirror?dylib et pourquoi est-il inclus dans mon app bundle?

j'ai une application iOS que j'ai récemment convertie en Xcode 8. Dans ce cadre, nous sommes passés de swift 2.2 à 2.3 (swift 3 viendra plus tard).

j'ai un pipeline de construction automatisé qui fonctionne essentiellement xcodebuild pour produire un binaire de publication sur une machine de compilation dédiée, et après que j'ai trié tout cela (la signature de code automatique de Xcode 8 fout vraiment tout en l'air), maintenant quand je télécharge mon application sur iTunes connect, il échoue avec cette erreur:

erreur IMT-90171: "Invalid Structure de Faisceau - Le fichier binaire 'MyApp.app/libswiftRemoteMirror.dylib " n'est pas autorisée. Votre application ne peut pas contenir d'exécutables ou de bibliothèques autonomes, à l'exception de CFBundleExecutable des paquets pris en charge. Reportez-vous à la Bundle Guide de Programmation à https://developer.apple.com/go/?id=bundle-structure pour plus d'informations sur l'application iOS structure de faisceau."

bien Sûr, si j'ai décompresser le fichier .fichier ipa et un coup d'oeil, il y a libswiftRemoteMirror.dylib assis y.

si j'archive / exporte pour iTunes via Xcode, alors il produit un pack d'applications qui n'a pas libswiftRemoteMirror.dylib, cependant toutes les autres versions de mon application ne semble avoir. Même en faisant simplement une construction de débogage dans Xcode, puis en regardant la sortie montre que libswiftRemoteMirror.dylib est assis dans le paquet de mon application, indiquant que Xcode lui-même le met certainement là, pas n'importe quelle partie de mon script de construction automatique.

qu'est-Ce que ce fichier, pourquoi est-il mis là, et ce que dois-je faire? Je peux modifier mon script de compilation pour supprimer ce fichier pour les compilations release, mais je crains que cela n'affecte le processus de signature du code. Je vais quand même essayer et voir ce qui se passe, mais j'ai l'impression que ce n'est pas la bonne chose à faire.

Tout conseil serait apprécié.

26
demandé sur Orion Edwards 2016-09-14 02:44:21

5 réponses

j'ai rencontré le même problème après avoir installé Xcode 8, en construisant via shenzhen.

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

Il était assez facile pour moi de remplacer l'appel à ipa (exécutable de shenzhen) avec un appel à gym, et le reste de mes scripts de compilation et de téléchargement ont fonctionné sans modification.

si vous préférez construire directement, j'ai soulevé ce qui suit de la gym readme. Il produit un .xcarchive contenant un .app le fichier sans l' libswiftRemoteMirror.dylib. Je n'utilise pas ce genre de flux moi-même, donc je ne peux pas dire comment vous procéderiez à partir de là.

xcodebuild \
  -scheme Scheme \
  -workspace Project.xcworkspace \
  -configuration 'Release' \
  -destination 'generic/platform=iOS' \
  -archivePath './Output.xcarchive' \
  archive
3
répondu Fizker 2016-09-15 23:46:49

Je ne pourrais jamais faire fonctionner xcodebuild en ligne de commande avec la signature automatique de code. Je suppose que parce que la machine de compilation automatisée fonctionne comme un compte différent qui n'est accessible que via SSH - il n'a jamais eu "plein" Xcode lancé comme ce compte d'utilisateur et il n'a pas de certificats dans son porte-clés de connexion ou quelque chose comme ça.

je ne voulais pas utiliser quelque chose comme shenzhen parce que je n'ai eu que de mauvaises expériences de ce genre de choses dans le passé. Xcode construire le système est assez compliqué et fragile sans avoir à ajouter d'Autres scripts et choses qui pourraient mal tourner ou être périmés.

Voici ce que j'ai fait pour résoudre le problème (c'est horrible, mais c'était la seule chose que j'ai pu trouver qui l'a fait fonctionner à la fin)

  1. dans le script de construction automatique, éditez le .pbxproj rechercher et remplacer Provisioning Style = Automatic;Provisioning Style = Manual;. Également remplacer iOS DeveloperiOS Distribution pour le truc de signature de code dans le même pbxproj fichier. Ces deux choses désactiver la signature

  2. Exécuter xcodebuild construire (mais pas archiver) le Projet Comme je l'ai fait dans Xcode7 . Xcode compile l'application et la signe, mais elle n'est pas encore valide, car elle contient libswiftRemoteMirror.dylib et aussi pour une raison quelconque n'a pas de fichier de droits

  3. Supprimer libswiftRemoteMirror.dylib à partir de l'app bundle (ce qui invalide la signature)

  4. Générer un Entitlements.plist dans le paquet app dossier en extrayant le bit de droits du profil de provisionnement (comme quoi BlackBerry SWSiOSResign.sh script)

    1. Re-signe l'app bundle avec codesign --entitlements <file>

    2. A partir de là, utilisez une technique similaire à ce que bq/package_ipa.sh fait et copie le dossier SwiftSupport, puis zip le fichier dans un ipa.

je n'ai pas pu utiliser package_ipa.sh le fichier, J'ai eu besoin de re-implémenter une logique similaire à la place parce que j'ai besoin de faire référence à Swift_2.3.toolchain pour obtenir le SwiftSupport à partir de mon application étant toujours swift 2.3-pas XcodeDefault.toolchain (qui est swift 3)

Il me semble que je devrais être en mesure d'utiliser xcodebuild --archive en combinaison avec certains autres choses à éviter certaines de ces étapes. Je ne pourrais jamais obtenir que travailler sous Xcode7, mais je pourrais essayer à nouveau avec XC8 si j'ai le temps

3
répondu Orion Edwards 2016-09-17 07:26:07

dans mon cas, J'ai eu L'erreur ITMS-90171 parce que j'utilise des cadres personnalisés.

"invalides Bundle Structure-the binary file 'Myfram Framework.framework / libswiftRemoteMirror.dylib'

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

j'ai essayé la gym mais il est resté coincé à xcrun. J'ai donc essayé de faire rm -rf libswiftRemoteMirror dans la phrase de construction (avec un script d'exécution personnalisé) pour chaque cadre personnalisé que j'AI et il est intéressant de noter que je n'ai rien cassé: il travaillé.

3
répondu Archy Wilhes 魏何 2016-10-06 20:11:28

allez simplement dans le paramètre de construction et faites comme si votre problème était résolu.

enter image description here

2
répondu Noushad Shah 2016-12-02 12:54:36

il suffit D'archiver votre Compilation à partir de Xcode clic droit sur le fichier d'archive -> afficher dans finder -> clic droit -> afficher le contenu du paquet -> produit -> Application -> copier .le fichier d'application génère la charge utile et le téléchargement en utilisant le chargeur D'Application. Il aide dans mon cas.

0
répondu Kalpesh Muthe 2017-06-03 10:36:25