这是一篇关于XCode自动打包的文章以及xcodebuild, xrun两种打包方法写法。
自动打包的文章非常非常多了,我写这篇也没什么新意,只是因为有了Android那篇,所以也得有iOS的。
忽略这篇文章的名字,也是因为上篇起了这个名字。。。
1.xrun方法:
##########################################################################################
buildtype=sample-ol
hosturl=https://xxx.xxx.xxx
##########################################################################################
#拷贝替换资源
#需要拷贝的资源路径
resource_path=/Users/Compass/Package/Resource/${buildtype}/resource.zip
current_dir=$(pwd)
echo $current_dir
cd $current_dir
cd ..
cd WReader/Sample
workspace_pathbase=$(pwd)
echo $workspace_pathbase
#根据当前shell所在位置,获取到的工程代码路径
workspace_path=${workspace_pathbase}/Sample
echo ======Begin Build=========
#resource在工程里的路径
resource_workpath=${workspace_path}/resource.zip
#拷贝资源到工程路径,强制替换
cp ${resource_path} ${resource_workpath}
##########################################################################################
# 指定ipa的输出位置
ipa_path=/Users/Compass/Package/app/$(date +%Y%m%d)
# 配置文件的位置,修改配置文件里的某些参数
config_plist=${workspace_path}/Resource/config.plist
# 修改config
/usr/libexec/PlistBuddy -c "Set:hosturl ${hosturl}" ${config_plist}
# 清空上一次的文件夹
rm -rf ${workspace_pathbase}/Build
# 进入要工作的文件夹
cd ${workspace_pathbase}
# 打包项目名字
scheme_name=Sample
# ipa名字
ipa_name=${buildtype}
# 打包使用的证书
CODE_SIGN_IDENTITY="iPhone Distribution: Beijing XXXXXX XXXXXX, XXXXXX."
# 打包使用的描述文件
PROVISIONING_PROFILE="XXXX-XXXX-XXXX-XXXX-XXXXXXXXX"
# 指定app的输出位置 也就是Demo中build文件夹的位置
build_path=${workspace_pathbase}/Build
# 生成app
xcodebuild -project ${workspace_path}.xcodeproj -target ${scheme_name} -configuration Release clean -sdk iphoneos build CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${PROVISIONING_PROFILE}" SYMROOT="${build_path}"
mkdir /Users/Compass/Package/app/$(date +%Y%m%d)
xcrun -sdk iphoneos -v PackageApplication ${build_path}/Release-iphoneos/Sample.app -o ${ipa_path}/${ipa_name}.ipa
echo ======End Build=========
其实关键只有两步,上面一大堆都是找路径和拷贝资源文件的:
# 1.build app
xcodebuild -project ${workspace_path}.xcodeproj -target ${scheme_name} -configuration Release clean -sdk iphoneos build CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${PROVISIONING_PROFILE}" SYMROOT="${build_path}"
# 2.生成ipa
xcrun -sdk iphoneos -v PackageApplication ${build_path}/Release-iphoneos/Sample.app -o ${ipa_path}/${ipa_name}.ipa
其中,打包需要的证书,描述文件如果不知道在哪里看,打开xcodeproj/project.pbxproj,以文本方式打开:
CODE_SIGN_IDENTITY的地方:
PROVISIONING_PROFILE的地方:
image.png
用xrun打包的时候,其实使用的是PackageApplication工具,但是这个工具在XCode8.2.1(好像是这个版本)以后就没有了,所以,如果报找不到这个工具的错误,可以参照这位同学方法放回去:
http://blog.csdn.net/itiapp_home/article/details/70241011
用xrun打包成功之后,会有一个警告:
warning: PackageApplication is deprecated, use `xcodebuild -exportArchive` instead.
因此,如果我们不用xrun打包,还有其他的方法,就是使用xcodebuild exportArchive:
2.xcodebuild导出ipa:
# 指定exportplist位置
export_plist=${workspace_path}/Resource/exportplist.plist
# 1.清空
xcodebuild clean -project ${workspace_path}.xcodeproj -target ${scheme_name}
# 2.指定输出xcarchive路径,打包xcarchive
archivepath=${build_path}/Archive/Sample.xcarchive
xcodebuild archive -project ${workspace_path}.xcodeproj -scheme ${scheme_name} -configuration Release -archivePath ${archivepath}
# 2.输出ipa
xcodebuild -exportArchive -archivePath ${archivepath} -exportPath ${ipa_path} -exportOptionsPlist ${export_plist}
其中exportplist里的内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>enterprise</string>
<key>teamID</key>
<string>xxxxxxx</string>
</dict>
</plist>
method是打包的类型,文档上有ad-hoc,enterprise等几种值,我这里使用的是enterprise.其他值不清楚的大家搜一下文档。
其实这几个值,也可以在shell里编译的时候自动写值,写入方法参照上面plist写入方法。
TeamID的值是DEVELOPMENT_TEAM的值:
两种方法我都测过了,都可以打包成功。
因为我不需要使用蒲公英等平台,所以其他就不介绍了。
有一点小郁闷:因为iOS打包的时候,developer和distribution的包使用的证书是不一样的,每次编译的时候,需要手动选一下证书,否则可以和android一样一键搞定,连IDE都不用打开了。
网友评论