iOS自动打包

389 阅读1分钟

本文是在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,集成很容易,官方文档介绍也简便易懂 蒲公英文档