xcode11适配问题汇总

因为之前项目中包含大量swift3.0的代码,一直使用xcode10.2没有时间升级,最近swift升级到4.0后,xcode版本也升级到最新的xcode11.2,发现出现一些适配的问题,主要发现以下几类:

视频播放库MPMoviePlayerController废除,导致闪退。

解决办法:视频播放库改为AVKit库下面的AVPlayerViewController。

UITextField私有属性闪退

iOS 13禁止使用kvc修改私有属性,之前一直使用kvc修改UITextField的palceholder,但是iOS13直接崩溃。

[textField setValue:textColor forKeyPath:@"_placeholderLabel.textColor"];
[textField setValue:font forKeyPath:@"_placeholderLabel.font"];

解决方法:设置textField的attributedPlaceholder属性进行设置。

NSAttributedString* attrString = [[NSAttributedString alloc]initWithString:placeholder attributes:@{NSForegroundColorAttributeName:textColor,NSFontAttributeName:font}];

textField.attributedPlaceholder = attrString;

TabBar中选中颜色在页面push后返回颜色变为蓝色

旧代码使用如下:

/**

设置tabbarItem的字体

@param tabBarItem tabbar

*/

- (void)initTitleWithAtrributions:(UITabBarItem*)tabBarItem{

    NSDictionary *noramalAtributes = [NSDictionary dictionaryWithObjectsAndKeys:

                                      [UIColor darkGrayColor],NSForegroundColorAttributeName,[UIFont systemFontOfSize:13.0],NSFontAttributeName,

                                      nil];

    NSDictionary *selectedAtributes = [NSDictionary dictionaryWithObjectsAndKeys:

                                      [UIColor colorWithHexString:@"#F65757"],NSForegroundColorAttributeName,

                                      [UIFont systemFontOfSize:13.0],NSFontAttributeName,

                                      nil];

    [tabBarItem setTitleTextAttributes:noramalAtributes forState:UIControlStateNormal];

    [tabBarItem setTitleTextAttributes:selectedAtributes forState:UIControlStateSelected];

    //tabBarItem.badgeValue = @"";

    [tabBarItem setTitlePositionAdjustment:UIOffsetMake(0.0, 0.0)];

}

解决方法:设置tabBar的tintColor和unselectedItemTintColor来设置。


     // iOS 13以上

     self.tabBar.tintColor= [UIColor colorWithHexString:@"#F65757"];

     self.tabBar.unselectedItemTintColor = [UIColor darkGrayColor];

iOS13新出之后会有收不到推送的问题

因为iOS13的处理方法变了,处理方案代码如下:


//获取DeviceToken成功- (void)application:(UIApplication *)application

didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

{

    //Xcode11打的包,iOS13获取Token有变化if([[[UIDevice currentDevice] systemVersion] floatValue] >=13) {

        if(![deviceToken isKindOfClass:[NSDataclass]]) {

            //记录获取token失败的描述return;

        }

        constunsigned *tokenBytes = (constunsigned *)[deviceToken bytes];

        NSString *strToken = [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(@"deviceToken1:%@", strToken);

        return;

    } else {

        NSString *token = [NSString

                      stringWithFormat:@"%@",deviceToken];

        token = [token stringByReplacingOccurrencesOfString:@"<"withString:@""];

        token = [token stringByReplacingOccurrencesOfString:@">"withString:@""];

        token = [token stringByReplacingOccurrencesOfString:@""withString:@""];

        NSLog(@"deviceToken2 is: %@", token);

    }

}

模式视图不能到顶部(没有设置modalPresentationStyle)

在iOS 13之前,模态视图默认都是全屏的,而在iOS13中,默认的样式变成了类iPhone上safari的分页样式。

解决办法:

只需要修改modalPresentationStyle为UIModalPresentationFullScreen。

黑夜模式

目前没有适配深夜模式,避免黑夜模式显示异常,在info.plist上添加UIUserInterfaceStyle,并且设置为Light。

使用CryptLib加密后解密失败

iOS13之前使用都正常,在iOS13加密后的外部同样的加密字符串解密时返回为nil错误的,在https://stackoverflow.com/questions/58098958/aes-encryption-cryptlib-in-ios-13-not-working找到了问题所在及解决方法。跟上面推送的问题类似。


NSString*hash=[out description];

解决方法:


#pragmamark - String Conversion-方法一

-(NSString*)hex:(NSData*)data{

  NSData*data=resultData;

  const unsigned*dataBytes=[data bytes];

  NSUInteger groupNum=data.length/4;

  NSString*result=[NSString string];

  for(int i=0;i>4;

    t1=src[i]&0x0F;

    dst[i*2]=48+t0+(t0/10)*39;

    dst[i*2+1]=48+t1+(t1/10)*39;

  }

  return [[NSString alloc]initWithData:result encoding:NSASCIIStringEncoding];

}

你可能感兴趣的:(xcode11适配问题汇总)