制作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: 参考实例