游乐场导入:没有这样的模块 'Foo'

Playground Import: No Such Module 'Foo'

我已认真按照 Apple 说明将自定义模块导入 playground,包括说明 here。然而我得到:

Playground execution failed: /var/folders/z3/kd0nj4ln1rgcpm8bdz7067wh0000gs/T/./lldb/1874/playground1.swift:7:8: error: no such module 'Foo' import Foo

如何恢复到正常运行的 Playground 导入? [编辑:请注意,有两个答案提供了将游乐场与框架相关联的详细说明;我已按照这些说明进行操作,但没有运气。 解决方案需要重新配置 Xcode 中的某些内容;我的安装显然已损坏]

错误和尝试的详细图像:

这里是另一种尝试,基于@EricD的回答,显示目录结构,没有骰子。

以下是我如何使用 Xcode 7.1 进行 OS X:

  • 创建新项目:OS X Cocoa 框架,Swift。对于这个例子,我将其命名为 "TestPlaygroundFMK".

  • 创建一个新的 Swift 文件。

  • 在文件中添加一个class。 代码必须是 public. 我为我们的例子做了这个:

import Foundation

public class Talk {
    public class func sayHello() {
        print("Hello from framework!")
    }
}
  • 立即构建项目。

  • 在菜单栏中,单击“文件”>“另存为工作区”。

  • 创建一个新的 Playground 并将其保存在 Swift 文件旁边的项目文件夹中。

Playground 必须不能与项目同名。

  • 再次构建项目。

  • 在 Playground 中导入您的框架并使用它:

import TestPlaygroundFMK

Talk.sayHello()

  1. 创建如下工作区:

    • 选择文件 > 新建 > 工作区
    • 输入工作区名称,并指定其在文件系统中的位置
    • 点击保存
  2. 现在,使用 swift 文件创建一个 Cocoa 框架,其中包含您的 class

    • 选择文件 > 新建 > 项目
    • Select Cocoa 框架 > 下一步
    • 输入产品名称和语言 > 下一步
    • 点击创建之前,在'Add to:'和'Group'列表中选择'Your workspace name'如图
    • 框架已添加到您的工作区
  3. 在您的框架中创建 swift 文件
    • 在 Xcode 中右键单击要添加 swift 文件和 select 新文件的文件夹...
    • Select swift > 下一步 > 命名文件 > 创建
  4. Select 您的框架 Xcode -> 构建您的框架
  5. 创建游乐场 -> 游乐场也应该是您工作区的一部分,如果不将其拖到您的工作区,它将自动添加。
    • 右键单击 Xcode 的文件部分 > 新文件... > 游乐场
    • 进口
    • 调用你的方法

注意:如果您只是想将 classes 而不是框架添加到您的 playground,请检查 link

来自 Apple 支持的解决方案 是调整我的 Xcode 首选项。在 Locations :: Advanced 上,我的配置是 'Legacy'。通过更改为 'Unique',并撤消我尝试插入的任何路径,Playgrounds 可以现在 导入框架。

对于上述 none 解决方案中的一些(并且 Xcode 构建路径设置已设置为 Unique),我找到了解决方案。

框架必须使用 iOS 模拟器设备(列表中的任何设备)的方案构建,而不是 Generic iOS Device,因为 Playgrounds 不支持它。这个对我有用:

我的 playground 工作正常,但发现当我退出 Xcode 并重新打开它时,我会收到这样的错误:

error: /var/folders/ft/bmk8wh6s5ms4my2pxhn3qbp40000gn/T/playground1-9216e0..swift:3:8: error: no such module 'Playground_Sources' import Playground_Sources

... 其中 "Playground" 是我的 playground 文件的名称。

这个问题的解决方案(在 Xcode 9.0 中)是:

  • 单击工作区中的任何 playground 文件
  • 显示实用工具面板(opt-cmd-0)
  • 在 "Playground Settings" 下将 "Platform" 更改为其他任何内容,然后将其重新设置。

在我的例子中,它设置为 macOS。我将其更改为 iOS,然后返回 macOS(无需重新编译)并且它开始正常工作......直到我关闭 Xcode 并再次打开它。

这是我发现与 macOS playgrounds 一起使用的唯一解决方案。此错误在 Xcode 9.3.

中仍然存在

我认为说 Xcode 有点像黑盒子并不夸张。我并没有声称这对其他任何人都有效,但对我来说,在创建一个新的游乐场和一个新的框架目标以及所有其他提议的解决方案后遇到同样的问题后,最终起作用的是删除工作区文件和(在我的情况)用可可足类再生它。

我不知道为什么会这样。

通过发布构建框架,这对我有用。 (Xcode 10.1, swift 4.2)

对我有用的解决方案:

  1. 设置您的工作区并project/framework。
  2. 删除派生数据()
  3. 暂时不要构建您的项目
  4. 在包含 Swift 文件或 .xcodeproj 所在的文件夹下创建名称与您的 project/target/framework 名称不同的游乐场文件(无论您选择哪个)
  5. 在所需平台下构建项目(如果 playground 是针对 macOS 的,则使用 macOS 目标构建项目等)
  6. 构建完成后,尝试向您的 playground 添​​加一些代码,然后 运行 它。

P.S。您可能需要在第 6 步之前重新启动 Xcode。

在第一行插入一个var然后重新运行

var str = ""

我不确定我是否遇到了与原始问题完全相同的问题 - 但考虑到解决方案的组合和年龄以及缺乏对我有用的解决方案,我想我会分享。

在 Xcode 11+(在 12.2 上测试过),当 Playgrounds 包含一个作为一部分的框架时,我经常无法 运行 给出“没有这样的模块”错误工作区。

我的解决方案是在 Playground 的“文件检查器”和“构建活动方案”选项中:

这确保了针对目标正确构建项目,现在我恼人的编译问题消失了!