wake-up-neo.net

Was ist libswiftRemoteMirror.dylib und warum ist es in meinem App-Paket enthalten?

Ich habe eine iOS-App, die ich kürzlich auf Xcode 8 umgestellt habe ..__ Als Teil davon haben wir von Swift 2.2 auf 2.3 umgestellt (Swift 3 wird später kommen).

Ich habe eine automatisierte Build-Pipeline, die im Wesentlichen xcodebuild läuft, um eine Release-Binärdatei auf einer dedizierten Build-Maschine zu erstellen, und nachdem ich all das gelöst habe (die automatische Codesignierung von Xcode 8 macht wirklich alles fertig), jetzt, wenn ich meine App in iTunes hochlade verbinden, es schlägt mit diesem Fehler fehl:

FEHLER ITMS-90171: "Ungültige Bundle-Struktur - Die Binärdatei 'MyApp.app/libswiftRemoteMirror.dylib' ist nicht zulässig. Ihre App kann keine eigenständigen ausführbaren Dateien oder Bibliotheken außer der CFBundleExecutable-Liste der unterstützten Bundles enthalten. Weitere Informationen hierzu finden Sie in der Bundle-Programmierung Unter https://developer.Apple.com/go/?id=bundle-structure finden Sie Informationen zur Struktur der iOS-App-Bundle. "

Wenn ich die .ipa-Datei entpacke und nachschaue, ist dort libswiftRemoteMirror.dylib.

Wenn ich für iTunes über Xcode archiviere/exportiere, wird ein App-Bundle erstellt, das libswiftRemoteMirror.dylib nicht enthält. Alle anderen Builds meiner App scheinen jedoch zu funktionieren. Selbst wenn Sie nur einen Debug-Build in Xcode durchführen und dann auf die Ausgabe sehen, zeigt sich, dass libswiftRemoteMirror.dylib im Bundle meiner App enthalten ist. Dies bedeutet, dass Xcode selbst definitiv da ist, nicht in meinem automatisierten Build-Skript.

Was ist diese Datei, warum wird sie dort abgelegt und was muss ich dagegen tun? Ich kann mein Erstellungsskript ändern, um diese Datei für Release-Builds zu löschen, aber ich bin besorgt, dass dies den Signierprozess des Codes beeinflussen könnte. Ich werde es trotzdem versuchen und sehen, was passiert, aber es fühlt sich an, als wäre das nicht das Richtige.

Jeder Rat wäre dankbar.

27
Orion Edwards

Ich könnte niemals die Befehlszeile xcodebuild dazu bringen, mit automatischer Codesignatur zu arbeiten. Ich gehe davon aus, dass der automatisierte Build-Computer als ein anderes Konto ausgeführt wird, auf das nur über SSH zugegriffen wird. Es wurde nie "vollständiger" Xcode als dieses Benutzerkonto ausgeführt, und er hat keine Zertifikate in seinem Login-Schlüsselbund oder ähnliches.

Ich wollte nicht etwas wie shenzhen verwenden, weil ich in der Vergangenheit nur schlechte Erfahrungen mit solchen Dingen gemacht habe. Das Xcode-Buildsystem ist kompliziert und fragil genug, ohne dass weitere Skripte und andere Dinge hinzugefügt werden müssen, die möglicherweise fehlerhaft oder veraltet sind.

