iOS10适配问题点总结

说在前面

iOS10和xcode8的GM版都放出了下载,我怀着忐忑的心更新了下(怕有适配问题啊!!!),先更新的xcode8,跑了下公司的项目,除了nullable字段有问题其他都还比较顺利,不过项目跑起来,还是有一点小问题,好在不像iOS9更新时变化那么多,然后我又给手机升级了iOS10,跑了个真机,结果一不小心测试到后半夜2点。。。浪费了一上午玩游戏的好时光。本篇就我碰到的问题一一整理,希望有类似问题的猴们,可以有点参考。

问题点

问题一(nullable)

Q:以前是可以nullable的,现在的报错了。

A:删掉就好了😂

问题二(系统权限)

Q:xcode8编译的版本在访问相机、相册等需要用户点击允许开通权限的地方会崩溃

A:由于iOS10对Security and Privacy Enhancements安全和保密性增强,在申请很多私有权限时,都需要添加描述,不添加会crash。解决办法,只需在info.plist里配置上请求权限的描述信息就可以了。

<key>NSCameraUsageDescription</key>
<string>描述信息</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>描述信息</string>

这里以相机和照片权限为例,描述信息可以是任何字符串,跟iOS9中的访问位置的字段是类似的

<key>NSLocationAlwaysUsageDescription</key>
<string></string>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>

下面列出所有的key,用到的自行添加吧。

NSBluetoothPeripheralUsageDescription
NSCalendarsUsageDescription
NSCameraUsageDescription
NSContactsUsageDescription
NSHealthShareUsageDescription
NSHealthUpdateUsageDescription
NSHomeKitUsageDescription
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
NSMicrophoneUsageDescription
NSMotionUsageDescription
NSPhotoLibraryUsageDescription
NSRemindersUsageDescription
NSSiriUsageDescription
NSSpeechRecognitionUsageDescription
NSVideoSubscriberAccountUsageDescription
NSVoIPUsageDescription

问题三(App跳转设置)

Q:访问当前应用的设置页面的问题

NSURL *url = [NSURL URLWithString:@"prefs:root=bundleIn identifier"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}

本来在iOS7-9上都正常工作的如上方式的跳转设置页面,在iOS10上点击会报下面的错误

A:解决办法也很简单,实际上从iOS8开始就提供了直接跳转设置页面的url

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
替换成这个url就ok了,顺便openUrl方法在iOS10中也废弃了,不过还是可以用滴

- (BOOL)openURL:(NSURL*)url NS_DEPRECATED_IOS(2_0, 10_0, "Please use openURL:options:completionHandler: instead") NS_EXTENSION_UNAVAILABLE_IOS("");
改为
- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion NS_AVAILABLE_IOS(10_0) NS_EXTENSION_UNAVAILABLE_IOS("");

问题四(字体变化引发的文字宽高计算问题)

Q:xcode7编译的包,动态计算一段文字的高度时,计算出来的高度在iOS10设备上不足以容纳这段文字

A:因为iOS10更换了系统字体,所以会导致文字的大小跟iOS9及之前的系统有点区别,如果继续使用xcode7编译的话,建议在文字高度上多加5。

或者直接使用xcode8编译的包也可以,文字的高度计算结果是正确的。

至于类似YYText这样的库,底层使用CoreText写的,xcode7、xcode8上都会存在这个问题,在最后的计算出来的高度上直接加5就ok了。

问题五(推送获取device token问题)

Q:推送中在获取device token时,会报如下错误

A:打开如下设置

然后会自动生成如下文件

打开如下显示

字段对应两种状态:development和production,然后再运行,即可成功获取device token了。

问题六(iOS7支持问题)

xcode8开始,不再支持iOS7,最低支持到iOS8。

不过既然iOS10都出了,而且iOS7用户量是真心少,我觉得iOS7就可以舍弃了,还减轻了开发成本,一些老的库,比如ALAsset,性能真的不行了。不过还是得听领导安排啊哈哈。还好xcode8编译的ipa包,装在iOS7设备上,还是可以正常工作的,无非是测试时麻烦了点。

以上所述是小编给大家介绍的iOS10适配问题点总结,字体适配和编译不过的问题及解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

时间: 2016-09-25

Xcode8下iOS10常见报错闪退,字体适配和编译不过的问题及解决方案

