Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在CoCoapod中构建具有多个目标的框架?_Ios_Swift_Cocoapods_Carthage_Swift Package Manager - Fatal编程技术网

Ios 如何在CoCoapod中构建具有多个目标的框架?

Ios 如何在CoCoapod中构建具有多个目标的框架?,ios,swift,cocoapods,carthage,swift-package-manager,Ios,Swift,Cocoapods,Carthage,Swift Package Manager,我编写了一个框架,我喜欢将框架划分为几个独立的子模块(目标)。苹果为我想用CocoaPods实现的目标提供了一个很酷的描述: 目标是包的基本构建块。目标可以定义模块或测试套件。 目标可以依赖于此包中的其他目标,也可以依赖于此包所依赖的包中的产品 我可以很容易地使用Swift Package Manager: 目标:[ .目标公司(名称:“网络”), .target(名称:“服务”,依赖项:[“网络”]) ], 我可以在服务目标中使用导入网络,这很酷,因为它们是独立的模块,逻辑清晰 如何在Coc

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

目标是包的基本构建块。目标可以定义模块或测试套件。 目标可以依赖于此包中的其他目标,也可以依赖于此包所依赖的包中的产品

我可以很容易地使用Swift Package Manager:

目标:[
.目标公司(名称:“网络”),
.target(名称:“服务”,依赖项:[“网络”])
],
我可以在
服务
目标中使用
导入网络
,这很酷,因为它们是独立的模块,逻辑清晰

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

我所尝试的: 亚种 我尝试使用:

s.subsec‘服务’do | ss|
ss.dependency“MyFramework/Network”
ss.source_文件='Sources/Service/***.swift'
结束
s、 子类“网络”do | ss|
ss.source_文件='Sources/Network/***.swift'
结束
它不能像我希望的那样工作,因为CocoaPods只是将所有文件合并到一个框架中(只是将其划分为单独的文件夹),所以:

  • 我收到名称空间冲突
  • 尝试在
    服务中导入网络时出现致命错误,因为
    pod安装后没有
    网络
    目标。因此,我不能将该框架与Swift Package Manager一起使用。CocoaPods只是将所有内容合并到一个目标
    MyFramework
    ,正如我前面提到的
  • 单独的回购/POD
    这是一个解决方案,但很难维护多个独立的git存储库,也很难进行单独的提交和推送。我想把所有东西都保存在一个回购中。

    我很确定CocoaPods没有能力为一个podspec创建单独的目标

    如上所述,您可以创建单独的podspec,但可以在一个存储库中创建,如。然后,在开发过程中,您可以使用一些示例项目,其中包括所有的podspec。您不需要管理不同的存储库

    此外,您还可以尝试使用不同的模块创建模块映射,例如:

    framework module Something {
        framework module Core { ... }
        framework module Toolbox { ... }
        ...
    }
    
    然后在podspec中指定,例如:

    Pod::Spec.new do |s|
      s.module_map = "#{s.name}/#{s.name}.modulemap"
    ...
    

    但我不确定。我只尝试了第一种方法,如在
    RxSwift
    存储库中。

    在pod文件中使用以下方法,为每个目标指定不同的pod。 您还可以创建多个
    def
    ,并在每个pod中添加可以单独使用的不同pod

    在所提供的示例中,我有2个共享吊舱和2个目标

    • target1\u name
      是一个目标的名称

    • target2\u name
      是另一个目标的名称

    • shared_pods
      pods列表

    • shared_pods_2
      其他pods的列表

      use_frameworks!    
      
      def shared_pods
       # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
      
       pod 'RealmSwift'
       pod 'Alamofire'
       pod 'ReachabilitySwift'
       pod 'SDWebImage'       
      end
      
      def shared_pods_2
       pod 'Fabric'
       pod 'Crashlytics'
       pod 'CryptoSwift'
      end
      
      target 'target1_name' do
       shared_pods
      end
      
      target 'target2_name' do
       shared_pods_2
      end
      

    您有什么理由不想单独捆绑它们?所以,您可以为网络创建一个Pod,然后声明一个单独的服务Pod,它本身将使用网络作为Pod?:)感谢您的回答,但这是一个pod文件,用于使用pod,而问题是关于podspec,用于创建pod