首页 文章

Swift项目中的导入框架,Xcode

提问于
浏览
44

我正在尝试将 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 documentation

导入外部框架您可以导入具有纯Objective-C代码库,纯Swift代码库或混合语言代码库的外部框架 . 无论框架是用单一语言编写还是包含来自两种语言的文件,导入外部框架的过程都是相同的 . 导入外部框架时,请确保将要导入的框架的“定义模块”构建设置设置为“是” . 您可以使用以下语法将框架导入到不同目标中的任何Swift文件中:SWIFT import FrameworkName
您可以使用以下语法将框架导入到不同目标中的任何Objective-C .m文件中:OBJECTIVE-C @import FrameworkName;

我使用Xcode 5创建了 myFramework . Xcode 5没有"Defines Module"构建设置 .

问题出在哪儿?

8 回答

  • 12

    好的,现在是Xcode 7.2 . 我观察到的是,快速导入区分大小写 . 示例 - import uikit 无效 . 你必须输入 import UIKit .

    只是我的两分钱 .

  • 0

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

    #import "objCExternalFramework-name/headerfilename.h"

  • 0

    根据Swift documentation

    从同一目标将Objective-C代码导入Swift在Objective-C桥接头文件中,导入要向Swift公开的每个Objective-C头 . 例如:#import“XYZCustomCell.h”#import“XYZCustomView.h”#import“XYZCustomViewController.h”在Build Settings下,确保Swift Compiler - Code Generation下的Objective-C Bridging Header构建设置有一个 Headers 的路径 . 路径必须直接到文件本身,而不是它所在的目录 . 路径应该与项目相关,类似于在Build Settings中指定Info.plist路径的方式 . 在大多数情况下,您不需要修改此设置 . Swift可以看到此桥接头文件中列出的任何公共Objective-C标头 . Objective-C功能将自动在该目标内的任何Swift文件中提供,无需任何import语句 . 使用您的自定义Objective-C代码,使用与系统类相同的Swift语法 . 让myCell = XYZCustomCell()
    myCell.subtitle =“自定义单元格”

    此外,请确保“打包”下的“定义模块”构建设置设置为“是” .

  • 2

    如果我正确地为您提供了框架的单独构建目标(您已经使用XCode 5构建它)并将框架包含在项目的构建目标中 .

    您所指的文档部分是关于 different 目标中的框架 . 由于您的框架在项目_342087中,因此适用于此处 .

    在您的情况下,您可以't do an import of the framework in your Swift file. That'为什么会收到错误消息 "No such module myFramework" . myFramework不是模块 - 它是项目模块的一部分(默认情况下由您的产品名称决定) . 因此,框架中的类应该是可访问的 .

    但是,您的框架是用Objective-C编写的 . 所以你需要做的是在你的桥接头中导入面向Swift的类,如here所述 .

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

    So what should you do now?

    • 首先在bridging-header中导入您感兴趣的头文件 . 您只需要导入将在Swift中与之交互的标头 .

    • 尝试在此阶段编译项目 . 如果XCode无法找到框架的头文件,那么您的问题可能与Swift或XCode 6无关,而是包含框架的问题 .

    • 之后尝试实例化你在bridging-header中导入的类,可能在你的AppDelegate.swift中 . XCode自动完成应该为您提供类型名称 .

    希望这可以帮助 .

  • 0

    在你的目标c项目中你需要一个与你的应用程序名称相同的公共头文件,在你的情况下是FrameworkName.h并添加你想要公开的所有类(这些类应该作为项目属性中的公共头添加)一旦你这样做,您添加框架并添加对您的公共标头导入FrameworkName的引用

  • 20

    最新的XCode提供了将框架嵌入其他项目的选项 . 这个链接(https://stackoverflow.com/a/37328591/1084174)对我很有用 .

  • 11

    On Swift:

    创建框架: -

    • 启动Xcode - >创建一个新的Xcode项目 - > iOS - > Framework&Library - > Cocoa Touch Framework - >命名框架(例如sampleCocoaFramework) - > Create .

    • 设置Taget - >常规 - >部署信息 - >部署目标 .

    • 添加公共类:文件 - >新文件 - > iOS - > Swift文件 - >命名它(例如openCocoaClass) - >创建 .

    • 现在向openCocoaClass.swift添加一些代码 .

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

    }

    • 清洁项目:产品 - >清洁

    • 配置方案设置:产品 - >方案 - >编辑方案 - >运行 - >构建配置 - >发布 .

    • 构建框架:产品 - >构建 .

    • 导出框架:产品 - >选择框架 - >标识和类型 - >完整路径 - >发布框架 .

    向项目添加框架: -

    • 启动Xcode项目并命名(例如CocoaFrameworkTest) .

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

    • 目标 - >常规 - >嵌入二进制 - >添加其他 - >选择框架 - >根据需要复制项目 - >完成 .

    访问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()
        }
    }
    
  • 0

    只是c ommand+B 会有所帮助!

    原因:通过 Cocoapods 添加框架将创建另一个包含所需框架的pod项目 . 对于识别框架的主项目,必须桥接两个项目的静态库 . 要实现这一目标,需要构建工作空间 .

相关问题