从零创建ios调试证书和远程消息推送

戴维营教育原创文章,转载请注明出处。我们的梦想是做最好的iOS开发培训!

前言

iOS开发中,iOS模拟器调试功能已经相当强大,但是涉及到和设备相关功能调试时,还是经常需要进行真机调试,而与Android不同的是,苹果由于对安全与隐私的保护,对权限管控的比较严谨,凡是要在真机上运行的App都需要经过授权签名后才可以.这就使得我们在开发测试阶段进行真机调试相对不那么方便了.苹果对调试阶段在真机运行的App和上架或者发布出去的App在真机上运行的签名是分别处理的, 分别用开发证书(Development)和发布证书(Distribution或者Production)进行代码签名.而且前提是需要有苹果的App开发者账号,每年$99的价格是"相当"便宜的.但是并不是每一个戴维营教育的iOS学员或者iOS开发从业者都有开发账号.在之前的Xcode版本里,其实有了开发者账号只要创建了对应AppID(指定的或者通配符的),要真机调试一个App也还是很方便的,完全可以让Xcode去自动Fix Issue来解决缺少调试证书Development Certificate和对应的配置文件Provisioning Profile的问题. 这个在2015年10月正式发布Xcode7之前,对于一个初学者是相对有一定麻烦的.自Xcode7发布后,苹果放出了使用App Store购买应用的Apple ID用户(非Apple开发者账号)也可以免费真机调试的功能.这一举措大大降低了我们戴维营教育iOS学员/iOS开发初学者进行iOS真机调试的门槛. 到如今Xcode7出来之后,在这方面的方便性简直是完全没感觉. 不过苹果在放开这些方便性的功能情况下是有一定前提的,那就是一般的App是可以方便的进行真机调试,但是如果用了苹果的一些其他服务(Game Center,In-App Purchase,Push Notification)功能的App如果也这样自动去采用Fix Issue生成的通用配置文件进行真机调试的话,那这些个服务是不会正常工作的. 所以如果要调试App的这些服务时,就需要为其单独创建配置文件(Provisioning Profile).

下面一步一步来图示创建开发者调试证书,支持远程推送功能的签名配置文件并进行消息的推送测试.

前方多图高能, 非常值得你一看, 你懂的. 欢迎提出宝贵建议. 最后涉及了Linux+Swift语言实现自己的APNs推送服务使用.

第一步

  • 首先,我们还是先登录到开发者后台https://developer.apple.com/account/
  • 选择左侧证书,可以列出当前你所使用的开发者账号下已经存在的证书
  • 如图所示,已经有一个AppID为com.diveinedu.teachdemo的开发版远程推送证书.
  • 要新建一个新的真机调试证书,那就直接点击右上方的➕号按钮进入证书新建的流程.

准备新建真机调试证书

第二步

  • 这里是证书类型选择界面, 根据用途不同,分两大类.
  • 一类只能用于开发(Development)调试用的证书
  • 一类只能是发布(Distribution)或者上架生产(Production)使用的证书.
  • 我们这是要创建真机调试用的开发者证书.故选择第一个单选框.
  • 然后继续.

选择开发调试用的开发者证书

第三步

关于证书签名请求文件的制作步骤很详细的说明,细心习惯的人完全可以不用求什么中文教程,跟着苹果后台的这个向导一步一步的就可以完成工作.

证书签名请求文件创建步骤介绍

第四步

  • 在钥匙串访问程序中创建证书签名请求文件.

开始创建证书签名请求文件

第五步

  • 填写证书签名请求文件的信息,该信息将会在最后的证书信息中显示,特别是常用名称,建议填一个故名知义的名称,以和其他证书做区分.
  • 选择存储到磁盘后点击继续.

证书签名请求文件信息填写

第六步

  • 保存证书签名请求文件,输入文件名和文件保存的位置.

证书签名请求文件名和存储位置

第七步

  • 保存成功后,我们可以在Finder中显示查看该文件.

`Finder`中查看证书签名请求文件

第八步

  • 回到开发者后台网站,选择打开上面的文件准备上传.

选择打开证书签名请求文件准备上传

第九步

  • 选择要上传的证书签名请求文件后点击继续(Continue)上传进入下一步.

上传证书签名请求文件

第十步

  • 到这,开发者真机调试证书已经生成成功,只需要下载并备份该文件了.

下载开发者真机调试证书

第十一步

  • 下载证书后,一般默认存放在用户主目录下的下载目录,
  • 你可以把他移动到其他准备好的目录以便于管理备份.
  • 双击该证书文件来安装该证书.

安装真机调试证书

第十二步

  • 证书安装好后,会自动加入在钥匙串访问程序中,这样我们就可以使用该证书进行对应用进行签名了.
  • 如果其他团队成员也需要真机调试的证书,那就需要把该证书导出一个p12格式文件并传给对方安装.

检查证书成功安装后的状态

第十三步

  • 在Xcode中的编译设置代码签名标志选项的对方选择刚刚安装好的那个证书
  • 注意一下,一般只设置Debug部分就可以了,Release部分不能用调试证书的.

Xcode设置开发调试证书

