2

我正在尝试将我正在创建的 Pod 转换为 Swift Package Manager (SPM),但不知道如何将subspec功能从 CocoaPods 转换为 SPM。我知道 SPM 提供了多个目标,但是 afaik 这与subspec功能不同。

假设我有以下 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

如果开发者依赖CoreDatasubspec,它会自动包含Mainsubspec,但也会为 pod 设置一些标志。这样,Mainpod 就知道有额外的功能可用,并将其集成。子规范中的代码快速示例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 回答