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

时间:2018-11-03 20:38:05

标签: ios swift macos swift-package-manager

我在弄清楚这个问题时真是恶魔般。我知道如何使用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

1 个答案:

答案 0 :(得分:2)

当前SPM不支持iOS目标。

  

目前,对于依赖UIKit尚无明确支持,   AppKit等,尽管如果导入这些模块应该可以   存在于正确的系统位置。我们将添加明确的支持   用于将来的系统依赖性。 请注意,此时   软件包管理器不支持iOS,watchOS或tvOS平台

Depending on Apple Modules