iOS自动打包

利用 xcdeobulid 打包项目

Posted by Keith Lee on April 20, 2017

前言

利用xcode的命令行工具 xcdeobulid 进行项目的编译打包,生成ipa包

现在网上的自动打包教程几乎都还是xcodebuild + xcrun的方式先生成.app包 再生成.ipa包,结果弄了一整天硬是没成功~

后来发现PackageApplication is deprecated,悲剧。然后手动压缩的 .ipa包因为签名问题无法装到手机上。

后来用了archive + -exportArchive终于可以了~

查看项目详情

xcodebuild 的使用可以用 man xcodebuild查看。

我只介绍关键的用法

查看项目详情

xcodebuild -list

打包项目 archive -> ipa

首先需要创建一个AdHocExportOptions.plist文件

添加两个Key-Value

  • merhod : ad-hoc
  • compileBitcode : NO

或者直接复制

<?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>ad-hoc</string>
	<key>compileBitcode</key>
	<false/>
</dict>

打包项目

# 定义变量
workspaceName="xxx.xcworkspace"
scheme="xxx"
configuration="Release"
archivePath="./build/xxx.xcarchive"
exportOptionsPlist="AdHocExportOptions.plist"

# 打包项目 -> .wcarchive
xcodebuild archive -workspace "$workspaceName" -scheme "$scheme" -archivePath "$archivePath"

# 导出 .ipa
xcodebuild -exportArchive -archivePath "$archivePath" -exportPath "./build/" -exportOptionsPlist AdHocExportOptions.plist

若转换ipa时失败,出现

error: exportArchive: No applicable devices found.

Error Domain=IDEDistributionErrorDomain Code=14 "No applicable devices found." UserInfo=0x7ff1a72ddd80 {NSLocalizedDescription=No applicable devices found.}

** EXPORT FAILED **

则执行下面的脚本

#!/bin/bash --login
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
rvm use system

然后继续 xcodebuild -exportArchive

上传到 Fir

因为上面的操作切换了ruby

所以 将ruby切换回来新建一个终端窗口

rvm use default

下载 fir 命令行工具

gem install fir-cli

获取 fir 的 API Token(右上角)

然后上传

# 第一次上传需要 ApiToken
firApiToken="xxx"
ipaPath="xxx.ipa"
fir publish "$ipaPath" -T "$firApiToken"

# 再次上传不需要
fir publish "$ipaPath.ipa"

问题

我将这些脚本写入 .sh 文件执行时,执行到这句话时

rvm use system

会出现如下错误

RVM is not a function, selecting rubies with 'rvm use ...' will not work.

You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for an example.

Google很久无果,知道的朋友望帮忙解决,十分感谢~

本文首次发布于 Keith Lee, 作者 @李良(Keith) ,转载请保留原文链接.