通过终端批量构建和存档iOS应用程序

mas*_*n81 8 bash shell .bash-profile ios xcode4.2

我正在尝试简化iOS应用程序发布的构建 - >存档 - >提交过程.我们有超过50个移动应用程序具有几乎相同的框架,但具有不同的图稿和配置设置.

我通常会在xcode 4.2和build-> archive->中加载每个项目,并使用xcode GUI提交常规方法,但我们现在已经有超过50个应用程序,并且这个过程在我们推出更新时非常烦人.

话虽这么说,我试图使用shell函数加速这个过程.我做了大量的研究,发现xcodebuild(请参阅Reid的答案)应该可以工作,但是Archive选项不起作用,因为我收到以下错误:

unsupported build action 'archive'
Run Code Online (Sandbox Code Playgroud)

所以我写了以下内容:

# $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
Run Code Online (Sandbox Code Playgroud)

我把它放在我的.bash_profile中,一切都按照我的预期正确运行,除了我没有复制正确的"Info.plist",我无法弄清楚从哪里复制它或如何生成它.所以现在我被卡住了.

Xcode将识别存档,但它会在组织者的"Unknown Schema"和"Unnamed Archive"下列出它们.

任何关于现在获得正确的Info.plist的帮助非常感谢.

我也欢迎有关如何改进脚本和/或更有效地批量构建和存档这些iOS应用程序的建议.

注意:

  • 我无法升级超出Xcode 4.2,因为这需要(据我所知)OS X 10.7+,我无法获得(公司计算机).

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

  • 此外,这是官方应用程序提交,而不是ad-hoc或类似的东西.

再次感谢你的帮助.

Tal*_*Tal 13

我在archive命令中遇到了同样的问题,并通过Google发现了这个问题.使用此构建命令会失败:

xcodebuild -verbose -project $ProductName.xcodeproj -target $ProductName -configuration Release -sdk $SDK clean archive CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build" PROVISIONING_PROFILE="${DIST_PROVISONING_PROFILE}"
Run Code Online (Sandbox Code Playgroud)

然而,它会成功使用此构建命令:

xcodebuild -verbose -project $ProductName.xcodeproj -scheme $ProductName -configuration Release -sdk $SDK clean archive CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build" PROVISIONING_PROFILE="${DIST_PROVISONING_PROFILE}"
Run Code Online (Sandbox Code Playgroud)

唯一的区别是指定方案代替要构建的目标.如果这种行为有合理的理由,我会很高兴听到这种行为.

我在Mac OS X 10.7.5上运行XCode 4.5.1


mas*_*n81 1

好的,我找到了一个可行的解决方案。经过大量搜索和大量猜测和检查后,我发现我仍然可以使用 xcodebuild 的“存档”选项,我只需要指定一个工作区和方案,显然我以前没有像现在一样正确地执行此操作作品。

因此,对于任何寻找类似解决方案(批量存档 xcode 项目)的人来说,这是我的函数:

# $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
Run Code Online (Sandbox Code Playgroud)