极光推送中遇到的坑,NSCocoaErrorDomain Code=3000 “未找到应用程序的“aps-environment”的授权字符串

项目中有继承极光推送功能,之前开发完之后,消息推送功能是好用的,但最近做其他项目去了,完事被提了一个无法收到消息推送的bug问题,因为在个推中设置了用户别名,当时应该是我们在登录完成之后,设置别名不成功,导致的无法收到消息。刚好消息推送的证书快过期了,然后去查看了一下,发现在TARGETS中的Capabilities中Push Notifications中有一项Add the Push NOtifications entilement to your entilements file前面出现了一个红色的感叹号。如下图:
这里写图片描述
当点击完成 Fix issue之后,然后再打开右边的开关,发现并不能解决问题。最后百度了很多方法,那些真的很不错,但是没有解决我的问题。最后同学建议先看看极光后台的iOS SDK 调试指南来对错误进行定位。极光的文档写的还真不错。下面记录了我的各种错误。
1. 首先在控制台中打印错误消息,NSCocoaErrorDomain Code=3000 “未找到应用程序的“aps-environment”的授权字符串
2. 然后调用极光API设置别名的时候,极光这边就是说: [JPUSHService] app not registed, give up set tag:

然后根据指南各种设置,调试,网上搜方法,开发者中心重新按照详细步骤认真生成各种证书,授权文件,更新本地证书,文件,更新极光后台的p12文件,真机调试,依然失败,上面的红色感叹号还是不能消失。最后晚上让同学帮忙看看,让他帮忙调了下,刚开始也是各种试,都没找到有效的解决方法。最后到晚上下半夜的时候,终于找到了问题的所在。只能说这些问题真奇葩,还是设置的问题。因为当时发现我的工程之中不知道何时出现了两个.entilements文件。
这里写图片描述
我们工程中是怎么创建这个文件的呢?开始的时候,我也没注意这个问题,最开始的时候,iOS10刚出来,还注意了这个问题,时间长了不接触消息推送这一块,又给忘记了,这个文件就是我们在之前说的Targets中Capabilities那个Push Notifications那个开关开闭的时候,自动生成的,可以把文件删了,只要我们打开那个开关,就会自动生成.entitlements文件。所有直接把这两个文件删了。然后重新生成一下。同学在他电脑上这样操作,直接解决了问题,红色感叹号消失了,但是我这边依然没有。哎呀,我勒个去,我真受不了,XCode有毒,对,一定是这样的,咋办呢,问题的关键是我生成的.entitlements文件还是红颜色的。这里写图片描述
这就说明还是有问题的,继续找到Build Settings,在里面搜索code sign 找到一项code signing entitlements,发现他的后面是空值,没有文件路径,这就是第一个报错NSCocoaErrorDomain Code=3000 “未找到应用程序的“aps-environment”的授权字符串的原因了。双击该选项,把我们的.entitlements文件拖进来。然后去重启开关,我想这次问题应该解决了吧,很郁闷,依然没有。这时候,有种想哭的感觉了,怎么办呢?然后回头再看看刚才拖动的那个文件后面的设置,发现里面的值竟然是空的,我刚刚设置的文件的路径不见了。真是奇事天天有,今天特别多。现在问题出哪儿了呢?然后展开那个选项,和同学的对比了下,发现了作祟的东西。
这里写图片描述
看到那个圈起来的Any SDK了吧,就是它在搞怪,我把它删了之后,然后再去开启开关,这次发现红色感叹号没有了。
这里写图片描述
然后再重新编译运行程序,终于把NSCocoaErrorDomain Code=3000 “未找到应用程序的“aps-environment”的授权字符串这个错误给解决了,解决了它,其他的问题都迎刃而解了,把证书,授权文件,极光后台的p12文件全都更新一次,真机运行调试,推送一条消息,终于看到手机上弹出了一个推送的消息。问题得到了解决,特别感谢同学熬夜帮我调试,自己也学到了不少东西,以前对那些证书(开发证书,发布证书,推送证书),描述文件,CSR文件,p12文件的作用一知半解,通过这次,终于搞懂了它们的作用了。无论什么,还是知道原理,做起事来事半功倍。


版权声明:本文为renjie_Yan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。