通过terminal批量构build和存档iOS应用程序

我正在尝试简化iOS应用发布的构build – >归档 – >提交过程。 我们有超过50个移动应用具有几乎相同的框架,但具有不同的graphics和configuration设置。

我通常会在xcode 4.2中加载每个项目,然后使用xcode GUI来构build – >归档 – >提交通常的方式,但是现在我们已经有超过50个应用程序,而且这个过程在我们推出更新的时候非常麻烦。

这就是说,我正在尝试使用shell函数来加速这个过程。 我做了大量的研究,发现xcodebuild (见里德的答案)应该工作,但是档案选项不工作,因为我得到以下错误:

unsupported build action 'archive' 

所以我写了以下内容:

 # $1 should be a date like: 2012-07-17 # $2 should be a time like: 10.31AM # $mybase will be the current directory at the time the function was called # so make sure to cd into the folder containing the xcode project folders first function xcodeArchive { mkdir ~/Library/Developer/Xcode/Archives/$1 mybase=$PWD for x in `ls` do mkdir ~/Library/Developer/Xcode/Archives/$1/$x mkdir ~/Library/Developer/Xcode/Archives/$1/$x/dSYMs mkdir ~/Library/Developer/Xcode/Archives/$1/$x/Products mkdir ~/Library/Developer/Xcode/Archives/$1/$x/Products/Applications cd $mybase/$x xcodebuild #read -p "Press [Enter] to continue" cd $mybase/$x cp $x/$x-Info.plist ~/Library/Developer/Xcode/Archives/$1/$x/Info.plist cp -r build/Release-iphoneos/$x.app.dSYM ~/Library/Developer/Xcode/Archives/$1/$x/dSYMs/$x.app.dSYM cp -r build/Release-iphoneos/$x.app ~/Library/Developer/Xcode/Archives/$1/$x/Products/Applications/$x.app cd ~/Library/Developer/Xcode/Archives/$1/ mv $x $x\ $1\ $2.xcarchive cd $mybase done } export -f xcodeArchive 

我把这个在我的.bash_profile和一切运行正常,如我所料,除非我不复制正确的“Info.plist”,我不知道从哪里复制或如何生成它。 所以现在我被困住了。

Xcode将识别这些档案,但是它将它们列在组织者的“未知模式”和“未命名档案”下。

任何有关现在得到正确的Info.plist的帮助非常感谢。

我也欢迎有关如何改进脚本和/或更有效的批量构build+归档这些iOS应用程序的build议。

注意:

  • 我无法升级到Xcode 4.2以上(据我所知)OS X 10.7+,我还无法获得(公司电脑)。

  • 我仍然是一个bash / shell新手,所以我为上面的任何丑陋的代码/实践道歉。

  • 此外,这是提交官方应用程序,而不是专门或类似的东西。

再次感谢你的帮助。

我有与存档命令相同的问题,并通过谷歌发现这个问题。 这个命令会失败

 xcodebuild -verbose -project $ProductName.xcodeproj -target $ProductName -configuration Release -sdk $SDK clean archive CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build" PROVISIONING_PROFILE="${DIST_PROVISONING_PROFILE}" 

然而,这个构build命令会成功:

 xcodebuild -verbose -project $ProductName.xcodeproj -scheme $ProductName -configuration Release -sdk $SDK clean archive CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build" PROVISIONING_PROFILE="${DIST_PROVISONING_PROFILE}" 

唯一的区别是指定scheme来代替要build立的目标。 如果这种行为有明显的理由,我很乐意听到。

我在Mac OS X 10.7.5上运行XCode 4.5.1

好的,我find了一个解决scheme,将工作。 在做了大量的search和大量的猜测和检查之后,我发现我仍然可以在xcodebuild中使用“archive”选项,我只需要指定一个工作空间和scheme,显然我之前没有做到这一点,因为它现在作品。

所以,对于任何寻找类似解决scheme的人(批量归档xcode项目),这里是我的function:

 # $mybase will be the current directory at the time the function was called # so make sure to cd into the folder containing the xcode project folders first function xcodeArchive { mybase=$PWD for x in `ls` do cd $mybase/$x xcodebuild -workspace $x.xcodeproj/project.xcworkspace -scheme $x archive cd $mybase done } export -f xcodeArchive 
Interesting Posts