2

作成中の Pod を Swift Package Manager (SPM) に変換しようとしていますが、subspec機能を CocoaPods から SPM に変換する方法がわかりません。SPM が複数のターゲットを提供することは知っていますが、これはsubspec機能と同じではありません。

次のポッドスペックがあるとしましょう:

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サブスペックが自動的に含まれますがMain、ポッドのいくつかのフラグも設定されます。このようにして、Mainポッドは追加機能が利用可能であることを認識し、それを統合します。サブスペックからのコードの簡単な例Main:

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

    #if EXAMPLE_WITH_COREDATA
        callExtraCoreDataRelatedMethod()
    #endif

    // ... some code ...
}
4

1 に答える 1

0

これは、Swift パッケージ マネージャー (他のターゲットでの使用方法に基づいてターゲットの動作をカスタマイズする) によってまだサポートされていないものです。

これを実行したいパッケージがある場合、現時点では、モジュールがこの別の動作が必要CoreDataであるという事実をモジュールに登録する、ある種のランタイム登録を介して実行Mainする必要があります。

于 2016-10-01T04:39:58.683 に答える