webentwicklung-frage-antwort-db.com.de

Fehler beim Überprüfen des Bitcodes beim Exportieren des Archivs für die Ad-hoc-Verteilung - Xcode 8.3.3 und Xcode 9 wurden versucht

Apps, die unser Framework enthalten, beklagen, dass beim Export des Archivs für die Ad-hoc-Verteilung der Bitcode fehlt.

Ich habe die von Apple in dieser Hinsicht bereitgestellte Dokumentation durchgelesen Technical Note TN2432 . Die aufgeführten möglichen Ursachen der Dokumentationen ähneln unserem Szenario nicht. (Wir verwenden keine Assembly-Anweisungen oder haben die info.plist-Datei falsch formatiert.)

Ich habe die folgenden ähnlichen Fragen über SO gelesen

Fehler beim Exportieren mit aktiviertem Bitcode (Symbol für Architektur-Armv7 nicht gefunden)

Ist es möglich, ein universelles iOS-Framework mit Bitcode zu erstellen?

Neue Warnungen in iOS 9

Die angebotenen Lösungen scheinen jedoch nicht zu funktionieren.

Ich habe versucht, BITCODE_GENERATION_MODE-Flag in den benutzerdefinierten Build-Einstellungen hinzuzufügen. Ich habe auch versucht, -fembed-bitcode- marker & -fembed-bitcode unter Andere C-Flags im Framework-Ziel hinzuzufügen.

Ich überprüfe, ob in meinem generierten Framework Bitcodesegmente vorhanden sind, und zwar mit dem Befehl suggest

otool -l -Arch arm64 <framework_name> | grep __LLVM

Es zeigt 2 Segmente

segname __LLVM

segname __LLVM

Beim Export des Archivs klagt Xcode jedoch immer noch über den fehlenden Bitcode. 

Ich habe versucht, die App im App Store hochzuladen, um zu überprüfen, ob dieses Problem auf Xcode-Versionen zurückzuführen ist (ich habe 8.3.3 und 9.0 versucht), aber ich erhalte folgende E-Mail über den Fehler beim Build-Import aus dem iTunes Store.

Bei der Verarbeitung Ihrer iOS-App, APP_NAME 1.0 (4), sind Fehler beim Ausdünnen der App aufgetreten, und Ihre App konnte nicht verdünnt werden. Wenn Ihre App Bitcode enthält, ist die Bitcode-Verarbeitung möglicherweise fehlgeschlagen. Aufgrund dieser Fehler kann dieser Build Ihrer App nicht zur Überprüfung eingereicht oder im App Store platziert werden. Informationen zur Behebung dieses Problems finden Sie im technischen Hinweis 2432.

PS: Das Deaktivieren von Bitcode ist für uns keine Option, da die Host-App Bitcode unterstützen muss.

 Error while exporting the Archieve

8
Vipin

Die Fehlerbeschreibung brachte mich in die falsche Richtung, um die Lösung zu finden.

Dieser Fehler bezieht sich nicht auf den Bitcode. Es erschien, als das Framework Simulator-Slices enthielt (i386 x86_64).

Durch das Entfernen vor der Archivierung wurde das Problem behoben. 

Das Hinzufügen einer Skriptphase zum Erstellen von Phasen des Ziels mit folgendem Code half dabei, den Fehler zu beseitigen.

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"

EXTRACTED_ARCHS=()

for Arch in $ARCHS
do
echo "Extracting $Arch from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$Arch" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$Arch"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$Arch")
done

echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"

echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"

done

Credits: http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-von-dynamic-libraries-in-xcode/

Wenn Sie nicht wissen, wie Sie eine Laufskriptphase zu Ihrem Xcode-Projekt hinzufügen, weil Sie vielleicht ein Projekt mit Cordova oder Ionic erstellen und Sie nie viel über Xcode gelernt haben, können Sie Folgendes tun:

  • Öffnen Sie Ihr Projekt in Xcode.
  • Vergewissern Sie sich, dass Sie Ihr Projekt im "Projektnavigator" anzeigen, indem Sie auf das Symbol ganz links im linken Bereich von Xcode klicken (wenn Sie darauf zeigen, dass der Projektnavigator angezeigt wird).
  • Klicken Sie oben im Navigatorfenster auf Ihr Projekt, damit es als Ziel ausgewählt wird
  • An diesem Punkt sehen Sie im mittleren Bereich des Xcode-Fensters einige Dinge, die oben angezeigt werden. Allgemein, Funktionen, Ressourcen-Tags, Informationen ua Eine davon ist Build Phases - klicken Sie darauf.
  • Klicken Sie auf das +, das sich in der oberen linken Ecke des mittleren Bereichs des Xcode-Fensters befindet. Es wird "Neue Build-Phase hinzufügen" angezeigt, wenn Sie lange genug darauf zeigen.
  • Wählen Sie "New Run Script Phase" aus dem Menü, das beim Klicken auf + angezeigt wurde
  • Klicken Sie auf den Pfeil neben dem soeben angezeigten Run Script.
  • Kopieren Sie das obige Skript und fügen Sie es in den entsprechenden Bereich direkt unter der Word- "Shell" ein. Sie sollten nichts anderes ändern müssen.
  • Erstellen/Archivieren Sie Ihr Projekt wie gewohnt. Erst jetzt werden Sie diese lästigen Fehler "Bitcode nicht überprüfen" erhalten. :-)
51
Vipin

Ich musste Enable Bitcode in den Build-Einstellungen auf "NO" setzen

6
MobileMon

Versuche Folgendes:

  • Stellen Sie sicher, dass dieses Framework unter Copy Frameworks Script in Build Phases hinzugefügt wird.
  • Verwenden Sie BITCODE_GENERATION_MODE anstelle von BITCODE_GENERATION_CODE
1
Roy K