Вы можете использовать функции Core Foundation, которые работают на CFBundle
, чтобы получить ссылку на пакет для пакета, который экспортирует данное имя функции :
CFStringRef functionName = CFSTR("someFunctionName");
CFArrayRef allBundles = CFBundleGetAllBundles();
CFIndex i;
CFIndex bundleCount = CFArrayGetCount(allBundles);
for (i = 0; i < bundleCount; i++) {
CFBundleRef bundle = CFArrayGetValueAtIndex(allBundles, i);
void *functionPointer = CFBundleGetFunctionPointerForName(bundle, functionName);
if (functionPointer != NULL) {
// bundle points to a bundle that exports functionName
}
}
И поскольку CFBundleGetDataPointerForName()
возвращает указатель данных на заданное имя символа в пакете, я полагаю, что его можно использовать и для имен классов , так как класс экспортируется с именем символа _OBJC_CLASS_$_<className>
например, _OBJC_CLASS_$_NSArray
.
Насколько я могу судить, нет функции, которая позволяла бы вам проверять, экспортирует ли пакет функцию, указав адрес функции.