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;
    
}

 

posted @ 2022-08-03 18:51  小菜看代码  阅读(1204)  评论(0编辑  收藏  举报