如果我在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设备本身存在的全局目录吗?我相信答案's yes, but wouldn' t暗示所有iOS设备已经安装了 libsqlite
(我很惊讶它有足够的支持来自Apple预先安装的dylib)?
为什么有些dylib来自 /System/Library/Frameworks
,有些来自 /usr/lib/...
?我可以找到list of iOS frameworks,但在哪里可以找到iOS设备内置的支持 dylib
的列表?
1 回答
其中大多数确实引用了iOS设备上的库,因为它们必须在应用程序在设备上启动时可用 .
@rpath
条目是指与应用程序捆绑在一起的内容,但以/
开头的任何内容都包含在iOS中 . 所有iOS设备都安装了SQLite,因为它也是值得SQLite的's used by various Apple frameworks (Core Data, and also internally by others). For what it'也是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有类似的路径) . 对于它的 Value ,here's a gist我用Xcode 8.3.2得到的东西 .