環(huán)境環(huán)境
- Mac: 10.12.6
- Xcode: 9.1
1. 創(chuàng)建項(xiàng)目
1.1 新建工程
1.2 添加文件
- 把寫好的代碼文件拖入到項(xiàng)目里
- 主頭文件中導(dǎo)入需要暴露的頭文件
1.3 設(shè)置Headers
Targets -> 項(xiàng)目名字 -> Build Phases -> Headers
- 添加需要的頭文件,然后把需要暴露的頭文件拖入到 Public 區(qū)域
1.4 設(shè)置 Mach-O Type
2. 編譯項(xiàng)目,產(chǎn)生 .framework文件
2.1 校驗(yàn)生成的靜態(tài)庫(kù)支持的框架類型
- 命令:
lipo -info EncryptLib
- 輸出結(jié)果:
-
真機(jī)
狀態(tài)編譯:Architectures in the fat file: EncryptLib are: armv7 arm64 -
模擬器
狀態(tài)編譯:Non-fat file: EncryptLib.framework/EncryptLib is architecture: x86_64
-
問題: 怎么才能編譯一次,同時(shí)支持真機(jī)和模擬器架構(gòu)呢?
答案:添加一個(gè)跨平臺(tái)的targets
3. 跨平臺(tái)
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 現(xiàn)在新建的Target,編譯
3.4 校驗(yàn)生成的靜態(tài)庫(kù)支持的框架類型
- 不管編譯的時(shí)候選擇的是真機(jī)還是模擬器,都兼容。
Architectures in the fat file: EncryptLib are: i386 x86_64 armv7 arm64