iOS13.0适配收集

iOS13.0适配收集

第三方登录:

如果 APP 支持三方登陆(Facbook、Google、微信、QQ、支付宝等),就必须支持苹果登录,且要放前边.
黑夜模式:

YYLabel 如果使用了 textLayout属性,切换模式的时候 无法自动修改layout文本的颜色
内嵌WebView,需要手动修改css样式
KVC 限制

UITextField: [self setValue:color forKeyPath:@"_placeholderLabel.textColor"];//替换为self.attributedPlaceholder = [[NSAttributedString alloc] initWithString:self.placeholder attributes:@{NSForegroundColorAttributeName: color}];
UISearchBar, 使用KVC修改私有属性textField, 崩溃
模态弹出默认交互改变

self.modalPresentationStyle = UIModalPresentationFullScreen;
textView.text 截取问题

只要使用截取文本长度的方法,在三指交互点击 撤销时可以必现崩溃

UISegmentedControl 默认样式改变

默认样式变为白底黑字,如果设置修改过颜色的话,页面需要修改
UITabbar 层次发生改变,无法通过设置 shadowImage去掉上面的线

可以参考 腾讯 QMUIKit 里面的实现
App启动过程中,部分View可能无法实时获取到frame

只有等执行完 UIViewController 的 viewDidAppear 方法以后,才能获取到正确的值,在viewDidLoad等地方 frame Size 为 0,例如: [[UIApplication sharedApplication] statusBarFrame];
UIWebView的废弃

部分APP使用webview时, 审核被拒

之前标记为 API_DEPRECATED 部分类被移除

CNCopyCurrentNetworkInfo 变化

iOS13 以后只有开启了 Access WiFi Information capability,才能获取到 SSID 和 BSSID
wi-fi or wlan 相关使用变更

新系统拍live照片,后缀为.mov,图片上传失败

拍照上传的文件为.mov, 一种视频格式,需要服务端支持;

[deviceToken description] 获取到的token格式发生变化

无法推送

MPRemoteCommandCenter

addTarget:action:在iOS 13中selector 一定要返回MPRemoteCommandHandlerStatus,要不然会闪退。

新浪weibo SDK启动崩溃

这个直接影响启动流程,最严重,优先级最高,也许升级sdk后会解决问题;更新到最新的SDK

发票PDF显示乱码

隐私与安全性

当 App 请求获取位置信息时,新增了「只允许一次」的选项;
当 App 在后台使用你的位置信息时,iOS 13 会通过弹窗进行提醒,你可以据此选择是否更新对该应用的隐私权限设置;
MPMoviePlayerController

在iOS13已经不能用了

2020 年 4 月前 App 启动画面必须使用 Launch Storyboards 处理

2020 年 4 月前需通过特定 API 解决屏幕适配及 iPad 分屏多任务处理

第三方库

iOS13 Beta 版适配,发现svga动画无法正常播放,svga中的资源没有加载出来。

 

4.暗黑模式

原理

1.将同一个资源,创建出两种模式的样式。系统根据当前选择的样式,自动获取该样式的资源
2.每次系统更新样式时,应用会调用当前所有存在的元素调用对应的一些重新方法,进行重绘视图,可以在对应的方法做相应的改动

资源文件适配

1.创建一个Assets文件(或在现有的Assets文件中)
2.新建一个图片资源文件(或者颜色资源文件、或者其他资源文件)
3.选中该资源文件, 打开 Xcode ->View ->Inspectors ->Show Attributes Inspectors (或者Option+Command+4)视图,将Apperances 选项 改为Any,Dark
4.执行完第三步,资源文件将会有多个容器框,分别为 Any Apperance 和 Dark Apperance. Any Apperance 应用于默认情况(Unspecified)与高亮情况(Light), Dark Apperance 应用于暗黑模式(Dark)
5.代码默认执行时,就可以正常通过名字使用了,系统会根据当前模式自动获取对应的资源文件

注意

同一工程内多个Assets文件在打包后,就会生成一个Assets.car 文件,所以要保证Assets内资源文件的名字不能相同
UIView

