Car*_*res 17 static-libraries ios webrtc swift
我想在swift中使用我的webrtc .a静态库.你能帮帮忙吗?我读过你不能在swift中使用静态库,这是真的吗?
Ran*_*iys 33
你问过这个问题吗?我今天也遇到了这个问题,我已经修好了一会儿.如果您没有解决此问题,可以尝试以下步骤:
ps: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":
*在 Swift 中使用 Objective-C 类
如果您要在 App Target 中导入代码(在一个项目中混合 Swift 和 Objective-C),您应该使用bridging headerfile 将 Objective-C 代码公开给 Swift 代码。
[在一个项目中混合使用 Swift 和 Objective-C 代码]
在这篇文章中,我将描述如何将 Objective-C 静态库导入 Swift 代码
Xcode 版本 10.2.1
1.创建Objective-C静态库
创建库项目或创建库目标
File -> New -> Project... -> Cocoa Touch Static Library
//or
Project editor -> Add a Target -> Cocoa Touch Static Library
Run Code Online (Sandbox Code Playgroud)
创建module.modulemap文件[关于]
module module_name {
umbrella header "module_name-umbrella.h"
export *
}
Run Code Online (Sandbox Code Playgroud)
创建module_name-umbrella.h文件[About]并添加所有.h将对消费者开放的文件
#import "header_1.h"
#import "header_2.h"
Run Code Online (Sandbox Code Playgroud)
将module.modulemap和module_name-umbrella.h文件添加到[About]Copy Files部分。
Project editor -> select a target -> Build Phases -> Copy Files -> add `module.modulemap`, `module_name-umbrella.h`
Run Code Online (Sandbox Code Playgroud)
添加实现文件 .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
Run Code Online (Sandbox Code Playgroud)
添加( , ).h中列出的头文件[不能这样做] [公共目标成员资格]module_name-umbrella.hheader_1.hheader_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
Run Code Online (Sandbox Code Playgroud)
构建库 - ? Command+B或Product -> Build
注意:确保为与客户端代码相同的流程架构构建库。
查找生成的输出[构建位置]
Products group -> lib<product_name>.a -> Show in Finder
Run Code Online (Sandbox Code Playgroud)
该目录包括
lib<product_name>.a – 一个内置的静态库include/<product_name>包含Copy Files部分文件的文件夹usr/local/include包含Headers部分文件的文件夹。有公共接口/定义
2.带有Objective-C静态库的Swift消费者
Drag and drop将二进制文件导入 Xcode 项目[关于]
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
Run Code Online (Sandbox Code Playgroud)
添加Library Search paths[未找到库] [递归路径]
Project editor -> select a target -> Build Settings -> Search Paths -> Library Search paths -> add path to the parent of `lib<product_name>.a` file
Run Code Online (Sandbox Code Playgroud)
添加Header Search Paths【找不到模块】 【递归路径】
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`
Run Code Online (Sandbox Code Playgroud)
将模块导入 Swift 客户端代码[module_name]
import module_name
Run Code Online (Sandbox Code Playgroud)
是的,您可以在 Swift 中使用静态库。转到构建阶段并在“链接二进制文件与库”下并将它们添加到那里。
或者,您可以进入“构建设置”并在“搜索路径”中附加“库搜索路径”值以包含 .a 文件所在文件夹的路径。
您可以在“标题搜索路径”下以相同的方式为您的库添加标题
另请记住,如果这个库是用 Objective-C 编写的,您将需要一个桥接标头才能在 Swift 中使用它。
| 归档时间: |
|
| 查看次数: |
23654 次 |
| 最近记录: |