8

我有一个应用程序,我将其称为“基本应用程序”。该应用程序适用于许多品牌。我现在需要将这些品牌分开,并为每个品牌制作一个独特的应用程序。每个应用程序的设计都会略有不同(包括不同的图像),并且可能会有一些特定于品牌的代码。所有应用程序还应使用处理逻辑的“基本应用程序”中的相同基本代码。

我有一些我想过的选择,但我不确定它们中的任何一个是否适合我的需要。将很高兴澄清选项之间的差异。

我想到的选项是:

1) 为每个品牌创建一个应用程序,只需复制粘贴“基本应用程序”中的类文件作为参考,.xib 文件除外,它将作为副本复制。问题是我不知道如何以及在哪里编写品牌特定代码(因为它将在其他人之间共享)。

2) 创建一个工作区,其中包含每个品牌的项目。不确定这是如何工作的,如果这是正确的,将很高兴在这里澄清。

3)在每个品牌的项目中嵌套一个“基础应用程序”项目。任何帮助澄清它的作用将不胜感激。

3)将基础应用程序用作静态库,将链接到每个品牌的项目中。不确定 UI 会发生什么(共享,不共享)。也会很高兴在这里澄清。

4)使用一种简单的方式来维护品牌的每个项目,包括共享代码(我猜这将是一场灾难)。

4

3 回答 3

5

一个好的方法是将您的应用程序拆分为以下组件:

  • 核心模型库
  • 可重用的视图和视图控制器。可以将视图设计为支持皮肤和自定义。
  • 可以封装为自己的“身份”的任何其他可重用代码。

理想情况下,这些核心项目应该有自己的持续集成(质量控制)构建和测试。

然后使用 CoocaPods

与其手动执行所有这些复杂的集成,不如使用CocoaPods。CocoaPods 将创建 Xcode 工作区,构建库并将它们链接到您的项目中。然后,您只需将各个部分粘合在一起即可创建自定义构建。

除此之外,CocoaPods 还执行以下任务:

  • 解决传递依赖——这仅仅意味着构建和获取你的库本身使用的任何库。
  • 管理正在集成的库的版本。

Private Spec Repo 是可能的,或者只使用 GitHub

主要的 CocoaPods 存储库当然是公开的,并且包含开源和/或免费可用的库。

您可以托管自己的 CocoaPods 规范存储库,或者简单地设置一个私有 GitHub 帐户,并在每个项目中包含一个 PodSpec,然后解析如下:

pod 'MyLibraryName', :git => 'https://github.com/myOrgName/MyLibrary.git'

这会将您的所有库安装到您的工作区中。要更新您的项目以包含对核心库的任何更改,只需:

pod update

这种方法的优点

  • 您将拥有一套单独的质量控制,适用于每个核心项目。
  • 声望会少很多。
  • 您可以使用更多的自动化。更多的自动化等于更少的浪费等于更多的客户价值。
  • 随着团队的发展,您可以将核心产品开发和解决方案集成拆分为单独的角色/团队。一个致力于集成构建的团队不需要提取最新的库功能,如果这会破坏它们。
  • 您可以在不同版本的核心库上拥有两个不同的客户。CocoaPods 将无缝地管理这个。因此,在您收到增强请求或计划维护之前,您不必更新构建。(再次减少浪费,从而增加客户价值)。

受到 Piggly Wiggly 的启发(但一直精益求精)

这种方法仿照二战后在日本流行的生产线风格方法。它被称为精益方法,是关于拥有快速、小库存和减少浪费的全部内容。(事半功倍)。. 日本高管在去美国参观 Piggly Wiggly 超市时得到了灵感。

于 2013-11-05T08:59:47.337 回答
5

iOS 中的简单解决方案是使用目标。

对于资源,您可以为每个品牌使用不同的目标,然后为每个目标选择不同的资源(图像、xib 等)。

此外,如果代码的更改很少,您可以重构代码的某些部分并为每个目标创建具有不同实现的不同类(您可以使用像工厂这样的模式)。您也可以简单地使用预处理器宏。

这不是更好,但这是最简单快捷的方法,但是如果您的代码发生了很大变化,最好像其他答案所说的那样创建一个核心库。

于 2013-11-05T10:13:21.460 回答
1

这通常是您在创建廉价 Flash 游戏或应用程序时遇到的问题。

这些具有非常通用的框架,例如:踢球,在屏幕上射击,或生成包含从特定服务器下载的一些数据的列表等......

每次他们想创建一个新的射击游戏,他们只需加载他们的射击框架,添加一堆图形,就可以在一天之内发布一个糟糕的游戏。

他们是怎么做到的呢?

他们经常创建一个包含共享模型、处理程序、接口等的框架。将许多通用实用程序功能(如下载文件等)放入库中。您还可以创建一些默认的框架视图和视图控制器。

当您想创建类似的应用程序时,只需导入库并重新使用基本框架即可。包含基础视图、基础模型等。

您可以在随 ios SDK 或 android SDK 提供的演示示例中找到一个很好的示例。

祝你好运。

于 2013-11-05T08:59:02.317 回答