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

文章目录

    • 一、前言
    • 二、xcodebuild 命令汇总
    • 三、xcodebuild 可选命令
    • 四、exportOptionsPlist文件内容配置说明
    • 五、项目实操
    • 六、拓展阅读

一、前言

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

二、xcodebuild 命令汇总

查看xcodebuild简洁用法

xcodebuild -usage

在这里插入图片描述

查看已安装的SDK

xcodebuild -showsdks

在这里插入图片描述

查看项目中的TargetsConfigurationsSchemes

xcodebuild
-list
[[-project <projectname>]|[-workspace <workspacename>]] 

在这里插入图片描述

清除编译过程生成文件

xcodebuild clean
-workspace <xxx.workspace>
-scheme <schemeName>
-configuration <Debug|Release>
-sdk<sdkName>

编译命令:

xcodebuild build
-workspace <xxx.workspace>
-scheme <schemeName>
-configuration <Debug|Release>
-sdk<sdkName>

编译并生成.xcarchive包:

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

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

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说明
compileBitcodeBoolFor non-App Store exports, should Xcode re-compile the app from bitcode? Defaults to YES对于非App Store的出口,应重新编译Xcode中从bitcode应用程序?默认为YES

embedOnDemandResources

AssetPacksInBundle

BoolFor 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容器环境”的权利。可用选项:开发和生产。默认为发展
manifestDictionaryFor 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是按需使用资源时,需要。
methodStringDescribes 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 developmentXcode中描述如何导出存档。可用选项:应用程序商店,即席,包装,企业发展,开发人员ID。选项列表会有所不同根据存档的类型。默认为发展

onDemandResourcesAssetP

acksBaseURL

StringFor 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下载资产包
teamIDStringThe Developer Portal team to use for this export. Defaults to the team used to build the archive开发者门户网站团队使用这个出口。默认为球队用来建立档案
thinningStringFor 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“)。默认为<无>
uploadBitcodeBoolFor App Store exports, should the package include bitcode? Defaults to YES对于App Store的导出,应包包括bitcode?默认为YES
uploadSymbolsBoolFor App Store exports, should the package include symbols? Defaults to YES对于App Store的出口,应包包含符号?默认为YES

exportOptionsPlist文件示例如下:

<?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>

五、项目实操

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

六、拓展阅读

  • 《ReactNative进阶(三十四):Jenkins 流水线 组包 iOS 应用包 ipa Archive 阶段报错error: Multiple commands produce问题修复及思考》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/511406.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何提bug?

很多公司都有提bug的标准&#xff0c;对于新人刚介入测试行业时&#xff0c;提bug的时候&#xff0c;描述的清晰与否就很重要&#xff0c;那一个很明朗清晰的bug应该包含那些呢&#xff1f; bug包含的要素有那些&#xff1f;&#xff08;以jira工具为例&#xff09; 1、项目名…

LeetCode每日一题之专题一:双指针 ——移动零

移动零OJ链接&#xff1a;283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 解法&#xff08;快排的思想&#xff1a;数组划分区间-数组分两块&#xff09;&#xff1a; 算法思路&#xff1a;在本题中&#xff0c;我们可以用一个 dest 指针来扫描整个数组…

应用方案 | 内置ALC的音频前置放大器D2538A和D3308芯片

一、应用领域 D2538A和D3308是芯谷科技推出的两款内置ALC&#xff08;音频限幅器&#xff09;的前置音频放大器芯片&#xff0c;其中D2538A为单通道&#xff0c;D3308为双通道&#xff0c;它特别适用于胎心仪、个人医疗防护、立体声收录机、盒式录音机等涉及音频放大与限幅的产…

Java游戏开发基础:从零开始搭建自己的游戏之《人生重开模拟器》简易版

一、引言 人生重开模拟器游戏是一种虚拟角色扮演游戏&#xff0c;玩家通过控制一个虚构的角色&#xff0c;体验与现实生活中不同的选择和结果。玩家的决策将影响角色的生活轨迹&#xff0c;包括他们的职业生涯、社交关系、健康和财富等方面。 游戏的乐趣在于提供了一个虚拟的沙…

1.JavaEE进阶篇 - 为什么要学习SpringBoot呢?

文章目录 1.为什么要学框架&#xff1f;2.框架的优点展示(SpringBoot VS Servlet)2.1 Servlet 项⽬开发2.1.1 创建项⽬2.1.2 添加引⽤2.1.3 添加业务代码2.1.4 运⾏项⽬(配置tomcat)2.1.5 Maven配置2.1.5.1修改本地Maven仓库地址2.1.5.2 配置settings.xml文件2.1.5.3项目 本地仓…

LeetCode 19.删除链表的倒数第N个结点

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&#x…

大数据实验一,Hadoop安装及使用

目录 一&#xff0e;实验内容 二&#xff0e;实验目的 三&#xff0e;实验过程截图及说明 1、安装SSH&#xff0c;并配置SSH无密码登录 2、配置java环境 3.Hadoop的安装与配置 4、修改四个配置文件&#xff1a; 5、格式化HDFS的NameNode&#xff1a; 6、启动Hadoop 7、…

Polardb MySQL 产品架构及特性

