iOS13适配总结

2,045 阅读3分钟

1. 系统设置中深色模式下,view的背景色默认为深黑色,影响整个APP,可以修改回默认白色

(1)APP统一修改,在info.plist中强制白色模式

<key>UIUserInterfaceStyle</key>
 <string>Light</string>

(2)单个view及其子view强制修改默认模式,解除系统深色模式影响

view.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;

(3)修改window的默认模式,对整个APP有效,官方不推荐使用,推荐修改info.plist

[UIApplication sharedApplication].keyWindow.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;

2.DeviceToken获取方式改变,以下方式兼容所有系统

#include <arpa/inet.h>
-(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])];
    NSLog(@"deviceToken:%@",hexToken);
}

3.KVC 限制,用kvc修改私有属性会崩溃

崩溃写法:

[_textField setValue:self.placeholderColor forKeyPath:@"_placeholderLabel.textColor"];

修改写法:

_textField.attributedPlaceholder =[[NSMutableAttributedString alloc]initWithString:placeholder attributes:@{NSForegroundColorAttributeName : self.placeholderColor}];

4.控制器模态跳转默认效果改变,新版默认跳转至新VC不全屏。

修改为全屏效果,跳转前修改新VC的modalPresentationStyle

if(@available(iOS 13.0,*)){
        newVC.modalPresentationStyle = UIModalPresentationFullScreen;
    }
    [oldVC presentViewController:newVC animated:YES completion:nil];

5.新浪微博SDK崩溃问题

微博SDK3.2.5版本, 已解决崩溃问题,但没有同步到cocoapods,导致cocoapods上最新版及友盟SDK中 有崩溃问题

解决方法: 手动在GitHub下载最新微博SDK,替换项目中的同名文件即可

github.com/sinaweibosd…

6.友盟更新,适配iOS13

info.umeng.com/detail?id=1…

UMCCommon需要升级到2.1.1最新版本

UMCShare需要升级到6.9.6最新版本

pod 'UMCCommon','~> 2.1.1'

pod 'UMCShare/UI','~> 6.9.6'

pod 'UMCShare/Social/WeChat','~> 6.9.6'

pod 'UMCShare/Social/QQ','~> 6.9.6'

pod 'UMCShare/Social/Sina','~> 6.9.6'

7.个推SDK需要升级到最新版2.4.1.0

pod 'GTSDK','2.4.1.0'

8.CYLTabBarController需要升级到最新版本

控制器跳转会引发TabBarController显示异常

pod 'CYLTabBarController','~> 1.28.3'

9. UIWebView废弃,适用范围ios(2.0,12.0),概率性被审核打回

微博SDK3.2.5版本已更新至WKWebview

10.MPMoviePlayerController在iOS13废弃

11. CNCopyCurrentNetworkInfo

developer.apple.com/documentati…

12.UISegmentedControl 默认样式改变

默认样式变为白底黑字

13.APPID登录,使用三方登录的APP要加APPID登录

审核指南4.8使用Apple登录, 必须在2020年4月之前加入
developer.apple.com/app-store/r…

专门使用第三方或社交登录服务的应用程序(如Facebook登录,Google登录,使用Twitter登录,使用LinkedIn登录,使用亚马逊登录或微信登录)来设置或验证用户的主帐户使用该应用程序还必须提供与Apple等同的登录选项。

用户的主要帐户是他们与您的应用程序建立的帐户,用于识别自己,登录和访问您的功能和相关服务。

如果符合以下条件,则无需使用Apple登录:

  • 您的应用专门使用您公司自己的帐户设置和登录系统。
  • 您的应用是教育,企业或商业应用,需要用户使用现有的教育或企业帐户登录。
  • 您的应用使用政府或行业支持的公民身份识别系统或电子ID来验证用户身份。
  • 您的应用是特定第三方服务的客户,用户需要直接登录其邮件,社交媒体或其他第三方帐户才能访问其内容。

14.即将废弃的 LaunchImage

从 iOS 8 的时候,苹果就引入了 LaunchScreen,我们可以设置 LaunchScreen来作为启动页。当然,现在你还可以使用LaunchImage来设置启动图。不过使用LaunchImage的话,要求我们必须提供各种屏幕尺寸的启动图,来适配各种设备,随着苹果设备尺寸越来越多,这种方式显然不够 Flexible。而使用 LaunchScreen的话,情况会变的很简单, LaunchScreen是支持AutoLayout+SizeClass的,所以适配各种屏幕都不在话下。 从2020年4月开始,所有使⽤ iOS13 SDK 的 App 将必须提供 LaunchScreen,LaunchImage即将退出历史舞台