在app项目

时间:2018-01-22 01:25:39

标签: ios frameworks cocoapods

我有一个应用程序,历史上已经发展了很多,并且有点清洁,可以选择在未来向第三方开发人员提供代码,我正在考虑将我的项目分成多个项目然后我可以出口作为一个框架。

目前一切都在一个大项目中。我有:

  • 4个应用目标
  • 共享视图控制器
  • 共享网络服务
  • 共享模型类
  • 共享实用程序类
  • 共享扩展程序
  • 共享协议

问题在于并非每个应用都使用每个Web服务。并非每个应用程序都使用每个协议。并非每个扩展程序都在每个应用程序中使用,等等。

现在纠正我,如果我错了,但是我不能在他们自己的框架中放置Web服务,然后在我拥有应用程序目标的项目中使用框架?

我可以为"核心"做同样的事情吗?其中包含所有实用程序,扩展,协议和模型?

然后我可以使用"核心"在Web服务框架以及应用程序目标中?

这样的结构会是什么样子?我已经尝试创建两个框架项目,然后在另一个框架内部使用一个框架,但我无法构建它。是因为我需要在每个框架项目中使用Cocoapods吗?那可能吗?

例如,Web服务需要" RxSwift"和" Moya"但是"核心"还需要" RxSwift"。

我在这里有错误的想法吗?我只使用一个Core框架并将所有内容放在那里共享吗?我很困惑,可能缺乏对框架如何运作的更深入理解。

1 个答案:

答案 0 :(得分:1)

我正在使用 CocoaPods ,并与主应用网络服务核心框架分开。这样看起来在项目中:

enter image description here

让我们从核心开始,因为即使网络服务依赖于它。我称之为 Common 而不是核心,它是available on GitHub。它包含多个子文件夹,代表它们扩展的框架。并且有两个podspecs。

enter image description here

CommonExtended 包含应用扩展程序中不可用的功能(例如在今日扩展程序中),并取决于通用。因此,将核心拆分为两个单独的框架提供了一种在主应用应用扩展程序中使用它的方法。虽然GitHub上有 Common ,但我在本地下载并使用它(但是只要你更新你的pod就可以从远程下载它,你只需要指定远程地址)

网络服务是一个名为 Api 的本地文件夹,其podspec就是这样:

enter image description here

正如您所看到的,它具有 RxSwift Moya Common 之类的依赖关系(您问题中所需的行为 - 框架包含框架)。

因此,每当我需要使用应用程序或其扩展中的任何框架时 - 我只需指定需要哪种框架作为依赖:

enter image description here

然后只需导入框架并使用它们:

import Api
import Common
import CommonExtended

P.S。这只是一个实验,我不是 CocoaPods 专业人士。但它对我有用。

修改。本地广告容易更新。您只需进行更改并在项目中查看它们(因为我记得主项目中的Cmd + B使更改可见)。但这仅适用于已存在的本地pod中的文件。如果您需要将新文件添加到本地窗格 - 运行pod install以使此文件可见。

所有本地pod都是100%本地的,它们与主项目位于同一个存储库中。但 Common 是一个在本地下载的远程存储库。为什么?因为它用于不同的项目。因此,在每台计算机上,您必须在podfile中编写自己的 Common 路径。 This link提供了一种在每台计算机上定义 Common 路径的方法,并且永远不会再次更改podfile。不要忘记将常见更改提交到远程。其他本地pod将自动与项目一起提交。