iOS开发中常用命令工具(xcode-select、lipo、xcrun等)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发中常用命令工具(xcode-select、lipo、xcrun等)相关的知识,希望对你有一定的参考价值。

参考技术A

当安装多个xcode的版本,使用该工具使用指定的版本。

-p 或者 --print-path 查看当前开发者目录,也即是xcode的版本目录。print the path of the active developer directory
-s <path> 或 --switch <path> 选择xcode的版本
--install 安装
--version 查看版本
--reset 恢复默认
sudo rm -rf /Library/Developer/CommandLineTools 强制删除安装目录下的文件

是管理Fat File的工具, 可以查看cpu架构, 提取特定架构,整合和拆分库文件。

Mac OS X下二进制可执行文件的动态链接库是dylib文件。所谓dylib,就是bsd风格的动态库。基本可以认为等价于windows的dll和linux的so。mac基于bsd,所以也使用的是dylib。

Linux下用 ldd 查看,苹果系统用 otool 。

otool命令介绍
MobSF
Mach-O 文件格式解析

xcodebuild :通过工程文件,生成app文件。
xcrun :通过app文件,来生成ipa文件(包含了签名的过程)。

通过app文件生成ipa文件

libtool是一个通用库支持脚本(/usr/bin/libtool),将使用动态库的复杂性隐藏在统一、可移植的接口中。

可以在不同平台上创建并调用动态库,我们可以认为libtool是gcc的一个抽象,也就是说,它包装了gcc或者其他的任何编译器,用户无需知道细节, 只要告诉libtool说我需要要编译哪些库即可,并且,它只与libtool文件打交道,例如lo、la为后缀的文件。
libtool工具的使用

库是一单独的文件,里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member)。原始文件的内容、模式、时间戳、属主、组等属性都保留在库文件中。
详细命令参见, 菜鸟网络-ar命令

可以用来创建、修改库,也可以从库中提出单个模块。

lipo libAFNetworking.a -thin arm64 -output lib-arm64.a 生成Arm64包

ar -t lib-arm64.a 输出包含的.o文件 和 otool -L libAFNetworking.a 一样。

ar -x lib-arm64.a 解压出包里面的.o文件

ios开发中,常常用来分析二进制和静态库文件。
列出 .o .a .so 中的符号信息,包括诸如符号的值,符号类型及符号名称等。所谓符号,通常指定义出的函数,全局变量等等。

iOS开发中,可以用来查看.a静态库所有打包进去的.o文件和函数接口信息,帮助我们定位崩溃信息。
例如: nm -u libAFNetworking.a 列出某个.o文件的接口信息。

二进制查看命令,将文件显示为16进制字符串表示形式。
例如: xxd libYTKNetwork.a | grep "net" 查看YTKNetwork.a文件里面包含net字符串的,帮助我们分析一些二进制文件。

DWARF文件初探——提取轻量符号表

Mac系统下lipo, ar, nm等工具的使用简介
美团 iOS 工程 zsource 命令背后的那些事儿
Linux工具参考篇
iOS 静态库冲突 两个不同的.o 文件冲突 ,静态库分离

驱动开发中常用命令和宏定义

操作驱动常用的命令

(1)insmod:安装驱动的命令,用法:insmod xxx.ko
(2)lsmod:显示当前已经安装的驱动,时间上越后安装的驱动显示时越靠前;
(3)rmmod:卸载驱动,用法:rmmod xxx;(注意卸载模块时只需要输入模块名即可,不能加.ko后缀)
(4)modinfo:显示驱动自带的信息,用法:modinfo xxx.ko

驱动代码里常见的宏

(1)MODULE_LICENSE,
模块的许可证。一般声明为GPL许可证,而且最好不要少,否则可能会出现莫名其妙的错误(譬如一些明显存在的函数提示找不到)。
(2)MODULE_AUTHOR
描述模块的作者;
(3)MODULE_DESCRIPTION
描述模块的介绍信息
(4)MODULE_ALIAS
描述模块的别名信息
小结:上面宏的作用是在驱动中注册一些信息,用来描述这个驱动,在编译好的驱动中可以用modinfo命令来查看。
(5)module_init
位置:kernel/include/linux/init.h
定义:#define module_init(x) __initcall(x);
作用:通过这个宏去注册安装模块的函数,当用insmod命令安装模块时就会调用通用module_init注册的函数;
(6)module_exit
位置:kernel/include/linux/init.h
定义:#define module_exit(x) __exitcall(x);
作用:通过这个宏去注册卸载模块的函数,当用rmmod命令卸载模块时就会调用通过module_exit注册的函数;

以上是关于iOS开发中常用命令工具(xcode-select、lipo、xcrun等)的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 4.5 命令行工具 - xcode-select 问题

linux开发中常用命令

git开发中常用命令

iOS开发之机器学习框架MediaPipe

驱动开发中常用命令和宏定义

使用 cli 工具包时的 xcode-select -switch 路径