iOS开发进阶(十四):xcodebuild 命令应用详解

文章目录

一、前言

关于iOS组包,详参博文《ReactNative进阶(三十四):Jenkins 流水线 组包 iOS 应用包 ipa Archive 阶段报错error: Multiple commands produce问题修复及思考

二、xcodebuild 命令汇总

查看xcodebuild简洁用法

powershell 复制代码
xcodebuild -usage

查看已安装的SDK

powershell 复制代码
xcodebuild -showsdks

查看项目中的TargetsConfigurationsSchemes

powershell 复制代码
xcodebuild
-list
[[-project <projectname>]|[-workspace <workspacename>]] 

清除编译过程生成文件

objectivec 复制代码
xcodebuild clean
-workspace <xxx.workspace>
-scheme <schemeName>
-configuration <Debug|Release>
-sdk<sdkName>

编译命令:

objectivec 复制代码
xcodebuild build
-workspace <xxx.workspace>
-scheme <schemeName>
-configuration <Debug|Release>
-sdk<sdkName>

编译并生成.xcarchive包:

objectivec 复制代码
xcodebuild archive
-archivePath <archivePath> #生成的.xcarchive包存放路径
-workspace <XXX.xcworkspace>
-scheme <schemeNmae> #从-list命令中获取
-configuration <Debug|Release>
-sdk <sdkName> #sdkName可从showsdks命令中获取

将生成的.archive包导出成ipa文件:

objectivec 复制代码
xcodebuild  -exportArchive
-archivePath <archivePath> #.archive文件的全路径 eg: .../.../XXX.xcarchive
-exportPath <exportPath> #ipa文件导出路径
-exportOptionsPlist <exportOptionsPlistPath> #exportOptionsPlist文件全路径 eg: .../.../XXX.plist,这个plist文件可以通过打一次ipa包里面去获取,然后根据需求修改

三、xcodebuild 可选命令

xcodebuild可选命令如下:

可选命令 命令说明
-usage 查看xcodebuild简洁的用法
-help 查看帮助
-verbose 提供额外的状态输出
-license 显示Xcode和SDK许可协议
-checkFirstLaunchStatus 检查是否有任何初启动任务需要执行
-project NAME 编译项目名称,例如:xcodebuild -project XXX.xcodeproj
-target NAME 编译目标名称
-targets 编译全部目标
-workspace NAME 编译工作空间名称
-scheme NAME 编译计划名称
-configuration NAME 为构建每一个目标使用build配置名称
-xcconfig PATH 在PATH作为替代应用文件中定义的构建设置
-arch ARCH 建立每个目标的架构ARCH;这将覆盖在项目中定义的架构
-sdk SDK 使用指定的SDK编译项目
-toolchain NAME 使用工具链与标识或名称
-destination DESTINATIONSPECIFIER 使用由目标说明(用逗号分隔的一系列的key =描述目的地使用值对)中描述的目的地
-destination-timeout TIMEOUT 等待TIMEOUT秒,而搜索的目标设备
-parallelizeTargets 建立并行独立目标
-jobs NUMBER 指定并发生成操作的最大数量
-dry-run 做一切,除了实际运行的命令
-hideShellScriptEnvironment 不显示在构建日志shell脚本中的环境变量
-showsdks 显示已安装的SDK的列表
-showBuildSettings 显示构建设置和值的列表
-list 列出了在一个工作空间中的一个项目的目标和配置,或方案
-find-executable NAME 在所提供的SDK和工具链显示的完整路径可执行文件名称
-find-library NAME 在所提供的SDK和工具链显示的完整路径库名
-version 显示的Xcode的版本;与-sdk将显示一个或所有已安装的SDK信息
-enableAddressSanitizer YES/NO 测试时打开或关闭地址过滤
-resultBundlePath PATH 指定在描述什么发生了捆绑的结果将被放置的目录
-derivedDataPath PATH 指定的目录中生成产品和其他衍生数据会
-archivePath PATH 被指定任何创建的档案将被放置的目录,或应导出存档
-exportArchive 指定归档应导出
-exportOptionsPlist PATH 指定用于配置归档导出plist文件的路径
-enableCodeCoverage YES/NO 打开代码覆盖率或关闭时的测试
-exportPath PATH 指定从存档导出的产品的目标
-skipUnavailableActions 指定不能执行计划的行动应被跳过而不是导致失败
-exportLocalizations 出口完成优秀项目本地化
-importLocalizations 进口本地化项目,假设任何必要的本地化资源在Xcode中已创建
-localizationPath 指定XLIFF本地化文件路径
-exportLanguage 规定包括在本地化出口多个可选ISO 639-1语言

四、exportOptionsPlist文件内容配置说明

