【问题标题】:„no such module“ error for custom framework自定义框架的“没有这样的模块”错误
【发布时间】:2017-05-31 07:25:53
【问题描述】:

目标:

我想使用自定义框架,以使某些方法和属性只能在框架内访问,而不能由应用程序的其他类访问。

我做了什么:

我关注this tutorial:出于测试目的,我设置了一个新的框架项目,将原项目中的1个类复制到这个新项目中,并将初始化程序和其他一些功能公开。这个框架项目构建没有错误。

然后我从原始项目中删除了复制的类。正如预期的那样,它不再构建并显示已删除类的“未声明类型”错误。

要将框架项目作为子项目添加到原始项目中,我添加了框架项目的xcodeproj 文件,并将框架framework 文件作为嵌入式二进制文件添加到我的原始项目目标中,这会自动将其添加到“链接框架和二进制文件“。最终,我将 import MyFramework 语句添加到了相关的 2 个文件中,这些文件使用了移动到框架中的类。

问题:

当我构建时,“未声明的类型”错误现在完全消失了,但我在导入语句中得到了“没有这样的模块”错误。
这意味着框架的公共类及其公共功能对原始项目是可见的。
但是为什么我还是会得到“没有这样的模块”错误?我应该怎么做才能解决我的问题?

PS:

我已经阅读了 SO 上的“没有这样的模块”帖子,但似乎都没有解决我的问题。

编辑

我的一位朋友指出,引用的教程应用程序与我的应用程序之间存在很大差异。抱歉,我没有提到这一点。我不知道它的相关性:

教程应用只有一个目标,iOS,而我的应用有两个目标,iOS 和 watchOS。我移到我的框架的类被两个目标使用。

由于两个目标都使用了我移至我的框架的类,因此框架也需要相同的目标,并且构建会产生两种产品,一种用于 iOS 的框架,一种用于 watchOS 的框架,请参阅下面的答案。

【问题讨论】:

  • 您是否将您的框架包含在您的主要项目设置“链接框架和库”中?
  • @Spads:我在 Xcode 8.3.2 中找不到这个项目设置。它到底在哪里?
  • 谁对我的问题投了反对票应该公平地说出原因。

标签: swift module frameworks xcode8


【解决方案1】:

单击项目导航器树顶部的项目。应该会出现项目的设置,单击常规并向下滚动到页面底部。有两个部分“嵌入式二进制文件”和“链接的框架和库”。按第二部分下方的 + 按钮,应该会出现框架列表。选择你的框架。如果它自己没有添加它,这也应该将框架添加到“嵌入式二进制文件”中。完成此操作后,请验证框架是您项目的依赖项。如果存在,请转到“构建阶段”并检查它是否存在于“目标依赖项”中。

【讨论】:

  • 尽管在重新阅读您的问题之后,您似乎已经完成了大部分工作:-/
  • 你是对的,我已经这样做了,并且我的框架被添加到了目标依赖中。
  • 很遗憾,没有。
【解决方案2】:

如果应用使用两个目标,比如 iOS 和 watchOS,并且框架类被这两个目标使用,那么框架也必须有这两个目标,比如 MyFrameworkIOSMyFrameworkwatchOS

如果项目已构建,则两个目标共享的代码现在必须导入属于已编译目标的框架。这可以通过有条件地导入以下框架来完成:

#if os(iOS)
    import MyFrameworkIOS
#else
    import MyFrameworkwatchOS
#endif  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2016-01-04
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    相关资源
    最近更新 更多