2009-11-06 41 views
4

在我們的環境中,我們在多個項目和平臺之間共享資源。爲iPhone構建時,只需要這些資源的一部分。由於該子集仍然相當可觀,因此我們有一個清單文件列出進入的內容,這限制了副本。我們有自己的Python腳本來完成複製,只刷新已更改的文件。在Xcode中強制代碼簽名刷新

我在Xcode中創建了一個運行腳本階段來調用該腳本,但我遇到了一些與代碼簽名階段有關的問題。

由於我們使用單獨的清單文件,因此我的運行腳本階段無法在Xcode GUI中指定任何輸入/輸出文件:它取決於當時目錄中包含的內容。這樣做的副作用是Xcode不會嚴格知道將複製哪些文件(事情發生在「封面下」,可以這麼說)。

我的問題是,如果我只修改構建之間的資源文件,重建我的應用程序將正確調用我的腳本,它複製相應的文件,只有Xcode不會重新運行代碼簽名步驟, - 將我的應用程序複製到我的設備。

我發現奇怪的是,考慮到我的資源文件確實在<app_bundle>/_CodeSignature/CodeResources文件中列出,但它看起來像Xcode確定獨立於此的重建要求(可能只包括項目文件中列出的文件),這是可以理解的。

我試着通過觸摸我的應用程序包的目錄或應用程序的二進制本身來玩技巧,但它不起作用。觸摸應用程序的捆綁目錄似乎沒有做任何事情,而觸摸二進制文件將工作,但不是爲當前建設,只有後續的(因爲沒有輸入文件需要重新編譯,Xcode推斷沒有生成新的二進制文件,但下一個時間,它確實會檢測到二進制文件已被觸摸,並重新開始Code Signing和on)。

不過,這是一個相當完美的解決方法,這是因爲:

  • 不必建立兩次是很容易出錯
  • 我的dSYM文件將無謂地得到再生

有誰知道有什麼方法強制Xcode中的代碼簽名步驟(從運行腳本或其他地方)?

回答

0

您可以直接從命令行或shell腳本調用codesign,例如,

codesign -f -s "iPhone Distribution" --entitlements Entitlements.xcent -vv location/MyApp.app/MyApp 

運行man codesign找出用法。

通過查看Xcode中的詳細構建輸出,您可以發現所有內部命令。選擇「構建」選項卡,然後單擊該窗口窗格左下方的小圖標 - 看起來像文本的圖標(它位於警告圖標旁邊)。這將在Xcode的新窗格中顯示完整的構建輸出。

我創建了一個直接調用codesign的shell腳本,因此我可以使用新的證書和配置文件(例如在更新二進制文件中的某些圖形之後)重新簽名現有的二進制文件。因爲Xcode在內部構建過程中做了一些微妙的事情(例如:Xcode將調配配置文件嵌入到生成的應用程序二進制文件中,但在過程中會改變它的一些值,例如獲取任務允許設置)。這意味着我必須編寫一個工具來生成一個合適的。xcent文件,取決於開發/分發/ App Store版本是否正在完成。希望這些都不會影響你...

+0

謝謝。有用! – jhoule

+0

我做了一些相當於: – jhoule

+0

'export CODESIGN_ALLOCATE =「$ {PLATFORM_DEVLOPER_BIN_DIR}/codesign_allocate」' – jhoule