<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>chenhengjie123 (chenhengjie123)</title>
    <link>https://ruby-china.org/chenhengjie123</link>
    <description>加油！</description>
    <language>en-us</language>
    <item>
      <title>TesterHome iOS 客户端上架历程</title>
      <description>&lt;p&gt;最近几天和 TesterHome 的小伙伴一起完成了 TesterHome iOS 客户端的上架。TesterHome 的网站是在 Ruby China 的基础上进行修改的，此次客户端也是从 Ruby China iOS 客户端基础上修改。因此此记录也适用于 Ruby China 的同学，乃至以后其他使用 homeland 的同学。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;在此特别对 Ruby China 社区一直以来对 TesterHome 社区的支持表示感谢！&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="原材料"&gt;原材料&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;iOS 收费开发者证书&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ruby-china/ruby-china-ios" rel="nofollow" target="_blank" title=""&gt;ruby-china-ios 客户端源码&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="第一步，修改 ruby-china-ios 客户端源码中的配置"&gt;第一步，修改 ruby-china-ios 客户端源码中的配置&lt;/h2&gt;
&lt;p&gt;ruby-china-ios 默认配置是对应 ruby-china 的，需要先改为 testerhome 的配置才能获取到 testerhome 的相关信息。&lt;/p&gt;

&lt;p&gt;修改方法：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;创建 testerhome 第三方应用授权&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;点击右上角用户头像-&amp;gt;【个人资料设置】，选择右侧的【管理我的应用】&lt;/p&gt;

&lt;p&gt;&lt;img src="https://testerhome.com/uploads/photo/2016/68b65f90d4c2fa8e3d42926388538d0a.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;点击右上角【注册新应用】，输入应用相关信息（回调地址具体填法后续再确定），点击提交&lt;/p&gt;

&lt;p&gt;&lt;img src="https://testerhome.com/uploads/photo/2016/6497161cb7cc09fa3aae28b7a629a545.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://testerhome.com/uploads/photo/2016/7ade0187ee75d85bc625b0bf4f102dc9.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;记录下 &lt;strong&gt;应用 ID&lt;/strong&gt; 和 &lt;strong&gt;私钥&lt;/strong&gt; 的值，待会配置客户端要用到。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;打开项目的 &lt;code&gt;Constants.swift&lt;/code&gt; 文件&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://testerhome.com/uploads/photo/2016/74ff2960d2ef6fe3b87a3018a0e6c2bb.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;把 ROOT_URL 改为 &lt;code&gt;https://testerhome.com&lt;/code&gt;，OAUTH_CLIENT_ID 改为上一步获取到的 &lt;strong&gt;应用 ID&lt;/strong&gt;，OAUTH_SECRET 改为上一步获取到的 &lt;strong&gt;私钥&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;其它一些内容带有 ruby-china 的地方也对应改为 testerhome，主题、图标等也根据需要进行调整。具体修改内容可查看 &lt;a href="https://github.com/testerhome/ruby-china-ios/commits/master" rel="nofollow" target="_blank"&gt;https://github.com/testerhome/ruby-china-ios/commits/master&lt;/a&gt; 对应的提交：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://testerhome.com/uploads/photo/2016/adbc64fd11b68813e3151f69bf7eb996.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="第二步、配置推送证书"&gt;第二步、配置推送证书&lt;/h2&gt;
&lt;p&gt;推送证书需要在 iOS 开发者后台中配置，同时也需要在 testerhome 后台配置 &lt;code&gt;apns_pem&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iOS 开发者后台生成推送证书&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;步骤基本和 &lt;a href="https://cn.avoscloud.com/docs/ios_push_cert.html#%E6%B3%A8%E5%86%8C_App_ID" title=""&gt;iOS 推送证书设置指南&lt;/a&gt; 里面一致。大致步骤：&lt;/p&gt;

&lt;p&gt;1、修改 APP ID，启用推送（特别留意 development 和 distribution 的都要 enable，否则自己本地测试收不到推送）&lt;/p&gt;

