首页 > 解决方案 > 如何构建适用于 iOS 和 macOS 的混合包?

问题描述

如何在 Xcode 11 的包中处理旨在在不同目标(如 iOS、macOS、tvOS 等)上运行的代码?

我的意思是:我有要转换为包的代码。这段代码有适用于 macOS 和 iOS 的故事板,以及使用这些故事板运行的 swift 类,或者换句话说,有在 macOS 上运行的 swift 类和在 iOS 上运行的其他类。

我希望能够创建一个可以在任何项目上导入的包,如果该项目仅适用于 iOS、仅适用于 mac 或具有两种架构的目标,则独立。

最大的问题是该包没有目标,我可以在其中为其分配一个文件。

苹果有这个例子,他们告诉你可以指定平台。

let package = Package(
    name: "MyPackage",
    platforms: [
        .macOS(.v10_13), .iOS(.v11), .tvOS(.v11),
    ],

但正如预期的那样,他们的文档没有显示如何。

我怎么做?

标签: iosswiftxcodemacospackage

解决方案


SwiftPM 目前不支持情节提要和其他资产,因此您不能对它们执行此操作。

如果您只有源代码,那么您可以在用于特定操作系统的文件的所有内容周围使用#if os(iOS)/块。#if os(macOS)

您将希望将所有文件放在同一个产品中,以便使用模块在import TheNameOfYourModule任何地方都可以使用,而不是使用 iOS/macOS 特定的导入语句。


推荐阅读