Am Ende habe ich getan, um das Problem zu beheben (es ist schrecklich, aber es war das einzige, was ich am Ende finden konnte.

  1. Bearbeiten Sie im automatisierten Build-Skript den .pbxproj, um Provisioning Style = Automatic; durch Provisioning Style = Manual; zu suchen und zu ersetzen. Ersetzen Sie auch iOS Developer durch iOS Distribution für die Codesignatur in derselben pbxproj-Datei. Diese beiden Dinge deaktivieren die automatische Signatur

  2. Führen Sie xcodebuild aus, um das Projekt auf dieselbe Weise wie in Xcode7 zu erstellen (aber nicht zu archivieren). Xcode kompiliert die App und signiert sie, aber sie ist noch nicht gültig, da sie libswiftRemoteMirror.dylib enthält und auch aus irgendeinem Grund keine Berechtigungsdatei hat

  3. libswiftRemoteMirror.dylib aus dem App-Bundle löschen (dadurch wird die Signatur ungültig)

  4. Generieren Sie einen Entitlements.plist im App-Bundle-Ordner, indem Sie das Berechtigungsbit aus dem Bereitstellungsprofil extrahieren (wie das Blacks SWSiOSResign.sh -Skript.

    1. Signieren Sie das App-Paket erneut mit codesign --entitlements <file>.

    2. Verwenden Sie von dort aus eine ähnliche Vorgehensweise wie bq/package_ipa.sh , kopieren Sie den SwiftSupport-Ordner und komprimieren Sie die Datei in eine ipa.

Ich konnte package_ipa.sh-Datei nicht wirklich verwenden, stattdessen musste ich eine ähnliche Logik erneut implementieren, da ich auf Swift_2.3.toolchain verweisen muss, um den SwiftSupport zu erhalten, da meine App immer noch Swift 2.3 ist - nicht XcodeDefault.toolchain (was Swift 3 ist).

Es scheint, dass ich in der Lage sein sollte, xcodebuild --archive in Kombination mit einigen anderen Dingen zu verwenden, um einige dieser Schritte zu vermeiden. Ich könnte das nie unter Xcode7 zum Laufen bringen, aber ich könnte es mit XC8 noch einmal versuchen, wenn ich Zeit habe

3
Orion Edwards

In meinem Fall habe ich ERROR ITMS-90171 erhalten, da ich benutzerdefinierte Frameworks verwende.

"Ungültige Bundle-Struktur - Die Binärdatei 'MyFramework.framework/libswiftRemoteMirror.dylib'

(Ich habe es nicht für meine Bewerbung bekommen.)

Ich habe im Fitnessstudio versucht aber bei xcrun blieb es hängen . Also habe ich versucht, rm -rf libswiftRemoteMirror in der Build-Phrase (mit einem benutzerdefinierten Run-Skript) für jedes benutzerdefinierte Framework auszuführen, und ich habe interessanterweise nichts kaputt gemacht.

4
Archy Wilhes

Ich habe kürzlich angefangen, Swift für unser Projekt zu verwenden und habe den gleichen Fehler erhalten.

Um eine Ursache zu finden, habe ich gerade 'grep -Ril "libswiftRemoteMirror" ausgeführt.' in XCode.app (ich habe derzeit 10.1) und gefunden ./Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plugins/XCLanguageSupport.xcplugin/Contents/Resources/Swift-stdlib-tool. xcspec-Datei. Es sagt:

     // Swift_RESOURCE_DESTINATION and Swift_RESOURCE_LIBRARY allow us to copy
    // libswiftRemoteMirror.dylib into place so that memory debugging tools have access to it
    // on device.
    // We disable these options in "DEPLOYMENT" modes, so that the libswiftRemoteMirror.dylib
    // does not make its way into archives submitted to the App Store.


Die Lösung ist also einfach - in den XCode-Zieleinstellungen setzen Sie die Nachbearbeitung der Bereitstellung auf Ja für Ihre Release-Konfiguration (oder was auch immer Sie für die Erstellung verwenden)

3
Art

Nach der Installation von Xcode 8 stieß ich auf das gleiche Problem, indem ich via shenzhen baute.

Ich entschied mich für Fastlane als Alternative, und ihr gym - Programm erzeugt eine IPA, die an Apple übermittelt werden kann.

Es war ziemlich einfach für mich, den Aufruf von ipa (der ausführbaren Datei von Shenzhen) durch einen Aufruf von gym zu ersetzen, und der Rest meiner Build-and-Upload-Skripts funktionierte ohne Änderungen.

Wenn Sie lieber direkt bauen möchten, habe ich Folgendes aus der gym-Readme-Datei entfernt. Es erzeugt einen .xcarchive, der eine .app-Datei ohne den libswiftRemoteMirror.dylib enthält. Ich benutze diese Art von Fluss nicht selbst, also kann ich nicht sagen, wie Sie von dort fortfahren würden.

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

Gehen Sie einfach zur Build-Einstellung und tun Sie, wie es ist, wird Ihr Problem gelöst.

enter image description here

2
Noushad Shah

archivieren Sie Ihren Build über Xcode. Klicken Sie mit der rechten Maustaste auf Archivdatei -> In Finder anzeigen -> Rechtsklick -> Paketinhalt anzeigen -> Produkt -> Appliction -> Kopieren Sie die .app-Datei in meinem Fall.

0
Kalpesh Muthe