iOS之Framework相关知识

2019-03-18  本文已影响0人  RichieQ

一、查看包支持的架构

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

上一篇下一篇

猜你喜欢

热点阅读