当前位置: 首页 > news >正文

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问题修复及思考》

相关文章:

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

文章目录 一、前言二、xcodebuild 命令汇总三、xcodebuild 可选命令四、exportOptionsPlist文件内容配置说明五、项目实操六、拓展阅读 一、前言 关于iOS组包&#xff0c;详参博文《ReactNative进阶&#xff08;三十四&#xff09;&#xff1a;Jenkins 流水线 组包 iOS 应用包…...

uniapp 开发之原生Android插件

开发须知 在您阅读此文档时&#xff0c;我们假定您已经具备了相应Android应用开发经验&#xff0c;使用Android Studio开发过Android原生。也应该对HTML,JavaScript,CSS等有一定的了解, 并且熟悉在JavaScript和JAVA环境下的JSON格式数据操作等。 为了插件开发者更方便快捷的开…...

构建第一个JS应用(FA模型)

创建JS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Service对…...

物联网学习2、MQTT 发布/订阅模式介绍

MQTT 发布/订阅模式 发布订阅模式&#xff08;Publish-Subscribe Pattern&#xff09;是一种消息传递模式&#xff0c;它将发送消息的客户端&#xff08;发布者&#xff09;与接收消息的客户端&#xff08;订阅者&#xff09;解耦&#xff0c;使得两者不需要建立直接的联系也不…...

docker--部署 (超详版) (五)

环境准备&#xff1a;docker&#xff0c;mysql&#xff0c;redis&#xff0c;镜像&#xff0c;nginx 把虚拟机打开&#xff0c;连接xshell&#xff0c;参考博客&#xff1a; https://blog.csdn.net/m0_74229802/article/details/136965820?spm1001.2014.3001.5501 一&#x…...

谷粒商城——通过接口幂等性防止重复提交订单

如果用户向后端服务提交多次相同订单的提交服务&#xff0c;那么后端应该只生成一条订单记录。 有一些操作天然是幂等的&#xff0c;如查询操作和删除操作等。 幂等性实现 1.token机制&#xff08;仅这个方法适用于订单的重复提交&#xff09; 后端先生成1个令牌将其记录在R…...

谈谈MVCC机制

在MySQL中&#xff0c;MVCC&#xff08;多版本并发控制&#xff09;是InnoDB存储引擎使用的并发控制机制。它提供对数据的并发访问&#xff0c;并确保多用户环境中数据的一致性和隔离性。 InnoDB通过“Undo log”存储每条记录的多个版本&#xff0c;提供历史记录供读取&#x…...

Linux之用户账号、用户组和与账号有关的系统文件

目录 一、基本介绍 1.用户和用户组 2.UID和GID 二、 账户管理 1.查看用户的UID和GID 2.添加账户 3.删除账号 4.修改账号 5.账户口令 三、分组管理 1.新增用户组 2.删除用户组 3.修改用户组 4.用户组切换 四、与账号有关的系统文件 1./etc/passwd 2./etc/shado…...

mac 安装 pip,如果你的电脑已经有 python3

文章目录 如果没装 如果你的电脑已经有 python3. 安装 pip 执行以下命令&#xff0c; 输入 python3 -m ensurepip --upgrade &#xff0c;按下Enter就大功告成了&#xff01; 安装后查看版本&#xff1a; pip3 -V 如果没装 先安装 python&#xff0c;建议使用 homebrew。 …...

java 枚举

