1

我有一个从 Xcode 9 / New Project / Cross Platform Game App 创建的应用程序,目标:macOS 和 iOS。

我编写了以下简单函数来从数据资产加载文本。

func dataAssetAsString(_ name: String) -> String? {
  if let asset = NSDataAsset(name: NSDataAsset.Name(name)) {
    return String(data: asset.data, encoding: .utf8)
  }
  return nil
}

我对以下事情感到困惑:

  • 此功能仅在我导入 UIKit 或 AppKit 时才有效。
  • 但是以某种方式导入 MetalKit 而不是 UIKIt 或 AppKit 使其工作。这真的让我很困惑。这应该与 MetalKit 无关。

我为 iOS 和 macOS 之间的代码共享找到的大多数答案都建议在文件/填充的开头进行某种条件导入。

我浏览了WWDC 2014 Session 233: Sharing code between iOS and OS X的幻灯片,它明确表示我们不应该在 Swift 中做 shimming。

快速匀场没有

另一方面,我不明白我们该做什么来代替匀场。上面提到的为 5 行函数创建和编译共享框架的非常复杂的过程不可能是正确的方向。

  1. 在 2018 年(Swift 4、Xcode 9、iOS 11、macOS 10.13),将这样一个微不足道的跨平台代码添加到应用程序的推荐方法是什么?

  2. MetalKit 的魔力是什么,它可以在没有垫片的情况下工作?它在内部填充吗?

4

0 回答 0