IOS构建方式 对IOS源码的构建方式主要有两种,最后的目标都是生成.ipa文件
主要差异在于中间产物的不一样
``源码`` -> ``.archive`` -> ``.ipa``1 2 3 4 5 6 7 8 xcodebuild \ -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 xcodebuild -exportArchive \ -exportFormat format \ -archivePath xcarchivepath \ -exportPath destinationpath \ -exportProvisioningProfile profilename \ [-exportSigningIdentity identityname] [-exportInstallerIdentity identityname]
``源码`` -> ``.app`` -> ``.ipa``1 2 3 4 5 6 7 8 xcodebuild \ -workspace ${WORKSPACE_PATH} \ -scheme ${SCHEME} \ -configuration ${CONFIGURATION} \ -sdk ${SDK} \ -derivedDataPath ${OUTPUT_FOLDER} \ clean build
1 2 3 4 5 6 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获取,例如iphoneos和iphonesimulator10.3.2;-configuration:需要打包的配置文件,我们一般在项目中添加多个配置,适合不同的环境,Release/Debug;-exportFormat:导出的格式,通常填写为ipa;-archivePath:.xcarchive文件的路径;-exportPath:导出文件.ipa的路径;-exportProvisioningProfile:profile文件证书;-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 pod repo update pod install