António
António

Reputation: 975

iOS Application Configuration File

In a C# application I always used an app.config file to save some data for my application to load when needed (e.g Connection String).

What is the best way to save information like this in an iOS application?

Upvotes: 36

Views: 37994

Answers (8)

beatsbears
beatsbears

Reputation: 211

Updated for Swift 3 Xcode 8

Add a new property list to your project named "Sample.plist". Then see the following example.

    let path: String = Bundle.main.path(forResource: "Sample", ofType: "plist")!
    let sampleConf: NSDictionary = NSDictionary(contentsOfFile: path)!
    print(sampleConf.object(forKey: "test") as! String)

Upvotes: 3

rmeador
rmeador

Reputation: 25694

I realize I'm late to the party, but after finding this stack overflow I was disheartened at the accepted answer, so I created a pod to solve it! This is based on the idea from @RafaelSteil's answer, but it has a simpler interface, caches the loaded config data, and it supports pods providing their own defaults which can be overridden by the main app. I hope it helps someone.

Upvotes: 0

King-Wizard
King-Wizard

Reputation: 15694

iOS Application Configuration File in Swift with iOS 8.3:

    let path: String = NSBundle.mainBundle().pathForResource("Info", ofType: "plist")!
    let nsDictionaryInfoPlist: NSDictionary = NSDictionary(contentsOfFile: path)!

    // Usage example: Google Maps iOS SDK/API Configuration.
    GMSServices.provideAPIKey(nsDictionaryInfoPlist.objectForKey("GoogleMapsiOSAPIKey") as! String)

Upvotes: 2

Rafael Steil
Rafael Steil

Reputation: 4697

You can create a property list file (there is a template for that in XCode, just to to File -> New file and choose there), so you will have something like "settings.plist", or anything like that. You can think of a plist as being a key => value config file, with the difference that you can also hold arrays and dictionaries, besides plain text as value.

Use NSBundle to load the file in your app, like

NSString *path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"];
NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path];

You can then access your keys as a regular dictionary. Just don't forget to [release] it after ;).

Upvotes: 58

Simon
Simon

Reputation: 25993

For small bits of data like a connection string, I'd use NSUserDefaults.

When you want to save your connection string, you'd do this:

[[NSUserDefaults standardUserDefaults] setObject:myConnectionString 
                                          forKey:@"connectionString"];

When you want to load it, you'd do this:

myConnectionString = [[NSUserDefaults standardUserDefaults] 
                          stringForKey:@"connectionString"];

Upvotes: 10

Jeff
Jeff

Reputation: 5043

If you're just storing a relatively simple set of configuration stuff, you can simply use NSDictionary's serialization methods (I don't know how to link to the methods directory in the class doc):

NSString *settingsPath = [@"~/pathtoconfig.plist" stringByExpandingTildeInPath];

NSMutableDictionary *settings = [NSMutableDictionary dictionary];
if([[NSFileManager defaultManager] fileExistsAtPath:settingsPath]){
    settings = [NSMutableDictionary dictionaryWithContentsOfFile:settingsPath];
}

// writing settings
[settings writeToFile:settingsPath atomically:YES];

Since I don't know how familiar you are with objective-c, I'll also note:

Upvotes: 4

TheEye
TheEye

Reputation: 9346

I use property lists for storing small pieces of data - have a look here on how to use them:

http://iphoneincubator.com/blog/tag/nspropertylistserialization

Upvotes: 1

iOSPawan
iOSPawan

Reputation: 2894

In iOs every App has own sandbox which will be availble for that app only. So If you want that file to be read only access save it to Application Bundle. else save to Application folder.

you Can not access Application folder directly So If you want to save your file to that folder you have to do it programmatically.

Upvotes: 2

Related Questions