本人很懒,遇到问题才去解决问题。所以直到10.2才去适配,希望开发同仁们都不要像我一样。
以下是本人做10适配遇到的问题及解决办法,后续会补充,当然解决办法也是从网上各种搜索得来的,在这里记录下来以免自己走老坑。
(ps:xcode版本8.2,为什么我在这说一下版本,因为我原来用的7.1,一直安然无恙,所以就认为低版本无法去适配就不用适配,看官当个笑话就好 )
1 . 旧版本推送正常,新版本推送也可以接收,但一些操作没有正常执行
这就是旧版本推送都会出现的问题,话不多说,贴步骤。
首先点击TARGETS
里你的项目, 找到capabilities -> Push Notcations
打开开关, 下边会有两个对号自动勾上,第一个可能会爆红,如果爆红如何解决,后面会说到。
然后 capabilities -> Background Modes
勾选 Remote notifications
。 网上的资料也没说是否必须勾选,但是我旧的项目就需要勾选,所以我保持勾选状态。
继续 Build Phases -> Link Binary With Libraries
点击加号添加 UserNotifications.framework
来到Appdelegate.h文件,引用系统文件 #import<UserNotifications/UserNotifications.h>
,添加代理UNUserNotificationCenterDelegate
来到Appdelegate.m文件,didFinishLaunchingWithOptions
仍然在该方法注册通知,但需要判断版本号,如果是高于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
不会再调用
取而代之是另外两个方法:
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{//应用在前台
NSDictionary * userInfo= notification.request.content.userInfo;
//功能:可设置是否在应用内弹出通知
completionHandler(UNNotificationPresentationOptionAlert);//设置0就可以禁用前台弹出通知
}
和
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler//应用在后台
好了,旧的代码按需要copy到这两个方法中就可以了,当然原来的代码依然保持原样。
2 . Xcode8 以上打包问题
正常开发情况下 勾选 General -> Signing -> Automatically manage signing
会自动配置好证书。 好了,回到 1 . 爆红的问题,你再去看看是不是不红了
如果要打包,需要把这个勾去掉,再去 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 遇到一个用lua语言写的游戏,用到cocoa2d引擎。http://blog.csdn.net/u013152587/article/details/78043474
5.内购:https://www.jianshu.com/p/86ac7d3b593a
- 待续 找到一个博客
http://www.cnblogs.com/fuunnyy/p/5896032.html
很多问题没有遇到也没尝试,有空整理下再记录。
iOS 13 遇到的问题
1.Command PhaseScriptExecution failed with a nonzero exit code
解决方案:在Xcode菜单栏选择File -> Workspace Setting -> Build System 选择Legacy Build System 重新运行即可。
2.这个问题是引用脚本语言遇到的: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.
此问题是在5月1之后忽然出现的,提交的版本无法在构建版本中出现、且收到一封此内容邮件。
我先是在项目中全局搜索UIWebView,并没有查找到使用此控件。
正确解决方案进入终端->cd 项目文件夹->grep -r UIWebView .
就会发现哪里使用了此控件(我是在支付宝sdk中)。更换支付宝sdk就可以了。