iphone - 管理一系列相关 iOS 应用程序的最佳实践

标签 iphone objective-c ios configuration-management

我目前正在将现有的 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"] 读取它。

最佳答案

我会选择预处理器选项。您可以将所有预处理器放在一个文件/方法中,这样就不会太乱。就像 oefe 说的,改变 .sqlite 是矫枉过正的。使用多个 plist,您会发现自己拖来拖去并做了很多容易出错的操作。

但是,我不会制作很多应用程序。我只会做一个应用程序,让用户在启动时选择他的城市。您还可以添加应用内购买,让用户在需要时添加更多城市。

  • 您的应用将更易于维护:您想在每次更新时为 10 多个应用上传、更改说明和屏幕截图吗?我发现使用 1 个应用程序很痛苦...
  • 您不会向 AppStore 发送垃圾邮件:在 AppStore 中拥有 10 多个具有完全相同目的的应用程序是荒谬的......这正是 Apple 进行应用程序内购买以避免这种情况的原因。
  • 您必须为您所在的每个城市找到不同的图标:您的图标是在 AppStore 上销售您的应用程序时最重要的方面之一。您希望它尽可能完美。 Apple 不允许多个应用程序具有相同的图标,通过在其上放置标签来区分图标不是一个好的选择。

关于iphone - 管理一系列相关 iOS 应用程序的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5543004/

相关文章:

objective-c - MainWindow.xib 和 ViewController.xib

iOS - 无约束的可滑动 UITableCells

Jquery 触发器点击在 mac、Ipad 和 Iphone 中的 safari 浏览器上不起作用

ios - UISplitViewController iPad 行为

objective-c - 如何在xcode中打印数组的值?

ios - Xcode 构建在 "sign my.app"阶段变得非常缓慢

iphone - 在运行时检测 iPhone 上的 UDID 欺骗

ios - 奇怪的行为 : save video recorded within app?

ios - 在 IOS 中处理使用数据库登录的 TouchID 身份验证

ios - Xcode 滑动和删除