一、产品概述; 1、产品族 参考&#xff1a;https://edu.aliyun.com/course/3121700/lesson/341900000?spma2cwt.28120015.3121700.6.166d71c1wwp2px 2、polardb mysql架构优势 1&#xff09;大容量高弹性&#xff1a;最大支持存储100T&#xff0c;最高超1000核CPU&#xff0…

PEFT-LISA

LISA是LoRA的简化版&#xff0c;但其抓住了LoRA微调的核心&#xff0c;即LoRA侧重更新LLM的底层embedding和顶层head。 根据上述现象&#xff0c;LISA提出两点改进&#xff1a; 始终更新LLM的底层embedding和顶层head随机更新中间层的hidden state 实验结果 显存占用 毕竟模型…

游戏引擎之高级动画技术

一、动画混合 当我们拥有各类动画素材&#xff08;clips&#xff09;时&#xff0c;要将它们融合起来成为一套完整的动画。 最经典的例子就是从走的动画自然的过渡到跑的动画。 1.1 线性插值 不同于上节课的LERP&#xff08;同一个clip内不同pose之间&#xff09;&#xff…

STM32学习和实践笔记(4):分析和理解GPIO_InitTypeDef GPIO_InitStructure (c)

第二个成员变量是GPIOSpeed_TypeDef GPIO_Speed&#xff1b;也与int a一样同理。 GPIOSpeed_TypeDef是一个枚举类型&#xff0c;其定义如下&#xff1a; typedef enum { GPIO_Speed_10MHz 1, GPIO_Speed_2MHz, GPIO_Speed_50MHz }GPIOSpeed_TypeDef; #define IS_GPI…

STM32-03基于HAL库(CubeMX+MDK+Proteus)输入检测案例(按键控制LED)

文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式&#xff0c;生成代码四、MDK打开生成项目&#xff0c;编写HAL库的按键检测代码五、运行仿真程序&#xff0c;调试代码 一、功能需求分析 搭建完成开发STM32开发环境之后&#xff0c;开始GPIO…

vue结合Elempent-Plus/UI穿梭框更改宽度以及悬浮文本显示

由于分辨率不同会导致文本内容显示不全&#xff0c;如下所示&#xff1a; 因此需要 1、悬浮到对应行上出现悬浮信息 实现代码如下所示&#xff1a; 这里只演示Vue3版本代码&#xff0c;Vue2版本不再演示 区别就在插槽使用上Vue3使用&#xff1a;#default“”&#xff1b;Vu…

R统计实战:详解机器学习Adaboost的操作步骤与应用

一、引言 机器学习是人工智能的核心领域之一&#xff0c;其重要性体现在其能够从数据中自动学习并改进的能力上。在实际问题中&#xff0c;机器学习已经被广泛应用于各个领域&#xff0c;包括但不限于金融、医疗、电子商务、社交网络等。例如&#xff0c;在金融领域&#xff0c…

spark shuffle 补充概念

spark shuffle 我们在前面的文章说过&#xff0c;所谓shuffle&#xff0c;就是spark RDD的一种宽依赖关系&#xff0c;父RDD的数据会发送给多个子RDD spark中Map和Reduce概念 在Shuffle过程中.提供数据的称之为Map端(Shuffle Write)接收数据的称之为Reduce端(Shuffle Read)&…

使用Excel连接Azure DevOps自动退出的问题

Azure DevOps Server (原名TFS)是微软公司的软件开发管理平台&#xff0c;也是著名的软件开发过程管理工具&#xff1b;系统中记录了软件开发过程中的需求、问题、缺陷和迭代计划等各种软件开发工作项数据。 对于工作项数据的批量操作(例如新增和编辑)&#xff0c;Excel是一个非…

springcloud基本使用五(Gateway服务网关)

为什么使用网关&#xff1f; 权限控制&#xff1a;网关作为微服务入口&#xff0c;需要校验用户是是否有请求资格&#xff0c;如果没有则进行拦截。 路由和负载均衡&#xff1a;一切请求都必须先经过gateway&#xff0c;但网关不处理业务&#xff0c;而是根据某种规则&#xff…

【Python面试题收录】Python的可变对象与不可变对象

一、可变对象与不可变对象的定义 在Python中&#xff0c;对象的可变性是指对象的内部状态&#xff08;值&#xff09;是否允许在对象创建后发生改变。根据这一特性&#xff0c;Python的数据类型可以分为两大类&#xff1a;可变对象&#xff08;mutable objects&#xff09;和不…

某音乐平台歌曲信息逆向之webpack扣取

逆向网址 aHR0cHM6Ly95LnFxLmNvbS8 逆向链接 aHR0cHM6Ly95LnFxLmNvbS9uL3J5cXEvc29uZ0RldGFpbC8wMDJkdzRndjFabWlHdA 逆向接口 aHR0cHM6Ly91Ni55LnFxLmNvbS9jZ2ktYmluL211c2ljcy5mY2c 逆向过程 请求方式&#xff1a;POST 逆向参数 sign zzbd8c72309rdslvlnjwk8pthj2lw462f12…

Linux系统---进程间通信与管道入门

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、进程间通信 1.进程间通信的目的 1.数据传输&#xff1a;一个进程需要把他的数据传给另外一个进程。 2.资源共享&…