我目前正在将现有的 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"]
.