在少数需求下,需要能够自动打包,将app发布到不同的平台,那么下面给出本人使用的自动打包脚本:
# 以下内容到分割线是,需要针对每个项目进行配置的部分
buildDay=$(date +%Y%m%d)
buildTime=$(date +%Y%m%d%H%M)
#签名证书
CODE_SIGN_IDENTITY="证书"
# 描述文件名
PROVISIONING_PROFILE="描述文件"
# 打包版本类型
CONFIGURATION="Release"
# sdk类型设置
SDKType="iphoneos"
#
TARGET="项目的target(一般情况下,target和scheme相同,故下面scheme使用也是此处的target)"
packPath="archive/${buildDay}"
#0:仅使用xcodebuild打包
#1:使用xcodebuild、xctool进行打包
#2:使用xcodebuild、xrun进行打包
styleType=0
# 使用plist进行打包
Export_Plist_Path="ExportOptions.plist"
# 需要将ipa文件上传到蒲公英需要配置
# 蒲公英官网用户Key
USER_KEY="fc2747215a5ae2ddc5e8af2ee97428ce"
# 蒲公英官网API Key
API_KEY="b5fa58c30058e0812f70446300c4903e"
# xcarchive文件的路径
archivePathName="${packPath}/${TARGET}_${buildTime}.xcarchive"
# app文件的路径
appPathName="${packPath}/${TARGET}_${buildTime}"
# ipa文件的路径
ipaPathName="${packPath}/${TARGET}_${buildTime}"
# 使用xcrun方式打包时,ipa文件的路径
xcrunIpaPathName="$(pwd)/$ipaPathName.ipa"
# 分割线
# --------------------------------------------------------
projectName="${TARGET}.xcodeproj"
workspaceName="${TARGET}.xcworkspace"
# if [[ -d "$projectName" ]]; then
if [[ ! -d "$workspaceName" ]]; then
echo "project exist"
xcodebuild -project $projectName -target ${TARGET} CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" clean
else
echo "workspace exist"
xcodebuild -workspace $workspaceName -scheme ${TARGET} CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" clean
fi
if [ $styleType -lt 2 ]; then
echo "by using xcodebuild、xctool"
if [ $styleType -eq 0 ]; then
if [[ ! -d "$workspaceName" ]]; then
echo "project exist"
xcodebuild -project $projectName -scheme ${TARGET} -archivePath $archivePathName CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" -configuration $TARGET archive
else
echo "workspace exist"
xcodebuild -workspace $workspaceName -scheme ${TARGET} -archivePath $archivePathName CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" -configuration $TARGET archive
fi
else
# //clean下工程
# xctool -scheme ${TARGET} -configuration $TARGET clean
# //对项目进行Archive, 将xcarchive文件导出到指定目录
xctool -scheme ${TARGET} -configuration $TARGET archive -archivePath $archivePathName
fi
#使用下面一行命令生成ipa文件时,文件可以正常生成,但是不能安装到设备上
# 可能是因为xcodebuild最新版本的原因,因为在最新版本xcodebuild -exportArchive -exportFormat IPA 在xcodebuild -h查看文档的时候已经没有
# xcodebuild -exportArchive -exportFormat IPA -archivePath $archivePathName -exportPath $ipaPathName -configuration $CONFIGURATION CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${PROVISIONING_PROFILE}"
#使用下面一行命令可以生成ipa文件时,文件可以生成,
#之前ExportOptions因为添加了teamID和method,两条属性,导致出现如下错误
# Error Domain=IDEDistributionErrorDomain Code=1 "The operation couldn’t be completed. (IDEDistributionErrorDomain error 1.)"
# google找到这个 http://stackoverflow.com/questions/32841300/xcodebuild-exportarchive-exportoptionsplist-error-for-key-method-expected-o
# 按照这个问题解答,删除teamID,可以顺利完成打包
xcodebuild -exportArchive -exportOptionsPlist $Export_Plist_Path -archivePath $archivePathName -exportPath $ipaPathName CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${PROVISIONING_PROFILE}"
else
echo "by using xcodebuild、xrun"
if [[ ! -d "$workspaceName" ]]; then
echo "project exist"
# 此处由于一直设置CONFIGURATION_BUILD_DIR=$appPathName,
# 把CoreAnimation、.app.dSYM文件设置放在一个文件夹
# 并且将这个文件夹命名为.app文件, 根据这个.app文件进行打包
# 导致生成了ipa文件,但是无法安装,
xcodebuild -project $projectName -scheme ${TARGET} CONFIGURATION_BUILD_DIR=$appPathName CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" -configuration $TARGET
else
echo "workspace exist"
xcodebuild -workspace $workspaceName -scheme ${TARGET} CONFIGURATION_BUILD_DIR=$appPathName CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" -configuration $TARGET
fi
# 此处使用xcrun进行打包
xcrun --sdk $SDKType -v PackageApplication "$appPathName/$TARGET.app" -o $xcrunIpaPathName
fi
# 将ipa文件上传到蒲公英官网
# curl -F "file=@${ipaPathName}" -F "uKey=${USER_KEY}" -F "_api_key=${API_KEY}" http://www.pgyer.com/apiv1/app/upload
echo "\n all action done"