iOS 个应用的 otool 输出

otool output for iOS apps

如果我 运行 otool -L ... 在我的 iOS .ipa 文件的主要可执行文件上,我会看到以下输出:

/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation /System/Library/Frameworks/UIKit.framework/UIKit ... @rpath/DMSDK.framework/DMSDK ... /usr/lib/libz.1.dylib /usr/lib/libc++.1.dylib /usr/lib/libiconv.2.dylib /usr/lib/libsqlite3.dylib

这告诉我我的应用 used/referenced/required 的动态库。

我的问题:这些是指 存在于 ios 设备本身 上的全局目录吗?我相信答案是肯定的,但这并不意味着所有 iOS 设备都已经安装了 libsqlite(我只是觉得这令人惊讶,因为作为网络开发人员,我认为 sqlite 更像是一个用户空间的东西,我很惊讶它能得到 Apple 的足够支持,成为一个预安装的 dylib)?

为什么有些动态库来自 /System/Library/Frameworks 而有些来自 /usr/lib/...?我可以找到 list of iOS frameworks,但我在哪里可以找到 iOS 设备中内置的受支持 dylib 的列表?

其中大部分确实是指 iOS 设备上的库,因为当应用程序在设备上启动时它们必须可用。 @rpath 条目指的是应用程序捆绑的内容,但 / 开头的任何内容都包含在 iOS 中。所有 iOS 设备都安装了 SQLite,因为它被各种 Apple 框架(Core Data,以及其他内部框架)使用。对于它的价值,出于同样的原因,SQLite 也是 macOS 的标准部分。

在大多数情况下,/System 路径指的是 Apple 提供的框架,其中包括动态库以及框架使用的资源(图像、声音)。 [当开发人员工具位于 Mac 上时,框架还包括头文件。] /usr/lib/ 路径是其他任何东西,包括第三方开源库,如 SQLite 以及任何具有更多 Unix 风格的东西动态库。

在 iOS 设备本身之外,我知道找到包含库列表的唯一方法是在 Mac 上安装 Xcode 并浏览 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib( Apple Watch 和 Apple TV 有类似的路径)。对于它的价值,我用 Xcode 8.3.2.

得到的 here's a gist