最近提交後,我已經得到了以下錯誤:您如何爲Mac App Store使用框架捆綁包?
Invalid Signature - the nested app bundle (FooBar.app/Contents/Frameworks/GData.framework) is not signed, the signature is invalid, or it is not signed with an Apple submission certificate. Refer to the Code Signing and Application Sandboxing Guide for more information.
Invalid Signature - the nested app bundle (FooBar.app/Contents/Frameworks/Growl.framework) is not signed, the signature is invalid, or it is not signed with an Apple submission certificate. Refer to the Code Signing and Application Sandboxing Guide for more information.
Invalid Signature - the nested app bundle libcurl (FooBar.app/Contents/Frameworks/libcurl.framework) is not signed, the signature is invalid, or it is not signed with an Apple submission certificate. Refer to the Code Signing and Application Sandboxing Guide for more information.
所以我每Technote 2206簽署所有的框架包:
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libcurl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libssh2.1.dylib
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./Growl.framework/Versions/A/Growl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./GData.framework/Versions/A/GData
技術說明2206說:
Signing Frameworks
Seeing as frameworks are bundles it would seem logical to conclude that you can sign a framework directly. However, this is not the case. To avoid problems when signing frameworks make sure that you sign a specific version as opposed to the whole framework:
# This is the wrong way:
codesign -s my-signing-identity ../FooBarBaz.framework
# This is the right way:
codesign -s my-signing-identity ../FooBarBaz.framework/Versions/A
當我試圖驗證結果,它對我來說很好:
% codesign -vvv FooBar.app/Contents/Frameworks/libcurl.framework
FooBar.app/Contents/Frameworks/libcurl.framework: valid on disk
FooBar.app/Contents/Frameworks/libcurl.framework: satisfies its Designated Requirement
% codesign -vvv FooBar.app/Contents/Frameworks/Growl.framework
FooBar.app/Contents/Frameworks/Growl.framework: valid on disk
FooBar.app/Contents/Frameworks/Growl.framework: satisfies its Designated Requirement
爲了好玩,我嘗試直接簽署框架捆綁,但仍然被拒絕。但這正是文件所說的不該做的。
任何猜測爲什麼這將被視爲無效?我使用的是我用來對我的應用程序進行代碼簽名的相同證書 - 這是過去的工作。
我唯一的猜測會與現有的plists(我是否需要擁有框架的Info.plists中的標識符?)或權利 - 任何建議?
我也發現了,當我提出我的應用程序這點。謝天謝地蘋果沒有拒絕它,但指出我們將不得不稍後簽署框架。我認爲最好在咆哮谷歌代碼問題頁面上發佈,很快人們會遇到同樣的問題。 – koo
在使用Growl框架提交應用程序時也遇到此問題。我猜你必須將growl.framework包標識符更改爲您擁有的標識符,然後對其進行編碼。 – Andrew
這很奇怪:我已經發布了一個應用程序,其中包含兩個框架(CorePlot和MacRuby),都是未簽名的。我只在應用程序包上運行代碼簽名命令一次,並且該應用程序已被接受而沒有對框架發表任何評論。現在,如果您查看應用程序包(http://bit.ly/charterapp),那麼這兩個框架似乎都會被簽名。你是否試圖簡單地簽署整個應用程序? – p4010