本人很懶,遇到問(wèn)題才去解決問(wèn)題囊卜。所以直到10.2才去適配,希望開(kāi)發(fā)同仁們都不要像我一樣檩赢。
以下是本人做10適配遇到的問(wèn)題及解決辦法搬卒,后續(xù)會(huì)補(bǔ)充瑟俭,當(dāng)然解決辦法也是從網(wǎng)上各種搜索得來(lái)的,在這里記錄下來(lái)以免自己走老坑契邀。
(ps:xcode版本8.2摆寄,為什么我在這說(shuō)一下版本,因?yàn)槲以瓉?lái)用的7.1,一直安然無(wú)恙微饥,所以就認(rèn)為低版本無(wú)法去適配就不用適配逗扒,看官當(dāng)個(gè)笑話就好 )
1 . 舊版本推送正常,新版本推送也可以接收欠橘,但一些操作沒(méi)有正常執(zhí)行
這就是舊版本推送都會(huì)出現(xiàn)的問(wèn)題矩肩,話不多說(shuō),貼步驟简软。
首先點(diǎn)擊TARGETS
里你的項(xiàng)目蛮拔, 找到capabilities -> Push Notcations
打開(kāi)開(kāi)關(guān), 下邊會(huì)有兩個(gè)對(duì)號(hào)自動(dòng)勾上痹升,第一個(gè)可能會(huì)爆紅建炫,如果爆紅如何解決,后面會(huì)說(shuō)到疼蛾。
然后 capabilities -> Background Modes
勾選 Remote notifications
肛跌。 網(wǎng)上的資料也沒(méi)說(shuō)是否必須勾選,但是我舊的項(xiàng)目就需要勾選察郁,所以我保持勾選狀態(tài)衍慎。
繼續(xù) Build Phases -> Link Binary With Libraries
點(diǎn)擊加號(hào)添加 UserNotifications.framework
來(lái)到Appdelegate.h文件,引用系統(tǒng)文件 #import<UserNotifications/UserNotifications.h>
皮钠,添加代理UNUserNotificationCenterDelegate
來(lái)到Appdelegate.m文件稳捆,didFinishLaunchingWithOptions
仍然在該方法注冊(cè)通知,但需要判斷版本號(hào)麦轰,如果是高于iOS10版本:
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
if( !error ){
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
}];
iso8和ios7就不貼了乔夯。懶
注意了,高于iOS10版本(包括iOS10):
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
不會(huì)再調(diào)用
取而代之是另外兩個(gè)方法:
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{//應(yīng)用在前臺(tái)
NSDictionary * userInfo= notification.request.content.userInfo;
//功能:可設(shè)置是否在應(yīng)用內(nèi)彈出通知
completionHandler(UNNotificationPresentationOptionAlert);//設(shè)置0就可以禁用前臺(tái)彈出通知
}
和
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler//應(yīng)用在后臺(tái)
好了款侵,舊的代碼按需要copy到這兩個(gè)方法中就可以了末荐,當(dāng)然原來(lái)的代碼依然保持原樣。
2 . Xcode8 以上打包問(wèn)題
正常開(kāi)發(fā)情況下 勾選 General -> Signing -> Automatically manage signing
會(huì)自動(dòng)配置好證書新锈。 好了甲脏,回到 1 . 爆紅的問(wèn)題,你再去看看是不是不紅了
如果要打包妹笆,需要把這個(gè)勾去掉块请,再去 Signing(Release)
選擇你的Profile文件就好了。
3 . Xcode8 輸出很多不需要的日志
Product -> Scheme -> Edit Scheme... -> Run -> Arguments -> Environment Variables
里邊添加 OS_ACTIVITY_MODE = disable
4.Call to unavailable function 'system': not available on iOS 遇到一個(gè)用lua語(yǔ)言寫的游戲拳缠,用到cocoa2d引擎墩新。http://blog.csdn.net/u013152587/article/details/78043474
5.內(nèi)購(gòu):http://www.reibang.com/p/86ac7d3b593a
- 待續(xù) 找到一個(gè)博客
http://www.cnblogs.com/fuunnyy/p/5896032.html
很多問(wèn)題沒(méi)有遇到也沒(méi)嘗試,有空整理下再記錄脊凰。
iOS 13 遇到的問(wèn)題
1.Command PhaseScriptExecution failed with a nonzero exit code
解決方案:在Xcode菜單欄選擇File -> Workspace Setting -> Build System 選擇Legacy Build System 重新運(yùn)行即可抖棘。
2.這個(gè)問(wèn)題是引用腳本語(yǔ)言遇到的:unable to attach DB error
解決方案OBJROOT="${OBJROOT}" 修改為 OBJROOT="${OBJROOT}/DependentBuilds"
ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability.
此問(wèn)題是在5月1之后忽然出現(xiàn)的茂腥,提交的版本無(wú)法在構(gòu)建版本中出現(xiàn)、且收到一封此內(nèi)容郵件切省。
我先是在項(xiàng)目中全局搜索UIWebView最岗,并沒(méi)有查找到使用此控件。
正確解決方案進(jìn)入終端->cd 項(xiàng)目文件夾->grep -r UIWebView .
就會(huì)發(fā)現(xiàn)哪里使用了此控件(我是在支付寶sdk中)朝捆。更換支付寶sdk就可以了般渡。