iOS XCode13 自制静态.framework(包含资源文件)
创建流程
1、创建frameworke
2、添加源代码,设置Public的.h
Build Phases (Headers Public(公开的)
StaticFrameWork.h中引入Public的.h
3、添加.bundle
4、适配所有模拟器和真机
Build Settings(Build Active Architecture Only 为N0)
5、 库类型
Build Settings(Mach-O Type Static Library(静态库))
6、设置库支持的系统
7、添加脚本
8、设置编译模拟器版本
Build Settings Excluded Architectures下的 Any ios Simulator SDK 值为 arm64。
(模拟器生成的.framework, 不需要arm64架构)
9、设置编译真机版本
10、执行脚本
Build Phases Headers
Build Settings 支持所有架构,模拟器不支持arm64,库类型
测试流程
1、添加.frameworke
将.frameworke拖入根目录
添加到工程(General Frameworks,Libraries,and Embedded Count)
framework包含.bundle还需
Build Phases (Copy Bundle Resources)添加,否则资源无法加载
2、测试即可
General添加
Build Phases添加
操作步骤
1、创建frameworke
2、添加源代码,设置Public的.h
Build Phases (Headers Public(公开的)
StaticFrameWork.h中引入Public的.h
3、添加.bundle
4、适配所有模拟器和真机
Build Settings(Build Active Architecture Only 为N0)
5、 库类型
Build Settings(Mach-O Type Static Library(静态库))
6、设置库支持的系统
7、添加脚本
8、设置编译模拟器版本
Build Settings Excluded Architectures下的 Any ios Simulator SDK 值为 arm64。
(模拟器生成的.framework, 不需要arm64架构)
9、设置编译真机版本
10、执行脚本
测试操作步骤
1、添加.frameworke
将.frameworke拖入根目录
添加到工程(General Frameworks,Libraries,and Embedded Count)
framework包含.bundle还需
Build Phases (Copy Bundle Resources)添加,否则资源无法加载
2、测试即可
备注:
脚本
#!/bin/sh #要build的target名 TARGET_NAME=${PROJECT_NAME} if [[ $1 ]] then TARGET_NAME=$1 fi UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/Products" #创建输出目录,并删除之前的framework文件 mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}" rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework" #分别编译模拟器和真机的Framework xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build #拷贝framework到univer目录 cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}" #合并framework,输出最终的framework到build目录 lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}" #删除编译之后生成的无关的配置文件 dir_path="${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/" for file in ls $dir_path do if [[ ${file} =~ ".xcconfig" ]] then rm -f "${dir_path}/${file}" fi done #判断build文件夹是否存在,存在则删除 if [ -d "${SRCROOT}/build" ] then rm -rf "${SRCROOT}/build" fi rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos" #打开合并后的文件夹 open "${UNIVERSAL_OUTPUT_FOLDER}"
加载.bundle图片
+(UIImage*)getImg{ NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"StaticFrameWork.framework/img" ofType:@"bundle"]; NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; NSString *imagePath = [bundle pathForResource:@"test" ofType:@"png"]; UIImage *image = [UIImage imageWithContentsOfFile:imagePath]; return image; }