【问题标题】:Playground Import: No Such Module 'Foo'游乐场导入:没有这样的模块“Foo”
【发布时间】:2016-01-13 16:41:21
【问题描述】:

我一直按照 Apple 的说明将自定义模块导入 Playground,包括说明here。然而我得到:

游乐场执行失败:/var/folders/z3/kd0nj4ln1rgcpm8bdz7067wh0000gs/T/./lldb/1874/playground1.swift:7:8:错误:没有这样的模块“Foo” 导入Foo

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

错误和尝试的详细图像:

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

【问题讨论】:

  • 您是否尝试将其放在您的var上方?
  • 仍未找到。 (Apple 示例在 Playground 中的任何位置显示 import 行。)
  • 有人吗?有人吗?
  • 我确实有同样的问题。从头开始重新创建操场后解决了这个问题。但是,此问题还有其他原因,例如“没有这样的模块”:例如,如果游乐场包含 Sources 文件夹,其源导入自定义模块,则找不到该模块。到目前为止我还没有找到解决方案。
  • @GoZoner 我试过了,但对我来说它已经设置为唯一。尽管如此,还是找到了解决方案。我必须为 iOS 模拟器设备(列表中的任何设备)而不是“通用 iOS 设备”构建框架。

标签: xcode swift xcode7 swift-playground


【解决方案1】:

对于一些上述解决方案都不起作用(并且 Xcode 构建路径设置已设置为 Unique)的问题,我找到了解决方案。

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

【讨论】:

  • Pod 必须至少编译一次,然后才能在 Playground 中使用。因此,如果您刚刚安装了 pod,还没有启动您的应用程序,那么是的,您需要手动构建它!
  • 这太棒了 :) 谢谢!
  • 谢谢你,@Cedric。这对我有用(Xcode 8.1,swift 3)
  • 所有设备都无法使用,您必须选择 64 位的(iPhone 5 无法使用,而 iPhone 5s 可以)
  • 哇。这是一个如此荒谬的细节......感谢分享!
【解决方案2】:

以下是我在使用 Xcode 7.1 的 OS X 上进行操作的方法:

  • 创建新项目:OS X Cocoa Framework、Swift。对于此示例,我将其命名为“TestPlaygroundFMK”。

  • 创建一个新的 Swift 文件。

  • 向文件中添加一个类。 代码必须是公开的。我为我们的例子做了这个:

import Foundation

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

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

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

游乐场必须与项目同名。

  • 再次构建项目。

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

import TestPlaygroundFMK

Talk.sayHello()

【讨论】:

  • 什么是“项目文件夹”? (在“Info.plist”或“build”旁边)。创建一个新的 Playground 后,您将其拖到工作区中吗?
  • 对不起,我已经尝试了三种可能性,都失败了。相对于 TestPlaygroundFMK.xcodeproj 的位置,你将工作空间和游乐场保存在哪里?
  • Here's a Zip 如果你想比较的话,我的版本。
  • 好的。我按照您的指示尝试更新了我的答案。然后,我下载了您的 zip,打开了工作区,构建了框架并更改为 Playground。还是同样的问题!显然我的 Xcode 安装被犯规了。
【解决方案3】:

我的 Playground 运行良好,但发现当我退出 Xcode 并重新打开它时,我会收到如下错误:

错误: /var/folders/ft/bmk8wh6s5ms4my2pxhn3qbp40000gn/T/playground1-9216e0..swift:3:8: 错误:没有这样的模块“Playground_Sources”导入 Playground_Sources

... 其中“Playground”是我的 Playground 文件的名称。

解决方案(在 Xcode 9.0 中)是:

  • 单击工作区中的任意 Playground 文件
  • 显示实用程序面板 (opt-cmd-0)
  • 在“游乐场设置”下将“平台”更改为其他任何内容,然后将其重新设置。

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

这是我发现的唯一适用于 ma​​cOS Playground 的解决方案。这个错误在 Xcode 9.3 中仍然存在。

