一、构建framework
1."new traget” 选择 Framework& Library中的 Cocoa Touch Framework

2.framework支持版本调整 iOS Deployment Target
设置最低支持版本【创建的默认是支持最新版本】
3.搜Linking 调整 Mach-O Type
A、Mach-O Type 改为 Static Library【静态库】
B、Dead Code stripping 改为NO
然后几个需要设置的选项都显现出来,首先是Dead Code Stripping设置为NO,网上对此项的解释如下,大致意思是如果开启此项就会对代码中的”dead”、”unreachable”的代码过滤,不过这个开关是否关闭,似乎没有多大影响,不过为了完整还原framework中的代码,将此项关闭也未曾不可。
C 、Link with standard Libraries 改为NO
然后将Link With Standard Libraries关闭,我想可能是为了避免重复链接
4、defines Module 改为NO【?】
5、xxxx.h中写入要暴露的文件头文件
6、Build Phases 中设置要暴露的.h的头文件和.m 文件

7、build active architecture only 改为NO,编译所有版本类型
8、添加armv7s 要不不支持iPhone5 iPhone5C

问题
1、如果有分类,上层使用的时候需要添加other link flag 加上-ObjC标识
2、上层需要配置framework引入的路径在Framework Search Paths 中需要配置引入framework的路径
二、framework 真机库合并
- 查询库信息
lipo -info tztPodAPI
Architectures in the fat file: tztPodAPI are: armv7 armv7s i386 x86_64 arm64
- 手动合并真机库和模拟器库
cd 改到当前库文件夹下
lipo -create A B -output C
A 真机库文件名字
B 模拟器库文件名字
C 输出目标库文件名字
- 抽取某一类型的库
lipo A -thin x86_64 -output B
A为原有库
B为抽离后的库
- 自动合并真机库和模拟器库脚本
target—>Build Phases—>New Run script Phase—>/bin/sh
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/target/${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
cd ${SRCROOT}/target/
open "."
#${PROJECT_NAME} 当前项目名称
#${PRODUCT_NAME} 当前产品名称
#
小知识
armv7|armv7s|arm64都是ARM处理器的指令集
i386|x86_64 是Mac处理器的指令集
arm64:iPhone6s | iphone6s plus|iPhone6| iPhone6 plus|iPhone5S | iPad Air| iPad mini2(iPad mini with Retina Display)
armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)
armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4
i386是针对intel通用微处理器32位处理器
x86_64是针对x86架构的64位处理器
模拟器32位处理器测试需要i386架构,
模拟器64位处理器测试需要x86_64架构,
真机32位处理器需要armv7,或者armv7s架构,
真机64位处理器需要arm64架构
framework路径放在需要当前项目文件夹内,引入framework时路径可以自动关联,头文件也可以正常提示
本笔记仅做记录使用
参考博客
https://blog.csdn.net/qq_31810357/article/details/72528470
网友评论