我使用Mono Framework將.NET應用程序移植到OS X.應用程序正常工作,除了包裝外,我們已經完成了所有工作。我包裝一個獨立的單聲道建設束內,以避免依賴關係,並使用該工具的工作:https://github.com/OutOfOrder/MonoKickstartOS X應用程序包的簽名代碼
我們使用光纖束結構是這樣的:
OurApp.app
\-Contents
+-Info.plist
+-MacOS
| +-osx - native libraries for osx
| +-mono - mono config files
| \ ... - the OS X kickstart binaries, the .exe file, C# .dlls
\-Resources/
\-icon.icns
束運行正常時,OS X的網守功能襯托,而是試圖簽署得到它始終運行時,我遇到問題...
$ codesign -s "3rd Party Mac Developer Application: Our Certificate" --force --deep --verbose OurApp.app
OurApp.app: bundle format unrecognized, invalid, or unsuitable
In subcomponent: OurApp.app/Contents/MacOS/mono/4.0
好吧,我會刪除單目錄暫時只是爲了看它是否繼續那麼:
$ codesign -s "3rd Party Mac Developer Application: Our Certificate" --force --deep --verbose OurApp.app
OurApp.app: signed bundle with Mach-O universal (i386) [org.ourcompany.ourapp]
成功!或者我想,但是當我嘗試運行該應用程序時,它仍然表示它仍然被Gatekeeper阻止。當我跑
spctl -a -v OurApp.app
OurApp.app/: rejected
那麼是什麼給?它說它已經簽署了捆綁包,並且使用--deep參數,它應該已經簽署了所有的庫等,如果我理解正確的話。我應該怎麼做才能做到這一點?
更新:
試圖簽下文件一個接一個與此有關。
codesign -s "3rd Party Mac Developer Application: Our Certificate" --force --verbose OurAppExecutable.bin
但它拒絕這樣做,因爲「子組件」(即使我不使用--deep)。
我最終通過將實際的二進制文件移動到Resources文件夾,然後對二進制文件進行簽名,然後對應用程序包進行簽名,最終得到它的簽名。
不過不失,它說:
spctl -a -v OurApp.app
OurApp.app/: rejected
source=No Matching Rule
任何進一步的見解?
現在,您的可執行文件被標記爲數據文件。請參閱技術說明2206:https://developer.apple.com/library/prerelease/mac/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG201 – esmirnov