?

1

2

3

4

5

traitCollectionDidChange(_:)

layoutSubviews()

draw(_:)

updateConstraints()

tintColorDidChange()

UIViewController

?

1

2

3

4

traitCollectionDidChange(_:)

updateViewConstraints()

viewWillLayoutSubviews()

viewDidLayoutSubviews()

UIPresentationController

?

1

2

3

traitCollectionDidChange(_:)

containerViewWillLayoutSubviews()

containerViewDidLayoutSubviews()

全局关闭黑暗模式

方式一  配置plist文件: 在Info.plist 文件中,添加UIUserInterfaceStyle key 名字为 User Interface Style 值为String,将UIUserInterfaceStyle key 的值设置为 Light

在开发中,如果用的系统控件(如cell、tableview的背景色)未设置背景色(或者为透明),则进入暗黑模式后,控件背景色变为黑色。

可以每一个页面设置,当然也可以整体设置,

一般我们的APP都是在一个window下的,那就整体设置APP里的window

方式二 :代码关闭黑暗模式 强制关闭暗黑模式

?

1

2

3

4

5

#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0

if(@available(iOS 13.0,*)){

self.window.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;

}

#endif

单个界面不遵循暗黑模式

  • UIViewController与UIView 都新增一个属性 overrideUserInterfaceStyle
  • 将 overrideUserInterfaceStyle 设置为对应的模式,则强制限制该元素与其子元素以设置的模式进行展示,不跟随系统模式改变进行改变
    • 设置 ViewController 的该属性, 将会影响视图控制器的视图和子视图控制器采用该样式
    • 设置 View 的该属性, 将会影响视图及其所有子视图采用该样式
    • 设置 Window 的该属性, 将会影响窗口中的所有内容都采用样式,包括根视图控制器和在该窗口中显示内容的所有演示控制器(UIPresentationController)

iOS适配暗黑模式:https://www.jb51.net/article/169853.htm

5.增加一直使用蓝牙的权限申请

CBCentralManager,iOS13以前,使用蓝牙时可以直接用,不会出现权限提示,iOS13后,再使用就会提示了。

在info.plist里增加

?

1

2

<key>NSBluetoothAlwaysUsageDescription</key>

<string>我们要一直使用您的蓝牙,具体做什么别问我</string>`

6.使用MJExtension 中处理NSNull的不同

这个直接会导致Crash的在将服务端数据字典转换为模型时,如果遇到服务端给的数据为NSNull时,
mj_JSONObject,其中 class_copyPropertyList方法得到的属性里,多了一种EFSQLBinding类型的东西,而且属性数量也不准确,那就没办法了,我只能改写这个方法了,这个组件没有更新的情况下,写了一个方法swizzling掉把当遇到 NSNull时,直接转为nil了。

7. WKWebView 中测量页面内容高度的方式变更

iOS 13以前

document.body.scrollHeight
iOS 13中
document.documentElement.scrollHeight
两者相差55 应该是浏览器定义高度变了

8. 友盟消息推送,获取deviceToken适配

?

1

2

3

4

5

6

7

8

9

- (void)application:(UIApplication *)application

didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

{

 if (![deviceToken isKindOfClass:[NSData class]]) return;

  const unsigned *tokenBytes = (const unsigned *)[deviceToken bytes];

  NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),ntohl(tokenBytes[6]),ntohl(tokenBytes[7])];

  pushDeviceToken = hexToken;

  NSLog(@"deviceToken:%@",hexToken);

}

9. StatusBar 与之前版本不同

目前状态栏也增加了一种模式,由之前的两种,变成了三种, 其中default由之前的黑色内容,变成了会根据系统模式,自动选择当前展示lightContent还是darkContent

10. fishhook 导致的Crash (https://github.com/facebook/fishhook/issues/61

————————————————

参考链接:https://blog.csdn.net/kuangdacaikuang/article/details/100513423

参考链接:https://www.jb51.net/article/169852.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值