我正在尝试简化iOS应用发布的build-> archive->提交流程。 我们有超过50个移动应用程序具有几乎相同的框架,但具有不同的图稿和配置设置。
我通常会在xcode 4.2和build-> archive->中加载每个项目使用xcode GUI提交常规方法,但我们现在已经有超过50个应用程序了,这个过程非常无聊我们推出一个更新
话虽这么说,我正在尝试使用shell函数来加速这个过程。 我做了大量的研究,发现xcodebuild(参见Reid的答案)应该有效,但Archive选项不起作用,因为我收到以下错误:
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会识别档案,但会在组织者的“Unknown Schema”和“Unnamed Archive”下列出。
非常感谢您现在获取正确的Info.plist的任何帮助。
我也欢迎有关如何改进脚本和/或更有效地批量构建和存档这些iOS应用程序的建议。
注意:的
我无法升级超出Xcode 4.2,因为这需要(据我所知)OS X 10.7+,我无法获得(公司计算机)。
我仍然是一个bash / shell新手,所以我为上面任何丑陋的代码/做法道歉。
此外,这是正式的应用程序提交,而不是特别的或类似的。
再次感谢您的帮助。
答案 0 :(得分: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}"
然而,使用此构建命令会成功:
xcodebuild -verbose -project $ProductName.xcodeproj -scheme $ProductName -configuration Release -sdk $SDK clean archive CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build" PROVISIONING_PROFILE="${DIST_PROVISONING_PROFILE}"
唯一的区别是指定方案代替要构建的目标。如果这种行为有明智的理由,我会很高兴听到它。
我在Mac OS X 10.7.5上运行XCode 4.5.1
答案 1 :(得分:1)
好的,我找到了一个可行的解决方案。在做了更多的搜索和大量的猜测和检查后,我发现我仍然可以使用xcodebuild的“archive”选项,我只需要指定一个工作区和方案,显然我之前没有正确地做到这一点的工作原理。
因此,对于寻找类似解决方案的任何人(批量存档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