2

如果我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

这告诉我我的应用程序使用/引用/需要的动态库。

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

为什么一些 dylibs 来自于/System/Library/Frameworks而一些来自于/usr/lib/...?我可以找到iOS frameworks 的列表,但是在哪里可以找到dylibiOS 设备中支持的 s 列表?

4

1 回答 1

4

其中大多数确实引用了 iOS 设备上的库,因为它们必须在应用程序在设备上启动时可用。该条目是指与应用程序捆绑在一起的东西,但以 iOS@rpath开头的任何东西都包含在内。/所有 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 得到的要点。

于 2017-09-19T19:12:38.153 回答