&lt;p&gt;&lt;img src="https://testerhome.com/uploads/photo/2016/77c0b5746f739b11e56606adc0465aa7.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;2、在开发者后台生成 Apple Push Notification service SSL (Sandbox &amp;amp; Production)  证书&lt;/p&gt;

&lt;p&gt;3、下载证书（一个 .cer 文件），双击导入到钥匙串&lt;/p&gt;

&lt;p&gt;4、打开钥匙串，找到这个证书（正常是 Apple Push Service 开头），右键导出成 p12 文件，后续假设文件名为 &lt;code&gt;cert.p12&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;5、使用下面的命令生成一个 pem 文件&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ openssl pkcs12 -in cert.p12 -out website.pem -nodes -clcerts
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;6、把 website.pem 的内容（&lt;code&gt;cat website.pem&lt;/code&gt;）配置到后台-&amp;gt;全局配置-&amp;gt; apns_pem 中。&lt;/p&gt;
&lt;h2 id="测试推送"&gt;测试推送&lt;/h2&gt;
&lt;p&gt;在本机架设一个 homeland 网站，按照上面的步骤添加新的应用并配置到 iOS 客户端中：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://testerhome.com/uploads/photo/2016/6ba5502eb4e8510aa8b8139af88920f0.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;正常来说，当前客户端登录的用户收到一个通知（如帖子被回复或者被 @）就会有推送出现。&lt;/p&gt;
&lt;h2 id="第三步、app store 上架"&gt;第三步、app store 上架&lt;/h2&gt;
&lt;p&gt;步骤基本和 &lt;a href="http://www.jianshu.com/p/b1b77d804254" rel="nofollow" target="_blank" title=""&gt;iOS App 上架流程 (2016 详细版）&lt;/a&gt;一致。大致步骤：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;生成 distribution 证书，然后下载、导入 keychain&lt;/li&gt;
&lt;li&gt;生成描述文件，然后下载、导入 keychain&lt;/li&gt;
&lt;li&gt;上 itunes connect，创建 app 并填写相关信息&lt;/li&gt;
&lt;li&gt;xcode 里面去掉所有断点，然后点击菜单栏 Product -&amp;gt; Archive（灰色的话检查下是不是选了模拟器，应该选择真机或者 Generic iOS Device）&lt;/li&gt;
&lt;li&gt;Archive 完成后，选择右侧的 validate 验证包。&lt;/li&gt;
&lt;li&gt;验证没问题，点击 Upload to App Store 即可开始上传。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;上传完应用，应用信息也配置好后，点击 itunes connect 里面的 send for review 就开始进入审核队列了。&lt;/p&gt;
&lt;h2 id="坑"&gt;坑&lt;/h2&gt;
&lt;p&gt;这过程中，因为不熟练，遇到了一个坑，卡了一天：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;测试时无论是 adhoc 包还是调试包都收不到推送&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;原因有两个：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;开发者后台中 development 的推送为 Configurable，相当于没开启，所以一直没收到。&lt;strong&gt;解决方法：手动开启。&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;网上找到的 pem 配置文章生成 pem 的方式都是先生成证书的 pem，然后生成私钥的 pem，最后合并在一起。而 ruby-china 用的是另一种方式。鉴别方式：看 sidekiq 后台的错误里面有没有 &lt;code&gt;OpenSSL::PKey::RSAError: Neither PUB key nor PRIV key: nested asn1 error&lt;/code&gt; 。如果有，那基本上就是 pem 配置不正确导致和苹果推送服务器通讯失败了。&lt;strong&gt;解决方法：用上面正文里的那个命令生成 pem 内容即可。&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
      <author>chenhengjie123</author>
      <pubDate>Wed, 07 Dec 2016 21:46:33 +0800</pubDate>
      <link>https://ruby-china.org/topics/31837</link>
      <guid>https://ruby-china.org/topics/31837</guid>
    </item>
  </channel>
</rss>
