iOS应用程序configuration文件
在C#应用程序中,我总是使用app.config
文件来保存一些数据,以便在需要时加载我的应用程序(例如连接string)。
在iOS应用程序中保存这种信息的最好方法是什么?
你可以创build一个属性列表文件(在XCode中有一个模板,就是文件 – >新build文件并在那里select),所以你会有类似“settings.plist”的东西,或者类似的东西。 你可以把plist想象成key => valueconfiguration文件,不同之处在于除了纯文本之外,你还可以存放数组和字典。
使用NSBundle来加载你的应用程序中的文件,如
NSString *path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"]; NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path];
然后,您可以将您的密钥作为常规字典访问。 只是不要忘记[释放]之后;)。
对于像连接string这样的小数据,我会使用NSUserDefaults 。
当你想保存你的连接string,你会这样做:
[[NSUserDefaults standardUserDefaults] setObject:myConnectionString forKey:@"connectionString"];
当你想加载它,你会这样做:
myConnectionString = [[NSUserDefaults standardUserDefaults] stringForKey:@"connectionString"];
如果你只是存储一个相对简单的configuration的东西,你可以简单地使用NSDictionary的序列化方法(我不知道如何链接到类文档中的方法目录):
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];
既然我不知道你对objective-c有多熟悉,我还会注意到:
- 在iOS中,主目录引用应用程序的沙盒目录 。
- 我build议阅读一下参考计数。 虽然objective-c,从iOS5开始,现在自动引用计数 ,但还是有一些边缘情况需要注意( 这是一个关于ARC的SO问题 )
在iOs中,每个应用程序都拥有自己的沙箱,只有该应用程序才可用。 所以如果你想让这个文件只读取,请将其保存到Application Bundle中。 否则保存到Application文件夹。
你不能直接访问应用程序文件夹所以,如果你想保存你的文件到该文件夹,你必须以编程方式进行。
使用iOS 8.3的 Swift中的 iOS应用程序configuration文件:
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)
我使用属性列表来存储小块数据 – 在这里看看如何使用它们:
http://iphoneincubator.com/blog/tag/nspropertylistserialization
我意识到我迟到了,但发现堆栈溢出之后,我对接受的答案感到沮丧,所以我创build了一个解决scheme! 这是基于来自@ RafaelSteil的答案的想法,但它有一个更简单的接口,caching加载的configuration数据,它支持豆荚提供自己的默认值,可以由主应用程序覆盖。 我希望它可以帮助别人。
更新了Swift 3 Xcode 8
将一个新的属性列表添加到名为“Sample.plist”的项目中。 然后看下面的例子。
let path: String = Bundle.main.path(forResource: "Sample", ofType: "plist")! let sampleConf: NSDictionary = NSDictionary(contentsOfFile: path)! print(sampleConf.object(forKey: "test") as! String)
- 错误ITMS-90164/90046:无效的代码签名权利
- 由于帐户权限,validation失败
- 如何将iOS应用程序IPA传递给客户,以使用他们自己的企业configuration文件进行签名
- 了解证书,代码签名,configuration和相关主题的资源(Apple除外)是什么?
- 从苹果网站导入configuration文件到其他mac
- 我有iOS 10 TSL问题(“安全错误:-9801”)。 怎么修?
- 我可以使用开发人员证书进行存档,然后在使用分发证书提交期间重新签名吗?
- 在MDM中更新iOS设备中安装的configuration文件
- 以编程方式检查在iPhone上是否安装了configuration文件