2016-09-29 71 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

相關問題