iOS Xcode7接入,Xcode9运行JPush极光推送遇到的问题 Command /usr/bin/codesign failed with exit code 1

接入jpush-ios-3.0.8-release版本SDK之后,运行报错:

did Fail To Register For Remote Notifications With Error: Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的授权字符串" UserInfo={NSLocalizedDescription=未找到应用程序的“aps-environment”的授权字符串}

Not get deviceToken yet.

 Maybe: your certificatenotconfigured APNs?

orcurrent network isnotso good so APNs registration failed?

orthere is no APNsregistercode? Please refer to JPush docs.

检查证书之后发现,描述性文件失效  iOS Provisioning Profiles (Development)

真机测试描述性文件

原因:该app的iOS App ID是在接推送SDK之前生成的,原先不具备推送功能,描述性文件也是原来生成的;创建推送证书之后,APP具备推送功能,但是描述性文件失效了,需要重新编辑一下,下载安装。

开启推送

项目中选择开启Push Notifications,报错:

项目中开启Push Notifications
描述性文件跟项目boundleId不匹配

原因:创建项目时,自动生成了bundled:ccc.CFJPush,但是修改时只修改了info.plist文件,导致项目的boudleId修改不彻底,在Build Settings里面搜索ccc.CFJPush,找到后修改成当前正确的bundled

彻底修改bundled

接入SDK后发现,虽然能接收到推送的消息,但是走不到JPUSHRegisterDelegate的回调方法(支持iOS10以上的设备)因为Xcode7不支持iOS10新特性,测试设备系统是iOS11.2.1

适配iOS10新特性,需要UserNotifications.framework库,但是Xcode7项目中没有这个库,于是天真地从Xcode9项目下拷贝过来使用,但是发现不能用,会报错:

ld: unexpected token: !tapi-tbd-v2 file '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks//UserNotifications.framework/UserNotifications.tbd' for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

还是得升级Xcode,才能使用推送通知的iOS10新特性。

最后决定将Xcode7创建的项目挪到另一台电脑的Xcode9下运行。

运行报错:compiling IB documents for earlier than ios 7 is no longer supported

从Xcode7移到Xcode9下报错

解决方案:

将所有的xib 和 storyboard文件逐个修改,选中View,builds for 改成 iOS7.1 and Later

修改IB支持的设备系统

之后运行又遇到一个证书问题,但是项目中配置的证书是正确的:

/Users/用户名/Library/Developer/Xcode/DerivedData/CFJPush-gkytxdwouevpihashhckqnieucve/Build/Products/Debug-iphoneos/CFJPush.app: unknown error -1=ffffffffffffffff

Command /usr/bin/codesign failed with exit code 1

证书问题

但是,电脑上原本就安装好了证书,重新将Xcode7电脑上导出的.p12证书,运行安装到钥匙串发现出错:

证书无法导入钥匙串

解决方案:选中登录,将钥匙串锁定后,再打开。

重新开启钥匙串

证书顺利导入到钥匙串,编译项目不再报错,Xcode9能顺利读取钥匙串中的证书,证书问题其实是个意外。

运行到真机又一个意外,Xcode9不支持iOS11.2.1(15C153):

This iPhone 6 is running iOS 11.2.1 (15C153), which may not be supported by this version of Xcode.

Xcode9.0版本不支持iOS11.2.1系统

直接下载Xcode9.2下的iOS11.2(15C107):https://pan.baidu.com/s/1qZvudUc  密码:3122

打开应用程序-选中Xcode9-右键显示包内容-查找下列目录Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport,将新的测试包替换此目录下原来的测试包 - 重启Xcode9-成功运行到真机

解决JPush角标显示的问题

收到推送之后,角标默认显示1,不做处理情况下(即使已经读取推送内容)不会自动消失,不会自动增长

1. 让角标消失,可以在程序进入前台时处理:只需两行代码

找到AppDelegate.m文件中 - (void)applicationWillResignActive:(UIApplication *)application 方法

- (void)applicationWillResignActive:(UIApplication *)application {

//1---重置JPush服务器上面的badge值

//如果下次服务端推送badge传"+1",则会在你当时JPush服务器上该设备的badge值的基础上+1;

[JPUSHService setBadge:0];

//2---apple自己的接口,变更应用本地(icon)的badge值;

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

}

2. 让角标自增,在JPush服务器发送通知时,点开可选设置,注意 badge传"+1",默认状态下是1

badge+1显示

JPush推送消息可以有“发送通知”和“自定义消息”两种形式

发送通知
自定义消息

“发送通知”形式发送,当设备处于锁屏、App被杀死或者App处于后台时,都能正常收到推送的消息;当App处于前台时,虽然Jpush服务器显示收到消息,但消息不会以横幅、声音形式展示

如何在APP处于活跃状态时,让用户明确收到推送消息?如下两种方式

自己封装的收到远程消息后的处理逻辑

