iOS使用xcodebuild生成IPA安装包

我为什么要考虑用xcodebuild命令来打包应用呢?原因有两个。

  • 在iOS实际开发的过程中,我们需要做持续集成(CI),如果每次要自己用xcode来打包,效率太低。这个时候我们就应该写个脚本做这件事。
  • 本着知其然,知其所以然的态度,当xcode每次运行build,archive,run等命令时,我想知道这些操作到底调用了哪些命令

一、xcodebuild命令详细分析

xcodebuild可以完成iOS工程的编译,打包和签名过程。下面我们就来探究一下个xcodebuild, 首先我们打开Terminal运行下面命令,查看xcodebuild的具体说明

1
xcodebuild --help

help

二、模拟xcode的操作

今天我会模拟xcode的三个操作:cleanarchiveexport achive file to ipa file

1. clean

1
2
// 例如 xcodebuild clean -configuration Release -alltargets
xcodebuild clean -configuration <configuration> -alltargets

2. archive

1
2
// 例如 xcodebuild -scheme ToDo -configuration Release -archivePath $PWD/build/ToDo.xcarchive CONFIGURATION_BUILD_DIR=$PWD/build/configuration_build archive
xcodebuild -scheme <schemeName> -configuration <configuration> -archivePath <archivePath> CONFIGURATION_BUILD_DIR=<CONFIGURATION_BUILD_DIR> archive

如果工程使用了 Cocoapods 来管理第三方库

1
2
// 例如 xcodebuild -workspace ToDo.xcworkspace -scheme ToDo -configuration Release -archivePath $PWD/build/ToDo.xcarchive CONFIGURATION_BUILD_DIR=$PWD/build/configuration_build archive
xcodebuild -workspace <workspace> -scheme <schemeName> -configuration <configuration> -archivePath <archivePath> CONFIGURATION_BUILD_DIR=<CONFIGURATION_BUILD_DIR> archive

如果工程使用了Cocoapods来管理第三方库的话,就必须加上-workspace <workspace>
CONFIGURATION_BUILD_DIR目录是用来存放archive过程中的中间文件

3. export achive file to ipa file

准备export options plist文件。
例如:AppStoreExportOptions.plist

1
2
3
4
5
6
7
8
9
10
11
12
<?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>app-store</string>
<key>compileBitcode</key>
<string>YES</string>
<key>uploadSymbols</key>
<string>YES</string>
</dict>
</plist>

具体有哪些key,这些key的值有哪些,可以使用命令xcodebuild --help去查看

1
2
// 例如 xcodebuild -exportArchive -archivePath $PWD/build/ToDo.xcarchive -exportOptionsPlist $PWD/build/AppStoreExportOptions.plist -exportPath $PWD/build
xcodebuild -exportArchive -archivePath <archivePath> -exportOptionsPlist <plist path> -exportPath <exportPath>

这个命令运行完,你就可以在build目录下面看到两个文件(.archive和.ipa)和一个文件夹(cCONFIGURATION_BUILD_DIR)