I discovered that you can deprecate external symbols in your application code. So you can warn on usage of certain C APIs from CoreFoundation et al.

For example: If you are trying to enforce always using CocoaLumberjack for logging over the classic NSLog function. You can copy the declaration of NSLog into your prefix header and add a deprecated notice.

FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1, 2) __deprecated_msg(
    "MyApp: Use DDLog");

This might not be a good idea, as framework headers can and do change between releases. I would at least put them in a seperate file, ProjectDeprecations.h, and use a macro to standardise and define the deprecated attribute.

I haven’t found a way to do this on Objective-C classes, maybe that’s for the best.

Update from the Twitters