2013-03-28 38 views
4

我正在嘗試創建一個bash腳本來自動創建應用內購買pkg文件。將xcodeproj應用內購買轉換爲終端(Bash)中的pkg文件或如何將xcarchive文件轉換爲pkg文件?

我在腳本成功創建所有應用程序內購買xcodeproj項目,然後使用這個命令

xcodebuild -scheme $nameOfProject archive 

$ nameOfProject歸檔他們的一點是,持有,在循環中的變量中,與應用程序內購買相對應的xcodeproj文件的名稱。

這樣做後,我必須打開Xcode的歸檔部分,並手動導出所有檔案,以創建我需要上傳到iTC的pkg文件。

是否有任何命令可以用於從終端自動執行此操作?

提供相同解決方案的另一件事是:如何將xcarchive文件轉換爲pkg文件?

+0

我已經閱讀接受的答案,但我可以」設法使它工作。你能否給我提供你的bash腳本? – user2037296

回答

8

在使用「應用內購買內容」項目進行了一些Google搜索和一些測試之後,我認爲您需要使用的是productbuild命令行工具。由於我自己只是iOS開發人員,所以我沒有創建安裝程序的經驗,但我非常確定使用此命令行工具創建了應用程序內容的「pkg」文件。

要找到可以參考 https://developer.apple.com/library/mac/#documentation/ToolsLanguages/Conceptual/OSXWorkflowGuide/DistributingApplications/DistributingApplications.html#//apple_ref/doc/uid/TP40011201-CH5-SW1

man正確的參數。

編輯:
要測試的XCode做什麼,我創建了一個簡單的項目
Project

我歸檔它: Archive contents

然後我創建了一個簡單的程序,讓我們叫它ArgumentLogger,代碼是

int main(int argc, const char* argv[]) { 
    //Open a file for logging 
    FILE* file = fopen("/Users/Sulthan/Desktop/log.txt","a+"); 

    for (int i = 0; i < argc; i++) { 
     //log all parameters 
     fprintf(file, "%s\n", argv[i]); 
    } 

    //end 
    fclose(file); 
    return 0; 
} 

讓我們有一個例子 - 對於bash命令:

ArgumentLoggger --arg test1 test2 test3 

log.txt將包含

ArgumentLogger 
--arg 
test1 
test2 
test3 

現在,讓我們來代替/usr/bin/productbuild這個程序

sudo mv /usr/bin/productbuild /usr/bin/productbuild_old 
sudo mv ArgumentLogger /usr/bin/productbuild 

,然後在XCode中點擊 「分發」 。 Distribute 並導出包。

log.txt現在包含

 
/usr/bin/productbuild 
--content 
/var/folders/v5/wwrmfpqx2mx1q5sf67_6vgg00000gn/T/FDCEA38E-1EF6-490B-8C30-8B0675C56CC8-47322-00014822C462D3CD/TestContent 
/var/folders/v5/wwrmfpqx2mx1q5sf67_6vgg00000gn/T/FDCEA38E-1EF6-490B-8C30-8B0675C56CC8-47322-00014822C462D3CD/TestContent.pkg 

現在我們看到什麼了XCode一樣。

第二個文件是生成的文件,我不確定是否有更多的文件完成與文件,但擴大後與pkgutil,內容似乎是相同的pkg創建XCode中。

第一個文件是一個似乎直接從xcarchive文件中取得的目錄。 讓我們來看看它的內容
Temp dir contents

編輯2:
綜上所述,bash腳本應該是沿着線的東西:

CONTENTS_DIR = $(find "$nameOfProject.xcarchive" -name "InAppPurchaseContent" -type d) 
PKG_FILE = "$nameOfProject.pkg" 

productbuild --content "$CONTENTS_DIR" "$PKG_FILE" 
+0

檢查後,我看到這使用一個應用程序來創建一個pkg。應用內購買只是沒有任何應用的結構。使用Xcode創建iOS iOS>應用內購買的新項目,並查看您擁有的內容。每個應用程序必須生成每個包。 – SpaceDog

+0

'pkg'可以有任意的內容。您不需要應用程序來創建安裝程序,您可以打包任何文件。在MacOS上,應用程序基本上只是一個文件夾。您可以使用'pkgutil'來檢查'pkg',並試驗一下這些參數。 – Sulthan

+0

@RubberDuck多做了一點試驗並擴展了答案。 – Sulthan