美文网首页Bug收集
iOS10和Xcode8适配整理

iOS10和Xcode8适配整理

作者: 风暴小明 | 来源:发表于2016-09-23 18:10 被阅读234次

    *摘抄于网络各路大神 — — *

    一、iOS10 适配问题

    1. 系统判断版本方法

    //值为 1
    [[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]
    //值为10.000000
    [[UIDevice currentDevice] systemVersion].floatValue,
    //值为10.0
    [[UIDevice currentDevice] systemVersion]
    

    2. UserNotifications(用户通知)变化

    iOS 10 开始的通知

    1.所有相关通知被统一到了UserNotifications.framework框架中。

    2.增加了撤销、更新、中途还可以修改通知的内容。

    3.通知不在是简单的文本了,可以加入视频、图片,自定义通知的展示等等。

    4.iOS 10相对之前的通知来说更加好用易于管理,并且进行了大规模优化,对于开发者来说是一件好事。

    5.iOS 10开始对于权限问题进行了优化,申请权限就比较简单了(本地与远程通知集成在一个方法中)。

    3. ATS的问题

    iOS 9中默认HTTP的网络是不推荐使用的,当然我们也可以把NSAllowsArbitraryLoads设置为YES禁用ATS。不过iOS 10从2017年1月1日起苹果不允许我们通过这个方法跳过ATS,也就是说强制我们用HTTPS,如果不这样的话提交App可能会被拒绝。但是我们可以通过NSExceptionDomains来针对特定的域名开放HTTP可以容易通过审核。

    4. iOS 10 隐私权限设置

    iOS 10 开始对隐私权限更加严格,如果你不设置就会直接崩溃,现在很多遇到崩溃问题了,一般解决办法都是在info.plist文件添加对应的Key-Value就可以了。

    以上Value值,圈出的红线部分的文字是展示给用户看的,需要自己添加规范的提示说明,不能为空。

    5. UIStatusBar的问题

    在iOS10中,如果还使用以前设置UIStatusBar类型或者控制隐藏还是显示的方法,会报警告,方法过期,要想修改UIStatusBar的样式或者状态使用下面所示的属性或方法:

    @property(nonatomic, readonly) UIStatusBarStyle preferredStatusBarStyle  
    
    @property(nonatomic, readonly) BOOL prefersStatusBarHidden
    
    - (UIStatusBarStyle)preferredStatusBarStyle 
    
    - (BOOL)prefersStatusBarHidden 
    
    - (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
    

    6. iOS 10项目中有的文字显示不全问题

    英文字母会不会也有这种问题,我又通过测试,后来发现英文字母没有问题,只有汉字有问题。目前只有一个一个修改控件解决这个问题,暂时没有其他好办法来解决。

    1. iOS 10 ImagePickerController.cameraViewTransform问题

    很多人反映自定义相机出现了问题,cameraViewTransform不能用了,其实网上关于这个的资料不是很多,在这里提供参考办法如下:

    //#import <AVFoundation/AVFoundation.h>
      //监听
       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cameraNotification:) name:AVCaptureSessionDidStartRunningNotification object:nil];
      //监听方法
      - (void)cameraNotification:(NSNotification *)notification {
        dispatch_async(dispatch_get_main_queue(), ^{
              // 这里实现
              imagePickerController.cameraViewTransform = CGAffineTransformMakeTranslation(50,  50);
          });
      }
     
    

    看来UIImagePickerController视乎不在适用于iOS 10了。所以说可以选择AVFoundation来解决这个问题。

    8. 代码及Api注意

    使用Xcode8之后,有些代码可能就编译不过去了,具体我就说说我碰到的问题。
    1.UIWebView的代理方法:

    
    **注意要删除NSError前面的 nullable,否则报错。
    - (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error {
    
        [self hideHud];
    }
    

    二、Xcode 8 变动

    1. Xcode 8 运行一堆没用的logs解决办法

    解决办法是设置 OS_ACTIVITY_MODE : disable如下图:

    2. Xcode 8代码注释不能用的解决办法

    这个是因为苹果解决xcode ghost,把插件屏蔽了。

    解决办法(fix method):

    打开终端,命令运行:sudo /usr/libexec/xpccachectl

    重启电脑后生效

    3. Xcode 8使用Xib awakeFromNib的警告问题

    应该明确的加上[super awakeFromNib];

    4. 屏蔽杂乱无章的bug

    更新Xcode8之后,新建立工程,都会打印一堆莫名其妙看不懂的Log.

    屏蔽的方法如下:

    Xcode8里边 Edit Scheme-> Run -> Arguments, 在Environment Variables里边添加

    OS_ACTIVITY_MODE = Disable

    5.自动管理证书

    用Xcode8打开工程后,比较明显的就是下图了,这个是苹果的新特性,可以帮助我们自动管理证书,在Xcode的偏好设置中,添加苹果账号,即可。。


    6.Xib文件的注意事项

    使用Xcode8打开xib文件后,会出现下图的提示。


    大家选择Choose Device即可。
    之后大家会发现布局啊,frame乱了,只需要更新一下frame即可。如下图

    注意:如果按上面的步骤操作后,在用Xcode7打开Xib会报一下错误

    解决办法:需要删除Xib里面<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>这句话,以及把< document >中的toolsVersion和< plugIn >中的version改成你正常的xib文件中的值
    ,不过不建议这么做,在Xcode8出来后,希望大家都快速上手,全员更新。

    三、一些改动

    1. UIColor的问题

    官方文档中说:大多数core开头的图形框架和AVFoundation都提高了对扩展像素和宽色域色彩空间的支持.通过图形堆栈扩展这种方式比以往支持 广色域的显示设备更加容易。现在对UIKit扩展可以在sRGB的色彩空间下工作,性能更好,也可以在更广泛的色域来搭配sRGB颜色.如果你的项目中是 通过低级别的api自己实现图形处理的,建议使用sRGB,也就是说在项目中使用了RGB转化颜色的建议转换为使用sRGB,在UIColor类中新增了 两个api:

    - (UIColor *)initWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);  
    
    + (UIColor *)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);  
    
    

    2. 真彩色的显示

    真彩色的显示会根据光感应器来自动的调节达到特定环境下显示与性能的平衡效果,如果需要这个功能的话,可以在info.plist里配置(在Source Code模式下): UIWhitePointAdaptivityStyle

    3. UITextField 类型判断

    在iOS 10 中,UITextField新增了textContentType字段,是UITextContentType类型,它是一个枚举,作用是可以指定输入框 的类型,以便系统可以分析出用户的语义.是电话类型就建议一些电话,是地址类型就建议一些地址.可以在#import 文件中,查看 textContentType字段

    4. UICollectionViewCell的的优化

    在iOS 10 之前,cell只能从重用队列里面取出,再走一遍生命周期,并调用cellForItemAtIndexPath创建或者生成一个cell.
    在iOS 10 中,系统会cell保存一段时间,也就是说当用户把cell滑出屏幕以后,如果又滑动回来,cell不用再走一遍生命周期了,只需要调用willDisplayCell方法就可以重新出现在屏幕中了.
    iOS 10 中,系统是一个一个加载cell的,而以前是一行一行加载的,这样就可以提升很多性能; 并且新增加的Pre-Fetching预加载,对UITableViewCell同样适用。

    5. UIRefreshControl的使用

    在iOS 10 中, UIRefreshControl可以直接在UICollectionViewUITableView中使用,并且脱离了UITableViewController现在RefreshControlUIScrollView的一个属性.

    6. iOS 10 字体随着手机系统字体而改变

    当我们手机系统字体改变了之后,那我们App的label也会跟着一起变化,这需要我们写很多代码来进一步处理才能实现,但是iOS 10 提供了这样的属性adjustsFontForContentSizeCategory来设置。

    相关文章

      网友评论

        本文标题:iOS10和Xcode8适配整理

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