【发布时间】:2011-04-04 19:00:46
【问题描述】:
我目前正在将现有的 iOS 应用程序改编成一系列非常相似的应用程序(每个应用程序实例可能会映射到不同的国家/地区)。
我计划为每个实例设置不同的构建目标,它们之间的唯一区别应该是:
- 图像(可能只是启动画面和图标)
- 本地化
- 字符串变量:远程服务的基本 URL、应用程序 ID、支持电子邮件等(可能有六个这样的变量)
代码本身在所有应用上都应该相同。
我想知道您认为管理此类应用程序家族的最佳做法。
关于图像和本地化(或一般的资源),应该只是从目标中添加/删除适当的文件(我想我什至可以在不同的目录中为图像使用相同的名称)。
我不确定的主要是其他配置变量。
我听说过/想到了几个选项:
- 使用预处理器宏和具有不同 URL、ID 等的主配置头文件
- 每当应用程序启动时从 plist(或类似的配置文件)加载它们,并且每个目标都有一个这样的文件
- 创建一个空的 .sqlite 文件(此应用已使用 Core Data)并使用默认配置变量填充它,并且每个目标都有一个这样的文件
我认为,一旦我有几个这个应用程序的实例,第一个选项是最快的,而且我每次更改这些设置时都必须重新编译。
我也不确定第三个选项,因为我将向我的数据库中添加不属于那里的实体,而且对于可能是 5-10 的设置来说,这有点矫枉过正.我也不确定如何在更新中添加新设置。
所以我更倾向于第二种选择。
想法?这些有什么替代品吗?
更新 #1:
关于第二个选项,还有一个缺点是这些字符串(id、URL 等)会比源代码中的字符串(即,如果有人打开应用程序并查看 plist)稍微暴露一些。代码。并不是说这是一个大问题,而是需要考虑的问题。
更新 #2:
直接使用应用程序的 info.plist 并将其存储在那里怎么样? (因此每个目标配置都有一个 info.plist)即使最初我想有一个单独的 plist,并且有一个“配置单例”可以在启动时从那里加载所有内容,但我认为简单地拥有它可能更简单在 info.plist 中,然后通过 [[[NSBundle mainBundle] infoDictionary] objectForKey:@"com.example.mykey1"] 阅读。
【问题讨论】:
标签: iphone objective-c ios configuration-management