0%

IOS打包命令

IOS构建方式

对IOS源码的构建方式主要有两种,最后的目标都是生成.ipa文件

  • 源码 -> .archive文件 -> .ipa文件

  • 源码 -> .app文件 -> .ipa文件

主要差异在于中间产物的不一样

``源码`` -> ``.archive`` -> ``.ipa``
1
2
3
4
5
6
7
8
# build archive file from source code
xcodebuild \ # xctool
-workspace ${WORKSPACE_PATH} \
-scheme ${SCHEME} \
-configuration ${CONFIGURATION} \
-sdk ${SDK}
-archivePath ${archive_path}
archive

archive:对编译结果进行归档,会生成一个.xcarchive的文件,位于-archivePath指定的目录中。需要注意的是,对模拟器类型的sdk无法使用archive命令。

1
2
3
4
5
6
7
8
# export ipa file from .archive
xcodebuild -exportArchive \
-exportFormat format \
-archivePath xcarchivepath \
-exportPath destinationpath \
-exportProvisioningProfile profilename \
[-exportSigningIdentity identityname]
[-exportInstallerIdentity identityname]
``源码`` -> ``.app`` -> ``.ipa``
1
2
3
4
5
6
7
8
# build .app file from source code
xcodebuild \ # xctool
-workspace ${WORKSPACE_PATH} \
-scheme ${SCHEME} \
-configuration ${CONFIGURATION} \
-sdk ${SDK} \
-derivedDataPath ${OUTPUT_FOLDER} \
clean build
1
2
3
4
5
6
# convert .app file to ipa file
xcrun \
-sdk iphoneos \
PackageApplication \
-v ${OUTPUT_FOLDER}/Release-iphoneos/xxx.app \
-o ${OUTPUT_FOLDER}/Release-iphoneos/xxx.ipa

参数说明

  • -workspace:需要打包的workspace,后面接的文件一定要是.xcworkspace结尾的;
  • -scheme:需要打包的Scheme,一般与$project_name相同;
  • -sdk:区分iphone device和Simulator,可通过xcodebuild -showsdks获取,例如iphoneosiphonesimulator10.3.2
  • -configuration:需要打包的配置文件,我们一般在项目中添加多个配置,适合不同的环境,Release/Debug
  • -exportFormat:导出的格式,通常填写为ipa
  • -archivePath.xcarchive文件的路径;
  • -exportPath:导出文件.ipa的路径;
  • -exportProvisioningProfileprofile文件证书;
  • -derivedDataPath:指定编译结果文件的存储路径;例如,指定-derivedDataPath ${OUTPUT_FOLDER}时,将在项目根目录下创建一个${OUTPUT_FOLDER}文件夹,生成的.app文件将位于${OUTPUT_FOLDER}/Build/Products/${CONFIGURATION}-iphoneos中。
  • -v:指定.app文件的路径;
  • -o:指定.ipa文件的路径

获取打包必要信息

在填写target/workspace/scheme/configuration等参数时,如果不知道该怎么填写,可以在项目根目录下执行xcodebuild -list命令,它会列出当前项目的所有可选参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
╭─taoyi at TaoYi-Mac in /opt/Jenkins/Home/workspace/Coding-iOS on 89d7084✘✘✘ using ‹› 17-08-18 - 1:08:10
╰─⠠⠵ xcodebuild -list
Information about project "Coding_iOS":
Targets:
Coding_iOS

Build Configurations:
Debug
Release

If no build configuration is specified and -scheme is not passed then "Release" is used.

Schemes:
Coding_iOS

处理Cocoapod依赖库

另外一个需要注意的是,若项目是采用Cocoapod管理项目依赖,每次拉取最新代码后直接编译可能会报错。这往往是因为其他同事更新了依赖库(新增了第三方库或升级了某些库),而本地还采用之前的第三方库进行编译,从而会出现依赖库缺失或版本不匹配等问题。
应对的做法是,在每次build之前都更新一下Cocoapod

1
2
3
4
# Update pod repository
pod repo update
# Install pod dependencies
pod install