我想在swift中使用我的webrtc .a静态库。你能帮帮忙吗?我读过你不能在swift中使用静态库,这是真的吗?
你问过这个问题吗?我今天也遇到了这个问题,我已经修好了一会儿。如果您没有解决此问题,可以尝试以下步骤:
p.s。:2个项目在同一工作区(静态lib项目和App项目)中,静态lib项目在app项目之前构建。工作区结构如图所示:
- 在静态lib项目中,所有.h文件都需要添加到“Build Phases / Copy Files”:
- 将静态lib产品文件(.a文件)拖到app项目中,请参阅图片:
(路径:“app project / Build Phase / Link Binary with Libraries”)
*如果您关心.a文件的红色标记,您只需选择“通用iOS设备”作为构建设备来重新构建静态lib项目,并将.a重新拖动到应用程序项目(红色的可以删除)
- 在您的应用项目中设置“库搜索路径”:
这是项目内置的.a文件路径:$(USER_LIBRARY_DIR)/ Developer / Xcode / DerivedData / StockApp -fkjqyvsniiauxogkivalcduqeotj / Build / Products / Debug-iphoneos
- 为您的应用程序项目创建Bridging-Header文件,并在其中导入静态库,在我的例子中,我包含“StaticLib / StaticLib.h”和“CommonFoundation / CommonFoundation.h”:
- 将Bridging-Header文件路径添加到您的app项目的“Objective-C Bridging Header”:
如果要在App Target中导入代码,则应使用bridging header
文件将Objective-C代码公开给Swift代码。阅读更多here
在这篇文章中,我将描述如何将Objective-C静态库导入Swift代码
Xcode版本10.2.1
创建Objective-C静态库或Create Objective-C静态库Target
创建一个库项目
File -> New -> Project... -> Cocoa Touch Static Library -> Enter necessary information and choose Language -> Objective-C
创建module.modulemap
文件
module module_name {
umbrella header "module_name-umbrella.h"
export *
}
将.h
文件添加到将为消费者开放的module_name-umbrella.h
#import "header_1.h"
#import "header_2.h"
添加复制文件构建阶段
Project editor -> select a target -> Build Phases -> Copy Files -> add `module.modulemap`, `module_name-umbrella.h`
添加标题
Project editor -> select a target -> Build Phases -> Headers(If it doesn't exist -> + at the top -> New Headers Phase) -> add all `.h` files from `module_name-umbrella.h`(`header_1.h`, `header_2.h`)
构建库
注意:确保为与客户端代码相同的流程体系结构构建库。
查找生成的输出
Products group -> lib<module_name>.a -> Show in Finder
注意:默认情况下,它将位于DerivedData
文件夹的子文件夹中(如果您在开发过程中删除DerivedData
并重新生成它,则可以更改它)。
该目录包括
lib<module_name>.a
- 内置静态库module.modulemap
文件module_name-umbrella.h
文件usr/local/include
文件夹,包含来自.h
的module_name-umbrella.h
文件 - 公共接口/定义使用Objective-C静态库
Link Binary With Libraries
Project editor -> select a target -> Build Phases -> Link Binary With Libraries -> add -> Add Others... -> point to `lib<module_name>.a` file
添加Library Search paths
Project editor -> select a target -> Build Settings -> Search Paths -> Library Search paths -> add path to the parent of `lib<module_name>.a` file
添加Header Search Paths
Project editor -> select a target -> Build Settings -> Search Paths -> Header Search Paths -> add path to generated `include` folder (or a path to the parent of generated `module_name` folder with `.h` files)
path
时,您可以定义父文件夹之一的路径并设置recursive
(/**
将添加到路径的末尾)。例如,您可以使用path
参数将Build
污染到recursive
目录。patch
包含空格 -
,你应该使用\
来逃避它们或用双引号""
封闭路径将模块导入Swift客户端代码
import module_name
Objective-C consumer -> Objective-C static library
使用Xcode 9使用Swift支持的静态库。你可以在Objective-C中使用like。 Xcode Release Notes
Xcode支持包含Swift代码的静态库目标。调试使用Swift静态库的应用程序可能需要一组完整的构建工件,这些工件位于其原始位置