TL; DR - Ich musste ändern, in welches Verzeichnis mein Archivskript beim Debuggen oder beim Vorbereiten einer Version liest. Beim Debuggen muss ich jetzt sicherstellen, dass die Archivkonfiguration meines Framework-Schemas auf "Debug" eingestellt ist, wenn Breakpoints zur Laufzeit korrekt funktionieren sollen. Ich verwende "Release" nur, wenn ein produktionsfertiges .framework vorbereitet wird.
Ich erreichte Apple-Entwickler-Support über Fehlerbericht. Ich werde die Antwort unten einfügen. Wenn er "Lipo" erwähnt, bezieht er sich auf einen Aufruf, den ich in einem Post-Archiv-Skript mache, das ein universelles Framework aus dem Simulator und den physischen Geräte-Builds erzeugt.
Xcode muss die Binärdatei abgleichen, die mit den Debugsymbolen ausgeführt wird, die sich noch auf Ihrem Computer befinden.Xcode sollte das automatisch tun, aber es hört sich so an, als würden einige Sachen hinter Xcode's Rücken herum bewegt. Um zu wissen, ob die Debug-Informationen übereinstimmen, können Sie die Ausgabe von (lldb) Bildliste und /Mac/Pfad/zu/Build/Produkte/Debug-iphoneos% dwarfdump --uuid iOS-App.app/iOS- App , die auch auf dylibs funktioniert.
Hat Ihr Framework Klammern um die Adresse? Das ist ein sicheres Zeichen, dass lldb deine Symbole nicht finden kann.
Wenn die UUID in der Bildliste nicht mit dem dwarfdump übereinstimmt, hat etwas die ausführbare Datei geändert, bevor sie ausgeführt wurde und nicht mit Ihren erstellten Produkten übereinstimmt. Wir sind nicht sicher, ob Lipo das tun könnte, was ich in deinem Skript sehe, aber überprüfe es auf jeden Fall. Es kann nicht viel getan werden, wenn die Debug-Info nicht mehr existiert.
Wenn Sie die richtige ausführbare Datei mit einem entsprechenden UUID auf Ihrer Festplatte finden können, können Sie einfach (LLDB) Bild hinzufügen /Mac/path/to/DerivedData-asdfasdfadf/Products/Debug-iphoneos/iOS-App.app/Frameworks/Framework
Darüber hinaus verwendet Xcode Spotlight, um Symbole auf Ihrem Computer zu finden. Um eine ständige Neuindizierung während des Erstellens zu vermeiden, wurde das Intermediates/-Verzeichnis, das .o-Dateien enthält, und ein anderer Ort, an dem Debug-Informationen gespeichert sind, auf die schwarze Liste gesetzt. Dies ist relativ spät in Xcode 9.0 passiert, also könnte der Grund dafür sein, dass deine Sachen früher funktionierten.
Als ich (lldb) image list
zur Laufzeit lief, sah ich, dass der UUID meines Rahmen, dass nicht übereinstimmten, die von dwarfdump
bei /Mac/path/to/Build/Products/Debug-iphoneos
berichtet wurden.
Am Ende habe ich mein Post-Archiv-Skript geändert, um zu ändern, welches Build-Verzeichnis es beim Erstellen des Frameworks liest. Wenn ich meine Archivkonfiguration auf "Debug" setze, wird es jetzt von Debug-iphoneos gelesen. Wenn ich es auf „Release“ heißt es aus ${BUILD_DIR}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}
# NOTE: This script creates a universal framework (device and simulator). However, *** for this to work: a Simulator target must be built first, and then Archive on the Device ***
BUILD_PRODUCTS="${SYMROOT}/../../../../Products"
SIM_PATH="${BUILD_PRODUCTS}/Debug-iphonesimulator/${TARGET_NAME}.framework"
if [ "${CONFIGURATION}" = "Debug" ]; then
DEV_PATH="${BUILD_PRODUCTS}/Debug-iphoneos/${TARGET_NAME}.framework"
elif [ "${CONFIGURATION}" = "Release" ]; then
DEV_PATH="${BUILD_DIR}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/${TARGET_NAME}.framework"
fi
DEST_PATH="${PROJECT_DIR}/../Frameworks/${TARGET_NAME}.framework"
rm -rf "${DEST_PATH}"
mkdir "${DEST_PATH}"
cp -r "${DEV_PATH}/" "${DEST_PATH}/"
rm -f "${DEST_PATH}/${TARGET_NAME}"
cp -Rn "${SIM_PATH}/Modules/" "${DEST_PATH}/Modules/"
lipo -create "${SIM_PATH}/${TARGET_NAME}" "${DEV_PATH}/${TARGET_NAME}" -output "${DEST_PATH}/${TARGET_NAME}"
Wenn die Pfade sind verwirrend, ich Ihnen nicht verdenken. Im Wesentlichen sieht der Arbeitsbereich folgendermaßen aus:
RootDirectory
|__SampleApp
|__SampleApp.xcodeproj
|__Frameworks
|__MyFramework.framework
|__AnotherFramework.framework
|__MyFramework
|__MyFramework.xcworkspace
|__MyFramework.xcodeproj
|__Podfile (etc..)
Mit welchem Swift/Objc-Optimierungsflag kompilieren Sie? Wenn Sie einige verwenden, empfehle ich, sie aus Ihrer Dev-Konfiguration für Ihr Projekt und Framework zu entfernen und zu sehen, ob Ihr Debugger danach besser funktioniert. – trupin
Arbeiten in xcode 9 beta 6. Stellen Sie sicher, dass Ihr Projekt in DEBUG ausgeführt wird – amar