iOS TesterHome iOS 客户端上架历程
最近几天和 TesterHome 的小伙伴一起完成了 TesterHome iOS 客户端的上架。TesterHome 的网站是在 Ruby China 的基础上进行修改的,此次客户端也是从 Ruby China iOS 客户端基础上修改。因此此记录也适用于 Ruby China 的同学,乃至以后其他使用 homeland 的同学。
在此特别对 Ruby China 社区一直以来对 TesterHome 社区的支持表示感谢!
原材料
- iOS 收费开发者证书
- ruby-china-ios 客户端源码
第一步,修改 ruby-china-ios 客户端源码中的配置
ruby-china-ios 默认配置是对应 ruby-china 的,需要先改为 testerhome 的配置才能获取到 testerhome 的相关信息。
修改方法:
- 创建 testerhome 第三方应用授权
点击右上角用户头像->【个人资料设置】,选择右侧的 【管理我的应用】
点击右上角 【注册新应用】,输入应用相关信息(回调地址具体填法后续再确定),点击提交
记录下 应用 ID 和 私钥 的值,待会配置客户端要用到。
- 打开项目的
Constants.swift
文件
把 ROOT_URL 改为 https://testerhome.com
,OAUTH_CLIENT_ID 改为上一步获取到的 应用ID,OAUTH_SECRET 改为上一步获取到的 私钥。
其它一些内容带有 ruby-china 的地方也对应改为 testerhome ,主题、图标等也根据需要进行调整。具体修改内容可查看 https://github.com/testerhome/ruby-china-ios/commits/master 对应的提交:
第二步、配置推送证书
推送证书需要在 iOS 开发者后台中配置,同时也需要在 testerhome 后台配置 apns_pem
- iOS 开发者后台生成推送证书
步骤基本和 iOS 推送证书设置指南 里面一致。大致步骤:
1、 修改 APP ID ,启用推送(特别留意 development 和 distribution 的都要 enable ,否则自己本地测试收不到推送)
2、 在开发者后台生成 Apple Push Notification service SSL (Sandbox & Production) 证书
3、 下载证书(一个 .cer 文件),双击导入到钥匙串
4、 打开钥匙串,找到这个证书(正常是 Apple Push Service 开头),右键导出成 p12 文件,后续假设文件名为 cert.p12
5、使用下面的命令生成一个 pem 文件
$ openssl pkcs12 -in cert.p12 -out website.pem -nodes -clcerts
6、把 website.pem 的内容(cat website.pem
)配置到后台->全局配置-> apns_pem 中。
测试推送
在本机架设一个 homeland 网站,按照上面的步骤添加新的应用并配置到 iOS 客户端中:
正常来说,当前客户端登录的用户收到一个通知(如帖子被回复或者被 @)就会有推送出现。
第三步、app store 上架
步骤基本和 iOS App上架流程(2016详细版)一致。大致步骤:
- 生成 distribution 证书,然后下载、导入 keychain
- 生成描述文件,然后下载、导入 keychain
- 上 itunes connect ,创建 app 并填写相关信息
- xcode 里面去掉所有断点,然后点击菜单栏 Product -> Archive (灰色的话检查下是不是选了模拟器,应该选择真机或者 Generic iOS Device )
- Archive 完成后,选择右侧的 validate 验证包。
- 验证没问题,点击 Upload to App Store 即可开始上传。
上传完应用,应用信息也配置好后,点击 itunes connect 里面的 send for review 就开始进入审核队列了。
坑
这过程中,因为不熟练,遇到了一个坑,卡了一天:
- 测试时无论是 adhoc 包还是调试包都收不到推送
原因有两个:
- 开发者后台中 development 的推送为 Configurable ,相当于没开启,所以一直没收到。解决方法:手动开启。
- 网上找到的 pem 配置文章生成 pem 的方式都是先生成证书的 pem,然后生成私钥的 pem,最后合并在一起。而 ruby-china 用的是另一种方式。鉴别方式:看 sidekiq 后台的错误里面有没有
OpenSSL::PKey::RSAError: Neither PUB key nor PRIV key: nested asn1 error
。如果有,那基本上就是 pem 配置不正确导致和苹果推送服务器通讯失败了。解决方法:用上面正文里的那个命令生成 pem 内容即可。