TL; DR - 我需要更改我的存檔腳本在調試時或準備發佈時讀取的目錄。現在,在調試時,如果我希望斷點在運行時正常工作,我需要確保將我的框架方案的存檔配置設置爲「調試」。準備生產就緒框架時,我只使用「Release」。
我通過bug報告聯繫了Apple開發人員支持。我會粘貼下面的回覆。當他提到「lipo」時,他指的是我在後期存檔腳本中所做的一個調用,它會從模擬器和物理設備構建中創建一個通用框架。
Xcode必須匹配運行中的二進制文件,而該文件仍在計算機上。Xcode應該會自動執行此操作,但聽起來像是一些東西在Xcode背後移動。要知道調試信息是否與您匹配,可以查看 (lldb)圖像列表 和 的輸出/ Mac/path/to/Build/Products/Debug-iphoneos%dwarfdump --uuid iOS-App.app/iOS-應用程序 也將在dylibs上工作。
你的框架在地址周圍是否有括號?這是一個肯定的跡象,lldb無法找到你的符號。
如果映像列表中的UUID與dwarfdump不匹配,那麼在可執行文件運行前修改了可執行文件並且與您的構建產品不匹配。我們不確定是否可以做到這一點,我看到你的劇本,但絕對檢查。如果debug-info不再存在,那麼可以做的不多。
如果你能找到與你的磁盤上的匹配UUID正確的可執行文件,你可以簡單地 (LLDB)圖像添加/Mac/path/to/DerivedData-asdfasdfadf/Products/Debug-iphoneos/iOS-App.app /框架/框架
此外,Xcode使用Spotlight在您的機器上查找符號。爲避免在構建時不斷重新建立索引,將包含.o文件的Intermediates /目錄和存儲調試信息的其他位置列入黑名單。這在Xcode 9.0中發生得相當晚,所以可能是你的東西以前工作的原因。
當我跑(lldb) image list
在運行時,我看到我的框架的UUID不匹配這是在/Mac/path/to/Build/Products/Debug-iphoneos
報道dwarfdump
。
我最終修改了我的post-archive腳本,以便在創建框架時更改它從中讀取的構建目錄。當我將存檔配置設置爲「調試」時,它現在將從Debug-iphoneos中讀取。當我將它設置爲「釋放」從${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}"
讀取如果路徑是混亂的,我不怪你。實質上,工作區看起來像:
RootDirectory
|__SampleApp
|__SampleApp.xcodeproj
|__Frameworks
|__MyFramework.framework
|__AnotherFramework.framework
|__MyFramework
|__MyFramework.xcworkspace
|__MyFramework.xcodeproj
|__Podfile (etc..)
你編譯的是什麼swift/objc優化標誌?如果你使用了一些,我建議從你的項目和框架的開發配置中刪除它們,然後看看你的調試器是否能夠更好地工作。 – trupin
在xcode 9 beta中工作良好6.確保您的項目在DEBUG中運行 – amar