在Swift Project,Xcode中导入框架

我正在尝试将myFramework导入到一个项目中。 我已经在Build Phases-> Link Binary With Libraries中添加了myFramework

Objective-c作品:

 #import <UIKit/UIKit.h> #import <myFramework/myFramework.h> 

但在Swift中,我得到一个No such module myFramework错误:

 import UIKit import myFramework 

根据Swift文档 :

导入外部框架

您可以导入具有纯粹的Objective-C代码库,纯Swift代码库或混合语言代码库的外部框架。 无论框架是用单一语言编写还是包含来自两种语言的文件,导入外部框架的过程都是相同的。 在导入外部框架时,请确保您要导入的框架的“定义模块”构build设置为“是”。

您可以使用以下语法将框架导入到不同目标中的任何Swift文件:

迅速

 import FrameworkName 

您可以使用以下语法将框架导入到不同目标中的任何Objective-C .m文件中:

Objective-C的

 @import FrameworkName; 

我使用Xcode 5创build了myFramework 5没有“Defines Module”构build设置。

哪里有问题?

如果我正确地得到你,你的框架没有单独的构build目标(你已经使用XCode 5来构build它),并将框架包含到你的项目的构build目标中。

您所指的文档部分是关于不同目标中的框架。 由于你的框架在项目目标中,所以这部分文档不适用于此。

在你的情况下,你不能在你的Swift文件中导入框架。 这就是为什么你会得到错误信息“没有这样的模块myFramework” 。 myFramework不是模块 – 它是您项目模块的一部分(默认由您的产品名称决定)。 因此,您的框架中的类应该是可访问的。

不过你的框架是用Objective-C编写的。 所以你必须做的是在你的桥接头中导入Swift面向类,如下所述。

请注意,这与Swift导入模块无关。 bridging-header文件中的import指令只是通知编译器将Objective-C头文件“翻译”为Swift语法,并使Swift中的公共头文件可见。

那么你现在应该怎么做?

  • 首先在桥接头中导入你感兴趣的头文件。 你只需要导入你将在Swift中交互的头文件。

  • 尝试在这个阶段编译你的项目。 如果XCode无法find框架的头文件,那么您的问题可能与Swift或XCode 6无关,但通常包含框架的问题。

  • 之后,尝试实例化您在桥接头中导入的类,也许在您的AppDelegate.swift中。 XCode自动完成应该为您提供types名称。

希望这可以帮助。

根据Swift文档

从相同的目标中将Objective-C代码导入Swift

  1. 在您的Objective-C桥接头文件中,导入您想暴露给Swift的每个Objective-C头文件。 例如:

    #import "XYZCustomCell.h"

    #import "XYZCustomView.h"

    #import "XYZCustomViewController.h"

  2. 在“构build设置”下,确保Swift编译器 – 代码生成下的Objective-C桥接头构build设置具有标题的path。 path必须直接到文件本身,而不是它所在的目录。path应该是相对于您的项目,类似于在“生成设置”中指定Info.plistpath的方式。 在大多数情况下,您不需要修改此设置。

在这个桥接头文件中列出的任何公共Objective-C头文件对于Swift都是可见的。 Objective-Cfunction将自动在该目标中的任何Swift文件中提供,而不需要任何导入语句。 使用您的自定义Objective-C代码,使用与系统类相同的Swift语法。

 let myCell = XYZCustomCell() myCell.subtitle = "A custom cell" 

另外,确保“Packaging”下的“Defines Module”编译设置被设置为“Yes”。

在Swift上:

创build框架: –

  1. 启动Xcode – >创build一个新的Xcode项目 – > iOS – >框架&库 – > Cocoa Touch框架 – >命名框架(例如sampleCocoaFramework) – >创build。

  2. 设置Taget – >常规 – >部署信息 – >部署目标。

  3. 添加一个公共类:文件 – >新build文件 – > iOS – > Swift文件 – >命名它(例如openCocoaClass) – >创build。

  4. 现在添加一些代码到openCocoaClass.swift。

     import Foundation public class openCocoaClass { public init() { } public var samplePublicVariable = "samplePublicVariable @ openCocoaClass" public func samplePublicFunction() { print("samplePublicFunction @ openCocoaClass") } 

    }

  5. 清理项目:产品 – >清洁

  6. configurationscheme设置:产品 – >scheme – >编辑scheme – >运行 – >构buildconfiguration – >发布。

  7. 构build框架:产品 – >构build。

  8. 导出框架:产品 – >select框架 – >标识和types – >完整path – >发布框架。

为项目添加框架: –

  1. 启动一个Xcode项目并命名它(例如CocoaFrameworkTest)。

  2. 将sampleCocoaFramework.framework拖放到CocoaFrameworkTest的项目文件夹中。

  3. 目标 – >常规 – >embedded二进制 – >添加其他 – >select框架 – >复制项目,如果需要的话 – >完成。

在ViewController上访问框架:

 import UIKit import sampleCocoaFramework class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let frameworkObject = openCocoaClass.init() frameworkObject.samplePublicFunction() print(frameworkObject.samplePublicVariable) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } 

你需要在你的Objective C项目中使用与你的应用程序名称相同的公共头文件,在你的情况下,你需要添加所有你想暴露的类(这些类应该作为公共头添加到项目属性中)。一旦你做到这一点,你添加框架,并添加引用到公共标题导入FrameworkName

您可以使用以下语法将外部objC框架导入到swift项目中:

#import "objCExternalFramework-name/headerfilename.h"

按照这里的步骤:

Swift Docs

然后去这里:

YouTubevideo创build框架

请注意:

确保你设置标题的“目标成员”都是相同的(项目应该没问题)。

好的,现在是Xcode 7.2。 而我所观察到的是,快速导入区分大小写。 示例 – import uikit不起作用。 您必须将其input为import UIKit

只是我的两分钱。

最新的XCode提供了将框架embedded到其他项目中的选项。 这个链接( https://stackoverflow.com/a/37328591/1084174 )适合我。

只要命令+ B会有所帮助!

原因:通过Cocoapods添加框架将创build另一个包含所需框架的pod项目。 对于识别框架的主要项目,两个项目的静态库都必须被桥接。 build立工作空间是需要的。