iOS版本适配

iOS13适配研究

2019-08-07  本文已影响0人  流年划过颜夕

iOS13今年秋季会发布,最近深入研究了下公司APP适配iOS13的注意点,适配如下。

1.由于Xcode10移除了libstdc++,之前虽然采用拷贝粘贴的方案将Xcode9的相关c++库复制到Xcode10还可以完美运行,但是现在最新的Xcode11对于c++库的引用又发生了改变,虽然libstdc++拷贝粘贴方案对于部分功能起效,但是由于App太多老旧的C++代码,依旧导致项目无法正常编译,所以必须要删除历史遗留的libstdc++和其他老旧的c++的代码,App才能被编译,坑!

2.关于推送deviceToken获取逻辑
目前App推送token是按照以前的老办法来获取:

    NSString * hexToken = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; //去掉"<>"
    hexToken = [[hexToken description] stringByReplacingOccurrencesOfString:@" " withString:@""];//去掉中间空格

但是网上有部分开发者反馈iOS13上的description方法对应存在缺陷,甚至会闪退,无法准确获取到token。

虽然自测没有复现,但是为了安全考虑换了种大家推崇的获取方式

    if (![deviceToken isKindOfClass:[NSData class]]) return;
    NSMutableString *deviceTokenString = [NSMutableString string];
    const char *bytes = deviceToken.bytes;
    NSInteger count = deviceToken.length;
    for (int i = 0; i < count; i++) {
        [deviceTokenString appendFormat:@"%02x", bytes[i]&0x000000FF];

当然友盟官方也给出了相应的获取方式:
https://developer.umeng.com/docs/66632/detail/126489

    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])];

3.基于iOS13一运行APP,发现界面变样了


image.png

原来是Apple官方修改了控制器的 modalPresentationStyle 默认值,以前都是默认UIModalPresentationFullScreen,现在新增了个UIModalPresentationAutomatic,自动把以前默认值修改了。

它影响App所有的present出的界面,所以必须要手动将 modalPresentationStyle一个个设为UIModalPresentationFullScreen,真的坑!

4.App运行过程中,会产生奔溃,仔细定位,发现Apple新增了imageWithTintColor方法 image 与App分类中的自定义的方法名产生冲突了 image 所以需要重新修改方法名进行适配

5.注意iOS13新增深色模式,需要适配,但发现很多主流App都没有支持深色模式,如果你公司的App也没有支持深色模式的话,需要在Plist文件中设置——添加"User Interface Style"键,将值设为"UIUserInterfaceStyleLight"

 <key>UIUserInterfaceStyle</key> 
<string>UIUserInterfaceStyleLight</string>

否则深色模式下,UI展示颜色上会有问题!

其他相关iOS13适配问题:
iOS 13 CoreText performance note 问题适配

以上

上一篇下一篇

猜你喜欢

热点阅读