Crash信息
Termination Reason: Namespace DYLD, Code 1 Library missing
Library not loaded: @rpath/QtCore.framework/Versions/5/QtCore
Referenced from: /Applications/AppName.app/Contents/MacOS/AppName
Reason: tried: '/Applications/AppName.app/Contents/MacOS/../Frameworks/QtCore.framework/Versions/5/QtCore' (no such file), '/Applications/AppName.app/Contents/MacOS/../Frameworks/QtCore.framework/Versions/5/QtCore' (no such file), '/Applications/5.12.12/5.12.12/clang_64/lib/QtCore.framework/Versions/5/QtCore' (no such file), '/Applications/AppName.app/Contents/MacOS/../Frameworks/QtCore.framework/Versions/5/QtCore' (no such file), '/Applications/AppName.app/Contents/MacOS/../Frameworks/QtCore.framework/Versions/5/QtCore' (no such file), '/Applications/5.12.12/5.12.12/clang_64/lib/QtCore.framework/Versions/5/QtCore' (no such file), '/Library/Frameworks/QtCore.framework/Versions/5/QtCore' (no such file), '/System/Library/Frameworks/QtCore.framework/Versions/5/QtCore' (no such file)
(terminated at launch; ignore backtrace)
打包后在其它電腦安裝后出現(xiàn)了上述問(wèn)題,找不到QtCore.framework,之前開發(fā)一直在自己的開發(fā)電腦,該機(jī)器是安裝了QT環(huán)境的,調(diào)試跑起來(lái)也沒注意到這個(gè)問(wèn)題
解決問(wèn)題
查看工程引入的QT庫(kù),原來(lái)使用的是靜態(tài)庫(kù),這個(gè)版本升級(jí)了QT使用的是動(dòng)態(tài)庫(kù)了,發(fā)現(xiàn)沒有嵌入,于是果斷修改庫(kù)嵌入方式為Embed & Sign,再次編譯
/Users/用戶名/Documents/Terminal/trunk/項(xiàng)目名稱/ReleaseLib_MAC/AppName.app: unsealed contents present in the root directory of an embedded framework
In subcomponent: /Users/用戶名/Documents/Terminal/trunk/項(xiàng)目名稱/ReleaseLib_MAC/AppName.app/Contents/Frameworks/QtCore.framework
結(jié)果并不是預(yù)期的,在Debug環(huán)境下始終無(wú)法編譯,甚至換成Embed Without Signing 也是不行
通常我們的動(dòng)態(tài)庫(kù)是選擇Embed嵌入打包進(jìn)app的,這個(gè)QT庫(kù)卻有點(diǎn)不一樣。沒辦法,于是上網(wǎng)查找了,所幸找到了,解決辦法是Xcode工程不嵌入動(dòng)態(tài)庫(kù),也就是對(duì)QT動(dòng)態(tài)庫(kù)保持Do Not Embed配置。
其次,在Build Phases中添加一個(gè)編譯腳本
/Users/用戶名/QT/5.12.12/clang_64/bin/macdeployqt ${CODESIGNING_FOLDER_PATH}
同時(shí),在Xcode的主target build setting 中 Other Code Signing Flags 添加一個(gè)簽名標(biāo)志位 --deep
這里需要使用QT提供的工具處理這幾個(gè)動(dòng)態(tài)庫(kù),在編譯打包的時(shí)候會(huì)把動(dòng)態(tài)庫(kù)拷貝到app包內(nèi)的Frameworks文件夾下,這樣打包發(fā)布就可以正常找到動(dòng)態(tài)庫(kù)了