I am trying to create a bash script to automate the creation of in-app purchase pkg files.
I am at a point that the script creates successfully all in-app purchase xcodeproj projects and then archive them using this command
xcodebuild -scheme $nameOfProject archive
$nameOfProject is a variable that holds, inside a loop, the name of the xcodeproj file correspondent to the in-app purchase.
After doing this, I have to open the archive part of Xcode and manually export all archives to create the pkg files that I need to have to upload to iTC.
Is there any command that I can use to do this automatically from terminal?
Another thing that would provide the same solution would be: how to convert a xcarchive file into a pkg file?
After some googling and some testing with the "In-app purchase content" Project, I think that what you need to use is the productbuild command line tool. Since I am only iOS developer myself, I have no experience with creating installers but I am pretty sure the "pkg" file for the in-app content is created using this command line tools.
To find the correct parameters you can refer to https://developer.apple.com/library/mac/#documentation/ToolsLanguages/Conceptual/OSXWorkflowGuide/DistributingApplications/DistributingApplications.html#//apple_ref/doc/uid/TP40011201-CH5-SW1
or man.
Edit:
To test what XCode does, I have created a simple project
And I archived it:

Then I created a simple program, let's call it ArgumentLogger, the code is
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;
}
Let's have an example - for bash command:
ArgumentLoggger --arg test1 test2 test3
log.txt will contain
ArgumentLogger --arg test1 test2 test3
Now, let's replace /usr/bin/productbuild with this program
sudo mv /usr/bin/productbuild /usr/bin/productbuild_old
sudo mv ArgumentLogger /usr/bin/productbuild
and then hit "Distribute" in XCode.
and export the package.
log.txt now contains
/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
Now we see exactly what XCode did.
The second file is the resulting file, I am not sure whether there is something more done with the file or not, but after expanding it with pkgutil, the contents seem to be the same as the ones in the pkg created from XCode.
The first file is a directory which seems to be taken directly from the xcarchive file.
Let's see its contents
Edit 2:
In summary, the bash script should be something along the lines of:
CONTENTS_DIR = $( find "$nameOfProject.xcarchive" -name "InAppPurchaseContent" -type d )
PKG_FILE = "$nameOfProject.pkg"
productbuild --content "$CONTENTS_DIR" "$PKG_FILE"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With