找不到子项目(框架)的模块
Module from sub-project (framework) can't be found
我正在使用 XCode 8 + Swift 3.
我创建了一个名为 "MyApp" 的新 iOS 项目。
然后,我创建了一个 Cocoa touch framework 项目,命名为 "MySubProject"。
(想法是让 MyApp 项目访问 MySubProject 代码。)
它们在同一层文件夹中:
- MyApp/
- MySubProject/
在 MySubProject 中,我在服务 group/folder 下有一个 MyService.swift
文件(它是 MyService
class):
代码很简单:
import Foundation
public class MyService {
public func greeting() -> String {
return "Hello my service!"
}
}
在MyApp中,我将MySubProject.xcproject
作为MyApp下的子项目添加到MyApp项目中:
然后,我将 MySubProject/Products/
下的 MySubProject.framework 拖放到 MyApp 项目的 General --> Embedded Binaries and Linked Framework and Libraries:
现在,在 MyApp/ViewController.swift
下,我从 MySubProject
导入 MyService
class:
但是当我构建 MyApp 项目时,我总是得到编译器错误“No such module 'MyService'”,如上图所示。
为什么?如何使 MyApp 能够访问 MySubProject 代码?
MySubProject 是否启用了 "Defines Module" 设置?
编辑:
您可以检查几项内容:
要在你的主项目中找到,你的框架必须编译到相同的目标,即如果你的主项目有 iOS 作为目标,你的子项目也必须有 iOS 作为目标(而不是,例如 watchOS)。
在项目导航器中激活项目。这会显示一个包含项目和目标设置的窗格。激活您的目标和 select 常规选项卡。在 Deployment Info 下,您可以检查目标类型。
要在您的主项目中导入,您的框架必须在您的主项目开始构建时构建,即必须以正确的顺序完成。
可以适当地选择此序列:在Xcode window的顶部栏中(red/yellow/green window控制按钮最左侧),停止按钮的右右为左侧为活动方案,右侧为所选设备的字段。单击该方案会打开一个子菜单。 Select 编辑方案(这也可以通过 Product/Scheme/Edit 方案从 Xcode 主菜单完成)。 Select 在左窗格中构建。在右侧,您将看到您的目标。它们将从上到下构建。因此,您的框架必须放在最前面,因为您的主项目在开始构建时需要导入它。您可以通过相应地拖动目标来更改顺序。
还有一件事:在目标上方,有一个复选框"Parallelize Build"。这个一定不能查!如果勾选,你的主工程和你的子工程可以同时编译,这是不行的,因为子工程必须在主工程开始编译的时候编译完整。
并且,最终,您必须导入您的框架(正如 hasayakey 在这个答案中建议的那样,+1),而不是框架的特定文件。
之前的建议:
您的子项目文件“MyService”(或无论如何调用)是否为“MyService”启用了目标成员资格?
导入我的子项目!不是我的服务...在将框架复制到应用程序之后,请查看快照。我无法 post 图片。 snapshot
我正在使用 XCode 8 + Swift 3.
我创建了一个名为 "MyApp" 的新 iOS 项目。 然后,我创建了一个 Cocoa touch framework 项目,命名为 "MySubProject"。 (想法是让 MyApp 项目访问 MySubProject 代码。)
它们在同一层文件夹中:
- MyApp/
- MySubProject/
在 MySubProject 中,我在服务 group/folder 下有一个 MyService.swift
文件(它是 MyService
class):
代码很简单:
import Foundation
public class MyService {
public func greeting() -> String {
return "Hello my service!"
}
}
在MyApp中,我将MySubProject.xcproject
作为MyApp下的子项目添加到MyApp项目中:
然后,我将 MySubProject/Products/
下的 MySubProject.framework 拖放到 MyApp 项目的 General --> Embedded Binaries and Linked Framework and Libraries:
现在,在 MyApp/ViewController.swift
下,我从 MySubProject
导入 MyService
class:
但是当我构建 MyApp 项目时,我总是得到编译器错误“No such module 'MyService'”,如上图所示。
为什么?如何使 MyApp 能够访问 MySubProject 代码?
MySubProject 是否启用了 "Defines Module" 设置?
编辑:
您可以检查几项内容:
要在你的主项目中找到,你的框架必须编译到相同的目标,即如果你的主项目有 iOS 作为目标,你的子项目也必须有 iOS 作为目标(而不是,例如 watchOS)。
在项目导航器中激活项目。这会显示一个包含项目和目标设置的窗格。激活您的目标和 select 常规选项卡。在 Deployment Info 下,您可以检查目标类型。
要在您的主项目中导入,您的框架必须在您的主项目开始构建时构建,即必须以正确的顺序完成。
可以适当地选择此序列:在Xcode window的顶部栏中(red/yellow/green window控制按钮最左侧),停止按钮的右右为左侧为活动方案,右侧为所选设备的字段。单击该方案会打开一个子菜单。 Select 编辑方案(这也可以通过 Product/Scheme/Edit 方案从 Xcode 主菜单完成)。 Select 在左窗格中构建。在右侧,您将看到您的目标。它们将从上到下构建。因此,您的框架必须放在最前面,因为您的主项目在开始构建时需要导入它。您可以通过相应地拖动目标来更改顺序。
还有一件事:在目标上方,有一个复选框"Parallelize Build"。这个一定不能查!如果勾选,你的主工程和你的子工程可以同时编译,这是不行的,因为子工程必须在主工程开始编译的时候编译完整。
并且,最终,您必须导入您的框架(正如 hasayakey 在这个答案中建议的那样,+1),而不是框架的特定文件。
之前的建议:
您的子项目文件“MyService”(或无论如何调用)是否为“MyService”启用了目标成员资格?
导入我的子项目!不是我的服务...在将框架复制到应用程序之后,请查看快照。我无法 post 图片。 snapshot