2

我的应用已在应用商店获得批准,现在我的一个客户需要应用中的一些额外功能,我正在考虑为该客户提供不同的代码库,但如果我将来必须为更多客户定制应用怎么办,在实际代码库中的增强的情况下,我将不得不将实际代码库的更改合并到所有其他代码库(定制的),这将是费力的。任何帮助,建议将不胜感激。

4

3 回答 3

3

我们在我工作的公司这样做,我们为我们拥有的所有不同应用程序使用相同的代码库,我们甚至可以对它们进行不同的品牌化。我们为此编写了一个品牌系统,它基于应用程序中的品牌来执行它,因此我们可以设置不同text的 , colorsimages然后可以在该品牌中设置需要特定于粒子品牌的东西。因此,最好的方法是为您需要的每个品牌创建不同的目标(每个目标都是自己的应用程序),并确保源正确链接。

您还可以创建一个包含所有共享代码的框架,然后将所有单独的代码放在应用程序中,或者将其添加到框架中,然后将其分离为单独的功能,例如为一个Login Process类提供一个EmailingPrintingStoring data等等。然后,如果一个客户想要拥有另一个客户拥有的功能,那么您已经有了代码,您只需要调用它。这将节省开发时间和错误修复,并允许您花更多时间开发更多功能而不是修复旧功能。使用 SVN 或 GIT 也是存储代码的好方法,让您轻松创建应用程序。例如,您可以创建框架和模板应用程序的主干版本,并为框架的增量版本和您拥有的所有不同品牌的每个客户端创建分支。在开发应用程序时,源代码管理非常重要。

我的公司如何做到这一点的一个例子是,我们为一个客户制定了一个项目,然后他们为每个品牌制定了目标。因此,如果我们有 ClientA 并且他们想要同一个应用程序的 3 个不同版本,那么我们将创建项目并将其命名为 ClientA 之类的名称,然后调用 3 个目标Brand1Brand2然后Brand3如果其中一个应用程序(目标)出现错误那么您知道它会出现在其他应用程序中,您只需修复一个问题即可为所有三个应用程序修复它。

这确实存在一些问题,因为您可以维护一个庞大的代码库,但它们都将集中在一个地方,因此更容易维护。如果您在代码库中有一个错误,它将出现在每个应用程序中,但它只是一个修复程序,而不是每个应用程序的修复程序。最后一个问题是您必须创建框架本身,这可能非常复杂,但这可能会有所帮助。

我确实相信创建框架的所有优点都超过了缺点。因此,我建议创建一个所有应用程序都链接到的框架。也看看创建一个更简单的 CSS 系统,但适用于 iPhone、iPad 甚至 Mac OSX。在过去的两个月里,我一直在开发这样一个系统,它可以让应用程序可以很容易地被品牌化(样式化),而无需真正了解任何objective-c,所以目前我们可以将 UIElements 添加到我们的应用程序并设置所有元素属性无需开发人员与任何objective-c 交互。原因是我们团队中没有多少人知道objective-c,因为我们是一家互联网开发公司而不是移动开发公司,所以我们的团队很多人没有CSS,这也可以在Windows计算机上完成并使用我们的 Mac 服务器构建,然后构建 .

希望这会有所帮助。

于 2012-09-28T14:06:39.763 回答
0

使用源代码控制系统,如 SVN 或 GIT。我推荐 Git,因为它可以在没有中央存储库的情况下在本地使用,并且受到 Xcode 的支持。

源代码控制允许您非常轻松地管理同一应用程序的不同版本。在您的情况下,您会将当前版本签入存储库。然后,您可以创建一个分支来为客户端实现新功能。稍后,您可以将更改合并到主代码库。

于 2012-09-28T13:03:16.957 回答
0

源代码控制是您尝试编写的任何代码的必备条件,但在这种情况下,为不同的功能维护多个代码库可能不是很有效。当两个代码库变得非常不同时,您将获得的冲突数量将是巨大的。

根据您的功能的重要性,我很可能会采用“恒定方式”。

这个想法是让每个人都有相同的代码,但基于一个常数,比如客户的名字,显示或隐藏这些功能。在编译和分发之前,您只需将常量更改为正确的客户,然后瞧。

伪代码

#define Customer = CUSTOMER_A

if (Customer in (CUSTOMER_A, CUSTOMER_B) {
  [self showButtonPickAContact]
}

上行空间

  • 只有一个代码库
  • 易于维护
  • 向旧客户端添加现有功能很容易
  • 非常适用于小型功能集,例如为一个客户添加地图

缺点

  • 每个人的代码库都更大
  • 如果其中一项功能让您只为一位客户包含一个 50 mb 的文件,则您不能使用此系统。
  • 代码和设计更难编写/设计
于 2012-09-28T13:58:55.297 回答