iOS中的依赖管理

时间:2018-05-23 15:33:17

标签: ios dependency-management

所以,我有以下情况:

我正在开发一个用于不同公司的iOS应用程序。 对于每家公司,存在一些差异:

  • App Icon
  • 主题颜色
  • 图片(例如,公司徽标)
  • 字符串(例如,公司名称)


最好的方法是制作单个代码,然后覆盖每个应用程序的一些值和资产。 在Android中,我可以通过覆盖资源来创建一个库模块(具有应用程序的核心)和每个公司的应用程序模块(没有Java代码),从而轻松实现这一目标。

我正在尝试在XCode上开发相同的结构,但对我来说这样做的方式并不清楚。 经过简短的研究,我考虑了一些选项:框架,静态库和子项目。

哪一个是正确的做法?我应该考虑使用依赖/包管理器(如Swift Package Manager,CocoaPods还是Carthage)?

这些包管理器是依赖于git的吗?因为我正在使用SVN,此时切换到Git是不可行的。

项目设置:
XCode 9
斯威夫特4

2 个答案:

答案 0 :(得分:3)

我建议你使用目标。

让我告诉您如何使用assets / settings处理此层次结构。

资产

我的Assets目录

Assets directory

  • 公用文件夹包含公共images
  • Company1文件夹包含images / colors / certificates

您必须通过仅选择其需要引用的目标来更改Target Membership的{​​{1}}。

Target settings

例如,Company1 > Images需要引用所有common > Assets

代码

如果您需要在每个目标中执行不同的操作,则可以对代码执行相同的操作。

就个人而言,我使用targets的强大功能将代码拆分为不同的源文件,以便能够引用不同的目标。

将此文件提交至extension目标

Company1

将此文件提交至extension FirstViewController { func doSomething() { // implement this method for the company 1 } } 目标

Company2

将此文件提交给所有extension FirstViewController { func doSomething() { // implement this method for the company 2 } }

targets

您还可以在class LandingEmptyViewController { func foobar() { self.doSomething() } }

中为每个目标传递一些flags

使用这些解决方案,您将能够在Android中执行相同操作。

答案 1 :(得分:0)

您可以使用静态框架来开发此类项目。现在,Static框架有自己的起伏。

https://www.raywenderlich.com/65964/create-a-framework-for-ios

  • 为将作为Company1Extenssion,Company2Extenssion为不同的应用程序共享的所有公共类创建核心模块框架。
  • 现在,通过创建相应的工作区,将此Core模块框架包含在各个项目中。
  • 各个扩展项目将拥有自己的资产,应用程序图标,应用程序名称。
  • 请注意,此方法的一个缺点是您不能在其中包含pod。您必须为任何第三方库购买Carthage或Git子模块。
  • 此方法的优点之一是您可以通过指定要扩展到扩展的函数或类来维护核心模块的代码安全性。

注意:在发布应用期间,请不要忘记确保ipa文件的正确有效负载结构。