2014-02-12 53 views
1

我使用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 

任何進一步的見解?

回答

-1

我之後得到了這個工作。訣竅是隻保留MacOS目錄中的唯一可執行文件,並在Resources目錄中包含其他所有內容。這樣我們不需要簽署所有其他的事情。

另一個錯誤 - 不是這個問題的根源,而是另一個錯誤 - 是我們試圖用錯誤的證書籤名。 「第三方Mac開發者應用程序」顯然是用於App Store提交的。這個名字有點令人誤解,所以很容易搞砸了。更多信息:Difference between 「Mac Developer」 and 「3rd Party Mac Developer Application」

+1

現在,您的可執行文件被標記爲數據文件。請參閱技術說明2206:https://developer.apple.com/library/prerelease/mac/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG201 – esmirnov

0

我不確定--deep是否應該起作用,但它不是我們在Xamarin Studio中使用Xamarin.Mac項目時使用的。我們所做的是單獨編碼每個本地庫,然後對應用程序包本身進行編碼。

希望有所幫助。

更新:這可能是問題:

OurApp.app: bundle format unrecognized, invalid, or unsuitable 
In subcomponent: OurApp.app/Contents/MacOS/mono/4.0 

的問題可能是MonoKickStart不產生正確的MAC可執行文件?

+0

要嘗試單獨簽署每個本地庫,看看是否有效。我的猜測是你不需要簽名exe和dll,因爲從OS X的角度來看,它們本質上就是單聲道緊縮的數據文件,對吧? Btw。 MonoKickstart不會生成應用程序包,而只會生成unix樣式的可執行二進制文件。我們手工製作包裝。 – GolDDranks

+0

沒錯,你不需要簽署.exe或.dll文件。 – jstedfast

+0

好吧,試圖單獨簽署文件,但沒有太多成功...檢查主帖子中的更新。 – GolDDranks

相關問題