【问题标题】:otool output for iOS appsiOS 应用程序的 otool 输出
【发布时间】:2017-09-19 13:34:52
【问题描述】:

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

/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)?

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

【问题讨论】:

    标签: ios iphone frameworks dylib otool


    【解决方案1】:

    其中大部分确实引用了 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 有类似的路径)。对于它的价值,here's a gist 我使用 Xcode 8.3.2 得到的。

    【讨论】:

    • 我确信这在其他地方得到了回答,但查看 iPhoneOS.platform 目录的其余部分,我只看到标题和 .tbd 文件;说/认为.tbd 文件仅用于描述目标设备上将出现哪些 dylib/符号 是否正确(而不必在该目录中实际提供需要的真实 dylib用otool/nm/etc检查过?)
    • 是的,我应该提到这一点。 tbd 文件是文本文件,您可以查看内容以查看将在 iOS 设备上可用的符号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    相关资源
    最近更新 更多