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?
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 ;).
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"];
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:
- In iOS, the home directory refers to the application's sandboxed directory.
- I recommend reading a little bit up on reference counting. Although objective-c, as of iOS5, now automatically reference counts for you, there are some edge cases to be aware about (Here's a SO question on ARC)
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.
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)
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)
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
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.
来源:https://stackoverflow.com/questions/8182026/ios-application-configuration-file