枚举的格式 枚举是一种特殊的类 枚举类的最开始必须罗列所有类型 枚举类提供了一些父类的方法 values() :获取所有的的枚举对象,是一个数组 public enum A {A1, A2, A3;String name;A() {this.name "default";}String getName() {return name;}void setName(Strin…...

Java学习之类和对象、内存底层

目录 表格结构和类结构 表格的动作和类的方法 与面向过程的区别 具体实现 对象和类的详解 类的定义 属性&#xff08;field 成员变量&#xff09; 方法 示例--编写简单的学生类 简单内存分析(理解面向对象) 构造方法(构造器 constructor) 声明格式&#xff1a; 四…...

递归遍历目录结构和树状展现

在D盘下创建文件夹“电影”&#xff0c;在文件夹“电影”下创建“华语”、“好莱坞”&#xff0c;在文件夹“华语”下创建文件“人民的名义.mp4”、“天安门传奇.mp4”、“程序员统治世界.mp4”&#xff0c;在文件夹“好莱坞”下创建文件“国王的演讲.mp4”、“速度与激情8.mp4…...

【C++的奇迹之旅(二)】C++关键字命名空间使用的三种方式C++输入输出命名空间std的使用惯例

文章目录 &#x1f4dd;前言&#x1f320; C关键字(C98)&#x1f309; 命名空间&#x1f320;命名空间定义&#x1f309;命名空间使用 &#x1f320;命名空间的使用有三种方式&#xff1a;&#x1f309;加命名空间名称及作用域限定符&#x1f320;使用using将命名空间中某个成员…...

如何通过针对iOS的动态分析技术绕过反调试机制

在这篇文章中&#xff0c;我们将跟大家介绍和分析一种针对iOS的新型安全研究技术&#xff0c;该技术能够让iOS应用程序的调试过程更加轻松&#xff0c;并解决那些可能会延缓我们步伐的阻碍。 如果你要对一个采用了反调试技术的iOS应用程序或二进制文件进行调试的话&#xff0c;…...

33.Python从入门到精通—Python3 正则表达式 re.match函数 re.search方法 re.match与re.search的区别

33.从入门到精通&#xff1a;Python3 正则表达式 re.match函数 re.search方法 re.match与re.search的区别 Python3 正则表达式re.match函数re.search方法re.match与re.search的区别 Python3 正则表达式 在 Python3 中&#xff0c;可以使用 re 模块来进行正则表达式的匹配和处理…...

便携式气象站是什么

TH-BQX5便携式气象站是一种用于应对突发天气灾害和紧急情况的便携式气象监测设备。它通常包括气温、湿度、气压、风速、风向和降水量等关键气象要素的测量功能&#xff0c;能够快速准确地记录这些气象参数。此外&#xff0c;一些高级的便携式气象站还具备预警功能&#xff0c;当…...

AIGC重塑金融:AI大模型驱动的金融变革与实践

随着人工智能技术的飞速发展&#xff0c;AI大模型在金融领域的应用日益广泛&#xff0c;正在深刻改变着金融行业的面貌。本文将探讨AIGC&#xff08;人工智能与金融结合&#xff09;如何重塑金融&#xff0c;以及AI大模型驱动的金融变革与实践。 AIGC重塑金融的背景与意义 随着…...

TP4054替代DP4054锂电池供电电路保护方案

锂离子电池以其优良的特性&#xff0c;被广泛应用于&#xff1a;手机、摄录像机、笔记本电脑、无绳电话、电动工具、遥控或电动玩具、照相机等便携式电子设备中。 01 电池特点 1、具有更高的重量能量比、体积能量比; 2、电压高&#xff0c;单节锂电池电压为3.6V&#xff0c;等…...

前端JS商品规格组合

给定一个数组 let data [{name: "颜色",specs: ["白色", "黑色"],},{name: "尺寸",specs: ["14寸","15寸", "16寸"],},{name: "处理器",specs: ["i5", "i7", "i9&…...

⾃定义类型:联合和枚举

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 点击主页&#xff1a;optimistic_chen和专栏&#xff1a;c语言&#xff0c; 创作不易&#xff0c;大佬们点赞鼓…...

3分钟掌握9大网盘直链解析:告别限速烦恼的高效下载方案

3分钟掌握9大网盘直链解析&#xff1a;告别限速烦恼的高效下载方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

HDLbits实战解析:从异步复位到同步复位,掌握三段式FSM的核心差异与设计要点

1. 异步复位与同步复位的本质区别 在数字电路设计中&#xff0c;复位信号就像电脑的重启按钮&#xff0c;它能将电路恢复到初始状态。但很多初学者第一次在HDLbits上做FSM练习题时&#xff0c;会被"asynchronous reset"和"synchronous reset"这两个概念搞…...

电子测试安全:示波器浮地测量与隔离变压器应用全解析

1. 项目概述&#xff1a;一次关于测试测量安全的深度探讨又到了周五&#xff0c;对于很多工程师来说&#xff0c;这可能是最想摸鱼但又不得不处理手头棘手问题的一天。想象一下这个场景&#xff1a;你面前摆着一台直接从市电取电的设备&#xff0c;它的某个测试点对地可能有高达…...

ESP32-C3原理图设计避坑指南:从电源到天线,新手最容易忽略的7个细节

ESP32-C3原理图设计避坑指南&#xff1a;从电源到天线&#xff0c;新手最容易忽略的7个细节 第一次接触ESP32-C3原理图设计时&#xff0c;很多开发者会直接参考官方规格书&#xff0c;但实际调试时却发现各种奇怪的问题&#xff1a;电源不稳定导致Wi-Fi断连、复位电路响应迟缓、…...

ESP32内存不够用?手把手教你修改Arduino IDE分区表,榨干16MB Flash

ESP32内存优化实战&#xff1a;深度定制Arduino IDE分区表释放16MB Flash潜力 当你兴致勃勃地为ESP32开发板换上16MB大容量Flash芯片&#xff0c;却发现Arduino IDE仍然报出"内存不足"的错误时&#xff0c;那种挫败感我深有体会。去年我在开发一个智能家居网关项目时…...

算法23,寻找峰值

这是一道经典的二分查找应用题&#xff1a;寻找峰值&#xff08;Find Peak Element&#xff09;。笔记中已经总结了核心逻辑&#xff0c;我将为你梳理其背后的数学原理&#xff08;二段性&#xff09;&#xff0c;并提供标准的代码实现。1. 核心原理&#xff1a;什么是“二段性…...

告别X11!在Ubuntu 22.04上从源码编译Wayland+Weston桌面(保姆级避坑指南)

从X11到Wayland&#xff1a;Ubuntu 22.04源码编译Weston全流程实战 如果你已经受够了X11的老旧架构和偶尔的卡顿&#xff0c;现在是时候拥抱Wayland了。作为Linux桌面图形栈的下一代接班人&#xff0c;Wayland不仅在设计上更现代化&#xff0c;还能带来更流畅的图形体验。本文将…...

Obsidian+Cursor构建AI增强型项目规划与开发一体化工作流

1. 项目概述&#xff1a;构建你的数字项目规划中枢如果你和我一样&#xff0c;同时管理着好几个数字项目——可能是一个新的SaaS产品、一个开源工具&#xff0c;或者一个复杂的个人自动化脚本——你肯定体会过那种信息散落各处的痛苦。产品需求文档在Notion里&#xff0c;技术架…...

[具身智能-694]:万物皆智能,万物皆 ROS2:未来所有带感知、能运动、可交互的硬件终端,都能用 ROS2 做底座,智能普惠全域设备。万物接入 ROS2,就是接入标准化、开源化、互联化的智能时代。

一、为什么说「万物皆智能」从传统机电设备 → 感知 决策 执行一体化&#xff1a;普通家电、工业设备、移动载体、穿戴设备、楼宇设施&#xff0c;都在加传感器、算力、通信、自主决策&#xff0c;不再是被动受控&#xff0c;而是具备自主感知、逻辑判断、联动协作的智能属性…...

如何构建高效的个人游戏串流服务器:Sunshine完整部署指南

如何构建高效的个人游戏串流服务器&#xff1a;Sunshine完整部署指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 在当今数字娱乐时代&#xff0c;游戏玩家面临着设备限制与体验…...