Swift项目中的导入框架,Xcode

phn*_*mnn 47 xcode frameworks ios swift

我正在尝试导入myFramework项目.我myFramework在Build Phases-> Link Binary With Libraries中添加了.

Objective-c的工作原理:

#import <UIKit/UIKit.h>
#import <myFramework/myFramework.h>
Run Code Online (Sandbox Code Playgroud)

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

import UIKit
import myFramework
Run Code Online (Sandbox Code Playgroud)

根据Swift文档:

导入外部框架

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

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

迅速

import FrameworkName
Run Code Online (Sandbox Code Playgroud)

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

Objective-C的

@import FrameworkName;
Run Code Online (Sandbox Code Playgroud)

myFramework使用Xcode 5 创建.Xcode 5没有"定义模块"构建设置.

问题出在哪儿?

mic*_*mic 21

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

您所指的文档部分是关于不同目标中的框架.由于您的框架位于项目的目标中,因此这部分文档不适用于此.

在您的情况下,您无法在Swift文件中导入框架.这就是为什么你收到错误消息"没有这样的模块myFramework".myFramework不是模块 - 它是项目模块的一部分(默认情况下由您的产品名称决定).因此,框架中的类应该是可访问的.

但是,您的框架是用Objective-C编写的.所以,你必须做的是所描述的进口在桥接报头中的斯威夫特面对类在这里.

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

那你现在该怎么办?

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

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

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

希望这可以帮助.

  • 我按照swift docs的说明进行操作.我想导入*JWFolders*代码.在执行swift doc步骤之后,我编写了import语句来导入JWFolders,并且我得到了一个"没有这样的模块'JWFolders'"错误语句.这是我需要的缺失步骤:1.单击左上导航栏上的项目名称.2.单击"Build Phases"3.单击"Embedded Frameworks"4.单击"+"5.找到头文件并添加它.但是 - 如果我之前添加了一个框架,我只能访问这个"嵌入式框架"下拉列表.这是一种hacky方式.什么是正确的方法? (2认同)

A.G*_*A.G 16

在Swift上:

创建框架: -

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

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

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

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

    import Foundation
    
    public class openCocoaClass {
    
        public init() {
    
        }
    
        public var samplePublicVariable = "samplePublicVariable @ openCocoaClass"
    
        public func samplePublicFunction()
        {
            print("samplePublicFunction @ openCocoaClass")
        }          
    
    Run Code Online (Sandbox Code Playgroud)

    }

  5. 清洁项目:产品 - >清洁

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

  7. 构建框架:Product - > Build.

  8. 导出框架:Products - >选择框架 - > Identity and type - > Full Path - > Released Framework.

向项目添加框架: -

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

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

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

访问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()
    }
}
Run Code Online (Sandbox Code Playgroud)


Tom*_*ven 12

根据Swift文档

将Objective-C代码从同一目标导入Swift

  1. 在Objective-C桥接头文件中,导入要向Swift公开的每个Objective-C头.例如:

    #import "XYZCustomCell.h"

    #import "XYZCustomView.h"

    #import "XYZCustomViewController.h"

  2. 在Build Settings下,确保Swift Compiler - Code Generation下的Objective-C Bridging Header构建设置有一个标题路径.路径必须直接到文件本身,而不是它所在的目录.路径应该与项目相关,类似于在Build Settings中指定Info.plist路径的方式.在大多数情况下,您不需要修改此设置.

Swift可以看到此桥接头文件中列出的任何公共Objective-C标头.Objective-C功能将自动在该目标内的任何Swift文件中提供,无需任何import语句.使用与系统类相同的Swift语法使用自定义Objective-C代码.

let myCell = XYZCustomCell()
myCell.subtitle = "A custom cell"
Run Code Online (Sandbox Code Playgroud)

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


归档时间:

查看次数:

87811 次

最近记录:

6 年,5 月 前