iOS开发fastlane从入门到入土(三):证书管理

match

前言

match是一种全新的证书和配置文件管理工具,它会把所有需要用到的证书传到git私有库上,任何需要配置的机器直接用match同步证书。团队所有成员共享一份代码签名,以减免不必要的证书创建。

本文主要介绍match的使用方法,另外顺带讲一下另外两种证书配置方法cert和sigh。如果你还对Fastlane不了解,请先阅读我上一篇文章《iOS开发fastlane从入门到入土(一):自动打包》


一、CredentialsManager

证书配置之前,必须先讲一下CredentialsManager凭据管理工具。
这个工具主要是提供登录iTunes connect 的凭证,一般在fastlane初始化的时候,如果选择打包到appstore,会提示你添加登录凭证。

命令行方式

  • 添加Credential
fastlane fastlane-credentials add --username felix@krausefx.com
Password: *********
Credential felix@krausefx.com:********* added to keychain.
  • 移除Credential
fastlane fastlane-credentials remove --username felix@krausefx.com
password has been deleted.

使用环境变量

以上方式会将felix@krausefx.com自动存入“钥匙链”,如果你不想存入“钥匙链”可以通过设置环境变量”FASTLANE_DONT_STORE_PASSWORD”为”1”
在.env文件中加入:

  #iTunes connect登录用户名
  FASTLANE_USER = "felix@krausefx.com"
  #iTunes connect登录密码
  FASTLANE_PASSWORD = "xxxxxxx"
  #不存入“钥匙链”
  FASTLANE_DONT_STORE_PASSWORD = "1"

更多详情见github

二、Spaceship

spaceship暴露了 Apple Developer Center 和 iTunes Connect API。这些快速和强大的API已经是 fastlane 的一部分,能够实现更多 fastlane 的高级功能。脚本化 Developer Center 的工作流从未如此简单。
spaceship已经是fastlane的一部分了,很多 fastlane tools 已经使用了 spaceship,比如 sigh, cert, produce, pilot 和 boarding 。

使用

在命令行中尝试运行 fastlane spaceship ,然后就会自动启动 spaceship playground。这要求你使用 sudo gem install pry 安装 pry 。pry 不会默认安装,因为大部分的fastlane用户不需要 spaceship playground 。你可以在 Gemfile 文件里添加 pry 依赖。

两步验证[1]

如果你的苹果账户开启了两步验证,将会自动询问你使用手机进行验证。结果会话将会存储在 ~/.spaceship/[email]/cookie中。这个会话在一个月内是有效的,当然没有办法真的等到一个月后来测试。
使用以下命令生成一个web session:

fastlane spaceauth -u user@example.org

这个将会给你授权,并提供一个会话字符串:

export FASTLANE_SESSION='---\n- !ruby/object:HTTP::Cookie\n  name: DES5c148586dfd451e55afbaaa5f62418f91\n  value: HSARMTKNSRVTWFla1+yO4gVPowH17VaaaxPFnUdMUegQZxqy1Ie1c2v6bM1vSOzIbuOmrl/FNenlScsd/NbF7/Lw4cpnL15jsyg0TOJwP32tC/NguPiyOaaaU+jrj4tf4uKdIywVaaaFSRVT\n  domain: idmsa.apple.com\n  for_domain: true\n  path: "/"\n  secure: true\n  httponly: true\n  expires: 2016-04-27 23:55:56.000000000 Z\n  max_age: \n  created_at: 2016-03-28 16:55:57.032086000 -07:00\n  accessed_at: 2016-03-28 19:11:17.828141000 -07:00\n'

从 ---\n 开始复制所有的东西,然后当做环境变量提供,配置环境变量vim ~/.bash_profile,变量名是 FASTLANE_SESSION,你也可以放在.env里,不过需要去掉export,效果一样。

FASTLANE_SESSION='---\n- !ruby/object:HTTP::Cookie\n  name: myacinfo\n  value: xxx\n'

