ios - 如何在具有多个目标的 CocoaPods 中制作框架?

标签 ios swift cocoapods carthage swift-package-manager

我编写了一个框架,我喜欢将框架划分为小的独立子模块(目标)。 Apple 为我想用 CocoaPods 实现的目标提供了一个很酷的描述:

Targets are the basic building blocks of a package. A target can define a module or a test suite. Targets can depend on other targets in this package, and on products in packages which this package depends on.



我可以使用 Swift 包管理器轻松做到这一点:

    targets: [
        .target(name: "Network"),
        .target(name: "Service", dependencies: ["Network"])
    ],

我可以使用 import NetworkService target 很酷,因为它们是独立的模块,逻辑清晰。

如何在 CocoaPods 和 Carthage 中实现(我写的是框架,不是最终的应用程序)?

我试过的:

子规范

我尝试使用 subspecs :

  s.subspec 'Service' do |ss|
    ss.dependency 'MyFramework/Network'
    ss.source_files = 'Sources/Service/**/*.swift'
  end

  s.subspec 'Network' do |ss|
    ss.source_files = 'Sources/Network/**/*.swift'
  end

它不能按我的意愿工作,因为 CocoaPods 只是将所有文件合并到一个框架中(只是将其划分为单独的文件夹),所以:
  • 我收到命名空间冲突。
  • 尝试 import Network 时出现 fatal error 里面 Service因为没有Network pod install 之后的目标.所以我不能将那个框架与 Swift 包管理器一起使用。 CocoaPods 只是将所有内容合并到一个目标 MyFramework正如我之前提到的。

  • 单独的 repos/pods

    这是解决方案,但很难维护多个单独的 git 存储库并进行单独的提交和推送。我想将所有内容保存在一个仓库中。

    最佳答案

    我很确定 CocoaPods 没有能力为一个 podspec 创建单独的目标。
    正如您上面提到的,您可以创建单独的 podspec,但在一个存储库中,如 RxSwift .然后,在您进行开发时,您可以使用一些包含所有 podspecs 的示例项目。您不需要管理不同的存储库。
    此外,您可以尝试使用不同的模块创建模块映射,例如:

    framework module Something {
        framework module Core { ... }
        framework module Toolbox { ... }
        ...
    }
    
    然后在 podspec 中分配它,例如:
    Pod::Spec.new do |s|
      s.module_map = "#{s.name}/#{s.name}.modulemap"
    ...
    
    但我不确定。我只尝试了第一种方法,如 RxSwift存储库。

    关于ios - 如何在具有多个目标的 CocoaPods 中制作框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58540821/

    相关文章:

    ios - 添加 Action 扩展图标是不可能的

    iphone - 如何在 UITableViewCell 中绘制两个平行条

    arrays - 尝试计算用户输入的字符数,但它也在计算 [""],而不仅仅是用户输入的单词。

    json - 动态字典名称解码器 json

    ios - XCode 7.3 和 Swift 2.2 中没有这样的模块 'Alamofire'

    swift - 尝试安装新 Pod 后框架文件中出现错误

    ios - NewRelicAgent 不适用于 OCTesting

    ios - 我们如何在IOS中将标签栏放在屏幕顶部

    ios - UISearchController 就像 Instagram Explore Tab

    Swift 字符串 vs. 字符串!与字符串?