lipo
SDK开发中最常用的指令。
1. 查看库包含的架构信息
lipo -info /framework路径/xxx.framework
cd framework所在的目录
lipo -info xxx.framework
2. 合并多个架构
将模拟器x864、i386 和 真机 armv7架构、真机 arm64架构 合并到一起。
lipo -create 库1 库2 -output 合并库
这个一般不用,命令比较麻烦。
如果需要将不同的几个没关系的库打包成一个库(苹果最多支持6合1),这是一种合并方式,但是项目里不常用,没必要。
如果是打包一个库,合并模拟器合真机的架构,最好是在Xcode里添加脚本,再打包出合并的库。将各架构的库打出来再合并太麻烦了。
在项目的Build Phases中,新建一个Run Script,添加如下脚本:
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
#open "${DEVICE_DIR}"
#open "${SRCROOT}/Products"
fi
这段脚本是网上找的。编译脚本的时候分别在模拟器合真机下都编译一下,不然可能会报找不到编译文件无法合并的错误。
3. 拆分库
lipo 待拆分库 -thin 要被拆分的库 -output 新库
这个一般不用。
上线前去除模拟器的架构,可以使用这个方式,但是最好别用,太麻烦。再Xcode中添加脚本,打包上线直接会去掉模拟器架构。
file
判断framework是动态库还是静态库
file /framework路径/xxx.framework
显示“Mach-O 64-bit dynamically linked shared library arm64”为动态库。
显示“current ar archive random library” 或“current ar archive ”。为静态库。
otool
1. 查看库包含的架构信息
otool -o /framework路径/xxx.framework/xxx
2. 查看当前app或库所使用的iOS系统的动态库
ipa -> show in finder->Payload->xxx.app/xxx,打开可执行文件
otool -L /路径/xxx/Payload/xxx.app/xxx