发包

如果你想通过fastlane上传构建到TestFlight/App Store Connect,你必须生成并使用一个特殊密码:

  1. 访问 appleid.apple.com/account/manage
  2. 生成一个新的特殊密码
  3. 使用环境变量名FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD提供这个特殊密码.

更多详情见github

三、Cert、Sigh使用

Cert

当新证书需要创建时,cert会执行以下步骤:

  • 创建一个新的私钥
  • 创建一个新的签名请求
  • 生成,下载并安装证书
  • 导入所有生成文件到钥匙串中

cert不会撤销您现有的证书。如果您不能创建更多证书,cert将引发异常,这意味着您必须撤销现有的证书之一,以便为新证书腾出空间。
cert无法从Apple Developer Portal下载现有证书+私钥,因为私钥永远不会离开您的计算机。
示例如下:

  lane :create_cert do
    cert(
      username: ENV['APPLE_ID'], # Apple ID
      team_id: ENV['TEAM_ID'], # Team ID
      development: true, # 创建一个开发证书
      force: "false", # 即使存在现有证书,也要创建证书,默认为false
      filename: "dev_cert", # 存储文件名
      output_path: "./certs/development", # 存储所有证书和私钥的目录的路径
    )
  end

更多cert的详细用法,请参考cert doc

Sigh

Sigh可以创建、更新、下载和修复配置文件(使用一个命令)。它支持App Store、Ad Hoc、Development 和 Enterprise,并支持一些不错的功能,比如自动添加所有测试设备。
你可以通过下面这行命令列出本地安装的所有provisioning profiles:

fastlane sigh manage

也可以删除所有失效的provisioning profiles:

fastlane sigh manage -e

provisioning profiles所在目录:~/Library/MobileDevice/Provisioning Profiles。
你可以使用ProvisionQL在Finder中快速预览profiles文件,使用brew cask install provisionql快速安装。

使用示例如下:

lane :create_adhoc_profile do
        #如果没有在Apple Developer创建证书的话,get_certificates会帮你自动创建证书
        sigh(
            username: ENV['APPLE_ID'], # APPle ID
            team_id: ENV['TEAM_ID'], # team ID
            app_identifier: ENV['APP_IDENTIFIER'], # bundle id
            # cert_id: xxx, # 使用的证书id
            provisioning_name: 'com.xx.FastLane_AdHoc', # 开发者中心上面的描述文件名称
            ignore_profiles_with_different_name: true, # 与provisioning_name参数联合使用,true:当描述文件名称完全匹配provisioning_name时才下载,false:不完全匹配也下载
            force: true, # 更新描述文件并忽略其状态,同时自动为ad hoc profiles添加所有设备
            filename: "xxx.mobileprovision", # 存储文件名
            output_path: "./profiles/adhoc", # 存储的路径
            skip_install: false, # 默认会自动添加证书到你的本地机器上,设置该参数可以跳过该步骤
            # development: false,  # 更新开发证书而不是生产证书
            # readonly: true, # 只获取,不生成新的
            adhoc: true # true:生成AdHoc profiles,false:生成App Store Profiles
        )
  end

更多sigh的详细用法,请参考sigh doc

四、Match

建议使用这种方式管理证书,在使用match管理证书前,要先注册一个私有仓库,名字官方建议为certificates,本文管理仓库放在码云上。

初始化

进入项目目录执行

fastlane match init

系统会提示输入git仓库的链接,需确保当前账户有git仓库的访问权限。执行完成后会在fastlane目录下生成一个Matchfile文件,里面保存着你刚才输入的git仓库链接,以后操作match,会默认读取该URL。

git_url("https://gitee.com/xxx/certificates.git")

storage_mode("git")

type("development") # The default type, can be: appstore, adhoc, enterprise or development

# app_identifier(["tools.fastlane.app", "tools.fastlane.app2"])
# username("user@fastlane.tools") # Your Apple Developer Portal username

