将应用程序划分为具有不同UI设计和共享逻辑代码的多个应用程序

use*_*123 8 iphone workspace nested ios ios7

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

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

我想到的选项是:

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

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

3)在每个品牌的项目中嵌入一个"基础应用"项目.任何帮助澄清它做什么将不胜感激.

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

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

Jas*_*ues 5

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

  • 核心模型库
  • 可重复使用的视图和视图控制器.视图可以设计为支持蒙皮和自定义.
  • 任何其他可重用的代码,可以封装为自己的"标识".

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

然后使用CoocaPods

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

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

  • 解决传递依赖关系 - 这意味着构建和获取库本身使用的任何库.
  • 管理正在集成的库的版本.

可以使用Private Spec Repo,也可以只使用GitHub

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

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

pod 'MyLibraryName', :git => 'https://github.com/myOrgName/MyLibrary.git'
Run Code Online (Sandbox Code Playgroud)

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

pod update
Run Code Online (Sandbox Code Playgroud)

这种方法的优点

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

灵感来自Piggly Wiggly(但精益求精)

这种方法模仿了第二次世界大战后在日本推广的生产线风格方法.它被称为精益方法论,而且是关于快速,小型库存和减少浪费.(少花钱多办事)..当他们去美国并参观Piggly Wiggly Supermarket商店时,日本高管得到了灵感.


ale*_*omp 5

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

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

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

它并不是更好,但这是最简单快捷的方法,但如果你的代码发生了很大的变化,最好像其他答案一样创建核心库.