musickit kit guide developer apple iphone ios dlopen

iphone - kit - ¿Es la función ''dlopen()'' la API privada?



musickit js (1)

Quiero usar la función ''dlopen ()'' para invocar una biblioteca dinámica en la plataforma iOS, ¿es la función ''dlopen ()'' la API privada?


He tenido éxito usando dlopen en iOS por años. En mi caso de uso, uso dlopen para cargar marcos de sistemas públicos a pedido en lugar de tenerlos cargados al iniciar la aplicación. ¡Funciona genial!

[EDITAR]: a partir de iOS 8, las extensiones y los marcos compartidos tienen prohibido usar dlopen , sin embargo, la aplicación en sí puede seguir utilizando dlopen (y ahora está documentado como compatible no solo con los marcos de Apple, sino también con los marcos personalizados). Consulte la sección Implementación de una aplicación que contiene versiones anteriores de iOS en este documento de Apple: https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensibilityPG.pdf

[EDIT] - ejemplo artificial

#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]); } }