环境环境
- Mac: 10.12.6
- Xcode: 9.1
1. 创建项目
1.1 新建工程
1.2 添加文件
- 把写好的代码文件拖入到项目里
- 主头文件中导入需要暴露的头文件
1.3 设置Headers
Targets -> 项目名字 -> Build Phases -> Headers
- 添加需要的头文件,然后把需要暴露的头文件拖入到 Public 区域
1.4 设置 Mach-O Type
2. 编译项目,产生 .framework文件
2.1 校验生成的静态库支持的框架类型
- 命令:
lipo -info EncryptLib
- 输出结果:
-
真机
状态编译:Architectures in the fat file: EncryptLib are: armv7 arm64 -
模拟器
状态编译:Non-fat file: EncryptLib.framework/EncryptLib is architecture: x86_64
-
问题: 怎么才能编译一次,同时支持真机和模拟器架构呢?
答案:添加一个跨平台的targets
3. 跨平台
3.1 添加 Target
3.2 配置脚本
FMK_NAME=${PROJECT_NAME}
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
WRK_DIR=build
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
rm -r "${WRK_DIR}"
open "${INSTALL_DIR}"
3.3 现在新建的Target,编译
3.4 校验生成的静态库支持的框架类型
- 不管编译的时候选择的是真机还是模拟器,都兼容。
Architectures in the fat file: EncryptLib are: i386 x86_64 armv7 arm64