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

iOS 构建配置与 AdHoc 打包说明

iOS 构建配置与 AdHoc 打包说明

1. 背景

在 iOS 项目中,通常需要支持 多个环境的构建和分发,比如:

  • 开发环境 (Debug) → 本地调试
  • 内测环境 (AdHoc) → 提供 QA / 产品经理测试
  • 预发布环境 (AdHoc_Release) → 和正式版配置一致,但通过 AdHoc 分发
  • 正式环境 (Release) → 上架 App Store

为了方便 CI/CD 和团队协作,我们在项目中自定义了 AdHocAdHoc_Release 配置。


2. 各构建配置的区别

配置名称用途证书/Provisioning Profile典型分发方式日志 & 调试优化
Debug本地开发调试开发证书 (Development)Xcode 直接运行✅ 开启日志无优化
AdHoc内测分发AdHoc 证书绑定 UDID,蒲公英/企业分发✅ 可保留少量日志接近 Release
AdHoc_Release预发布(灰度)AdHoc 证书绑定 UDID,蒲公英❌ 关闭日志与 Release 相同
Release正式上架 App StoreApp Store 发行证书App Store❌ 关闭日志最大优化

3. Xcode Archive 默认使用哪个配置?

  • 默认情况下,Product → Archive 使用 当前 Scheme 的 Archive 配置
  • 通常是 Release,可以在
    Product → Scheme → Edit Scheme → Archive → Build Configuration
    修改为 AdHocAdHoc_Release

命令行可直接指定:

xcodebuild archive \-workspace MyApp.xcworkspace \-scheme MyApp \-configuration AdHoc \-archivePath build/MyApp-AdHoc.xcarchive

AdHoc 包的特殊要求和实现方案

为了方便测试人员区分 内测包正式包,我们为 AdHoc 包添加 带“开发”角标的 App Icon


✅ 实现方案

1. 在项目中添加两个 AppIcon 集合
  • AppIcon → 正式版 icon
  • AppIcon-Dev → 内测版 icon(在 icon 上加“开发”水印/角标)

Xcode 中结构示例:
Assets.xcassets/
├── AppIcon.appiconset # 正式版
└── AppIcon-Dev.appiconset # 内测版(带开发角标)
AppIcon-Dev 里的每个 PNG 带有角标,比如右上角写“开发版”。


2. 在 Build Settings 中区分配置使用的 Icon 名称
  1. 进入 TARGETS → Build Settings → Packaging → Asset Catalog App Icon Set Name
  2. 为不同的构建配置指定不同的 icon 集合:
  • ReleaseAppIcon
  • AdHoc / DebugAppIcon-Dev

可以用 .xcconfig 管理,示例:

// Debug.xcconfig & AdHoc.xcconfig
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon-Dev// Release.xcconfig & AdHoc_Release.xcconfig
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon
  1. 在 Scheme 或 CI/CD 里指定配置
    • 内测分发(AdHoc)
	xcodebuild archive \-scheme MyApp \-configuration AdHoc \-archivePath build/MyApp-AdHoc.xcarchive

生成的 IPA 会自动使用 AppIcon-Dev

•	正式发布(Release)
	xcodebuild archive \-scheme MyApp \-configuration Release \-archivePath build/MyApp-Release.xcarchive

✅ 最终效果
• AdHoc 内测包
• 安装后桌面 icon 右上角有 “开发”标识
• 方便测试人员快速区分内测和正式版
• Release 正式包
• 使用正常 icon,无任何角标

http://www.xdnf.cn/news/15623.html

相关文章:

  • Spring Boot整合阿里云OSS企业级实践:高可用文件存储解决方案
  • 川翔云电脑:云端算力新标杆,创作自由无边界
  • javax.servlet.http.HttpServletResponse;API导入报错解决方案
  • LeetCode热题100【第二天】
  • Linux 基础学习
  • MySQL安全修改表结构、加索引:ON-Line-DDL工具有哪些
  • 安装wsl-Ubuntu到D盘
  • 模型材质一键替换~轻松还原多种三维场景
  • Qt软键盘
  • 河南萌新联赛2025第(一)场:河南工业大学(补题)
  • python脚本调用 ffmpeg 针对MP3转通道
  • 数分思维:02——京东app产品分析
  • mysql学习笔记
  • 力扣119:杨辉三角Ⅱ
  • Kotlin密封类
  • 独家|理想汽车放弃华为PBC模式,回归OKR理想汽车
  • 常用API
  • 输尿管下段积水预测与手术决策支持技术方案
  • 现在遇到一个问题 要使用jmeter进行压测 jmeter中存在jar包 我们还要使用linux进行发压,这个jar包怎么设计使用
  • iOS App 电池消耗管理与优化 提升用户体验的完整指南
  • Unity VR多人手术模拟恢复2:客户端移动同步问题分析与解决方案
  • 华为P30/pro (ELE-AL00) 鸿蒙4.2降级 EMUI 9
  • npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1
  • C++性能优化与现代工程实践:打造高效可靠的软件系统
  • 部署-k8s和docker、jenkins的区别和联系
  • 深入理解 SemaphoreSlim 在.NET Core API 开发中的应用
  • Spring Boot整合阿里云OSS:企业级文件存储最佳实践
  • 贪心算法思想草稿
  • Spring AI之Prompt开发
  • Perspective:一款开源的交互式分析和数据可视化组件