2010-02-24 97 views
4

我寫了一個腳本,使用xcodebuild來生成一個iPhone應用程序的AdHoc構建。用於簽署iPhone應用程序的供應配置文件的名稱?

我想編輯此腳本以輸出用於簽署構建的Provisioning Profile的名稱。
這將允許我在自動生成的壓縮文件中包含供應配置文件。這樣,我可以自動將存檔發送給AdHoc測試人員,並確保他們具有正確的Provisioning Profile來安裝該應用程序。

有什麼辦法提取用於簽名的應用程序的供應配置文件名或文件:

  • 從Xcode項目的建造並簽名的申請
  • (我不想手動解析project.pbxproj文件,因爲這解決方案可能在未來的Xcode更新破解)
  • 就是編寫腳本任何其他方式

不可寬恕suggested使用命令security來獲取用於簽署應用程序的證書的名稱。得到這些信息後,有沒有辦法找到配置文件的名稱?


這裏是我的嘗試:

可悲的是,xcodebuild聯編的構建過程中的輸出不包含此信息。在CodeSign步驟中,有一行:

/usr/bin/codesign -f -s "iPhone Distribution: My name" ...

但我無法將其與證書進行匹配。

我看着使用codesign,並且命令

/usr/bin/codesign -d -vvv --entitlements - -r - /Users/lv/Desktop/TicTacBoo.app/TicTacBoo
看起來很有希望,但它並沒有給我我需要的信息。
我還沒有在xcodebuild中找到任何有用的選項。

回答

6

供應配置文件已在該應用程序。你並不需要另一個副本在你的zip文件(除非您的測試人員不懂如何使用複製的應用程序的內部。)

其命名爲YourApplication.app/embedded.mobileprovision

這不回答你,因爲原來的問題文件名丟失,但它似乎解決了您的更大問題。

+2

輝煌!並且文件名保存在該文件中的「名稱」鍵下 – Guillaume 2010-03-04 16:24:00

+5

下面是一個快速且很好用的方法來獲取文件名:字符串path_to_embedded_file.mobileprovision | grep -A1'名稱'| tail -n1 | awk -F'''{print $ 2}'| awk -F'''{print $ 1}' – Guillaume 2010-03-04 17:17:42

2

您可以使用終端的「安全」命令;不幸的是,至少在我的MBP上使用Snow Leopard時,它似乎會在需要發佈的命令之一中導致分段錯誤。欲瞭解更多信息,請從終端

man security 

無論如何,這裏是你可以試一下,假設你的開發/生產證書存儲在登錄鑰匙串:

security unlock-keychain login.keychain; 
security find-certificate -a -c "iPhone Distribution: Your name" -p > cert.pem; 

第二個命令使分割錯誤(由-c參數引起),但它應該正是你所需要的。或者,您可以使用

security find-identity -p codesigning -v; 

獲取您可以用來對您的應用程序進行代碼簽名的所有有效證書的列表。 對於每個證書,輸出還包含SHA1消息摘要,以便您可以輕鬆地在匹配與「iPhone分發:您的姓名」關聯的SHA1摘要的鑰匙串中搜索證書。然而,這要求您使用鑰匙串API編寫自己的應用程序。

讓我知道這是否適用於您的Mac或如果您遇到相同的分段故障問題。

編輯/更新:我已驗證了其他機器上的錯誤,並向Apple提交了一個錯誤。

+0

這三個命令在我的機器上運行良好(Mac OS X 10.6.2 - 安裝了SDK 3.1.3和3.2 beta 3)。沒有段錯誤。 我意識到我並不十分清楚,但我最終的目標是獲得Provisioning Profile文件(或文件名)。我編輯了這個問題。 – Guillaume 2010-03-04 14:46:40

+0

我很抱歉,實際上我回答的是嚴格相關的問題,如何檢索用於簽署應用程序的實際證書,而不是提供配置文件! – 2010-03-04 16:26:24

0

如何查找類型爲「mobileprovision」的文件的_CodeSignature/CodeResources plist文件(構建的應用程序)?

下面是使用默認值(1)讀取plist文件的方法。你要複製文件CodeResources的東西用「的.plist」後綴保持默認快樂......

cp /build/Distribution-iphoneos/MyApp.app/_CodeSignature/CodeResources /tmp/defaults.plist 
defaults read /tmp/defaults files |grep .mobileprovision |grep -v embedded.mobileprovision 

(在我的測試案例中,有2項名爲.mobileprovision那裏;忽略了一個名爲「嵌入.mobileprovision「)

+1

有趣。我只得到1個條目,看起來像這樣:「embedded.mobileprovision」= ;;但是,如何將此字符串與Provisioning Profile名稱匹配? – Guillaume 2010-03-04 15:48:47

相關問題