升级到XCode9(BaseSDK:iOS11)的各种坑

原文地址:http://blog.csdn.net/dangyalingengjia/article/details/77964582


XCode9和iOS11 beta了不知多少版本了,正式版本还没有正式发布。我也终于忍不了了,还是都做了升级。设备版本分别为:

XCode:Version 9.0 beta 6 (9M214v)

iPhone:11.0(15A5370a)

下面的问题都是在iOS11之前的版本运行完好,但是升级后出现的问题:

1,定位相关

问题描述:无法定位,而且程序在安装后第一次访问定位权限时,无定位权限提示对话框弹出。

原因:iOS11 定位相关的权限做了更改,在iOS11上使用了新的定位权限key。

解决方案:

如果原来申请的权限是始终允许NSLocationAlwaysUsageDescription,那么需要在保留原来的key的基础上增加NSLocationWhenInUseUsageDescription和NSLocationAlwaysAndWhenInUsageDescription。具体参考另篇博客:

http://blog.csdn.net/dangyalingengjia/article/details/77965029

2,系统相册相关

问题描述:iOS11上读写相册的照片时发生崩溃。

原因:由于相册相关权限的key发生了变化。用户在没有权限的情况下,访问相册导致崩溃。

解决方案:

iOS11之前相册对应的key是NSPhotoLibraryUsageDescription,iOS11对应的Key是NSPhotoLibraryAddUsageDescription。同定位的Key一样,由于key没有兼容性,所以需要保留原key以兼容iOS10及之前版本。

3,第三方库WKWebViewJavascriptBridge

问题描述:在WKWebView的回调函数中崩溃:

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)

原因:WKWebViewJavascriptBridge内部逻辑问题

解决方案:WKWebViewJavascriptBridge最新的6.0.2上仍然没有解决这个问题,可以参考github issue#272

只能手动修改源文件,将if改为 else if

4,关于UIScrollView初始位置变化的问题

由于iOS11废弃了UIViewController的automaticallyAdjustsScrollViewInsets属性,位置需要手动调整。

iOS11中为UIScrollView新增了contentInsetAdjustmentBehavior属性,结合UIAppearance协议,可以统一在appDelegate的didFinishLaunchingWithOptions的最开始增加:

if#available(iOS 11.0, *) {UIScrollView.appearance().contentInsetAdjustmentBehavior=.never}

1

2

3

推荐阅读更多精彩内容

  • 前言 最近公司的很多流量产品需要适配iOS 11 和iPhone X,由于公司的iPhone X到的比较晚,拖了好...
    花了个缺阅读 510评论 0 2
  • 更新中......(部分省略) 10.19已更新10.20已更新11.4 已更新 文章推荐:不可能不爱的 XCOD...
    百草纪阅读 1,434评论 0 18
  • 清晨下的客栈。安详宁静。 书上说“夜晚的丽江沦为符号,清晨的丽江才是真正的丽江。” 我信了。 所以,万物尚在熟睡之...
    学武止境van阅读 122评论 1 3
  • 一个像夏天,一个像秋天,我们就这样长大了。 在她上高二那年寒假,她准备离开那个家,那个不属于她的家,和他远走高飞...
    拥我入怀is阅读 76评论 0 2
  • 一直对文学和艺术工作者有一种特殊的情感,类似于崇拜。一直希望自己也可以写出很好的文字,绘出不一般的画作,然而好...
    等待戈登阅读 110评论 0 0