在电脑的
"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/UIKit.tbd"
这个文件里显示UIKit在手机如下目录,“/System/Library/Frameworks/UIKit.framework/UIKit”,实际上在这个目录里根本不存在UIKit这个文件。
实际上所有的系统框架都在一个文件,
从iOS3.1开始,为了提高性能,绝大部分的系统动态库文件都打包存放到了一个缓存文件中(dyldsharedcache)
缓存文件路径(ios手机):/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX
在Mac\iOS中,是使用了/usr/lib/dyld程序来加载动态库
dyld(dynamic loader,动态加载器)
dyld源码
https://opensource.apple.com/tarballs/dyld/
从动态库共享缓存抽取动态库
可以使用dyld源码中的launch-cache/dsc_extractor.cpp
将#if0前面的代码删除(包括#if0),把最后面的#endif也删掉
编译dsc_extractor.cpp
clang++ -o dsc_extractor dsc_extractor.cpp
使用dsc_extractor
./dsc_extractor 动态库共享缓存文件的路径 用于存放抽取结果的文件夹
然后可以在hopper中打开查看分析