游乐场进口:没有这样的模块' Foo'

时间:2015-10-15 09:34:14

标签: xcode swift xcode7 swift-playground

我孜孜不倦地遵循Apple的指示将自定义模块导入游乐场,包括说明here。然而我得到了:

  

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

如何恢复到有效的Playground导入? [编辑:注意,两个答案已经产生了将操场与框架相关联的详细说明;我遵循了这些指示,但没有运气。 该解决方案需要涉及在Xcode中重新配置某些内容;我的装置显然已被打破]

错误和尝试的详细图片: enter image description here

这是另一个尝试,基于@EricD的答案,显示了目录结构,没有骰子。 enter image description here

10 个答案:

答案 0 :(得分:38)

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

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

Working scheme

答案 1 :(得分:14)

以下是我使用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文件旁边的项目文件夹中。

enter image description here

Playground必须与项目名称相同。

  • 再次构建项目。

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

import TestPlaygroundFMK

Talk.sayHello()

enter image description here

答案 2 :(得分:5)

  1. 创建如下工作区:

    • 选择文件>新>工作区
    • 输入工作区名称,并在文件系统中指定其位置
    • 点击保存
  2. 现在,使用带有您的类

    的swift文件创建一个Cocoa框架
    • 选择文件>新>项目
    • 选择Cocoa框架>下一步
    • 输入产品名称和语言>下一步
    • 在点击创建之前,在'添加到:'和' Group'列表选择'您的工作区名称'如图所示Add to workspace
    • 框架已添加到您的工作区
  3. 在您的框架中创建swift文件
    • 在Xcode中右键单击要添加swift文件的文件夹并选择新文件...
    • 选择swift>下一个>为您的文件命名>创建
  4. 在Xcode中选择您的框架 - >构建框架
  5. 创建游乐场 - >游乐场也应该是您工作区的一部分,如果不将其拖动到您的工作区,它将自动添加。
    • 右键点击Xcode的文件部分>新文件...>游乐场
    • import
    • 致电您的方法
  6. 注意:如果您只想将类而不是框架添加到游乐场,请查看链接How to import my own class into an Xcode 7 playground?

答案 3 :(得分:4)

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

  

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

......其中"游乐场"是我的游乐场文件的名称。

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

  • 点击工作区中的任何游乐场文件
  • 显示“工具”面板(opt - cmd - 0
  • "游乐场设置"改变平台"其他任何东西然后把它放回去。

在我的情况下,它设置为macOS。我把它更改为iOS然后再回到macOS(不需要重新编译)它开始工作正常......直到我关闭Xcode并再次打开它。

这是我发现使用 macOS playgrounds 的唯一解决方案。 Xcode 9.3中仍存在此错误。

答案 4 :(得分:2)

来自Apple Support的

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

答案 5 :(得分:2)

对我有用的解决方案:

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

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

答案 6 :(得分:1)

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

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

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

Build Active Scheme

这可以确保针对目标适当地构建项目,而现在我烦人的编译问题就解决了!

答案 7 :(得分:0)

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

我不知道为什么会这样。

答案 8 :(得分:0)

enter image description here使用release构建框架,这对我有用。 (Xcode 10.1,快速4.2)

答案 9 :(得分:0)

在第一行插入一个变量,然后重新运行

var str = ""