Jenkins CI/CD 持续集成专题九 -Mac服务器上配置Jenkins实现iOS项目自动打包

为什么非要用Mac服务器?

很多团队最初可能和我一样,试图在Linux 服务器上实现iOS打包,但最终会发现这条路走不通。根本原因在于:iOS打包依赖Xcode及其相关工具链(如xcodebuild),而这些工具只能在macOS系统上运行。网上大部分关于Jenkins + iOS的教程,也都是基于Mac服务器环境的。因此,如果你还在Linux上折腾iOS打包,建议尽快转向Mac环境。

环境与前提

服务器:macOS

项目依赖:CocoaPods

目标:通过Jenkins实现iOS项目自动拉取代码、更新依赖、编译并生成ipa包

一、Jenkins安装(macOS)

在Mac上安装Jenkins非常简便,推荐使用Homebrew:

复制代码
brew install jenkins

安装完成后,根据提示启动即可。例如临时测试可运行:

复制代码
jenkins

启动后访问 http://localhost:8080 即可进行初始化配置。由于安装不是本文重点,具体步骤可参考其他通用教程。

二、Jenkins任务配置(以"Shanlincaifu"项目为例)

  1. 创建自由风格项目

任务名称:例如"Shanlincaifu"

勾选 "丢弃旧的构建",设置保留策略(例如:保持构建天数3天,最大保留个数30)

  1. 源码管理

选择 Subversion(SVN),填写项目仓库地址。如果Jenkins未授权,会在错误提示处提供填写凭证(用户名/密码)的入口。

  1. 添加Shell脚本(用于CocoaPods依赖更新)

由于项目使用CocoaPods,需在编译前更新Pod依赖。

添加构建步骤 → Execute Shell

在命令框中输入(请根据实际路径修改):

复制代码
#!/bin/bash
cd /Users/xieqiang/.jenkins/jobs/Shanlincaifu/workspace
pod update --verbose --no-repo-update

注意:该步骤必须放在"源码拉取"之后,"Xcode编译"之前。可通过拖拽调整顺序。

  1. 添加Xcode构建步骤

添加构建步骤 → Xcode

(1)General build settings

Target:可不填(尤其适用于多Target项目)

Clean before build?:Yes

勾选 Pack application and build .ipa?

.ipa filename pattern:自定义输出名称,如 Shanlincaifu-${BUILD_NUMBER}

Output directory:设置ipa输出目录,如 /Users/xieqiang/build_output/

(2)Code signing & OS X keychain options

Code Signing Identity:填写对应的签名标识,可在Xcode项目的 Build Settings → Code Signing → Code Signing Identity 中查看。若未配置,需提前申请证书与描述文件。

Embedded Profile:填写描述文件路径,如 /Users/xieqiang/shanlincaifu/cer/Shanlincaifu_Development.mobileprovision

(3)Advanced Xcode build options

Xcode Schema File:对于CocoaPods工程,需指定主项目的Schema。可通过以下命令查看:

复制代码
xcodebuild -list -workspace ShanLinCaiFu.xcworkspace

本例填写:ShanLinCaiFu

如果是非CocoaPods项目,可使用:

复制代码
xcodebuild -list -project ShanLinCaiFu.xcodeproj

SYMROOT:设置编译输出目录,如 /Users/xieqiang/.jenkins/jobs/Shanlincaifu/workspace/build

Custom xcodebuild arguments:添加参数

复制代码
CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist

这是为了解决Xcode打包时签名失败的一个常见问题(据称为xcodebuild的bug),也可在Xcode项目文件中设置。

Xcode Workspace File:填写Workspace名称(如 ShanLinCaiFu)。若为普通项目,则在 Xcode Project File 中填写 .xcodeproj 名称。

三、开始构建

完成上述配置后,即可执行构建。Jenkins的构建日志非常详细,若遇到问题,可优先查看日志输出,定位错误环节。

总结:

  • 环境选择:iOS打包必须在macOS上进行,勿在Linux上浪费时间。
  • 依赖处理:使用CocoaPods的项目,需在Xcode编译前通过Shell脚本执行 pod update。
  • 签名配置:确保证书与描述文件已正确配置,并在Jenkins中填写对应路径。
  • Schema指定:多Target或CocoaPods工程需明确指定主Schema。
  • 签名Bug处理:通过 CODE_SIGN_RESOURCE_RULES_PATH 参数避免签名失败。
相关推荐
传奇开心果编程3 小时前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
supabc1234 小时前
Celium:连接 Windows、Mac、Linux 与 Android,让远程访问和设备管理更简单
android·linux·windows·macos·远程访问·网络管理·celium
牛奔4 小时前
Mac 精准安装指定 macOS 版本完整教程(升级 + 降级通用)
macos
海盗12344 小时前
AI 新闻日报 2026-10-05:三周重构 30 万行 / macOS 给智能体加权限锁 / 具身订单结构被摆上台面
人工智能·macos·重构·机器人·人工智能aigc
青柠之夏cc1 天前
Kotlin Multiplatform:一次编写,全平台运行,2026 年跨平台开发的 “最优解”?
macos·objective-c·cocoa
事圆则缓1 天前
Android 使用 Jenkins 实现 CI/CD,并用 SonarQube 建立质量门禁
android·ci/cd·jenkins
黑科技iOS上架2 天前
iOS framework/dylib动态库定向加固实战
macos·ios·objective-c·cocoa·审核·ios混淆·执行程序差异化
神奇的小猴程序员3 天前
苹果Mac电脑玩我的世界没有版本?用PCL-R即可!
macos
灵韵aura3 天前
macOS 的指令缩写
macos
行者-全栈开发4 天前
【码动四季·秋】从 commit 到发版全自动:Conventional Commits + semantic-release 发布流水线实战
git·ci/cd·自动化发布·atomgit·semantic-releas·语义化版本自动化·git 提交规范落地