Xcode相关命令行
lipo
最常见的命令行,用于合并和拆封 Framework,在Framework脚本伪装Bundle 文章中用来摘除多余架构
1 | //抽出架构 |
nm
最常用的查看符号表的指令,在文章 Xcode和符号表 中用于查看不同Mach-O的的符号表差异
1 | nm "$MACH-O-FILE" |
其中除了压缩包和符号表的不同,指的注意的是该符号是否具有地址和类型
1 | 0000000000000000 t -[StaticLibObj init] |
类型 | 是否具有地址 | 备注 |
---|---|---|
t | 有 | |
U | 无 | 代表未定义的符号 |
S | 有 | |
s | 有 |
otool
用于查看 Mach-O文件的构造,在Framework脚本伪装Bundle 文章中用来判断是否是Static Mach-O,其指令
1 | otool -a "$FRAMEWORK_EXECUTABLE_PATH" | head -n 1 |
可以利用其输出的不同,来进行准确的判断
Mach-O | 输出 |
---|---|
Static | Archive : ….Base.framework/Base |
Dynamic | 无输出 |
-a 参数的描述
1 | -a Display the archive header, if the file is an archive. |
defaults
用于读写Plist,其实Bundle和Framework的plist文件差别不大,在Framework脚本伪装Bundle 文章中用来修改有区别的字段
1 | //读取所有字段 |
assetutil
用于查看资源文件 Assets.car 包含的文件,在 UniqueFramework的制作 可以配合 nm 命令检查 资源 和 符号表 的最终结果
1 | //以Json的格式打印出所有资源 |
actool
在Xcode Build的过程中,用来把 .xcasseets 文件夹压缩成 Asset.car 文件的工具, 在UniqueFramework的制作过程中,也可以尝试自己脚本来处理资源
以下是把 Media1 和 Media2 一起压缩成 某个Framework里的 Assets.car的命令
1 | /Applications/Xcode.app/Contents/Developer/usr/bin/actool |
Linux通用命令行
head
用来取出命令行输出的头部,在Framework脚本伪装Bundle 文中配合 otool来验证判断,不然输出太多
1 | head -n 1 |
od
按二进制取出读取文件的, 原本想用二进制文件的头部判断 Static Framework
因为误以为 Static Framework的头部是一样,后来发现会受到架构的影响
1 | od -H -A n -N 8 static.framework/static |
其中 H代表输出十六进制, A n 代表以十六进制显示地址, N代表要读取的长度