製作Framework && 自動化
阿新 • • 發佈:2018-11-06
Framework的製作
一、製作過程.
1.以SDWebImage為例
-
建立framework工程
-
修改Build Settings中配置
- 下載好最新的SD,地址:https://github.com/rs/SDWebImage,拷貝原始碼到此工程;或者直接使用SD現有的工程,修改以上配置資訊;然後修改為Release,如下圖:
- 點選Edit Scheme :
- 修改Build Configuration:
- 編譯 cmd+b ,這裡需要編譯兩次一次是真機裝置,一次是模擬器;編譯完成後,開啟下圖SDWebImage.framework所在的目錄:
- 開啟終端:cd 到Products所在的目錄(可以直接將Products拖到終端):
- 如下:
- 下面通過命令合併真機裝置和模擬器framework:
- 將新生成的framework替換Release-iphoneos或者Release-iphonesimulator下面的:
- 將替換完的SDWebImage.framework拷貝到專案中如圖:
- 下面就可以修改專案中SDWebImage.podspec的引入方式為s.ios.vendored_frameworks = ‘Frameworks/SDWebImage.framework’;完事!!!
2.自動化
- 分別編譯模擬器和真機,自動執行指令碼生成framework
首先新增Run Script
- 在工程目錄下新增資料夾ToolScripts,把指令碼createFramework.sh放進去;
- 先編譯模擬器,再編譯真機;會看到如下彈窗:合併完成。
二.遇到的問題
- 編譯到最後出現個彈窗:
這是因為自己製作的framwork和專案中的bundle不一致造成的,在製作之前,先修改SDWebImage的和專案中的保持一致,再重複以上步驟,最後cmd+shift+k清理一下快取即可。
#!/bin/sh echo "SYMROOT = $SYMROOT" echo "SYMROOT = ${BUILD_DIR}/${CONFIGURATION}" echo "SYMROOT = ${BUILD_DIR}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}" bundleID=${PRODUCT_BUNDLE_IDENTIFIER} CURRENTCONFIG_DEVICE_DIR=${BUILD_DIR}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME} JfBuildDir=${BUILD_DIR} JfExecutablePath=${EXECUTABLE_PATH} JfExecutableName=${EXECUTABLE_NAME} JfExecutableFolderPath=${EXECUTABLE_FOLDER_PATH} echo "JfBuildDir = $JfBuildDir" echo "JfExecutablePath = $JfExecutablePath" echo "JfExecutableName = $JfExecutableName" echo "90-> ${CURRENTCONFIG_DEVICE_DIR}" echo "error:message" echo "warning:message" cd ${JfBuildDir} framework="IJKMediaFramework" [ -f "$framework" ] && rm "$framework" dire="compoundFramework/" [ -d "$dire" ] && rm -rf "$dire" mkdir "$dire" if [ -d "Release-iphoneos" ] && [ -d "Release-iphonesimulator" ]; then echo "composition framework" lipo -create Release-iphoneos/${JfExecutablePath} Release-iphonesimulator/${JfExecutablePath} -compound ${JfExecutableName} cp -rf Release-iphoneos/* ${dire} cp -f ${JfExecutableName} ${dire}/${JfExecutableFolderPath} rm -f ${JfExecutableName} open ${dire} fi