2013-02-12 37 views
6

我正在研究将部署到许多不同组织(理想方案,几十个)的产品。该系统(iOS和Android原生应用程序组成)的每个部署将涉及以下内容:具体到组织如何处理部署有白色标签的平台移动应用程序?

  • 品牌(即新皮肤)
  • 整合与组织的认证系统和用户数据库
  • 取决于企业的需求

换句话说一些自定义功能,核心功能将保持不变,在所有部署,但每个实例都看起来不同,勾入不同的身份验证系统,以及甲肝e启用/禁用某些功能。

我的问题:管理我们的2个移动代码库(iOS & Android)的最佳策略是什么?为了尽量减少重复并简化部署过程?

三个解决方案,我们正在讨论是:

  1. 创建一个跨越所有实例共享(作为一个子项目/库项目,或者一个git子模块)核心库,并添加薄层上的品牌和任何配置细节。

  2. 维护具有核心功能的Git分支,并为包含附加代码的每个部署创建一个新分支。

  3. 做一些完全不同的事情,一些聪明的人在stackoverflow建议。

这听起来对你最好吗?提前感谢任何反馈!

+0

我要去选择1。GIT分支将使维护比来自GIT子模块内的库困难得多 - 但那仅仅是因为我喜欢子模块的功能应该保持不变,并且在每个使用/需要的基础上,可以容易地更新。 – Till 2013-02-12 00:53:27

+0

Ow,以及某种配置饲料如何在应用启动后立即设置一些动态数据。至少为资源提供最大的灵活性 - 太糟糕的苹果不允许动态库(通过下载使用)。 – Till 2013-02-12 00:55:57

+0

@bmat您选择了哪种方法?我在这里也是一样的情况。 – Latrova 2016-05-05 20:49:49

回答

3

我会考虑的一种方法是依赖注入

在Android上,如果您使用依赖注入工具,例如Square的Dagger,您可以简单地创建一个@Module类,该类提供组件并将其注入到应用程序中。这样,您可以将每个白标签客户端的逻辑作为单独的组件维护,并且在编译时,将通过@Module类中的引用来选择特定组件。

这也是测试您的应用程序的好方法,它可以避免很多样板代码。

有一个在随后举行的会谈也由广场给予了极大的信息:

Dagger: A Fast Dependency Injector for Android and Java

Engineering Elegance: The Secrets of Square's Stack

的iOS有类似的框架,一个是Objection

外箱选项:

难道移动客户端有直接发言的白色标签的服务器的要求?如果没有,您可能需要考虑使用自己的服务器作为白标服务器的代理。这将把所有的业务逻辑转移到你的服务器上,支持你所有的客户。

我对此没有任何经验,但看似有希望的选项是J2ObjC,它正在Google开发中。

J2ObjC is an open-source command-line tool from Google that translates 
Java code to Objective-C for the iOS (iPhone/iPad) platform. This tool 
enables Java code to be part of an iOS application's build, as no editing 
of the generated files is necessary. The goal is to write an app's non-UI 
code (such as data access, or application logic) in Java, which is then 
shared by web apps (using GWT), Android apps, and iOS apps. 
+0

依赖注入绝对是一种值得查看给定任务的模式。它肯定不会是涵盖所有需求的工具,但它可以帮助获得可爱的可维护代码。 +1 – Till 2013-02-12 00:59:35

+0

我同意@Till - DI尚未解决问题,但它的确让我开始阅读Martin Fowler关于企业应用程序开发的一些工作。我还没有解决这个问题,但我觉得我现在正走在正确的轨道上。 – bmat 2013-02-18 23:32:27

0

我们正处在一个类似的情况(我们得既与Android和iOS代码库的应用程序白色标签的平台),我们会被我们的原生代码库转移到C#实现。我们将利用MonoTouch/Mono for Android。实际上我从上周开始就开始研究这个问题(我一直在提出一些关于SO的问题来描述一些单声道基础知识)。

这实际上是您的选择1,但每个平台都将建立在C#代码上(如果需要,可以选择与“本地”代码库进行交互)。

Mono应该让我们能够在平台之间的代码(目前iOSAndroid,未来可能是Windows Phone)之间分享30-50%之间的代码。从我有过的小经验来看,它的表现看起来不错(记住:很多人也使用MonoGame来创建high-performance games,我认为Unity也可以使用Mono来进行3D游戏)。就我个人而言,这也是附加值。我仍然乐意有一天能够制作游戏,而Mono的“严肃”应用程序框架的一些基本体验将降低游戏应用程序使用MonoGame框架的障碍。

这个设置的好处在于您可以将所有代码(Android,iOS,Windows Phone)保存在1个解决方案中。创建一个核心“库”项目(模型,服务调用等),并为每个平台创建另一个项目。具体的平台项目将分别具有适当的用户界面和真实的本地体验。

想了解如何使用Mono创建多平台应用程序,read a small introduction here

0

如果你不依赖于本地GUI使用Unity3d, 使自己的统一包装的所有主要功能(与开发它作为所有平台的单一的应用程序), 任何部署的应用程序,你将不得不作出新的统一的项目和导入这个包到它, 定制它(可能是通过替换资源和编辑配置)。 (如果您需要升级核心功能,则需要将核心Package的新版本 再次简单导入到交付的项目中)。

或使用您的选项1:

  1. C++核心库
  2. 资源包,它是可以独立于所有应用程序(可能是autorizations &模块CONFIGS也可以在这里)
  3. 原生UI实现的所有平台Android-Java,iOs-Objective-C
相关问题