# For all available options run `fastlane match --help`
# Remove the # in the beginning of the line to enable the other options

# The docs are available on https://docs.fastlane.tools/actions/match

删除旧证书和pp文件

官方建议通过命令清除之前的证书和描述文件,毕竟我们想从一个干净的环境出发。
企业账号慎用,销毁描述文件可能会导致App无法打开。

fastlane match nuke development  ---开发证书
fastlane match nuke distribution ---apple store 和 adhoc使用此命令  ​
fastlane match nuke enterprise  ---企业证书

生成证书和pp文件

lane :manageCert do
    match(
      git_url: "path",  # 指定包含所有证书的git私有仓库地址
      #git_branch: "branch", # 指定所使用的git分支
      type: "appstore",  # 指定创建证书的类型,可用选项:appstore, adhoc, development, enterprise
      username: ENV['APPLE_ID'], # APPle ID
      team_id: ENV['TEAM_ID'], # team ID
      app_identifier: ["tools.fastlane.app", "tools.fastlane.sleepy"],  # 程序的bundle identifier(s),多个时用逗号分隔
      readonly: true,  # true:仅获取已经存在的证书和描述文件,而不生成新的
      force: true,  # 每次执行match时,是否更新描述文件
      force_for_new_devices: true,  # 当Apple Developer Portal上的设备数量发生变化时,是否更新描述文件
      output_path: "./certs/development", # 导出的证书密钥以及profile文件路径
      verbose: true # 打印详细信息
    )
end

首次执行时,会要求输入一个密码,用来对证书进行加密,后续其他机器获取证书时使用该密码进行解密,输入密码后继续按照终端提示进行下一步操作,match会创建新的证书和描述文件,之后执行会拉取仓库已经存在的。
完成后,git仓库就会生成对应的certs及profiles文件夹来存放证书和配置文件。

注册新设备

  • 注册单台设备
fastlane run register_device
  • 注册多台设备
  desc "注册设备"
  lane :add_devices do
      register_devices(
        #devices_file: "./devices.txt",  # 指定包含设备信息的文件路径,文件具体格式参考https://devimages.apple.com.edgekey.net/downloads/devices/Multiple-Upload-Samples.zip
        devices: {
          "Luka iPhone 6" => "1234567890123456789012345678901234567890",
          "Felix iPad Air 2" => "abcdefghijklmnopqrstvuwxyzabcdefghijklmn"
        },  # 指定要注册的设备列表,格式为:设备名称 => UDID
        username: "xx@apple.com"  # 设置Apple ID
      ) 
  end

团队管理

关掉Automatically manage signing,使用手动管理证书。
新成员接入时,执行以下命令获取对应的证书文件:

fastlane match development --readonly
fastlane match adhoc --readonly
fastlane match appstore --readonly

更多match的详细用法,请参考match doc

五、PEM

如果需要有效的推送配置文件,pem将创建新的.pem、.cer和.p12文件。pem不包括将文件上载到服务器。

lane :notification_cert do
      pem(
        development: true,  # true:更新开发推送证书,false:更新生产推送证书
        generate_p12: true,  # 生成p12和pem文件
        force: true, # true:即使旧推送描述文件依然可用,仍然创建新的推送描述文件
        app_identifier: 'com.apple.xxx', # Bundle ID,
        save_private_key: true, #保存RSA私钥
        p12_password: '123456',  # 所生成p12文件的密码
        pem_name: 'notifier', #pem文件名
        username: ENV['APPLE_ID'],
        team_id: ENV['TEAM_ID'],
        output_path: "./certs/development",
        new_profile: proc do |profile_path|  # 如果生成了新的推送描述文件,该block会被调用
          puts profile_path  # 新的PEM文件的绝对路径
          # 添加上传PEM文件到服务器的代码
        end
      )
  end

  1. 两步验证的处理办法 ↩

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容