我正在使用XCode 8 + Swift 3。
我创建了一个名为" MyApp"的全新iOS项目。 然后,我创建了一个Cocoa touch 框架项目,名为" MySubProject"。 (我们的想法是让 MyApp 项目访问 MySubProject 代码。)
它们位于同一级文件夹中:
- MyApp/
- MySubProject/
在 MySubProject 中,我在服务组/文件夹下有一个MyService.swift
文件(MyService
类):
代码非常简单:
import Foundation
public class MyService {
public func greeting() -> String {
return "Hello my service!"
}
}
在 MyApp 中,我将MySubProject.xcproject
添加到 MyApp 项目中作为 MyApp 下的子项目:
然后,我将MySubProject/Products/
下的 MySubProject.framework 拖放到MyApp项目的General - >中。嵌入式二进制文件和链接的框架和库:
现在,在MyApp/ViewController.swift
下,我从MyService
导入MySubProject
类:
但是当我构建MyApp项目时,我总是遇到编译器错误" 没有这样的模块' MyService' "如上图所示。
为什么呢?如何让 MyApp 能够访问 MySubProject 代码?
答案 0 :(得分:2)
导入MySubProject!不是我的服务...在该应用程序的复制框架之后,请看快照。我无法发布图片。 snapshot
答案 1 :(得分:0)
MySubProject是否启用了“定义模块”设置?
答案 2 :(得分:0)
修改强>
您可以检查以下几项内容:
要在您的主项目中找到,您的框架必须编译到同一目标,即如果您的主项目以iOS为目标,您的子项目也必须将iOS作为目标(而不是,例如watchOS)。 /> 在项目导航器中激活项目。这将显示包含项目和目标设置的窗格。激活目标并选择“常规”选项卡。在“部署信息”下,您可以检查目标类型。
要在主项目中导入,必须在主项目开始构建时构建框架,即必须按照正确的顺序进行构建。
可以适当地选择此序列:在Xcode窗口的顶部栏(最左边有红色/黄色/绿色窗口控制按钮的那个)中,停止按钮的右侧是一个字段,其中左侧是活动方案,右侧是所选设备。单击该方案将打开一个子菜单。选择编辑方案(这也可以通过产品/方案/编辑方案从Xcode主菜单完成)。在左窗格中选择“构建”。在右侧,您将看到目标。它们将从上到下构建。因此,您的框架必须位于最前面,因为您的主项目在开始构建时需要导入。您可以通过相应拖动目标来更改序列。
还有一件事:在目标之上,有一个复选框“Parallelize Build”。这一定不能检查!如果选中它,您的主项目和子项目可以同时构建,这将无法工作,因为子项目必须在主项目开始构建时完全编译。
而且,最终,您必须导入您的框架(如本答案中建议的hasayakey,+ 1),而不是框架的特定文件。
以前的建议:
您的子项目文件“MyService”(或者它被称为)是否已启用“MyService”的目标成员资格?