ios - 如何构建适用于 iOS 和 macOS 的混合包?

标签 ios swift xcode macos package

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

我的意思是:我有一些代码,我正试图将其转换为一个包。此代码具有适用于 macOS 和适用于 iOS 的 Storyboard以及可与这些 Storyboard一起运行的 swift 类,或者换句话说,swift 类可在 macOS 上运行,而其他类则可在 iOS 上运行。

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

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

Apple 有 this example他们显示您可以指定平台的位置。

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

但正如预期的那样,他们的文档没有说明如何操作。

我该怎么做?

最佳答案

SwiftPM 当前不支持 Storyboard 和其他 Assets ,因此您无法使用它们执行此操作。

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

您需要将所有文件放在同一个产品中,以便使用模块随处使用 import TheNameOfYourModule,而不是使用特定于 iOS/macOS 的导入语句。

关于ios - 如何构建适用于 iOS 和 macOS 的混合包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58381047/

相关文章:

Swift 中等效的 Python 发布请求

ios - UIView autoresizingMask 用于固定左右边距和灵活宽度

ios - 如何在构建 IPA 时修复 Xcode 6.1 错误

ios - 应用程序图标未出现在使用 Apple ID 的应用程序下

来自小键盘的 iOS 9/Swift 2 输入找不到键盘

ios - 访问子数据 Firebase

ios - 为什么我在不同的应用程序中得到不同的Locale.current?

xcode - 带有标识符X的应用程序ID不可用

ios popToRoot 在使用 block 时不释放内存

ios - UISlider 不更新 Swift 中的当前值