当在Simulator中调用此基于目标C的方法时,没关系。
但在实际的iPhone设备中,它会出现Thread 1: signal SIGABRT
warning: could not execute support code to read Objective-C class data in the process. This may reduce the quality of type information available.
这是代码
+ (NSData *)aesDecrypt:(NSURL *)url :(NSString *)key {
NSData *data = [NSData dataWithContentsOfURL: url];
if (data == nil) {
NSLog(@"file not found");
return nil;
}
char keyPtr[kCCKeySizeAES128];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr)];
size_t bufferSize = [data length] + kCCBlockSizeAES128;
size_t decryptedBytesSize = 0;
void *buffer = malloc(bufferSize);
CCCryptorStatus result = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES128, keyPtr, [data bytes],
[data length], buffer, bufferSize, &decryptedBytesSize);
NSData *decrypted = [NSData dataWithBytes:buffer length:bufferSize];
NSError *error;
if (kCCSuccess != result) {
NSLog(@"aes decrypt error");
return nil;
}
return decrypted;
}
我试图修复几种类型的代码。
我所有的尝试都无法解决问题:模拟器没有问题,真实设备无法工作-带iOS 11.3.1的iPhone 6
编辑)附加屏幕截图:其他链接器标记
最佳答案
我有相同的错误消息,并将其追溯到我的数组声明:
private var boundaries = [CLLocationCoordinate2D]()
我更改了声明,以明确地将边界声明为CLLocationCoordinate2D数组,如下所示:
private var boundaries:[CLLocationCoordinate2D] = [CLLocationCoordinate2D]()
该声明使错误消息消失了。
在您的情况下,您使用的是旧的c方法,将malloc用作缓冲区,而不是让swift管理内存,所以也许就是问题所在。或者,如果您明确声明,则将解密的声明为可解决此问题的数组也可能。