关于多平台库的基本 Swift 包管理器问题

Basic Swift Package Manager Questions About Multiplatform Libraries

我费了好大劲才弄清楚这个问题。我知道如何使用 CocoaPods 执行此操作,但 SPM 似乎变得更好了。 关于这个具体问题,我无法从 the official SPM docs 中得出任何结论。

我正在开发 Swift 框架,旨在嵌入到应用程序和应用程序(iOS 和 OSX)中。我在 xcodeproj 中有几个目标,每个平台都有目标。我可以 运行 xcodebuild,并单独完成,或者使用 CocoaPods 按需生成它们。

我似乎无法让 SPM 做同样的事情。它顽固地只构建 OSX 版本,我看不到任何命令来重新定位相同的源文件。

使用相同的源文件非常重要,而不是拥有相同文件的两个副本,因此我的所有目标都需要指向相同的目录。

Package.swift 文件现在的样子:

// swift-tools-version:4.2

import PackageDescription

let package = Package(
    name: "WhiteDragon",
    products: [
        .library(
            name: "WhiteDragon",
            targets: ["WhiteDragon"]
        ),
    ],
    targets: [
        .target(
            name: "WhiteDragon",
            dependencies: [],
            path: "WhiteDragon/Classes"
        ),
        .testTarget(
            name: "WhiteDragonTests",
            dependencies: ["WhiteDragon"],
            path: "WhiteDragonTests"
        ),
    ],
    swiftLanguageVersions: [.v4_2]
)

我正在继续挖掘,并尝试各种疯狂的想法,但我还没有。我是 SPM 的新手,我发现几乎每个人都只是在讨论使用它来拉取依赖项,或者他们使用与 init 相同的原始小结构。

我很想使用 RTFM,但到目前为止我有点失望,很高兴被引导到 "M" 可以给我答案。

非常感谢!

更新:这是 podspec,它给了我我需要的东西(特里爵士做了一些修改):

Pod::Spec.new do |spec|
    spec.name                       = 'WhiteDragon'
    spec.summary                    = 'A Cocoa Framework that Provides an Application-Level Interaction With a BAOBAB Server.'
    spec.description                = 'The White Dragon Cocoa Framework is a Swift shared framework designed to allow easy development of iOS/MacOS RVP apps. It completely abstracts the connection to BAOBAB Servers, including administration functions.'
    spec.version                    = '1.0.0.1000'
    spec.ios.deployment_target      = '11.0'
    spec.osx.deployment_target      = '10.11'
    spec.homepage                   = '<MILLENIUM HAND AND SHRIMP>'
    spec.social_media_url           = 'https://twitter.com/BUGRIT'
    spec.author                     = { '<MUMBLE, MUMBLE>' }
    spec.documentation_url          = '<BUGRIT>'
    spec.license                    = { :type => 'MIT', :file => 'LICENSE.txt' }
    spec.source                     = { :git => '<GASPODE!>', :tag => spec.version.to_s }
    spec.source_files               = 'WhiteDragon/Classes/**/*'
end

目前 SPM 不支持 iOS 个目标。

At this time there is no explicit support for depending on UIKit, AppKit, etc, though importing these modules should work if they are present in the proper system location. We will add explicit support for system dependencies in the future. Note that at this time the Package Manager has no support for iOS, watchOS, or tvOS platforms.

Depending on Apple Modules