自定义框架

时间:2017-05-31 07:25:54

标签: swift module frameworks xcode8

目标:

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

我做了什么:

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

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

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

问题:

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

PS:

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

编辑

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

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

由于我移动到我的框架的类被两个目标使用,因此框架也需要相同的目标,构建产生两个产品,一个用于iOS的框架和一个用于watchOS的框架,请参阅下面的答案。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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