Most of the models in my iOS app query a web server. I would like to have a configuration file storing the base URL of the server. It will look something like this:
// production
// static NSString* const baseUrl = "http://website.com/"
// testing
static NSString* const baseUrl = "http://192.168.0.123/"
By commenting out one line or the other, I can instantly change which server my models point to. My question is, what's the best practice for storing global constants in iOS? In Android programming, we have this built-in strings resource file. In any Activity (the equivalent of a UIViewController), we can retrieve those string constants with:
String string = this.getString(R.string.someConstant);
I was wondering if the iOS SDK has an analogous place to store constants. If not, what is the best practice in Objective-C to do so?
Best Answer
Well, you want the declaration local to the interfaces it relates to -- the app-wide constants file is not a good thing.
As well, it's preferable to simply declare an
extern NSString* const
symbol, rather than use a#define
:SomeFile.h
SomeFile.m
Apart from the omission of the C++ compatible Extern declaration, this is what you will generally see used in Apple's Obj-C frameworks.
If the constant needs to be visible to just one file or function, then
static NSString* const baseUrl
in your*.m
is good.