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 "未找到應(yīng)用程序的“aps-environment”的授權(quán)字符串" UserInfo={NSLocalizedDescription=未找到應(yīng)用程序的“aps-environment”的授權(quán)字符串}

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.

檢查證書之后發(fā)現(xiàn)塔淤,描述性文件失效 ?iOS Provisioning Profiles (Development)

真機測試描述性文件

原因:該app的iOS App ID是在接推送SDK之前生成的,原先不具備推送功能速妖,描述性文件也是原來生成的高蜂;創(chuàng)建推送證書之后,APP具備推送功能罕容,但是描述性文件失效了备恤,需要重新編輯一下挺举,下載安裝。

開啟推送

項目中選擇開啟Push Notifications烘跺,報錯:

項目中開啟Push Notifications
描述性文件跟項目boundleId不匹配

原因:創(chuàng)建項目時,自動生成了bundled:ccc.CFJPush脂崔,但是修改時只修改了info.plist文件滤淳,導致項目的boudleId修改不徹底,在Build Settings里面搜索ccc.CFJPush砌左,找到后修改成當前正確的bundled

徹底修改bundled

接入SDK后發(fā)現(xiàn)脖咐,雖然能接收到推送的消息,但是走不到JPUSHRegisterDelegate的回調(diào)方法(支持iOS10以上的設(shè)備)因為Xcode7不支持iOS10新特性汇歹,測試設(shè)備系統(tǒng)是iOS11.2.1

適配iOS10新特性屁擅,需要UserNotifications.framework庫,但是Xcode7項目中沒有這個庫产弹,于是天真地從Xcode9項目下拷貝過來使用派歌,但是發(fā)現(xiàn)不能用,會報錯:

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創(chuàng)建的項目挪到另一臺電腦的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支持的設(shè)備系統(tǒng)

之后運行又遇到一個證書問題,但是項目中配置的證書是正確的:

/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證書,運行安裝到鑰匙串發(fā)現(xiàn)出錯:

證書無法導入鑰匙串

解決方案:選中登錄游昼,將鑰匙串鎖定后甘苍,再打開。

重新開啟鑰匙串

證書順利導入到鑰匙串烘豌,編譯項目不再報錯羊赵,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系統(tǒng)

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

打開應(yīng)用程序-選中Xcode9-右鍵顯示包內(nèi)容-查找下列目錄Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport,將新的測試包替換此目錄下原來的測試包 - 重啟Xcode9-成功運行到真機

解決JPush角標顯示的問題

收到推送之后罐寨,角標默認顯示1靡挥,不做處理情況下(即使已經(jīng)讀取推送內(nèi)容)不會自動消失,不會自動增長

1. 讓角標消失鸯绿,可以在程序進入前臺時處理:只需兩行代碼

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

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

//1---重置JPush服務(wù)器上面的badge值

//如果下次服務(wù)端推送badge傳"+1",則會在你當時JPush服務(wù)器上該設(shè)備的badge值的基礎(chǔ)上+1跋破;

[JPUSHService?setBadge:0];

//2---apple自己的接口簸淀,變更應(yīng)用本地(icon)的badge值;

[[UIApplication?sharedApplication]?setApplicationIconBadgeNumber:0];

}

2. 讓角標自增毒返,在JPush服務(wù)器發(fā)送通知時租幕,點開可選設(shè)置,注意?badge傳"+1"拧簸,默認狀態(tài)下是1

badge+1顯示

JPush推送消息可以有“發(fā)送通知”和“自定義消息”兩種形式

發(fā)送通知
自定義消息

“發(fā)送通知”形式發(fā)送劲绪,當設(shè)備處于鎖屏、App被殺死或者App處于后臺時盆赤,都能正常收到推送的消息贾富;當App處于前臺時,雖然Jpush服務(wù)器顯示收到消息牺六,但消息不會以橫幅颤枪、聲音形式展示

如何在APP處于活躍狀態(tài)時,讓用戶明確收到推送消息淑际?如下兩種方式

自己封裝的收到遠程消息后的處理邏輯

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

self.notificationCount?++;

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

