4

我正在尝试创建一个 bash 脚本来自动创建应用内购买 pkg 文件。

我的脚本成功创建了所有应用内购买的 xcodeproj 项目,然后使用此命令将它们存档

xcodebuild -scheme $nameOfProject archive

$nameOfProject是一个变量,它在循环内保存与应用内购买相对应的 xcodeproj 文件的名称。

完成此操作后,我必须打开 Xcode 的存档部分并手动导出所有存档以创建我需要上传到 iTC 的 pkg 文件。

是否有任何命令可以用来从终端自动执行此操作?

提供相同解决方案的另一件事是:如何将 xcarchive 文件转换为 pkg 文件?

4

1 回答 1

8

经过谷歌搜索和“应用内购买内容”项目的一些测试,我认为您需要使用的是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 的功能,我创建了一个简单的项目
项目

我存档了它: 存档内容

然后我创建了一个简单的程序,我们调用它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将包含

参数记录器
--arg
测试1
测试2
测试3

现在,让我们/usr/bin/productbuild用这个程序替换

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

然后在 XCode 中点击“分发”。 分发 并导出包。

log.txt现在包含

/usr/bin/productbuild
- 内容
/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 做了什么。

第二个文件是生成的文件,我不确定该文件是否有更多功能,但使用 扩展后,内容似乎与从 XCode 创建pkgutil的内容相同。pkg

第一个文件是一个似乎直接取自xcarchive文件的目录。让我们看看它的内容
临时目录内容

编辑2:
总之,bash脚本应该是这样的:

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

productbuild --content "$CONTENTS_DIR" "$PKG_FILE"
于 2013-03-30T20:52:01.720 回答