我必须在基础SDK 7.0的项目中阅读iOS设备的udid(我知道我不应该这样做,但我需要阅读它并且identifierForVendor
不是一个选项)。我必须在iOS 6设备上使用此功能,但由于基本SDK,无法识别方法uniqueIdentifier
。由于我不知道如何在编译时确定iOS版本,我做了以下内容:
#define SYSTEM_IS_IOS_7 ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending)
...
if (!SYSTEM_IS_IOS_7) {
SEL selector = NSSelectorFromString(@"uniqueIdentifier");
if ([[UIDevice currentDevice] respondsToSelector:selector]) {
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
[[[UIDevice currentDevice] class] instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
[invocation invoke];
NSString *udid = nil;
[invocation getReturnValue:&udid];
NSLog(@"%@", udid);
}
}
我在iOS 6.1上运行代码,udid出现在控制台上,但是应用程序在EXC_BAD_ACCESS
之后与main.m
一起崩溃,控制台上没有消息。知道为什么以及如何解决这个问题?