iOS SDK开发命令

在SDK开发或使用过程中,我们可能会遇到下面的问题:

1. 怎么判断这个framework里面的库是静态库还是动态库?
2. 使用的framework怎么判断是否含有arm64架构?
3. 模拟器上使用framework链接错误跑不起来怎么办?
......

这些问题其实都可以通过mac的终端指令来解决,其实终端指令就是系统提供的一些工具软件,下面主要列举出常用的几个: lipo、otool、file、nm

file

file是最简单的指令,可以显示文件类型,用于framework中的库时可以判断是静态库还是动态库,从下图file指令两个实例,可以看出
动态库: 显示“Mach-O 64-bit dynamically linked shared library arm64”
静态库: 显示“current ar archive random library” 或“current ar archive ”。

file指令

lipo

lipo是最常用的指令,主要包含几个使用case:

  1. 查看库包含的架构信息
使用方式:lipo -info  /framework路径/xxx.framework/xxx
lipo
  1. 合并多个架构,如将模拟器库和真机armv7架构、真机arm64架构合并到一起。
使用方式:lipo -create 库1 库2 -output  合并后的fat库
  1. 拆分库,如将包含真机库和模拟器库的framework拆分为只含有真机库的framework。
使用方式:lipo 待拆分的fat库 -thin 需拆分框架 -output 新库

otool

otool是个强大(前面提到的两个命令只可以通过otool来解决)的工具,在日常开发中用在以下case:

  1. 查看库包含的架构信息
使用方式:otool -o /framework路径/xxx.framework/xxx
  1. 查看当前app或库所使用的iOS系统的动态库
使用方式:打开ipa文件找到可执行文件, 以微信的老版本6.0.1为例:
otool -L  /路径/weixin6.0.1/Payload/MicroMessenger.app/MicroMessenger 
微信使用的动态库
  1. 反编译
    反编译可以说是个逆向常用的比较黑的操作,还是以微信的ipa为例:
otool -tV /路径/weixin6.0.1/Payload/MicroMessenger.app/MicroMessenger 

注意:此命令将输出所有汇编代码,对于微信这种巨型app输出过程很长,做好心理准备,此处也不列出长篇幅的汇编代码。

nm

nm是names的缩写, nm命令主要是用来列出某些文件中的符号(函数和变量等)

NAME
       nm - list symbols from object files

SYNOPSIS
       nm [-A|-o|--print-file-name] [-a|--debug-syms]
          [-B|--format=bsd] [-C|--demangle[=style]]
          [-D|--dynamic] [-fformat|--format=format]
          [-g|--extern-only] [-h|--help]
          [-l|--line-numbers] [-n|-v|--numeric-sort]
          [-P|--portability] [-p|--no-sort]
          [-r|--reverse-sort] [-S|--print-size]
          [-s|--print-armap] [-t radix|--radix=radix]
          [-u|--undefined-only] [-V|--version]
          [-X 32_64] [--defined-only] [--no-demangle]
          [--plugin name] [--size-sort] [--special-syms]
          [--synthetic] [--target=bfdname]
          [objfile...]

DESCRIPTION
       GNU nm lists the symbols from object files objfile....  If no object
       files are listed as arguments, nm assumes the file a.out.

       For each symbol, nm shows:
        # ... run man nm for detials.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容