gpt4 book ai didi

ios - 链接具有公共(public)静态库的静态库的正确过程是什么?

转载 作者:可可西里 更新时间:2023-11-01 04:02:02 24 4
gpt4 key购买 nike

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

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

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

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

如您所见,FDRequestClient 和 FDSQLiteDatabase 都将 FDFoundationKit 作为通用静态库。

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

纯属幸运,FDFoundationKit 并没有发生任何重大变化,以至于 FDRequestClient 和 FDSQLiteDatabase 不能总是使用相同的版本,但我不能保证它会永远这样。

我想弄清楚硅是否有办法指定要使用哪个版本的 FDFoundationKit,这样硅就有责任确保所使用的版本适用于 FDRequestClient、FDSQLiteDatabase 和我添加的任何其他依赖项 future 。

我知道 CocoaPods 试图解决这个问题,但我不想让某人必须设置所有这些才能让我的库正常工作。如果我能找到让 Silicon 定义要使用哪个版本的 FDFoundationKit 的方法,一切都会完美无缺。

最佳答案

您可以(像我们一样)将所有库放入框架中,因为框架支持版本控制。框架只是一个以通用方式配置的目录树。 Xcode 不直接支持框架的创建,因此您必须在脚本中创建它们,通常作为构建阶段的最后一个。可以在 IOS- framework 找到一个示例(感谢 jverkoey)

在框架内,您可以将每个静态库的所有版本存储在

myLibrary.framework->Versions->n.n folders. 

myLibary.framework->Versions->Current 是指向最新版本文件夹的链接。

由于您使用的是静态库,Silicon 本身无法指定版本(这需要动态库),但是用于构建 Silicon 的构建、链接器或环境标志肯定可以。

以这种方式,默认情况下,应用程序将始终使用最新版本的库,但链接的实际版本在构建时可能很容易被链接器标志覆盖。此外,所有用户都将以与任何其他框架相同的方式将 Silicon 框架简单地包含在他们的项目中,因此对于开发人员来说非常简单。

关于ios - 链接具有公共(public)静态库的静态库的正确过程是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23786698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com