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?
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.
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:
Ich musste Enable Bitcode in den Build-Einstellungen auf "NO" setzen
Versuche Folgendes: