【问题标题】:Dependency managment in iOSiOS 中的依赖管理
【发布时间】:2018-05-25 02:29:37
【问题描述】:

所以,我有以下场景:

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

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


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

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

哪一种是正确的做法?我应该考虑使用依赖项/包管理器(如 Swift 包管理器、CocoaPods 或 Carthage)吗?

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

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

【问题讨论】:

  • 如果您可以完全控制项目,另一种选择是具有多个目标的单个工作区/项目。这样,您将拥有一个具有不同(每个目标)资产和设置的通用代码库。
  • 您的问题的简单答案是,是的,使用 one projectvariations。 (请注意,Swift 包管理器、CocoaPods、Carthage 之类的东西在这里是无关紧要的。)有很多方法可以实现这一点 - 其他人已经给出了很多很好的指导。
  • (顺便说一句,永远不要使用可可豆荚。迦太基很棒。)
  • 有一件事是,回想一下故事板在 iOS 开发中是非常固有的。确实,您会很高兴听到 Xcode/iOS固有地包含给定类/屏幕的“备用故事板”的想法。 (例如 - 很简单,您可以(如果您愿意)为 iPhone 和 iPad 这样做。)根据您的具体需求,这可能对您有用。

标签: ios dependency-management


【解决方案1】:

我建议你使用目标。

让我向您展示我如何使用 assets / settings 处理此层次结构。

资产


我的Assets 目录

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

您必须将Target Membership 更改为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()
    }

}

您还可以在Build Settings 中为每个目标传递一些flags

使用这些解决方案,您将能够在 Android 中做同样的事情。

【讨论】:

  • 谢谢,这正是我所需要的。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-14
    • 2013-04-23
    • 2011-12-05
    • 2013-12-29
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多