如何在其他Swift静态库中使用共享Swift静态库
嘿,这个问题我之前帮开发者解决过不少——在Xcode 9.2(Swift 4)里处理多层依赖的静态库,其实和Objective-C的思路核心一致,但配置细节得贴合Swift的模块系统。针对你说的Utilities → Database/Network → App的场景,我给你梳理具体步骤:
Swift 4静态库多层依赖配置指南
1. 先把基础的Utilities库配置好
首先得确保其他库能访问到Utilities的代码:
- 给Utilities里需要对外暴露的类、方法、变量加上
public修饰符(Swift默认是internal,只能库内部用),比如public class StringHelper { ... }。 - 打开Utilities项目的Build Settings,找到
Defines Module,设置为YES——这是让Xcode生成Swift模块映射的关键,其他库才能通过import Utilities引入它。
2. 配置Database和Network对Utilities的依赖
以Database库为例,Network的配置完全一样:
- 进入Database项目的Build Phases → Link Binary With Libraries,点击加号把Utilities静态库加进去。
- 到Build Settings里,找到
Header Search Paths,添加Utilities库的根目录(或者它的产物目录),建议用$(SRCROOT)/../Utilities这种相对路径,避免硬编码路径。 - 再找到
Swift Compiler - Search Paths下的Import Paths,同样添加Utilities的模块目录——这一步是告诉Swift编译器去哪里找Utilities模块。 - 现在在Database的Swift代码里,直接写
import Utilities就能用里面的公开API了。
3. 最后配置主App的依赖
因为静态库不会自动传递依赖,所以App必须显式链接所有用到的库:
- 打开App项目的Build Phases → Link Binary With Libraries,把Utilities、Database、Network三个静态库都加进去。
- 同样在App的Build Settings里,把三个库的路径分别添加到
Header Search Paths和Swift Compiler - Search Paths的Import Paths中。 - 在App的代码里,就可以按需
import这些库来使用了。
踩坑提醒
- 要是遇到“module not found”的错误,先试试
Cmd+Shift+K清理项目,再删除Derived Data(Xcode菜单→Window→Projects→找到你的项目→点击Delete Derived Data),很多时候是缓存搞的鬼。 - 所有库的Deployment Target要和App保持一致,不然会出现链接时的版本不兼容问题。
- 如果是把静态库作为子项目嵌入主App,记得子项目的
Installation Directory要设为$(LOCAL_LIBRARY_DIR)/Frameworks,确保Xcode能正确找到编译后的库文件。
内容的提问来源于stack exchange,提问作者Luke Van In
相关产品推荐
相关产品推荐

