ベースSDK 7.0を使用したプロジェクトでiOSデバイスのudidを読み取る必要があります(そうすべきではないことはわかっていますが、読み取る必要がidentifierForVendor
あり、オプションではありません)。iOS 6 デバイスでのみこれを行う必要がありますuniqueIdentifier
が、ベース SDK が原因でメソッドが認識されません。コンパイル時に 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
、コンソールにメッセージは表示されません。これを解決する理由と方法はありますか?