Key 类型 value 说明
compileBitcode Bool For non-App Store exports, should Xcode re-compile the app from bitcode? Defaults to YES 对于非App Store的出口,应重新编译Xcode中从bitcode应用程序?默认为YES
embedOnDemandResources AssetPacksInBundle Bool For non-App Store exports, if the app uses On Demand Resources and this is YES, asset packs are embedded in the app bundle so that the app can be tested without a server to host asset packs. Defaults to YES unless onDemandResourcesAssetPacksBaseURL is specified 对于非App Store的出口,如果应用程序使用按需的资源,这是YES,资产包被嵌入在应用程序包,使应用程序可以在没有服务器托管资产包进行测试。默认为YES除非指定onDemandResourcesAssetPacksBaseURL
iCloudContainerEnvironment For non-App Store exports, if the app is using CloudKit, this configures the "com.apple.developer.icloud-container-environment" entitlement. Available options: Development and Production. Defaults to Development 对于非App Store的出口,如果应用程序使用CloudKit,这种配置"com.apple.developer.icloud容器环境"的权利。可用选项:开发和生产。默认为发展
manifest Dictionary For non-App Store exports, users can download your app over the web by opening your distribution manifest file in a web browser. To generate a distribution manifest, the value of this key should be a dictionary with three sub-keys: appURL, displayImageURL, fullSizeImageURL. The additional sub-key assetPackManifestURL is required when using on demand resources 对于非App Store的出口,用户可以通过在Web浏览器中打开您的分发清单文件下载你的应用程序在网上。要生成分布明显,此键的值应该是有三个子键的字典:appURL,displayImageURL,fullSizeImageURL。额外的子键assetPackManifestURL是按需使用资源时,需要。
method String Describes how Xcode should export the archive. Available options: app-store, ad-hoc, package, enterprise, development, and developer-id. The list of options varies based on the type of archive. Defaults to development Xcode中描述如何导出存档。可用选项:应用程序商店,即席,包装,企业发展,开发人员ID。选项列表会有所不同根据存档的类型。默认为发展
onDemandResourcesAssetP acksBaseURL String For non-App Store exports, if the app uses On Demand Resources and embedOnDemandResourcesAssetPacksInBundle isn't YES, this should be a base URL specifying where asset packs are going to be hosted. This configures the app to download asset packs from the specified URL 对于非App Store的出口,如果应用程序使用按需资源embedOnDemandResourcesAssetPacksInBundle不是YES,这应该是一个基本URL指定,其中资产包将要举行。该配置应用从指定的URL下载资产包
teamID String The Developer Portal team to use for this export. Defaults to the team used to build the archive 开发者门户网站团队使用这个出口。默认为球队用来建立档案
thinning String For non-App Store exports, should Xcode thin the package for one or more device variants? Available options: <none> (Xcode produces a non-thinned universal app), <thin-for-all-variants> (Xcode produces a universal app and all available thinned variants), or a model identifier for a specific device (e.g. "iPhone7,1"). Defaults to <none> 对于非App Store的出口,Xcode中应该薄包一个或多个设备的变种?可用选项:<无>(Xcode中产生的非变薄普遍的应用程序),<薄参加的所有变体>(Xcode中产生一个通用的应用程序以及所有可用的变薄变型),或针对特定设备型号标识(例如" iPhone7,1")。默认为<无>
uploadBitcode Bool For App Store exports, should the package include bitcode? Defaults to YES 对于App Store的导出,应包包括bitcode?默认为YES
uploadSymbols Bool For App Store exports, should the package include symbols? Defaults to YES 对于App Store的出口,应包包含符号?默认为YES

exportOptionsPlist文件示例如下:

xml 复制代码
<?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>compileBitcode</key>
    <false/>
    <key>method</key>
    <string>development</string>
    <key>provisioningProfiles</key>
    <dict>
        <key>com.669.yanyou</key>
        <string>yanyou_dev</string>
    </dict>
    <key>signingCertificate</key>
    <string>F13EE282147D6ED2CD5ACEEF20476B39C87AEAAC</string>
    <key>signingStyle</key>
    <string>manual</string>
    <key>stripSwiftSymbols</key>
    <true/>
    <key>teamID</key>
    <string>HW9U4B8YY9</string>
    <key>thinning</key>
    <string><none></string>
</dict>
</plist>

五、项目实操

objectivec 复制代码
cd ios_sec

# 打包生成 xcarchive 文件
xcodebuild archive -workspace test.xcworkspace -scheme test -configuration Release -archivePath bin/test.xcarchive

# 根据 xcarchive 文件进行签名
xcodebuild -exportArchive -archivePath bin/test.xcarchive -exportOptionsPlist test/package.plist -exportPath ../production/iOS

六、拓展阅读

相关推荐
SoraLuna7 小时前
「Mac玩转仓颉内测版10」PTA刷题篇1 - L1-001 Hello World
算法·macos·cangjie
iFlyCai8 小时前
Xcode 16 pod init失败的解决方案
ios·xcode·swift
_可乐无糖13 小时前
mac终端使用pytest执行iOS UI自动化测试方法
macos·pytest
后端常规开发人员15 小时前
在 Mac 上使用 Docker 安装宝塔并部署 LNMP 环境
macos·docker·容器·宝塔
郝晨妤17 小时前
HarmonyOS和OpenHarmony区别是什么?鸿蒙和安卓IOS的区别是什么?
android·ios·harmonyos·鸿蒙
Hgc5588866617 小时前
iOS 18.1,未公开的新功能
ios
nukix18 小时前
Mac Java 使用 tesseract 进行 ORC 识别
java·开发语言·macos·orc
CocoaKier18 小时前
苹果商店下载链接如何获取
ios·apple
SoraLuna19 小时前
「Mac玩转仓颉内测版7」入门篇7 - Cangjie控制结构(下)
算法·macos·动态规划·cangjie
Algorithm157620 小时前
mac上使用docker搭建gitlab
macos·docker·gitlab