2016-09-29 8 views
1

私はSwift Package Manager(SPM)にポッドを翻訳しようとしていますが、subspecの機能をCocoaPodsからSPMに翻訳する方法はわかりません。私はSPMが複数のターゲットを提供していることを知っていますが、afaikはこれはsubspecの機能と同じではありません。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ポッドは追加機能が利用可能であることを認識し、統合します。 Main subspecからのコードの簡単な例は:

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

    #if EXAMPLE_WITH_COREDATA 
     callExtraCoreDataRelatedMethod() 
    #endif 

    // ... some code ... 
} 

答えて

0

これは(それが他のターゲットで使用される方法に基づいて、ターゲットの動作をカスタマイズ)スウィフトパッケージマネージャではまだサポートされているものではありません。

これを行うパッケージがある場合は、CoreDataモジュールがMainモジュールでファクトを登録し、何らかのランタイム登録を行う必要があります。

+0

まあ、大丈夫です。モジュールの動作を別にすれば、依存関係はどうですか?パッケージ内に複数のモジュールを定義するにはどうしたらいいですか? SPMのリファレンスドキュメントには、複数のターゲットが記述されていますが、それらのターゲットのどれに依存するかは記述されていません。 – djbe

+0

これはまだ実装されていませんが、私たちはそれの必要性を認識しており、どのように見えるべきかを理解するために積極的に取り組んでいます。 –

+0

バグトラッカー、またはこれに続くことができるメーリングリストのスレッドに問題はありますか? – djbe

関連する問題