2016-09-29 32 views
1

我试图将我创建的Pod翻译为Swift Package Manager(SPM),但不知道如何将CocoaPods的subspec功能转换为SPM。我知道SPM提供了多个目标,但afaik与subspec功能不同。Swift包中有类似于CocoaPods中的子模块

比方说,我有以下podspec:

Pod::Spec.new do |s| 
    s.name = 'Example' 
    ... 

    # main spec 
    s.subspec 'Main' do |ss| 
     ss.source_files = 'Source/Main/**/*.swift' 
     ss.pod_target_xcconfig = { 
      'SWIFT_ACTIVE_COMPILATION_CONDITIONS[config=Debug]' => 'DEBUG' 
     } 

     # dependencies 
     ss.dependency 'CocoaLumberjack/Swift' 
    end 

    # coredata 
    s.subspec 'CoreData' do |ss| 
     ss.source_files = 'Source/CoreData/**/*.swift' 
     ss.pod_target_xcconfig = { 
      'SWIFT_ACTIVE_COMPILATION_CONDITIONS[config=Debug]' => 'EXAMPLE_WITH_COREDATA', 
      'SWIFT_ACTIVE_COMPILATION_CONDITIONS' => 'EXAMPLE_WITH_COREDATA' 
     } 

     # dependencies 
     ss.dependency 'Example/Core' 
     ss.dependency 'MagicalRecord', '> 2.3' 
    end 
end 

如果开发者依赖于CoreData subspec,它会自动包含Main subspec,还设置吊舱一些标志。这样,Main pod知道可用的额外功能,并将其集成。从Main subspec代码简单的例子:

func someFunction() { 
    // ... some code ... 

    #if EXAMPLE_WITH_COREDATA 
     callExtraCoreDataRelatedMethod() 
    #endif 

    // ... some code ... 
} 

回答

0

这是不是它是由雨燕包管理器(定义目标的基础上如何使用它的其他目标的行为)被支持。

如果你要做到这一点,现在你必须通过某种运行时登记在CoreData模块将注册与Main模块,它需要这种行为等位的事实,做一个包。

+0

嗯,没关系。行为放在一边(模块的),依赖关系如何?我如何在我的包中定义多个模块,并让用户只包含他们想要的模块? SPM的参考文档描述了多个目标,但不是如何依赖这些目标之一。 – djbe

+0

这还没有实现,尽管我们意识到它的需要,并正在积极研究如何看待它。 –

+0

错误跟踪器或邮件列表线程中是否存在问题? – djbe

相关问题