私は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 ...
}
まあ、大丈夫です。モジュールの動作を別にすれば、依存関係はどうですか?パッケージ内に複数のモジュールを定義するにはどうしたらいいですか? SPMのリファレンスドキュメントには、複数のターゲットが記述されていますが、それらのターゲットのどれに依存するかは記述されていません。 – djbe
これはまだ実装されていませんが、私たちはそれの必要性を認識しており、どのように見えるべきかを理解するために積極的に取り組んでいます。 –
バグトラッカー、またはこれに続くことができるメーリングリストのスレッドに問題はありますか? – djbe