美文网首页
iOS 10 遇到的问题

iOS 10 遇到的问题

作者: Sun_ChuanLu | 来源:发表于2016-12-26 12:10 被阅读0次

    本人很懒,遇到问题才去解决问题。所以直到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

    1. 待续 找到一个博客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就可以了。

    相关文章

      网友评论

          本文标题:iOS 10 遇到的问题

          本文链接:https://www.haomeiwen.com/subject/vqljvttx.html