本文是在mac环境下进行的用shell进行自动打包,实现了一键化打包并且传递到蒲公英、自己的oss服务器、Appstore等
环境准备
实验的项目是swift工程,用了cocoapods管理三方库,其中包含了部分flutter模块,所以在机器上的环境变量要配置比较多,cocoapods、flutter等
xcodebuild
xcodebuild是苹果开源的打包脚本指令
在终端输入man xcodebuild可以查看详细指令,或者查看苹果开发者文档
这次打包是用到2个指令
1、清空缓存
xcodebuild clean -workspace ${__PROJECT_NAME}.xcworkspace \
-scheme ${__SCHEME_NAME} \
-configuration $TYPE
_PROJECT_NAME:项目名称 _SCHEME_NAME:构建名称 TYPE:打包类型(Debug, Release),注意开头要大写
2、构建archive
xcodebuild archive -workspace ${__PROJECT_NAME}.xcworkspace \
-scheme ${__SCHEME_NAME} \
-configuration $TYPE \
-archivePath ${__EXPORT_ARCHIVE_PATH} \
CFBundleVersion=${BundleShortVersion} \
-destination generic/platform=ios
_EXPORT_ARCHIVE_PATH:导出的目录 BundleShortVersion:版本号
3、导出ipa包
xcodebuild -exportArchive -archivePath ${__EXPORT_ARCHIVE_PATH} \
-exportPath ${__EXPORT_IPA_PATH} \
-destination generic/platform=ios \
-exportOptionsPlist ${__EXPORT_OPTIONS_PLIST_PATH} \
-allowProvisioningUpdates
_EXPORT_OPTIONS_PLIST_PATH:导出的包所用的证书位置
注意点
1、plist证书
由于不同环境要用不用的证书,所有我们需要首先把这些plist放在一个目录下,然后通过指令去访问这个地址,不同证书打包进ipa包里,证书可以先用手动打包生成的目录去查看,然后按照稍加更改,放进打包证书目录里。注意这里的证书要在打包的机器上的钥匙串上有的,并且受信任。
2、ruby环境
安装cocoapods会下载ruby环境,但是这个环境在xcode13打包会报error: exportArchive: The data couldn’t be read because it isn’t in the correct format. 原因是ruby版本缺少sqlite3环境,解决的办法是删除ruby环境,改用系统的ruby环境
gem list|grep sqlite3
gem install sqlite3 --platform=ruby
rvm use system --default
使用完系统的ruby环境要重新安装cocoapods,不要再去安装ruby环境,不然会陷入循环报错,直接sudo gem install cocoapods --user-install
3、版本问题 xcode13打包会报remark: Incremental compilation has been disabled: it is not compatible with whole module optimization,需要把所有的第三方库最低版本设置到iOS11,自动打包就需要添加指令在podfile里
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
end
end
end
上传到oss
# 当前时间
DateValue=$(env LANG=en_US.UTF-8 date -u "+%a, %d %b %Y %T GMT")
# 请求数据类型
ContentType="application/octet-stream"
# 路径
Resource="/${BucketName}/${key}"
# 字符串
StringToSign="PUT\n\n${ContentType}\n${DateValue}\n${Resource}"
# 加密
Sign=$(**echo** -en "${StringToSign}" | openssl sha1 -hmac ${AccessKeySecret} -binary | base64)
# 开始请求
Result=$(curl -i -q -X PUT -T "${file}" \
-H "Host: ${Host}" \
-H "Date: ${DateValue}" \
-H "Content-Type: ${ContentType}" \
-H "Authorization: OSS ${AccessKeyId}:${Sign}" \
-H "Accept: */*" \
"https://${Host}/${key}")
上传到蒲公英
蒲公英有用fastlane快速集成的方法,只要安装了fastlane,集成很容易,官方文档介绍也简便易懂 蒲公英文档