【发布时间】: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