背景
- 将1个应用从[A个人账号]迁移到[B公司企业账号]
发生的问题
- 线上应用接收不到推送;
- 新版本所涉及到的开发证书需要重建;
推送篇
- 问题的原因是:推送服务所配置的key没有重新新建过,重新在新账号下新建推送所需要的key,然后重新配置一下就能解决;
证书篇
- 这个应用之前涉及到了AppGroups的概念,这个经过大量阅读其他文档资料以及亲自操作验证,可以在旧账号上把原来所涉及到AppGroups的appid给先删掉,然后在新账号里面重新创建,能够解决问题并且不会影响到线上已经下载过的用户;
- 开发证书要重新创建,这个主要看下面的Fastlane篇,但实际没解决问题,最后实际操作是按这段记录去重新生成解决问题的;

- 另外其他有个暗坑是:我在旧打包机上使用了新的账号证书,但还是一直编译报错无法通过,提示找不到库之类的报错,查了很久资料不知道为什么,后来插上真机运行就好了,可能是没插真机的时候是用模拟器,模拟器的话有些依赖会找不到吧。
Fastlane篇
Fastlane篇-概述
- 官方文档: docs.fastlane.tools/
- 简介: Fastlane是用Ruby语言编写的一套自动化工具集和框架, 每一个工具实际都对应一个Ruby脚本, 用来执行某一个特定的任务, 而Fastlane核心框架则允许使用者通过类似配置文件的形式, 将不同的工具有机而灵活地结合在一起, 从而形成一个个完整的自动化流程。
- 原理: Fastlane命令执行的底层并不是自己实现的, 而是调用其他的插件或者工具执行的;
- 核心一. 打包命令, fastlane中的gym工具只是xcodebuild工具的一个封装. 因此安装fastlane的步骤里有安装IDE的指令集;
- 核心二. iTC(即iTunesConnect苹果的账号证书应用管理平台)命令. 苹果除了提供图形化可操作的网页之外, 还提供相对应的一整套底层API给开发者使用, fastlane的底层操作是封装的这套API。
Fastlane篇-match
git_url("git@git.demo.com:demo/client/ios/certificates.git")
git_branch("feature/demo")
storage_mode("git")
type("development")
app_identifier(["com.xxxx.a","com.xxxx.a.share"])
clone_branch_directly true
force_for_new_devices true
- 创建目录结构
certificates
certs
development
{certid}.cer
{certid}.p12
distribution
{certid}.cer
{certid}.p12
profiles
adhoc
AdHoc_{bundleid}.mobileprovision
appstore
AppStore_{bundleid}.mobileprovision
development
Development_{bundleid}.mobileprovision
match_version.txt
- 找到现有证书的certid
require 'spaceship'
Spaceship.login('xxxxxx@xxx.com')
Spaceship.select_team
Spaceship.certificate.all.each do |cert|
cert_type = Spaceship::Portal::Certificate::CERTIFICATE_TYPE_IDS[cert.type_display_id].to_s.split("::")[-1]
puts "Cert id: #{cert.id}, name: #{cert.name}, expires: #{cert.expires.strftime("%Y-%m-%d")}, type: #{cert_type}"
end
- 加密证书和配置文件
a.需要将[证书和配置文件]加密后, 才能符合match的验证要求;
b.加密证书
执行 [openssl pkcs12 -nocerts -nodes -out key.pem -in {证书}.p12] 生成.pem文件
执行 [openssl aes-256-cbc -k {密码} -in key.pem -out {certid}.p12 -a] 生成加密后的p12
执行 [openssl aes-256-cbc -k {密码} -in {证书}.cer -out {certid}.cer -a] 生成加密后的cer
c.加密配置文件
配置文件起名需要符合规则 {Development/AdHoc/AppStore/InHouse}_{bundleid}.mobileprovision
执行 [openssl aes-256-cbc -k {密码} -in xxxx.mobileprovision -out Development_xxxx.mobileprovision -a]
- 上传加密后的证书和配置文件
将加密后的文件放到对应的文件目录内,push到远端仓库内。
- 验证证书的有效性
执行 [fastlane match development
Fastlane篇-参考资料