iOS 13适配

2019-11-29  本文已影响0人  Smalla

一、适配详点

  1. 在App内禁用深色模式: 可以在Info.plist(全局) 中,设置 User Interface Style 为 Light。

  2. 跳转AppStore的地址,域名由itunes.apple.com改为apps.apple.com,如果未改动,之前的域名也会重定向至apps.apple.com,建议更换:
    之前为:https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=xxxxxx
    更改为:https://apps.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=xxxxxx

  3. 如果项目使用蓝牙,需要添加两个Key值:

NSBluetoothPeripheralUsageDescription

NSBluetoothAlwaysUsageDescription

Tips:即使原生项目没用到蓝牙权限,但第三方库用到了,仍然需要添加这两个Key值。

  1. 2020年4月份开始,苹果要求所有提交的App默认启动页LaunchImage必须更换为LaunchScreen.storyboard。

  2. KeyWindow在iOS13之后会被废弃,建议更换:
    之前为:UIApplication.shared.keyWindow
    更改为:UIApplication.shared.windows.first

  3. KVC限制,检查项目里用到KVC场景,尽量更换。

  4. 推送DeviceToken获取方式发生改变,用到第三方推送的一般没什么影响,自行更新SDK即可,但原生获取DeviceToken的方法需要检查确认。

  5. 模态弹出交互方式发生改变,iOS13开始新增一种模态弹出动画,如果布局从全屏开始计算,需要充分自测。

  6. 深色模式适配:深色模式下,系统自带的控件,如:Tabbar、NavigationBar等会自己适配,但如果用到自定义颜色或图片,则需要手动适配。

/// 根据不同场景适应不同自定义颜色值,注意,:该方法返回 UIColor
public func adaptColor(with light: UIColor, dark: UIColor) -> UIColor {
    if #available(iOS 13.0, *) {
        let resultColor = UIColor(dynamicProvider: { (traitCollection) -> UIColor in
            if traitCollection.userInterfaceStyle == .dark {
                return dark
            } else {
                return light
            }
        })
        return resultColor
    }
    return light
}

// 调用举例:
tableView.backgroundColor = adaptColor(with: UIColor.white, dark: UIColor.black)

Tips:如果项目里面自定义颜色控件较多,建议封装一个父类去管理能有效减少代码量。
// 调用举例
let currentImage = UIImage(named: "backImage_black")
  1. iOS13之后,UIWebView成为废弃API,需要更换为WKWebView,欢迎参考个人文章:
    iOS WKWebView探究

二、采坑记录

  1. ControllerA和ControllerB,iOS13上ControllerA模态弹出ControllerB,如果用新的弹出动画,会导致当前ControllerB dismiss之后,前一个ControllerA无法执行viewWillAppear、viewDidAppear等生命周期方法。

解决方案:

  1. 在iOS13深色模式下,唤起自定义数字键盘,应用切换至后台再切回,键盘背景自动变为浅色模式。

解决方案:深色模式下,应用从后台切回前台之后,需要重新调用下键盘背景渲染方法。

  1. 微信SDK升级至最新版之后,iOS13上调用微信分享,跳转至微信之后,一直显示“正在连接”。

解决方案:微信最新版SDK要求,微信开发者后台需要配置Universal Link地址,然后App注册WXSDK的方法用到的Universal Link需要与管理后台保持一致。另外,上传服务器的apple-app-site-association文件里的paths需要加上通配符”*”

上一篇 下一篇

猜你喜欢

热点阅读