连接具有公共静态库的静态库的正确过程是什么?

Rei*_*ain 6 xcode static-libraries ios

我正在开发一个名为Silicon的静态库,我将其用于所有iOS应用程序.

因为我不想创建一个可能难以维护的大型静态库,所以我创建了许多较小的静态库,并将其作为子模块附加.

截至撰写本文时,Silicon的依赖树如下:


|
| ==> FDKeychain
| ==> FDDataClient
        |
        | => FDRequestClient
                |
                | => FDFoundationKit
| ==> FDSQLiteDatabase
        |
        | => FDFoundationKit

正如您所看到的,FDRequestClient和FDSQLiteDatabase都将FDFoundationKit作为通用静态库.

似乎发生的事情是,当构建使用Silicon的项目时,它会将所有Silicon的目标依赖项构建到项目构建目录中.FDDataClient和FDSQLiteDatabase也会发生同样的事情.因此,在某些时候,FDRequestClient的FDFoundationKit会被构建并复制到构建目录以及FDSQLiteDatabase中的FDFoundationKit.无论哪一个建立最后只是覆盖前一个.

仅凭纯粹的运气FDFoundationKit并没有以任何严肃的方式改变,FDRequestClient和FDSQLiteDatabase不能总是使用相同的版本,但我无法保证它会永远这样.

我想弄清楚Silicon是否有办法指定使用哪个版本的FDFoundationKit,因此Silicon可以确保所使用的版本适用于FDRequestClient,FDSQLiteDatabase以及我将来添加的任何其他依赖项.

我知道CocoaPods试图解决这个问题,但我不想让某人必须设置所有这些只是为了让我的图书馆工作.如果我能找到某种方式让硅定义使用哪个版本的FDFoundationKit,一切都会完美运行.

Rei*_*ain 0

这个问题似乎只有两个答案:

1) 使用 CocoaPods 或 Carthage 等依赖管理器。

2)您发布的任何静态库或框架不应具有任何目标依赖项。它们应该链接到您拥有的任何依赖项,并且集成您的库的人员有责任集成所需的依赖项。