程序员

【iOS】Xcode11兼容

2019-10-18  本文已影响0人  努力奋斗的绝望者

【1】AES加密解密出现问题

NSData的16进制数据转成NSString字符串时,只需要像以下方式一样将多余字符去掉即可。

NSData *data = resultData;
NSString *resultStr = [resultData description];
for (NSString *symbol in @[@" ", @"<", @">", @"-"]) {
    resultStr = [resultStr stringByReplacingOccurrencesOfString:symbol withString:@""];
}

在Xcode11上这个方式却出现了问题,NSData数据的格式出现了变化:
{length=16,bytes=0x4927518258e0ab07d87651d66069a9aa}
兼容方式1:

NSData *data = resultData;
const unsigned *dataBytes = [data bytes];
NSUInteger groupNum = data.length/4;
NSString *result = [NSString string];
for (int i=0;i<groupNum;i++) {
    NSString *subStr = [NSString stringWithFormat:@"%08x",
                            ntohl(dataBytes[i])];
    result = [NSString stringWithFormat:@"%@%@",result,subStr];
}

兼容方式2:
这种方式是通过转ASCII的方式也可以,不过性能方面会差一些。

#pragma mark - String Conversion
-(NSString*)hex:(NSData*)data {
   NSMutableData *result = [NSMutableData dataWithLength:2*data.length];
   unsigned const char* src = data.bytes;
   unsigned char* dst = result.mutableBytes;
   unsigned char t0, t1;

   for (int i = 0; i < data.length; i ++ ) {
      t0 = src[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];
}

【2】RSA加密解密出现问题

出现问题原因同上,解决方式同上

【3】推送deviceToken出现问题

出现问题原因同上,解决方式同上

【3】系统为开启定位,无法获取Wi-Fi的SSID

苹果爸爸给出的解释是,获取Wi-Fi的SSID,同时会暴露用户位置,所以需要定位允许才能拿到。
解决方案只能在产品设计层面友好处理。

上一篇 下一篇

猜你喜欢

热点阅读