2014-02-28 31 views
0

我有一個非常奇怪的代碼簽名問題。之前的幾乎相同的版本已通過驗證並已提交到App Store,因此我的代碼簽名不會中斷。使用插件和iTunesLibrary對OS X應用程序進行簽名

最近我一直在嘗試使用iTunesLibrary框架。這個框架只適用於你的應用程序是經過編碼的。我越來越想初始化指示代碼簽名失敗的框架時一個常見的錯誤:

錯誤域= NSPOSIXErrorDomain代碼= 100001「無法加載。」的UserInfo = {0x100329d80 = NSLocalizedDescription無法加載,NSUnderlyingError = 0x10031a430 「操作無法完成。(OSStatus錯誤100005.)」}

我的應用程序被組織成多個框架,以此來動態鏈接和插件。我一直在使用--deep標誌對我的應用程序進行遞歸簽名,但顯然這是wrong。現在我正在使用run script構建階段來簽署我的每個框架和插件。這似乎工作爲codesign告訴我的應用程序已簽署。

我已經在調試模式下構建了應用程序,並將其歸檔並導出爲開發人員ID簽名程序並檢查了簽名 - 兩種構建模式均通過。當我運行它時,我從iTunesLibrary得到上述錯誤。真正怪異的部分是,如果我出口的應用程序,如下面重新簽署它自己,然後iTunesLibrary功能正常:

codesign --force --sign "MyIdentity" --deep MyApp.app 

如果我使用spctl --assess儘量多給我講這個,我得知這個應用程序儘管正常工作受到嚴重簽署:

/Users/me/Desktop/MyApp.app: rejected 

的應用程序,iTunesLibrary不從另一方面想通過spctl檢查:

/Users/me/Desktop/MyApp.app: accepted 
source=Developer ID 
origin=Developer ID Application: Me 

回答

0

解決方案是將iTunesLibrary框架鏈接到主要可執行文件以及實際使用它的框架。

我很想知道爲什麼...

0

如果您要嵌入框架,你需要創建一個「文件拷貝」構建一個your.framework移動到目的地的框架階段。讓您構建階段後,添加運行腳本的東西,例如:

LOCATION="${BUILT_PRODUCTS_DIR}"/"${FRAMEWORKS_FOLDER_PATH}" 
IDENTITY="Developer ID Application: Certificate Common Name" 
codesign --verbose --force --sign "$IDENTITY" "$LOCATION/your.framework/Versions/A" 

總之--deep標誌不能做好這方面的工作。是的,它會遞歸簽署嵌套的bundle,但是,它會將頂級bundle的參數應用於所有嵌套bundle。反過來,您的應用程序的權利將導致生成的捆綁無效。

人協同設計--deep還指出:

;任何間接嵌套的要求遞歸應用 codesign命令。

+0

是的,一切都完成了。問題是iTunesLibrary的代碼簽名檢查似乎要求框架鏈接到主要可執行文件,而不是動態庫或插件。 – Tim