iOS之Framework相关知识
一、查看包支持的架构
lipo -info FramworkName.framework/FrameworkName
1、真机armv7、arm64
2、模拟器i386、x86_64
二、查看包是否是静态库还是动态库
方式1
file FramworkName.framework/FrameworkName
如果有dynamically
字段的话是动态库,反之为静态库
方式2
在项目中, 以Embedded Binaries 方式导入为动态库;以Link Binary With Libraries 方式导入为静态库
三、合并包
1、手动合并lipo -create 真机路径 模拟器路径 -output 真机路径
2、自动合并脚本
(1)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
(2)先随便选个模拟器编译,(提示失败没问题),然后再选择真机编译下,提示成功即在工程的products文件夹下可看到合并好的framework包
四、移除指定架构
lipo -remove 架构名(i386) Framework.framework/FrameworkName -o Framework.framework/FrameworkName
五、瘦包,去除和别人重复的第三方库(需保证别人和自己的是使用同一个版本)
1、分别拆分出不同架构的SDK
(1)创建不同架构的文件夹
(2)lipo FramworkName.framework/FrameworkName -thin 架构 -output 架构文件夹/FrameworkName
2、分别分解出.o
文件
cd 架构文件夹
ar xv FrameworkName
3、分别去除和别人重复的.o
文件
4、分别重新封装.o
文件为framework
ar rcs FrameworkName *.o
5、合并所有新封装的SDK
lipo -create 文件1 文件2 文件3 文件4 -outout FrameworkName