- (void)dealNotificationWithUserInfo:(NSDictionary *)userInfo{

self.notificationCount ++;

NSLog(@"self.notificationCount:%ld",self.notificationCount);

[UIApplication sharedApplication].applicationIconBadgeNumber = self.notificationCount;

//  远程推送,只能服务器来修改badge的值

// 在JPush平台发送通知时的可选设置中 +1,则正常显示,默认为1 上报badge

[JPUSHService setBadge:+1];

// ==============================================================

// 1 -- 应用处于前台收到推送的时候转成本地通知,效果跟其他状态下一致

// ==============================================================

if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive) {

UILocalNotification *notification = [[UILocalNotification alloc] init];

notification.userInfo = userInfo;

[[UIApplication sharedApplication] presentLocalNotificationNow:notification];

}

// ==============================================================

// 2 -- 在程序活跃状态下,程序设置弹出提示框,但推送不会以横幅、声音形式展示

// ==============================================================

//    if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive) {

//        NSString *body = userInfo[@"aps"][@"alert"][@"body"];

//    //    NSString *subtitle = userInfo[@"aps"][@"alert"][@"subtitle"];

//        NSString *title = userInfo[@"aps"][@"alert"][@"title"];

//        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title

//                                                            message:body

//                                                        delegate:nil

//                                                  cancelButtonTitle:@"OK"

//                                                  otherButtonTitles:nil];

//        [alertView show];

//    }

}

“自定义消息”形式发送,当App处于活跃状态(前台)时,设备能收到的远程消息,需要注册kJPFNetworkDidReceiveMessageNotification 通知

//  自己封装的注册通知方法,在初始化APNs和JPush之后调用即可

- (void)registNotification{

// 注册通知 收到消息(非APNS)

NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];

[defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];

}

// 自定义消息处理逻辑

- (void)networkDidReceiveMessage:(NSNotification *)notification {

NSDictionary * userInfo = [notification userInfo];

NSString *content = [userInfo valueForKey:@"content"];

NSDictionary *extras = [userInfo valueForKey:@"extras"];   //Jpush服务端传递的Extras附加字段,key是自己定义的

// 代码在程序活跃状态下,以弹框形式展示消息内容

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"前端自定义消息"

message:content

delegate:nil

cancelButtonTitle:@"OK"

otherButtonTitles:nil];

[alertView show];

}


下面说一下 cocos2-x-2.2.6项目,接入上述JPush sdk相关代码,使用Xcode9.0运行,遇到的问题 

Main Thread Checker: UI API called on a background thread: -[UIApplication applicationState]

PID: 294, TID: 15778, Thread name: (none), Queue name: com.apple.root.default-qos.overcommit, QoS: 21

Backtrace:   .......

线程问题

解决方案:选中Xcode-Product-Scheme-Edit Scheme-去掉 Main Thread Checker 前的对号

去掉主线程检测

运行时,HttpClient.cpp文件中 curl_easy_cleanup(m_curl); 一行报错

HttpClient.cpp文件报错

解决方案:修改HttpClient.cpp 和 HttpResponse.h文件中一些 int类型、int32_t类型 为long类型,具体修改内容如下:

HttpClient.cpp文件中

97-100行
144行
332行
347行
357行
369行
381行

HttpResponse.h文件中

113行
156行
178行

CCDataVisitor.h文件 报错:#include<string>                   'string' file  not found

引擎文件报错

原因C++与OC混编,自定义的JPushHelper类的头文件JPushHelper.h被AppController.mm引用,而JPushHelper.m文件后缀未修改。

解决方案:将JPushHelper.m改为JPushHelper.mm

报错:

duplicate symbol __sisHostDomains in:

    /Users/用户名/Desktop/cocos2d-x-2.2.6/projects/项目名/proj.ios/JPush/jpush-extension-ios-1.1.0.a(JPushExtensionSession.o)

    /Users/用户名/Desktop/cocos2d-x-2.2.6/projects/项目名/proj.ios/JPush/jcore-ios-1.1.7.a(JPUSHAddressController.o)

ld: 1 duplicate symbol for architecture armv7

clang: error: linker command failed with exit code 1 (use -v to see invocation)

编译链接错误

开始以为跟上面的警告 xxx was built for newer iOS version(10.0)than being linked(7.0)有关

修改 项目名下  Deployment Target  6.0  为  8.0

和 cocos2dx.xcodeproj 下的 iOS Deployment Target iOS 6.0 为 iOS 8.0

无效!!!

并且会报警告:xxx was built for newer iOS version(10.0)than being linked(8.0)

上述错误跟警告无关。

后来发现JPush 版本更新文档描述中说,需要去掉-ObjC,由于原项目接其他SDK时有加-ObjC,并且之前接的其他的SDK已经不再使用。

解决方案:选中 Build Settings  ~ 搜索 Other Link Flags ~ 删掉-ObjC

在 Deployment Target 8.0下,使用usleep(1000)会报错:Use of undeclared identifier 'usleep'

usleep(1000)

解决方案:引入头文件 #include "unistd.h"

运行安装到真机时报错:Could not launch “项目名”

                                          iPhone has denied the launch request.

Could not launch

解决方案:重启Xcode,运行

接收的远程推送消息中的应用名称显示错误

原因是之前将接入JPush的Demo安装到手机中,手机接收消息有缓存,到运行正式项目时,名称(ICON也可能错误)显示为原来的Demo中的名称

解决方案:重启手机,运行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容