前言
利用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) ,转载请保留原文链接.