Shell脚本打包

xcrun PackageApplication 方式在Xcode升级到8.3已就过期了,苹果建议我们使用 xcodebuild -exportArchive的方式。

我们平时通过Xcode执行 Run 命令,生成iPa的中间主要分为两个大的步骤:

  • xcodebuild archive 生成ProjectName..xcarchive文件
  • xcodebuild -exportArchive 将1步骤中的.xcarchive生成ipa安装包
  • 打包脚本编写

    创建一个 xcodebuild.sh 用来编写脚本如下:

    #!/bin/bash
    ZWProjectName="TestProj"
    ZWScheme="TestProj"
    ZWConfiguration="Release"
    ZWDate=`date +%Y%m%d_%H%M`
    ZWWorkspace=`pwd`
    echo "workspace=$ZWWorkspace-----------------------"
    ZWBuildDir="$ZWWorkspace/build"        #build路径
    ZWBuildTempDir="$ZWBuildDir/temp/$ZWDate"    #构建过程中的文件
    HCIpaDir="$ZWBuildDir/ipa"                                #生成ipa文件路径
    #-------PackageApplication已经不推荐使用了 warning: PackageApplication is deprecated, use `xcodebuild -exportArchive` instead.-----
    xcodebuild archive \
    -workspace "$ZWWorkspace/$ZWProjectName.xcodeproj/project.xcworkspace" \
    -scheme "$ZWScheme" \
    -configuration "$ZWConfiguration" \
    -archivePath "$ZWBuildTempDir/$ZWProjectName.xcarchive"
    #CODE_SIGN_IDENTITY="" #证书
    #PROVISIONING_PROFILE="" #描述文件UUID
    xcodebuild \
    -exportArchive \
    -archivePath "$ZWBuildTempDir/$ZWProjectName.xcarchive" \
    -exportPath "$HCIpaDir/$ZWDate/" \
    -exportOptionsPlist "./exportOptionsPlist.plist" \
    #CODE_SIGN_IDENTITY="" #证书
    #PROVISIONING_PROFILE="" #描述文件UUID
    

    对于证书文件与描述文件我们可以添加,如果这里没有填写,那么会默认按着xcode的当前配置。如果你想在这里配置,可通过下面的方式来获取CODE_SIGN_IDENTITY与PROVISIONING_PROFILE对应的内容。

    CODE_SIGN_IDENTITY的获取

    在钥匙串找到我们的证书,右键显示简介,可查看对应证书的CODE_SIGN_IDENTITY

    PROVISIONING_PROFILE的获取

    描述文件UUID的获取,安装的的描述文件在电脑的安装路径/Users/haifeng/Library/MobileDevice/Provisioning Profiles。点击对应的证书预览中就可以看到UUID。

    exportOptionsPlist.plist

    对于通过xcodebuild -exportArchive方式生成ipa需要一个exportOptionsPlist.plist文件。主要描述了打包的一些信息。这个可能随着xcode版本会变化,我们可以通过第一次使用Xcode手动打包一次生成不止ipa还有一个ExportOptions.plist的文件。我们只需要将这个文件名修改exportOptionsPlist.plist就可以了。

    执行脚本自动化打包

    Xcode配置

    在执行脚本之前确保一下配置

  • 当前编译配置release
  • 由于我这里没有开发者账号密码 我手动配置
    配置完后编译项目不存在报错就可以了,可以继续下面的流程。
  • 将我们编写的xcodebuild.sh与exportOptionsPlist.plist放在Project.xcodeproj的同目录下,终端执行脚本。

    这里我在生成ipa的工程中报错,发现不会主动创建ipad文件夹原因导致,这里我展示通过手动在build目录下创建ipa文件夹解决的。

    我这里通过蒲公英进行发布。这是在上面的脚本添加了蒲公英官方文档中的分发脚本。

    #通过蒲公英提供的上传应用 API,调用系统的 curl 命令来上传应用。
    FilePath="$HCIpaDir/$ZWDate/${ZWScheme}.ipa"
    UKey="User key" #开发者的用户 Key,在应用管理-API中查看
    ApiKey="API key" #是开发者的 API Key,在应用管理-API中查看 注意不是APPKey
    chmod -R 777 "${FilePath}"
    curl \
    -F "file=@${FilePath}" \
    -F "uKey=${UKey}" \
    -F "_api_key=${ApiKey}" \
    https://www.pgyer.com/apiv2/app/upload
    

    关于蒲公英uKey与_api_key的获取在应用管理-API中查看 注意不是应用的APPKey

    再次执行脚本,终端最终输出如下,就代表上传应用成功。