iOS的API分为四种:
Published API(公开的API)(或者Documented API)
还有两类:私有API:Private API和未公开API:UnPublished API(或者Undocumented API)。
私有API是指放在PrivateFrameworks框架中的API,未公开的API是指虽然放在Frameworks框架中,但是却没有在苹果的官方文档中有使用说明、代码介绍等记录的API。
按苹果的说法,未公开的API是还不够成熟,可能还会变动的API,等完全成型了后会变成公开的API,但是目前不对其提供承诺,就是系统版本升级后可能会失效。而私有API是苹果明确不能使用的API。虽然两者有所区别,但是在具体使用方法上是类似的。
私有API会面临审核通不过然后不能上线,但是也有使用私有API通过审核的比如谷歌的“Google Voice”,所以具体审核的详情不得而知。
github地址 https://github.com/sunlight2728/iOS-Runtime-Headers
iOS-Runtime-Headers 包含了所有的私有API,可以简单查阅
iOS9可行的使用方法:
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"]);
获取用户所有的bundle id
Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
NSObject* workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
NSArray *arr =[workspace performSelector:@selector(allInstalledApplications)];
另一种获取方法
Class LSApplicationWorkspace_class = NSClassFromString(@"LSApplicationWorkspace");NSObject* workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
NSArray *arrAPP =[workspace performSelector:@selector(allApplications)];