iOS中的依赖关系管理

4dc9hkyq  于 2023-01-18  发布在  iOS
关注(0)|答案(2)|浏览(109)

我有下面的场景:
我正在开发一个iOS应用程序,它被不同的公司使用,每个公司都有一些不同之处:

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

最好的方法是编写一个代码,然后为每个应用程序重写一些值和资产。在Android中,我可以很容易地通过重写资源为每个公司创建一个库模块(带有应用程序的核心)和一个应用程序模块(没有Java代码)来实现这一点。
我试图在XCode中开发相同的结构,但我不清楚具体的方法,经过简单的研究,我考虑了一些选择:框架、静态库和子项目。
哪一个是正确的方法?我应该考虑使用依赖项/包管理器(像Swift包管理器,CocoaPods或Carthage)吗?
这些包管理器是依赖于Git的吗?因为我正在使用SVN,切换到Git在这一点上是不可行的。
项目设置:
X代码9
雨燕4

wtlkbnrh

wtlkbnrh1#

我建议你使用目标。
让我向您展示如何使用assets/settings处理这个层次结构。
资产
我的Assets目录

*公用文件夹包含公用images
*公司1文件夹包含images/colors/certificates

您必须通过仅选择Company1 > Images确实需要引用的目标来更改Target Membership

例如,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中做同样的.

ar7v8xwq

ar7v8xwq2#

你可以用Static Framework来开发这类项目。现在,Static Framework有它自己的起起唐斯。
https://www.raywenderlich.com/65964/create-a-framework-for-ios

  • 为将在不同应用程序中共享的所有通用类创建核心模块框架,如Company1Extensision、Company2Extensision。
  • 现在,通过创建各自的工作空间,将这个核心模块框架包含到各个项目中。
  • 各个扩展项目将拥有自己的资产、应用程序图标、应用程序名称。
  • 注意,这种方法的一个缺点是你不能在其中包含pod,你必须为任何第三方库选择Carthage或Git子模块。
  • 这种方法的优点之一是,您可以通过指定要扩展到Extensions的函数或类来维护核心模块的代码安全性。
    **注意:**在应用发布期间,不要忘记确保ipa文件的有效负载结构正确。

相关问题