9月14日凌晨1点,苹果推送了iOS10,于是一上班就迅速升级了iOS10,然后坑就这样开始了... 问题1 首先是xcode的问题,发现xcode升级到8才能真机运行,于是先了解了下iOS10的适配. 有这个iOS10适配总结,还有这个iOS10适配问题收集整理,还有这个iOS10适配,还有很多其他的. 这个好办,取消nullabl关键字就好. 然后另一个蛋疼的问题来了 问题二,编译不过的问题 蛋疼的clang报错le.. 这个是详细的信息,一堆莫名其妙的东西出来了. 隐隐约约感觉是WGS84

iOS10适配(必看)

一.工程改动 1. 工程配置 直接使用Xcode8Beta打开工程后,你会发现你的provisonfile配置出了问题,这是由于在Xcode8中对工程配置有了一些小的改动. 在Xcode8工程配置的general选项卡中,使用更详细signing选项替换了原有的team选项. 选中:project -> target -> general Xcode8之前team选项 Xcode8之前provisionfile选项 Xcode8之后变更为signing选项 2. swift版本 假如你Xcod

Xcode8以及iOS10适配等常见问题汇总(整理篇)

随着iOS 10的更新以及Xcdoe 8的更新出现了很多问题,今天小编抽时间把我遇到的坑和大家分享下,一起看看吧. 1.访问权权限问题 iOS 10 开始对访问用户隐私权限更加严格,如果你不设置就会直接崩溃,解决办法都是在info.plist文件添加对应的Key-Value就可以了. PS:对应的value可以自定义填写 2.Xcode 8 运行打印一堆Log的解决办法 只要在Run->Arguments->Environment Variables 添加如下key-value值即可 OS_A

iOS10 适配远程推送功能实现代码

iOS10正式版发布之后,网上各种适配XCode8以及iOS10的文章满天飞.但对于iOS10适配远程推送的文章却不多.iOS10对于推送的修改还是非常大的,新增了UserNotifications Framework,今天就结合自己的项目,说一说实际适配的情况. 一.Capabilities中打开Push Notifications 开关 在XCode7中这里的开关不打卡,推送也是可以正常使用的,但是在XCode8中,这里的开关必须要打开,不然会报错: Error Domain=NSCocoa

iOS开发之适配iOS10以及Xcode8

iOS开发:适配iOS10以及Xcode8 现在在苹果的官网上,我们已经可以下载到Xcode8的GM版本了,加上9.14日凌晨,苹果就要正式推出iOS10系统的推送了,在此之际,iOS10的适配已经迫在眉睫啦,不知道Xcode8 beat版本,童鞋们有木有下载过来试试呢?就我的使用来说,总体觉得苹果还是坑不断,但是也在一直进步的啦.下面我就来说说,iOS10的适配以及Xcode8使用上的一些注意点. 一.证书管理 用Xcode8打开工程后,比较明显的就是下图了,这个是苹果的新特性,可以帮助我们自

iOS10适配问题收集整理

1.TencentOpenAPI的坑 表现:启动就crash 原因:由于很久没有更新该sdk了,用的版本是2.3.1.后来想着去官网下个最新的吧,不过最新的是3.0的版本,替换原来的sdk后,有些接口和头文件定义的问题,直接编译不过.为了少踩点坑,还是选择了其他项目已经在用的2.8版本.该版本可以直接替换,在iOS10上顺利解决. 2.私有权限申请的坑 表现:Xcode8编译的版本,首次打开相机.相册.获取通讯录.录视频...统统crash 原因:由于iOS10对Security and Pri

iOS10 App适配权限 Push Notifications 字体Frame 遇到的问题

添加配置权限 <!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>"xx"想使用您的相册,需要您的允许</string> <!-- 相机 --> <key>NSCameraUsageDescription</key> <string>"xx"想使用您的相机,需要您的允许</strin

iOS10适配之权限Crash问题的完美解决方案

升级 iOS 10 之后目测坑还是挺多的,记录一下吧,看看到时候会不会成为一个系列. 直入正题吧 今天在写 Swift 3 相关的一个项目小小练下手,发现调用相机,崩了.试试看调用相册,又特么崩了.然后看到控制台输出了以下信息: This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app's Info.plist must cont

兼容iOS 10 升级xcode8出现的问题及一些适配问题的解决方案

1推送 xcode 升级到8之后很多人的推送接收不到了.获取不到token了 一朋友搞了一小时没找到原因. 只因看下图吧....我发觉xcode 我不打开他也能收到通知. 但是到了8(必须打开了才能收到推送) . 貌似不行了 大家对号入座吧. 下面普及下ios10跟之前的推送的区别 •iOS 9 以前的通知 1.在调用方法时,有些方法让人很难区分,容易写错方法,这让开发者有时候很苦恼. 2.应用在运行时和非运行时捕获通知的路径还不一致. 3.应用在前台时,是无法直接显示远程通知,还需要进一步处理

