惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
有赞技术团队
有赞技术团队
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
博客园 - 【当耐特】
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
The Cloudflare Blog
Microsoft Azure Blog
Microsoft Azure Blog
腾讯CDC
Vercel News
Vercel News
IT之家
IT之家
MyScale Blog
MyScale Blog
博客园_首页
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
罗磊的独立博客

isaced

使用 TypeScript 构建的 appstore-connect-sdk 归档 我用 SwiftUI 写了一个 V2ex 客户端 Docker 容器化多应用部署 Swift Server-side SDWebImage 为什么无法读取 webpmux 生成的 WebP 动图? [译] 探索 Swift 4 中新的 String API 对一个 Django 站点做 ab 压力测试 fir-mac 开发笔记 iOS10 Safari 引导用户信任企业签名 Swift Web 开发之 Vapor - 模版 Leaf(三) Swift Web 开发之 Vapor - 路由(二) HoloLens 初体验 Swift Web 开发之 Vapor - 入门(一) iOS HOOK 注入与重签名 Xcode 使用 Configuration 来配置不同的项目环境 图床从SAE迁移到七牛 给 UIProgressView 脱掉那层微弱的渐变 初用 CocoaAsyncSocket 记一次 SQLite 性能优化 有多色 - 开发小记 海岛风情 - 泰国普吉岛六日游 EGOCache 源码解析 日语五十音假名临摹校验算法 [iOS] UITextView 追加文字自动跳到顶部解决方法 Cocoa 新的依赖管理工具:Carthage 新年快乐! 博客主机换到搬瓦工 写了个iOS小游戏:有多色 iOS 后台任务之 Long-running background task
Jenkins for iOS 搭建日记
2016-08-11 · via isaced

一直以来被 iOS 项目打包困惑,速度慢、操作复杂,深恶痛绝!于是开始寻求网络上的持续集成服务,前两天尝试了下 buddybuild、bitrise,都不太如意(可能是姿势不太对),正好公司有台空着的 Mac mini,刚好可以拿来试试搭个 Jenkins 服务器做持续集成,网络上有很多 Jenkins 安装教程,这里就不重复了,主要记录一下我在使用过程中遇到的问题和解决方法,希望未来某一天能帮到同样被困惑的人儿。

再说点闲言碎语,关于 iOS 的打包的进阶历程,最早没接触这些东西的时候是每次手动在 Xcode 上 Archive -> Organizer -> Export,必须守在电脑前,中间操作步骤也很多,特别是在 Organizer 里面签名,很容易就出现证书或者 PP(Provisioning Profiles) 文件不正确之类的问题;后来知道了 fastlane,写好脚本用 gym 一键打包,感觉生活品质上了一个量级;后来了解到持续集成,比如 Jenkins,项目丢服务器上去,推送代码自动打包、分发、推送提醒,体验更上一层楼。

遇到的问题

Unable to unlock the keychain.

可能遇到错误 User interaction is not allowed ,那么你可能需要在 script 里先执行一下这一行命令来给 keychain 解锁:

security unlock-keychain -p "YourPassword" ~/Library/Keychains/login.keychain

然后可以用这行来验证是否解锁成功:

security show-keychain-info ${HOME}/Library/Keychains/login.keychain

因为在 Jenkins script 里没有输入交互,如果不在命令中跟上 -p 密码的话是会失败的。

Cocoapods 依赖更新失败

通常需要在编译项目前执行 pod install 来安装依赖,如果你的 Podfile 里引用了私有 pod,如果通过 https 访问的话,那么一般在终端中会自动提示输入对应 git 访问账号密码,可是在 jenkins 里没有输入交互,所以这时候之后在 jenkins 和 git 里配置正确的私钥-公钥才能正确访问,并且 Podfile 里的地址改为 git 打头才行。

如果还是想用 https 访问的话另外有个取巧的简单,就是 ssh 进去 jenkins 用户,手动 pod install 一遍,手动输入账号信息,系统则会记录下来,下次就不会再提示,从而在 jenkins 里也能正常。

一些小技巧

编译成功 iMessage 通知

一般编译成功后大家可能会设定发送邮件通知,其实也可以直接通过 AppleScript 发送一条 iMessage 信息,还挺好玩的。

在构建步骤的 script 里可能会是这样:

osascript -e 'tell application "Messages" to send "'"${scheme}(${BUILD_DISPLAY_NAME}) build complete."'" to buddy "test@test.com" of (service 1 whose service type is iMessage)'

这个地方被困惑的是在 Shell 里调用 osascript -e ,为了引入 jenkins 的 environment variables ,写的时候单双引号已经快要把我整残废了。 最终就可以在你的 iPhone 上收到 iMessage 提醒,效果如下图:

iMessage

编译成功 fir 上传

可以在编译成功后提交 .ipa 到 fir,通过 fir.im-cli 上传,或者安装 fir-jenkins 插件

fir publish ${ipa_path} -T YOUR_TOKEN