【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,同时会暴露用户位置,所以需要定位允许才能拿到。
解决方案只能在产品设计层面友好处理。