Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I lookup a string constant at runtime in Objective-C?

My company develops an advertising SDK that mediates other ad networks. At runtime, it checks if the other ad networks are present by using NSClassFromString, and sends those classes messages if they're present.

This works fine for Objective-C objects, but how can I load a string constant at runtime? In this case, I want to check the version of an SDK that is only available through a string constant (extern NSString* VungleSDKVersion;)

like image 609
MaxGabriel Avatar asked Oct 09 '14 22:10

MaxGabriel


1 Answers

You can use CFBundleGetDataPointerForName to lookup a constant's value at runtime

NSString *lookupStringConstant(NSString *constantName) {
    void ** dataPtr = CFBundleGetDataPointerForName(CFBundleGetMainBundle(), (__bridge CFStringRef)constantName);
    return (__bridge NSString *)(dataPtr ? *dataPtr : nil);
}

Example use:

NSString *version = lookupStringConstant(@"VungleSDKVersion");
NSLog(@"Version = %@",version);
like image 100
MaxGabriel Avatar answered Oct 09 '22 17:10

MaxGabriel