我在簽署基於Qt的應用程序un OS X時遇到問題。我正在使用Qt 5.3.2。無法在OS X上使用Qt框架簽署應用程序包10.10
我已閱讀包含矛盾信息的各種信息源。
這裏是我的應用程序包的內容後,我跑了bin/macdeployqt
的Qt工具
SimpleHello.app/
Contents/
Info.plist
PkgInfo
Frameworks/
QtCore.framework/
Resources/
Versions/
5/
QtCore
QtGui.framework/ ... same as Qt core
QtPrintSupport.framework/ ... same as Qt core
QtWidgets.framework/ ... same as Qt core
MacOS/
SimpleHello
PlugIns/ ... some plugins
Resources/
empty.lproj
qt.conf
第一:
我想:http://successfulsoftware.net/2012/08/30/how-to-sign-your-mac-os-x-app-for-gatekeeper/
但是,它似乎是不在OS X 10.10中有效Yosemite
二:
我想:Sign a Framework for OSX 10.9
我能夠沒有任何錯誤簽署整個應用程序。但是,運行spctl
時驗證應用程序的有效性,我得到
spctl -a -vvvv SimpleHello.app
SimpleHello.app/: rejected
source=obsolete resource envelope
origin=Developer ID Application: MY CERTIFICATE
另外與協同設計驗證簽名時,我得到這個:
codesign --verify --deep --verbose=4 SimpleHello.app
--prepared:/My/Path/SimpleHello.app/Contents/Frameworks/QtCore.framework
--validated:/My/Path/SimpleHello.app/Contents/Frameworks/QtCore.framework
SimpleHello.app/: embedded framework contains modified or invalid version
In subcomponent: /My/Path/SimpleHello.app/Contents/Frameworks/QtCore.framework
三:
添加了--no-strict
代碼驗證選項根據:Error when export archive
它修復了使用密碼驗證的問題,但未修復spctl
問題。
第四:
我試圖簽署框架時添加--no-legacy-signing
選項。
根據修正的框架結構:不過,我驗證包簽名時(可以使用codesign
和spctl
codesign --verify --deep --verbose=4 SimpleHello.app
SimpleHello.app/: code has no resources but signature indicates they must be present
第五得到這個錯誤 http://qt-project.org/forums/viewthread/47768 和 https://gist.github.com/kingcheez/6154462d7734e0c0f3a4
在這我在嘗試簽署框架時遇到此錯誤
SimpleHello.app/Contents/Frameworks/QtCore.framework: unsealed contents present in the root directory of an embedded framework
SimpleHello.app/Contents/Frameworks/QtGui.framework: unsealed contents present in the root directory of an embedded framework
SimpleHello.app/Contents/Frameworks/QtPrintSupport.framework: unsealed contents present in the root directory of an embedded framework
SimpleHello.app/Contents/Frameworks/QtWidgets.framework: unsealed contents present in the root directory of an embedded framework
編輯:這似乎與unsealed contents present in the root directory of an embedded framework
問題是因爲其中一個simlink格式不正確。它是:
QtCore.framework.framework/Versions/Current -> 5/
而不是
QtCore.framework.framework/Versions/Current -> 5
此修復程序後,我仍然得到相同的結果第六雖然。
第六:
新增呼籲codesign
的框架時--no-strict
選項。我能夠簽署所有的框架,除了一個
SimpleHello.app//Contents/Frameworks/QtCore.framework: signed bundle with Mach-O thin (x86_64) [.]
SimpleHello.app//Contents/Frameworks/QtGui.framework: signed bundle with Mach-O thin (x86_64) [.]
SimpleHello.app//Contents/Frameworks/QtPrintSupport.framework: code object is not signed at all
In subcomponent: /My/Path/SimpleHello.app/Contents/Frameworks/QtPrintSupport.framework/Versions/Current/QtPrintSupport
SimpleHello.app//Contents/Frameworks/QtWidgets.framework: signed bundle with Mach-O thin (x86_64) [.]
第七:
我張貼了這個問題,因爲我不知道該怎麼找了
偉大的人!最後一個工作解決方案不要忘記使用cp -R來複制最終腳本中的應用程序,否則簽名被破壞。 – Indio