Ich versuche also, die Shopify-API zu verwenden. Wenn ich die App archiviere und validiere, gibt es keine Probleme, aber wenn ich sie an den App Store sende, gibt es die folgenden Probleme.
- FEHLER ITMS-90087: "Nicht unterstützte Architektur. Ihre ausführbare Datei enthält nicht unterstützte Architektur '[x86_64, i386]'."
- FEHLER ITMS-90209: "Ungültige Segmentausrichtung. Die App-Binärdatei unter SJAPP.app/Frameworks/Buy.framework/Buy weist keine ordnungsgemäße Segmentausrichtung auf. Versuchen Sie, die App mit der neuesten Xcode-Version neu zu erstellen." (Ich verwende bereits die neueste Version.)
- FEHLER ITMS-90125: "Die Binärdatei ist ungültig. Die Verschlüsselungsinformationen im Ladebefehl LC_ENCRYPTION_INFO fehlen oder sind ungültig, oder die Binärdatei ist bereits verschlüsselt. Diese Binärdatei scheint nicht mit Apples Linker erstellt worden zu sein."
- WARNUNG ITMS-90080: "Die ausführbare Nutzlast /..../ Buy.framework ist keine positionsunabhängige ausführbare Datei. Stellen Sie sicher, dass Ihre Build-Einstellungen so konfiguriert sind, dass ausführbare PIE-Dateien erstellt werden."
Antworten:
Das Problem ist, dass das Buy-Framework einen Build sowohl für den Simulator (x86_64) als auch für die tatsächlichen Geräte (ARM) enthält.
Natürlich dürfen Sie keine Binärdatei für eine nicht unterstützte Architektur an den App Store senden. Daher besteht die Lösung darin, die nicht benötigten Architekturen "manuell" aus der endgültigen Binärdatei zu entfernen, bevor Sie sie senden.
Daniel Kennett hat eine nette Lösung gefunden und stellt dieses Skript zur Verfügung, um es der Build-Phase hinzuzufügen:
Ich habe es benutzt und es hat perfekt funktioniert.
BEARBEITEN: Stellen Sie sicher, dass Sie sich das von Varrry veröffentlichte modifizierte Skript ansehen, da dieses einige kleinere Probleme aufweist.
quelle
Die Antwort von pAkY88 funktioniert, aber ich hatte das gleiche Problem wie Mario A Guzman in https://stackoverflow.com/a/35240555/5272316 : Sobald wir nicht verwendete Architekturen abgeschnitten haben, können wir kein Skript mehr ausführen, da es versucht, es zu entfernen Keine vorhandenen Slices, da xcode Binärdateien nicht jedes Mal neu einbettet. Die Idee war - entfernen Sie einfach i386- und x86_64-Slices, wenn Sie für das Archiv erstellen, also habe ich das Skript geändert:
Dieses Skript entfernt einfach i386- und x86_64-Slices aus der Fat-Binärdatei (falls vorhanden), wenn sie nicht für den Simulator ausgeführt werden (dh der Zielordner entspricht nicht "Debug-iphonesimulator").
Entschuldigung, ich bin nicht mit Shell-Skripten vertraut, daher könnte jemand sie eleganter schreiben. Aber es funktioniert)
quelle
case "${TARGET_BUILD_DIR}" in *"iphonesimulator") echo "Skip simulator target"; continue ;; esac
und es hat wie ein Zauber funktioniert.TARGET -> Build Phases -> [CP] Embedded Pods Frameworks
füge dieses Skript hinzu, aber es funktioniert nicht und ich habe immer noch Fehler auf iTunesConnect hochgeladen. Wie führe ich dieses Skript aus?Wenn Sie Karthago verwenden , kann dieses Problem auftreten, da das Projekt wie folgt lautet:
carthage copy-frameworks
Build-Phase.Diese Aktion filtert Frameworks nach einer Liste gültiger Architekturen (Code) .
Einrichten der Erstellungsphase für Copy-Frameworks
Aus dem Karthago-Gebäude für iOS Schritte :
quelle
$(SRCROOT)/Carthage/Build/iOS/Marshal.framework
die Arbeit hinzuIch habe den Fehler ITMS-90080 behoben, indem ich ein Framework (das ausgezeichnete SVProgressHUD) aus dem Abschnitt "Eingebettete Binärdateien" (Xcode-Ziel -> Registerkarte "Allgemein") entfernt habe.
quelle
Wenn Sie verwenden,
Carthage
stellen Sie sicher, dass IhrEmbed Frameworks
Build Step
vor dem istCarthage
copy-frameworks
In einigen ungewöhnlichen Fällen (Beispiel: Lottie-iOS-Framework):
Sie haben es einfach wie gewohnt in "Link Library".
Allerdings müssen Sie auch explizit hinzufügen in „Embed Frameworks“ (obwohl das scheint sinnlos, da es perfekt funktioniert , wenn Sie es nur in „Embed Frameworks“ haben),
und setzen Sie es in Copy-Frameworks
und stellen Sie sicher, dass Copy-Frameworks nach "Embed Frameworks" steht.
quelle
Entfernen Sie [x86_64, i386] mithilfe des folgenden Schritts aus dem Framework. [x86_64, i386] wird für den Simulator verwendet.
Öffnen
Terminal
Öffnen Sie Ihren Projekt-Drag-Pfad des jeweiligen Frameworks zum Terminal
Beispiel:
cd /Users/MAC/Desktop/MyProject/Alamofire.framework
Legen Sie Ihren Framework-Namen im folgenden Befehl fest und führen Sie ihn aus
lipo -remove i386 Alamofire -o Alamofire && lipo -remove x86_64 Alamofire -o Alamofire
quelle
Ich werde hier meine 2 Cent hinzufügen (auf eine weniger beängstigende Weise :-). Ich habe eine ganze Reihe von Fat Libraries von Anbietern gefunden, die (aus irgendeinem Grund) nicht normal funktionieren, indem sie dem
Frameworks
von Apple dokumentierten Verzeichnis hinzugefügt werden . Die einzige Möglichkeit, sie zum Laufen zu bringen, besteht darin,.framekwork
rechts in das Projektverzeichnis zu ziehen und dasEmbedded Frameworks
undLink Binary with Libraries
manuell in den Build-Einstellungen zu verknüpfen . Dies scheint jedoch ohne Probleme funktioniert zu haben, da sie bei jeder Fat Library mit den externen Simulator-Architektureni386
undx86_64
zusammen mit denarm
Architekturen geliefert werden.Eine schnelle Möglichkeit, die Architekturen in der Fettbibliothek zu überprüfen, ist
Welches sollte eine Ausgabe so etwas spucken
Dies bestätigt, dass Sie vor dem Hochladen von iTunesConnect Archival das Fett (nämlich
i386
&x86_64
) aus Ihrem Framework "entfernen" müssen, wodurch diese Architekturen nicht zulässig sind (da sie für iOS nicht unterstützt werden).Jetzt bieten alle Antworten (oder zumindest einige der Antworten) hier diese wunderbaren Ausführungsskripte, von denen ich sicher bin, dass sie wirklich gut funktionieren, aber nur, wenn sich Ihr Framework im
Frameworks
Verzeichnis befindet. Wenn Sie kein Shell-Skript-Junkie sind, funktionieren diese Skripte ohne Änderungen nicht für das oben erläuterte Szenario. Es gibt jedoch eine sehr einfache Möglichkeit, diei386
&x86_64
Architekturen aus dem Framework zu entfernen.Öffnen Sie das Terminal im Verzeichnis Ihres Projekts.
Wechseln Sie direkt in das
.framekwork
, wiecd YourProjectDir/YourProject/YourLibrary.framework
Führen Sie die Befehlsreihe wie unten gezeigt aus.
Ein paar Dinge, die hier zu beachten sind -
lipo -remove
müssen einmal ausgeführt werden, damit jede Architektur entfernt wird.lipo
Ändert die Eingabedatei nicht, es wird nur eine Datei erstellt, sodass Sie sielipo -remove
einmal fürx86_64
und ausführen müsseni386
. Die obigen Befehle tun dies einfach, indem Sie zuerst die ausführbare Datei umbenennen und schließlich die gewünschten Bögen entfernen und dann die verbleibenden Dateien bereinigen. Und das war's, jetzt sollte beim Hochladen der Application Loader-Archivierung auf iTunesConnect ein grünes Häkchen angezeigt werden.Zu beachtende Dinge : Die oben genannten Schritte sollten nur während des Produktionsaufbaus ausgeführt werden, da
.framework
die Simulatorarchitekturen entfernt werden und Builds auf Simulatoren nicht mehr funktionieren (was erwartet wird). In einer Entwicklungsumgebung sollte es nicht erforderlich sein, die Architekturen aus der.framework
Datei zu entfernen, da Sie sowohl auf dem Simulator als auch auf einem physischen Gerät testen möchten. Wenn sich Ihre Fettbibliothek imFrameworks
Ordner des Projekts befindet, sehen Sie sich bitte die akzeptierte Antwort an.quelle
Ich hatte das gleiche Problem, selbst nachdem ich das Skript hinzugefügt und das Framework einige Male aktualisiert hatte.
Stellen Sie sicher, dass in xCode das Skript am Ende nach der Einbettung hinzugefügt wird. Ich glaube, ich habe das Skript versehentlich vor das eingebettete Framework verschoben.
Hinweis: Ich habe xCode 9.1
quelle
Sie müssen nur das Framework aus den eingebetteten Binärdateien entfernen und es einfach zu den verknüpften Frameworks und Bibliotheken hinzufügen.
Siehe folgenden Screenshot;
quelle
Vielen Dank an alle oben genannten Antworten. Hier ist ein Skript, das mit Swift 4.2 und 5 arbeitet . Ersetzen Sie die Zeichenfolge Your_Framework_Name durch den ursprünglichen Namen Ihres Frameworks.
quelle
Dieses Problem wurde für mich behoben, indem das Ausführungsskript aus der Antwort von pAky88 geringfügig geändert und nach dem Einbetten von Frameworks ausgeführt wurde. Deaktivieren Sie außerdem das Kontrollkästchen "Skript nur bei Installation ausführen".
quelle
Ich habe die Architekturen i386 und x64_86 aus den Build-Einstellungen - Gültige Architekturen - Release entfernt, und alles hat einwandfrei funktioniert.
Das einzige Problem wäre nun, dass Sie einen RELEASE- Build nicht zu Testzwecken auf einem SIMULATOR ausführen können . Aber so einfach Sie die Bögen entfernt haben, können Sie sie wieder hinzufügen, wenn Sie möchten.
quelle
Die einfache Lösung, die für mich funktioniert hat, war
getan!
quelle
Dieser Fehler (ITMS-90240) kann auch durch eine statische (.a) Bibliothek verursacht werden. Hier ist ein Skript, um die überschüssigen Architekturen zu entfernen. Fügen Sie dies in Xcode zu Ziel> BuildPhases> Klicken Sie auf das + und wählen Sie Skript ausführen. Fügen Sie dies dann in das Skriptfeld ein.
Das Skript sucht nach .a-Dateien, prüft, ob es eine fehlerhafte Architektur enthält, und erstellt dann eine neue .a-Datei ohne diese Architektur.
Für macOS:
Für iOS:
quelle
Ich hatte das gleiche Problem. Auch nach dem Hinzufügen des angegebenen Run-Skripts funktionierte es nicht. Es war ein Xcode-Problem. Ich habe die Xcode-Version 9.0 verwendet, aber die neueste Version war 9.2.
Also habe ich den neuesten Xcode (9.2) installiert und es hat funktioniert.
quelle
Ihr Framework enthält sowohl Code
ARM
als auchx86
Code, mit dem Sie ihn auf einem Gerät oder im Simulator verwenden können. Wenn Sie Ihre App an den App Store senden möchten, führen Sie das folgende Skript aus, um den inaktiven Code aus der Binärdatei zu entfernen.1.Wählen Sie Ihr Ziel im Projektnavigator aus und klicken Sie oben im Projekteditor auf Phasen erstellen.
2.Wählen Sie im Menü Editor die Option Build-Phase hinzufügen und dann Run-Skript-Build-Phase hinzufügen (oder klicken Sie auf die Schaltfläche + in der oberen linken Ecke des Editors für Build-Phasen).
3. Erweitern Sie das Offenlegungsdreieck neben der neuen Build-Erstellungsphase, die gerade hinzugefügt wurde. Fügen Sie im Skripteditorfeld Folgendes ein: bash
quelle
Hier ist ein Skript, mit dem ich speziell nur die Architektur eines Frameworks aus der ausführbaren Datei entfernt habe.
Fügen Sie dieses Skript zu Ihren Projekten "Build Phases" Ihres Projektziels hinzu. Aktivieren Sie unbedingt das Kontrollkästchen: "Skript nur bei der Installation ausführen"
quelle