一、构建framework
1."new traget” 选择 Framework& Library中的 Cocoa Touch Framework
1.png
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 文件
2.png
7、build active architecture only 改为NO,编译所有版本类型
8、添加armv7s 要不不支持iPhone5 iPhone5C
3.png
问题
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时路径可以自动关联,头文件也可以正常提示