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

Car*_*res 17 static-libraries ios webrtc swift

我想在swift中使用我的webrtc .a静态库.你能帮帮忙吗?我读过你不能在swift中使用静态库,这是真的吗?

Ran*_*iys 33

你问过这个问题吗?我今天也遇到了这个问题,我已经修好了一会儿.如果您没有解决此问题,可以尝试以下步骤:

ps:2个项目位于同一个工作区(静态lib项目和App项目)中,静态lib项目是在app项目之前构建的.工作区结构如图所示:

/ Users/raniys/Desktop/Screen Shot 2016-03-14 at 5.27.20 PM.png

  1. 在静态lib项目中,所有.h文件都需要添加到"Build Phases/Copy Files":

在此输入图像描述

  1. 将静态lib产品文件(.a文件)拖到app项目中,请参阅图片:

(路径:"app project/Build Phase/Link Binary with Libraries")

在此输入图像描述

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

  1. 在您的应用项目中设置"库搜索路径":

在此输入图像描述

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

  1. 为您的应用程序项目创建Bridging-Header文件,并在其中导入静态库,在我的例子中,我包含"StaticLib/StaticLib.h"和"CommonFoundation/CommonFoundation.h":

在此输入图像描述

  1. 将Bridging-Header文件路径添加到您的app项目的"Objective-C Bridging Header":

在此输入图像描述

然后全部完成,您现在可以使用静态库的功能. 在此输入图像描述


yoA*_*ex5 5

*在 Swift 中使用 Objective-C 类

如果您要在 App Target 中导入代码(在一个项目中混合 Swift 和 Objective-C),您应该使用bridging headerfile 将 Objective-C 代码公开给 Swift 代码。

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

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

Swift 消费者 -> Objective-C 静态库

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.modulemapmodule_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+BProduct -> 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 项目[关于]

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

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)

[这里有更多例子]


Col*_*ole 2

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

在此输入图像描述

或者,您可以进入“构建设置”并在“搜索路径”中附加“库搜索路径”值以包含 .a 文件所在文件夹的路径。

在此输入图像描述

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

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


归档时间:

查看次数:

23654 次

最近记录:

6 年 前