iOS 10 和Xcode8 一起 创建 Siri 功能步骤详解(OC写的 )

iOS 10 出来之后,我们开发者也可以使用类似Siri的功能..让我们来看看怎么使用吧,其实他是使用Siri里面的一个语音识别框架Speech framework. 让我们来看看 一些 主要的代码吧. 我们需要一个 UITextView 和 UIButton 就 能体现了. 第一步:定义属性 @interface ViewController () <SFSpeechRecognizerDelegate> @property (strong, nonatomic) UIButton *sir

iOS 10即将来袭!升级你的iOS开发装备

WWDC(苹果开发者大会)刚刚过去不久,iOS 10将不久来袭,是时候升级你的iOS开发装备了!小编整理了10款必备开发工具,让你的开发过程事半功倍. SourceTree SourceTree是一个免费的Mac软件,主要用于Git和Mercurial版本控制.它可以帮助你进行源代码控制计划,跟传统的复杂的命令行版本控制软件相比,SourceTree是一款独一无二的GUI工具.对于新手Git用户来说,SourceTree使用起来简单且高效,对于经验丰富的app开发人员来说,SourceTree有

Xcode 9下适配iPhoneX导致iOS 10不兼容问题的解决方法

前言 前久发现测试组提交来一个 bug,说有的布局在 iOS 11 上正常,在 iOS 10 下不正常.分别在 iOS 11 模拟器和 iOS 10.3 模拟器上跑了一下 app,发现果然如此,如下图所示: iOS 11 下点击"省市广播站",下级菜单中的按钮正常显示: iOS 10 下点击"省市广播站",下级菜单显示为空白: 解决方法 检查代码,发现下级菜单中的按钮是以手动布局方式动态添加到一个 scroll view 中的.添加时指定了按钮的框架,框架计算完全正

Textarea输入字数限制实例(兼容iOS&安卓)

最近在做一个微信公众号的页面,其中有对textarea做输入字数限制,而且需要兼容iOS和安卓手机, 下面直接贴代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>textarea输入字数限制(兼容ios和安卓)</title> </head> <body> <!-- 最

iOS 10拨打系统电话弹出框延迟出现问题的解决

前言 最近在开发中遇到了一些问题,发现iOS 10拨打系统电话发现弹出框会延迟2s左右出现,很不爽,研究了一下,发现是openURL在iOS 10及其之后会阻塞主线程 所以,拨打电话前,做个判断,下面话不多说了,来一起看看详细的介绍吧. 示例代码: // 拨打电话 + (void)callPhone:(NSString *)phoneNum { if ([ISNULL(phoneNum) length] == 0) { [SVProgressHUD showErrorWithStatus:@"拨

Angularjs 动态改变title标题(兼容ios)

废话不多说了,直接给大家贴代码了,具体代码如下所示: <pre name="code" class="javascript">angular.module('myApp.loginCtrl', []) .config(function($httpProvider) { $httpProvider.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded;charset

iOS 10 推送高阶篇(必看)

推荐阅读: iOS10推送之基础知识(必看篇) 这篇文章开始,我会跟大家好好讲讲,苹果新发布的iOS10的所有通知类. 一.创建本地通知事例详解: 注意啊,小伙伴们,本地通知也必须在appdelegate中注册中心,通知的开关打不打开无所谓的,毕竟是本地通知,但是通知的接收的代理,以及通知点击的代理,苹果给合二为一了.所以大家还是需要在appdelegate中写上这2个方法,还有不要忘记在- (BOOL)application:(UIApplication *)application didFi

iOS 10 Today Widget解析

一.前言     前面一篇iOS开发之widget实现文章说到了如何在iOS 8.0-9.3上实现widget,可是iOS 10已经来袭,不了解一下iOS 10,把widget适配上去,说不过去呀!所以,本篇文章就接着说下iOS 10上面Today Widget的坑坑洼洼. 二.Today Widget新特性     安装完iOS 10的beta版本,发现苹果越发重视widget了:快速浏览,及时从喜爱的应用中了解信息,如图1所示.     现在,从锁屏页面,下拉通知栏的第一页,还有左滑主页面都

iOS 10 使用相机相簿闪退的bug修正方法

iOS 10 新规定,在取用相机,相簿,联络资讯,麦克风需要在 Info.plist 加入指定的 key,否则闪退: Info.plist <key>NSPhotoLibraryUsageDescription</key> <string>使用相簿需要您的同意</string> <key>NSCameraUsageDescription</key> <string>使用相机需要您的同意</string> <