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