函数“dlopen()”是私人API吗?

我想用函数'dlopen()'来调用iOS平台上的dynamic库,函数是'dlopen()'私有API?

我已经在iOS上使用dlopen多年了。 在我的使用案例中,我使用dlopen按需加载公共系统框架,而不是在应用程序启动时加载它们。 太棒了!

[编辑] – 从iOS 8开始,扩展和共享框架被禁止使用dlopen ,但是应用程序本身仍然可以使用dlopen (现在被logging为不仅支持Apple框架,而且支持定制框架)。 请参阅此Apple文档中的将iOS应用程序部署到较旧版本的iOS部分: https : //developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensibilityPG.pdf

[编辑] – 人为的例子

 #import <dlfcn.h> void printApplicationState() { Class UIApplicationClass = NSClassFromString(@"UIApplication"); if (Nil == UIApplicationClass) { void *handle = dlopen("System/Library/Frameworks/UIKit.framework/UIKit", RTLD_NOW); if (handle) { UIApplicationClass = NSClassFromString(@"UIApplication"); assert(UIApplicationClass != Nil); NSInteger applicationState = [UIApplicationClass applicationState]; printf("app state: %ti\n", applicationState); if (0 != dlclose(handle)) { printf("dlclose failed! %s\n", dlerror()); } } else { printf("dlopen failed! %s\n", dlerror()); } } else { printf("app state: %ti\n", [UIApplicationClass applicationState]); } } 

苹果现在拒绝使用dlopen的应用程序。

certificate