mac 10.14+ Qt程序發佈的整理

1、10.14加入了攝像頭和麥克風授權的機制,可能會出現在時候攝像頭和麥克風時的crash

最新升級到10.14.5後,基於OBS的程序用到麥克風後攝像頭,在開啓攝像的時候crash,這個應該是系統沒有授權攝像頭權限導致的,需要我們在應用的plist文件裏增加權限請求列表(NSMicrophoneUsageDescription,NSCameraUsageDescription),這樣就不會crash了。

授權字段也可能是變成(Privacy - Camera Usage Description,Privacy - Microphone Usage Description)

2、mac 公證簽名需要後,可能會出現crash

最新的mac10.14.5+後,mac需要公證簽名後才能正常運行,但在網上查了資料,qt的程序由於用qtcreator開發,簽名需要用命令行實現,但爲了滿足公證簽名要求,需要滿足一個條件:Build your app with a hardened runtime,在xcode10+上是有這個選項,但qtcreator(5.7.1)貌似沒有,所以需要在簽名的時候加上--options "runtime" 選項按照https://skyronic.com/2019/07/app-notarization-for-qt-applications/的方式,公證簽名是可以的,在其他機子運行也是沒問題的,但是,如果程序用到了攝像頭、麥克風等需要授權的功能時,就會出現crash的,原因是我們還需要額外配置權限,這就是xcode10+在開啓hardened runtime時有一個配置文件一般是appname.entitlements,這裏面可以配置當前需要的權限,這裏我這邊儘量配置了多的權限,包括攝像頭、麥克風等。有了這個思路,再結合資料(https://blog.csdn.net/xytx_823/article/details/102873981),我們在簽名的時候帶上--entitlements {path}/appname.entitlements 參數,我這邊把appname.entitlements放在xxx.app/Contents 目錄下,注意entitlements文件也需要簽名的。app的簽名用 codesign -f -o runtime --entitlements [path]/app.entitlements --timestamp --deep -s "Developer ID Application xxx" -i "com.company.xxx" [path]/"test.app",而其他文件簽名可以用codesign -s "<Key Name>" --options "runtime" "file_path",這樣就可以在別的機子上真正的跑起來了。

總結了:還想用xcod比較靠譜,少採坑。
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章