第十四步

  • 在Xcode中光设置了开发调试的证书是不够的,因为开发调试证书和开发者账号是一对一的,他和具体App ID不是一对一的,所以我们还需要为具体App新建一个签名配置文件,一般的真机调试可以选择自动模式,让他自动去解决.但是如果我们是要调试带有远程推送,应用内购买,游戏中心等服务的应用时,我们不能用自动生成的签名配置文件.我们必须单独明确的为该App生成签名配置文件.

  • 回到开发者后台网页,选择左侧的Provisioning Profile栏; 然后在右上角点击➕号开始新建配置文件.

准备新建配置文件

第十五步

  • 选择你所需配置文件的类型,用于开发调试测试用途, 还是用于发布上架等生产用途.
  • 我们这选择第一个,新建iOS设备的开发调试用途的配置文件. 然后点击继续.

选择配置文件的类型

第十六步

  • 类型选择完后, 继续进入到这一步的,选择具体的App ID.
  • 正如前面以及此图中红色矩形区域所说, 用到推送通知功能的App必须创建和具体App ID对应的签名配置文件(Provisioning Profile).

选择配置文件对应的AppID

第十七步

  • 选择该配置文件中你想要包含开发者证书
  • 我这只有一个开发版调试证书,我们也只需要这个证书,那就只选择这个就够了.
  • 选择后下一步.

选择配置文件要包含的证书

第十八步

  • 选择该配置文件包含的真机设备信息,包含设备信息对应的真机将被授权安装运行用前面包含的开发者证书签名的应用.

选择登记在该开发者账号下的真机调试设备

第十九步

  • 开发版的真机调试签名配置文件(Provisioning Profile)已经生成成功,可以对其详细信息进行过目.
  • 然后点击继续.

配置文件生成成功,浏览其信息

第二十步

  • 开始下载生成成功的真机调试签名配置文件.

下载签名配置文件

第二十一步

  • 签名配置文件下载成功后,移动到适当的目录进行保管和备份.
  • 双击配置文件,会自动打开Xcode安装.

保存和备份真机调试签名配置文件

第二十二步

  • 在Xcode中项目编译设置部分,在选择配置文件(Provisioning Profile)的地方,不要选择Automatic,因为我们是要调试远程推送功能,所以要选择刚刚下载安装好的配置文件,名称是com.diveinedu.teachdemo_development.

选择刚刚安装的配置文件

第二十三步

  • 设置好开发者调试证书以及签名配置文件后的样子. >ps: Release部分这里不要在乎.

真机调试证书和签名配置文件都设好了.

第二十四步

  • 还有一个关键的地方不要忘记,那就是要确保我们的项目应用的Bundle Identifier务必和我们前面签名配置文件所选择的App ID要一致.一致.一致.

确认项目的BundleID和签名配置文件所选AppID是一致的

第二十五步

  • 在项目中编写代码向苹果APNS服务器注册拿到设备推送用的DeviceToken.
  • 拿到DeviceToken后上传至自己的后台或者调用第三方推送服务SDK的API上传至他们的后台.

注册并拿到设备推送用的DeviceToken

第二十六步

  • 我这里演示简单粗暴的把DeviceToken插入到后台MySQL数据库的样子. 某用户名最近所使用的设备的DeviceToken.

DeviceToken存入后台数据库

第二十七步

  • 自己用Swift语言实现的APNs推送类,直接给某个用户发推送消息, Swift代码会去从MySQL数据库去查询该用户zhangshan对应的deviceToken,并通过苹果的APNS服务器向该DeviceToken对应的设备推送一个文本消息.

Swift推送消息代码

第二十八步

  • 在Linux系统上编译运行Swift写的后台程序,推送测试代码会执行数据库查询DeviceToken,并给真机设备推送测试消息. 该Swift代码运行于Ubuntu Linux 15.10系统上.

运行Swift代码进行推送测试

第二十九步

  • 正在一旁真机测试的Xcode断点调试,检测到苹果APNS服务器给我的真机设备推送了一个消息过来,内容就是Linux服务器Swift代码中推送的内容:hello, Swifter of Diveinedu!. 至此, 我们的应用在前端运行时成功收到了推送消息.

真机在App运行时成功收到推送消息

第三十步

  • 上一步,已经成功进行了在线推送.
  • 这里,我们退出调试并关闭程序运行.
  • 在Linux服务器上重新运行第二十八步的程序进行Swift推送消息.
  • 真机一样会收到推送消息,但因目标App没有运行,就在通知中心提示.

真机在App未运行时成功收到推送消息

真机在App未运行时手动推送消息的动态录像

后记

开发者账号真机调试以及远程消息推送就这么简单. 远程消息推送还有更多高级的玩法, 可以有静默推送,可以带交互动作的推送等等, 关于推送消息详细资料请查看苹果官方文档.

如果有需要请去长沙戴维营教育学习移动互联网全栈开发课程. 更多资料,视频,等等, 请去http://v.diveinedu.com 请去http://ask.diveinedu.com

欢迎拍砖..提出建议.. 昨晚回家整理的图.尽量把每一个帧细节都图示解说了. 几乎是做翻译解说工作.. 营员们以后不要再看到苹果的其他类似服务(真机调试啊,推送啊,上架啊)就怕怕怕, 人家的文档步骤很详细的.不要用看不懂英语为借口. 英语拦不到人的.对吧. 吐槽有偏见,不喜勿喷.

营员应该空闲时仔细反复研读此文档!

App Distribution Guide

https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html

戴维营学院(高级开发视频): http://v.diveinedu.com

潜心俱乐部(iOS面试必备): http://divein.club