[UIApplication?sharedApplication].applicationIconBadgeNumber?=?self.notificationCount;

//??遠程推送畏纲,只能服務(wù)器來修改badge的值

//?在JPush平臺發(fā)送通知時的可選設(shè)置中?+1,則正常顯示春缕,默認為1 上報badge

[JPUSHService?setBadge:+1];

//?==============================================================

// 1 --?應(yīng)用處于前臺收到推送的時候轉(zhuǎn)成本地通知霍骄,效果跟其他狀態(tài)下一致

//?==============================================================

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

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

notification.userInfo?=?userInfo;

[[UIApplication?sharedApplication]?presentLocalNotificationNow:notification];

}

//?==============================================================

//?2 -- 在程序活躍狀態(tài)下,程序設(shè)置彈出提示框淡溯,但推送不會以橫幅读整、聲音形式展示

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

//????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];

//????}

}

“自定義消息”形式發(fā)送,當App處于活躍狀態(tài)(前臺)時咱娶,設(shè)備能收到的遠程消息米间,需要注冊kJPFNetworkDidReceiveMessageNotification?通知

//? 自己封裝的注冊通知方法,在初始化APNs和JPush之后調(diào)用即可

-?(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服務(wù)端傳遞的Extras附加字段膘侮,key是自己定義的

// 代碼在程序活躍狀態(tài)下屈糊,以彈框形式展示消息內(nèi)容

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

message:content

delegate:nil

cancelButtonTitle:@"OK"

otherButtonTitles:nil];

[alertView?show];

}


下面說一下 cocos2-x-2.2.6項目,接入上述JPush sdk相關(guān)代碼琼了,使用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類型昧诱,具體修改內(nèi)容如下:

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)有關(guān)

修改 項目名下 ?Deployment Target ?6.0? 為??8.0

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

無效!T镆蜈亩!

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

上述錯誤跟警告無關(guān)懦窘。

后來發(fā)現(xiàn)JPush 版本更新文檔描述中說,需要去掉-ObjC稚配,由于原項目接其他SDK時有加-ObjC畅涂,并且之前接的其他的SDK已經(jīng)不再使用。

解決方案:選中 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午衰,運行

接收的遠程推送消息中的應(yīng)用名稱顯示錯誤

原因是之前將接入JPush的Demo安裝到手機中,手機接收消息有緩存愤惰,到運行正式項目時,名稱(ICON也可能錯誤)顯示為原來的Demo中的名稱

解決方案:重啟手機赘理,運行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宦言,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子商模,更是在濱河造成了極大的恐慌奠旺,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件施流,死亡現(xiàn)場離奇詭異响疚,居然都是意外死亡,警方通過查閱死者的電腦和手機瞪醋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門忿晕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人银受,你說我怎么就攤上這事践盼。” “怎么了宾巍?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵咕幻,是天一觀的道長。 經(jīng)常有香客問我顶霞,道長肄程,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任选浑,我火速辦了婚禮蓝厌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘古徒。我一直安慰自己褂始,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布描函。 她就那樣靜靜地躺著崎苗,像睡著了一般狐粱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胆数,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天肌蜻,我揣著相機與錄音,去河邊找鬼必尼。 笑死蒋搜,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的判莉。 我是一名探鬼主播豆挽,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼券盅!你這毒婦竟也來了帮哈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤锰镀,失蹤者是張志新(化名)和其女友劉穎娘侍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泳炉,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡憾筏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了花鹅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氧腰。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖刨肃,靈堂內(nèi)的尸體忽然破棺而出容贝,到底是詐尸還是另有隱情,我是刑警寧澤之景,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布斤富,位于F島的核電站,受9級特大地震影響锻狗,放射性物質(zhì)發(fā)生泄漏劣坊。R本人自食惡果不足惜埃唯,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧廓鞠,春花似錦担租、人聲如沸砖顷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崇众。三九已至掂僵,卻和暖如春航厚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锰蓬。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工幔睬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芹扭。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓麻顶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親舱卡。 傳聞我的和親對象是個殘疾皇子辅肾,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容