Fastlane构建ipa包流程小结 -- match 篇

来源:互联网 发布:江西省公务员待遇知乎 编辑:程序博客网 时间:2024/04/29 05:24
其实fastlane要利用一个现有的p12文件打一个ipa包出来,主要是分为以下两个步骤:


1. 利用match获取该p12文件对应的证书(certificates)、私有秘钥、预配配置文件(provisioning profiles);
2. 使用gym出一个ipa包;


上面的是我们的构建的步骤,不过在构建的时候还是会遇见一些问题的,以下的便是我们的具体的操作流程;


1. match的话是在给出一个现有的apple id之后match通过这个apple id登录苹果开发者后台,然后根据配置文件生成
* 证书(certificates)
* 预配配置文件(provisioning profiles)


还有一个文件,私有秘钥,那只能是在具体的机器上面的


在生成了这三个文件以后,match除了会让用户设置一个密码,然后安装到现在的机器上面之外,match还会做一件事,就是把那三个文件加密上传到一个git服务器上面。


这样子做会有一个好处,也就说,接下来我想在别的机器上面使用现有的签名,秘钥,预配配置文件的话,只要写入一样的match配置文件,这样以来,我们在第一次运行match这个命令的时候,只要在之后的交互界面输入之前写的密码,就直接可以安装上面所说的三个文件了,这样子的话,就可以满足之后的打包需求了。




下面的是我们的放在fastlane文件夹里面的match的配置文件Matchfile










那其实现在是有一个问题的,我们上面所说的都是在没有那三个文件的基础上生成那三个文件,但是如果现在已经有一个现有的p12文件的话,那我们又应该怎么操作呢?




我们可以分析一下,我们需要的是哪三个文件


1. 证书(certificates)
2. 上面那个证书对应的私有秘钥
3. 预配配置文件(provisioning profiles)


对于某个预配配置文件还有证书的话,我们完全是可以直接在苹果后台直接下载到的
证书




预配配置文件




而秘钥的话,我们其实是可以在p12文件里面分离出来的
可以用下面的手段分离




提取私钥:
openssl pkcs12 -in test.p12 -nocerts -out key.pem
清除秘钥中的密码(在把秘钥部署到某些服务器上时可能需要清除密码)
openssl rsa -in key.pem -out newkey.pem




好了这下子我们就有了上面提到的三个文件


这个三个文件分别对应match的repo底下的三个文件


只不过match的那三个文件和我们这里的三个文件是不一样的


有以下三点不一样


1. 他们的存放路径是不一样的


然后我们看一下match对应的git的repo里面的文件结构


这个是刚刚那个的git repo的文件的目录结构。
注意我把它下载到我电脑上面的【/Users/1q84/Desktop/momo_decrypt_match】的路径底下
对应的远端的repo是【git@git.yodo1.cn:huangchangtao/fastlane-match.git】


下面贴出来的是证书和秘钥文件所在的目录,这里的对应的证书和秘钥是development类型的至于appstore, adhoc, enterprise类型的证书的话是可以以此类推的






2. 它的预配配置文件的命名是有规范的
是根据这个规范命名的
Development_com.featherweightgames.stampede.mobileprovision
其实就是
证书类型_包名.mobileprovision
其中的证书类型的首字母是大写的
而它的存放路径也是放在
比如像
profiles/development
底下的
就比如下下面这个样子。




3. 他们都是被加密过的文件


我们打开看了一下证书文件,以及证书对应的私钥文件,结果发现是被加密过的文件






我们再看一下那个预配配置文件的话






果然,它也是被加密过的


这个的话按照match的文档说明的话,他们应该是根据openssl工具加密过的






2. 好了,现在看看现在我们有什么,以及我们需要做什么
我们有的东西
1. 一个下好的match的repo,不过里面的证书秘钥以及预配配置文件并不是我们想要的,而且他们都是被加密过的文件
2. 我们现在有一个p12文件,并且我们把它的私钥分离出来了,此外我们还到苹果后台下载了证书(certificates)文件,以及预配配置文件(Provisioning Profiles)
我们需要做的东西
1. 把上面提到的三个文件,替换掉现有的repo里面的那三个文件


我们现在遇到的问题
1. 现有repo的文件是加密过的


就举例来说,现在我们现在想要做一个development类型的,包名为com.featherweightgames.stampede的match的话,


我们现在有的是一个现有的repo,这个repo之前设置好的






第一步我们需要解密,之前如果是直接调用match的命令的话是不会有着一步骤的,不过我在网上找了找,其实是有接口支持直接调用match解密的。


下面的阅读步骤是有前提的,前提是我们会在接下来的步骤里面直接操作的是match对应的repo的master分支,还还有我们之前设置的那个repo的密码是123456




好吧,现在贴出手动调用match的解密的ruby接口调用文档


其实很简单,就是调用了下ruby而已
所以其实要进入那个交互界面的话,还是需要我们
先输入指令






https://docs.fastlane.tools/advanced/#manually-manage-the-fastlane-match-repo




$ bundle console
irb(main):001:0>
Then, require match and set the appropriate parameters:
irb(main):001:0> require 'match'
irb(main):002:0> git_url = 'https://github.com/fastlane/example-certificate-repo'
=> "https://github.com/fastlane/example-certificate-repo"
irb(main):003:0> shallow_clone = false
=> false
irb(main):004:0> manual_password = 'example-password'
=> "example-password"
Now call GitHelper.clone, which will clone and decrypt the repo for you. Assign the return value to workspace, which we'll need later when we re-encrypt:
irb(main):005:0> workspace = Match::GitHelper.clone(git_url, shallow_clone, manual_password: manual_password)
[14:49:30]: Cloning remote git repo...

[14:49:31]:



Now call GitHelper.clone, which will clone and decrypt the repo for you. Assign the return value to workspace, which we'll need later when we re-encrypt:
irb(main):005:0> workspace = Match::GitHelper.clone(git_url, shallow_clone, manual_password: manual_password)
[14:49:30]: Cloning remote git repo...
[14:49:31]:

原创粉丝点击