【讨论】:

  • Xcode 9.3 正在为我工​​作这个解决方案,适用于 iOS 游乐场。
  • 这个解决方案在 Xcode 11.3.1 上适用于 iOS 游乐场
【解决方案4】:
  1. 如下创建工作区:

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

    • 选择文件 > 新建 > 项目
    • 选择 Cocoa 框架 > 下一步
    • 输入产品名称和语言 > 下一步
    • 在单击创建之前,在“添加到:”和“组”列表中选择“您的工作区名称”,如图所示
    • 框架已添加到您的工作区
  3. 在您的框架中创建 swift 文件
    • 在 Xcode 中右键单击要添加 swift 文件的文件夹并选择新文件...
    • 选择 swift > 下一步 > 为文件命名 > 创建
  4. 在 Xcode 中选择您的框架 -> 构建您的框架
  5. 创建游乐场 -> 游乐场也应该是您工作区的一部分,如果不将其拖到您的工作区,它将自动添加。
    • 在 Xcode 的文件部分右击 > 新建文件... > Playground
    • 导入
    • 调用你的方法

注意:如果您只想在 Playground 中添加类而不是框架,请查看链接 How to import my own class into an Xcode 7 playground?

【讨论】:

  • 感谢详细描述;不幸的是,我遇到了同样的问题:Playground execution failed: /var/folders/z3/kd0nj4ln1rgcpm8bdz7067wh0000gs/T/./lldb/27542/playground126.swift:7:8: error: no such module 'Again' import Again
  • Here is example zip 下载示例并打开自定义框架工作区。构建 TestFramework 和 t 目标,然后运行 ​​Playground。
  • 嗨@AnniS 我在 Xcode 7.1.1 中打开了您的 Dropbox 项目(实际上是工作区)。控制台只输出: Playground execution failed: /var/folders/jl/yprcnzkd53g0d3nsmts8p6r40000gn/T/./lldb/39159/playground80.swift:7:8: error: no such module 'TestFramework' import TestFramework ^ /var/folders/ jl/yprcnzkd53g0d3nsmts8p6r40000gn/T/./lldb/39159/playground80.swift:11:8:错误:没有这样的模块't'导入t
  • @LS.Shanghai 在运行 Playground 之前构建 TestFramework。
【解决方案5】:

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

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

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

这确保项目是为目标正确构建的,现在我烦人的编译问题消失了!

【讨论】:

    【解决方案6】:

    对我有用的解决方案:

    1. 设置您的工作区和项目/框架。
    2. 删除派生数据 (How to remove derived data?)
    3. 暂时不要构建您的项目
    4. 在 Swift 文件或 .xcodeproj 所在文件夹下创建名称与项目/目标/框架名称不同的 Playground 文件(无论您选择哪一个)
    5. 在所需平台下构建您的项目(如果 Playground 适用于 macOS,则使用 macOS 目标构建项目等)
    6. 构建完成后,尝试向 Playground 添​​加一些代码并运行它。

    附注。您可能需要在第 6 步之前重新启动 Xcode。

    【讨论】:

      【解决方案7】:

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

      【讨论】:

      • 这对我有用我还必须关闭并重新打开项目 Swift4.1 Xcode 9.3
      • 这对我来说不适用于 macOS 游乐场。我的答案中的解决方法仍然是我能够解决这个问题的唯一方法(它仍然存在于 Xcode 10.1 中)
      【解决方案8】:

      我认为说 Xcode 在某种程度上是一个黑盒并不为过。我没有声称这对其他人有用,但对我来说,在创建新的游乐场和新的框架目标以及所有其他提议的解决方案后遇到同样的问题后,最终奏效的是删除工作区文件和(在我的情况)用cocoapods再生它。

      我不知道为什么会这样。

      【讨论】:

        【解决方案9】:

        Build the framework with release ,这对我有用。 (Xcode 10.1, swift 4.2)

        【讨论】:

          【解决方案10】:

          在第一行插入一个 var 并重新运行

          var str = ""
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-08-01
            • 2022-04-14
            • 2022-09-27
            • 2018-10-02
            • 1970-01-01
            • 2019-08-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多