制作framework静态库

1. 创建framework工程

2. Build Settings -> Build Artive Architectrue Only 设置为NO

3. Build Settings -> Mach-O Type 设置为 Static Library

4. General -> Deployment Info 设置支持的版本和平台

5. Build Phases -> Headers 将需要暴露的头文件拖到 Public下

6. 删除info.plist中的Executable file避免上传App Store报错

7. Comand + B 分别构建真机和模拟器之后再用lipo -create 合并。操作繁琐,建议使用shell 脚本。如下:

8. shell脚本

#!bin/sh

#制作framework

read -p "请输入要制作target的名字:" target_name

if [[ -z "${target_name}" ]]; then
    echo "没有有效的target,已经推出"
    exit 0
fi

# 工程所在的路径
project_dir=$(pwd)

# 构建之后生成的内容的地址
build_dir="${project_dir}/build"

# #不需要会自动创建
# if [[ ! -d "${build_dir}"  ]]; then
#     #如果不存在目录,就递归创建目录
#     mkdir -p "${build_dir}"
# fi

#运行模式 Debug/Release 默认Release
mode=Release

#存放framework最终产品的路径
framework_dir="${project_dir}/Framework"

#移除上一次生成的framework
rm -rf "#{framework_dir}"

#模拟器生成的framework的地址
simulator_framework_dir="${build_dir}/${mode}-iphonesimulator/${target_name}.framework/${target_name}"
#模拟器生成的bundle的地址
simulator_bundle_dir="${build_dir}/${mode}-iphonesimulator/${target_name}.framework/${bundle_name}.bundle"

#真机生成的framework的地址
iphone_framework_dir="${build_dir}/${mode}-iphoneos/${target_name}.framework/${target_name}"
#真机生成的framework的地址
iphone_dunble_dir="${build_dir}/${mode}-iphoneos/${target_name}.framework/${bundle_name}.bundle"

#清空上次build的数据,并执行build。
#VALID_ARCHS 指定需要构建的结构特, 其中 arm64 真机模拟器都包含  x86_64 i386是模拟器的架构 armv7 是真机架构,armv7s真机架构但一般不在包含,需要的话在VALID_ARCHS中添加
xcodebuild -target "${target_name}" -scheme "${target_name}" -configuration "${mode}" -sdk iphoneos clean build BUILD_DIR="${build_dir}" BUILD_ROOT="${build_dir}" VALID_ARCHS="arm64 armv7"
xcodebuild -target "${target_name}" -scheme "${target_name}" -configuration "${mode}" -sdk iphonesimulator clean build BUILD_DIR="${build_dir}" BUILD_ROOT="${build_dir}" VALID_ARCHS="x86_64 i386"

if [[ -f "${simulator_framework_dir}" ]] && [[ -f "${iphone_framework_dir}" ]] ; then
    
    lipo -create "${simulator_framework_dir}" "${iphone_framework_dir}" -output "${iphone_framework_dir}"

    #拷贝
    cp -r "${build_dir}/${mode}-iphoneos/" "${framework_dir}"

    #打开
    open "${framework_dir}"

elif [[ -f "${simulator_framework_dir}" ]]; then
    echo "没有用真机生成对应架构的静态库"
    exit 0
else
    echo "没有用模拟器生成对应架构的静态库"
    exit 0
fi

 9: 参考实例

posted @ 2022-06-28 16:45  jisa  阅读(49)  评论(0编辑  收藏  举报