我使用nst's iOS Runtime Headers访问CoreTelephony.framework。
以下是他的示例代码:
NSBundle *b = [NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/FTServices.framework"];
BOOL success = [b load];
Class FTDeviceSupport = NSClassFromString(@"FTDeviceSupport");
id si = [FTDeviceSupport valueForKey:@"sharedInstance"];
NSLog(@"-- %@", [si valueForKey:@"deviceColor"]);
他的示例使用代码使我能够访问FTServices.framework,但是当我应用相同的逻辑时,它会失败,因为CoreTelephony没有包含名为sharedInstance()的类方法。
我应该自己声明和实施,还是有其他方式?
感谢。
修改
我的尝试:
NSBundle *b = [NSBundle bundleWithPath:@"/System/Library/Frameworks/CoreTelephony.framework"];
BOOL success = [b load];
Class CTTelephonyNetworkInfo = NSClassFromString(@"CTTelephonyNetworkInfo");
id si = [CTTelephonyNetworkInfo valueForKey:@"sharedInstance"]; // fails here
NSLog(@"-- %@", [si valueForKey:@"cachedSignalStrength"]);
答案 0 :(得分:2)
问题是CTTelephonyNetworkInfo
实际上没有属性sharedInstance
。从here引用,CTTelephonyNetworkInfo
是一个用于存放相关信息的数据结构,可以通过标准[[CTTelephonyNetworkInfo alloc] init]
(引自here)直接访问(构建)。
所以对你的情况来说:
NSBundle *b = [NSBundle bundleWithPath:@"/System/Library/Frameworks/CoreTelephony.framework"];
BOOL success = [b load];
Class CTTelephonyNetworkInfo = NSClassFromString(@"CTTelephonyNetworkInfo");
id si = [[CTTelephonyNetworkInfo alloc] init];
NSLog(@"-- %@", [si valueForKey:@"cachedSignalStrength"]);
确保您在实际手机上进行测试!模拟器没有存储此类信息。
编辑:
如果要在生成的类上调用方法,请使用performSelector:
或NSInvocation
类。