当前位置: 首页 > 知识库问答 >
问题:

如何在swift中使用.a静态库?

米裕
2023-03-14

我想使用我的webrtc. a静态库在swft。你能帮忙吗拜托?我听说你不能在Swift中使用静态库,是真的吗?

共有3个答案

明松
2023-03-14

是的,您可以在Swift中使用静态库。转到构建阶段,在“将二进制文件链接到库”下添加它们。

或者,您可以在生成设置下,在“搜索路径”中追加“库搜索路径”值,以包括您的. a文件所在文件夹的路径。

您可以在“标题搜索路径”下以相同的方式为库添加标题

还要记住,如果这个库是用Objective-C编写的,那么您需要一个桥接头才能在Swift中使用它。

董昕
2023-03-14

*在Swift中使用Object-C类

如果你要在App Target中导入代码(在一个项目中混合Swift和Object-C),你应该使用桥接头文件将Object-C代码公开给Swift代码。

[在项目中混合使用Swift和Objective-C代码]

在这篇文章中,我将描述如何将Objective-C静态库导入Swift代码

Xcode版本10.2.1

1.创建Object-C静态库

创建库项目或创建库目标

File -> New -> Project... -> Cocoa Touch Static Library
//or
Project editor -> Add a Target -> Cocoa Touch Static Library 

创建模块.modulemap文件[关于]

module module_name {
    umbrella header "module_name-umbrella.h"
    export *
}

创建模块\u name-umbrane.h文件[About]并添加将为消费者打开的所有.h文件

#import "header_1.h"
#import "header_2.h"

modulemap.modulemapmodule\u name-umbrane.h文件添加到Copy files部分[About]

Project editor -> select a target -> Build Phases -> Copy Files -> add `module.modulemap`, `module_name-umbrella.h` 

添加实现文件.m

Select `.m` file -> Select File Inspectors Tab -> Target Membership -> Select the target
//or
Project editor -> select a target -> Build Phases -> Compile Sources -> add files

添加在模块\u name-umbrane.h中列出的头文件.h头文件\u 1.h头文件\u 2.h[不能这样做][公共目标成员资格]

Select `.h` file -> Select File Inspectors Tab -> Target Membership -> Select the target and make it **public**
//or
Project editor -> select a target -> Build Phases -> Headers -> add files to the **public** zone

构建库-抑制命令B产品-

注意:请确保为与客户端代码相同的流程体系结构构建库。

查找生成的输出[生成位置]

Products group -> lib<product_name>.a -> Show in Finder

该目录包括

  • lib

2.Swift消费者与Object-C静态库

将二进制文件拖放到Xcode项目中[About]

链接库[未定义的符号][链接与嵌入]

Project editor -> select a target -> General -> Linked Frameworks and Libraries -> add -> Add Others... -> point to `lib<product_name>.a` file
//or
Project editor -> select a target -> Build Phases -> Link Binary With Libraries -> add -> Add Others... -> point to `lib<product_name>.a` file

添加库搜索路径[Library not found for][Recursive path]

Project editor -> select a target -> Build Settings -> Search Paths -> Library Search paths -> add path to the parent of `lib<product_name>.a` file

添加标题搜索路径[找不到模块][递归路径]

Project editor -> select a target -> Build Settings -> Search Paths -> Header Search Paths -> add path to generated `include/<product_name>` folder with `module.modulemap` and `<product_name>-umbrella.h`

将模块导入Swift客户端代码[模块名称]

import module_name

[此处有更多示例]

鄂坚
2023-03-14

你解决了你问的这个问题了吗?我今天也遇到了这个问题,我刚刚解决了一下。如果尚未解决此问题,可以尝试以下步骤:

p、 这两个项目在同一个工作区(静态库项目和应用程序项目),静态库项目在应用程序项目之前构建。工作空间结构如图所示:

  1. 在静态库项目中,所有.h文件都需要添加到“构建阶段/复制文件”:

(路径:“应用程序项目/构建阶段/链接二进制文件与库”)

*如果您关心.a文件的红色标记,只需选择“通用iOS设备”作为构建设备来重新构建静态lib项目,并将.a重新拖动到应用程序项目中(红色的可以删除)

这是项目内置的.a文件路径:$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/StockApp fkjqyvsniaouxogkivalcduqeotj/Build/Products/Debug iphoneos

 类似资料:
  • 使用.a静态库 ar生成.a静态库 利用这里制作的.a静态库, 来链接使用这个.a静态库, 并验证这一切是否如预期那样 同样的, 继续通过clang直接操作, 更便于理解IDE底层执行的过程 一、前期准备 准备了一个test.m文件, 用来链接.a静态库并生成可执行文件, 观察运行结果 代码 #import <Foundation/Foundation.h> #import "OCTest

  • 我希望在从另一个类调用的方法“SetTotalSum”中使用findViewById。我如何使用它,尽管它是一个静态方法?

  • 问题内容: 因此,我正在使用Swift开发一个iOS项目,我想创建一个包含一些有用内容的静态库。 我的问题是,当我尝试在Xcode(6.3版)中构建我的库时,出现了“ Build Failed”,随后是: 我从未见过,这不是我的第一个静态库。所以我想我可能与我只使用Swift类的事实有关。 你们有什么感想 ?先感谢您。 问题答案: 从Xcode 9 beta 4开始,Xcode原生支持带有Swif

  • Swift中的静态变量是如何存储的? > 如果我从未调用func usesticvar(),会发生什么?这些变量是否已初始化? 如果我调用useStaticVar()然后再也不访问它们,会发生什么?应收账

  • 问题内容: 我正在尝试将以下Objective-C代码转换为Swift。在我的Objective-C代码中,有一个静态变量,可以从类方法中对其进行访问。 由于您无法从Swift的类函数中访问像这样声明的类型,因此我为此创建了一个存储属性。 我试图从这样的类函数中对其调用方法。 但是我得到这个错误 类型’[AnyObject]’的不可变值仅具有名为’removeAll’的变异成员 。 谁能告诉我此错

  • 有没有办法在非静态ArrayList中添加静态元素? 我有我的Collaborator类,这个类有一个Projects Arraylist。问题是,我的Project类有一个编辑项目的方法,但是当我进行编辑时,它不会更新我创建的协作者的Project ArrayList中的元素。 手动更新需要我在Collaborators Arraylist中运行Projects Arraylist,以搜索哪些合