1. 程式人生 > >製作Framework && 自動化

製作Framework && 自動化

Framework的製作

一、製作過程.

1.以SDWebImage為例

  • 建立framework工程
    在這裡插入圖片描述

  • 修改Build Settings中配置在這裡插入圖片描述

在這裡插入圖片描述

  • 下載好最新的SD,地址:https://github.com/rs/SDWebImage,拷貝原始碼到此工程;或者直接使用SD現有的工程,修改以上配置資訊;然後修改為Release,如下圖:
  • 點選Edit Scheme :image
  • 修改Build Configuration:image
  • 編譯 cmd+b ,這裡需要編譯兩次一次是真機裝置,一次是模擬器;編譯完成後,開啟下圖SDWebImage.framework所在的目錄:image
  • 開啟終端:cd 到Products所在的目錄(可以直接將Products拖到終端):image
  • 如下:image
  • 下面通過命令合併真機裝置和模擬器framework:image
  • 將新生成的framework替換Release-iphoneos或者Release-iphonesimulator下面的:image
  • 將替換完的SDWebImage.framework拷貝到專案中如圖:image
  • 下面就可以修改專案中SDWebImage.podspec的引入方式為s.ios.vendored_frameworks = ‘Frameworks/SDWebImage.framework’;完事!!!

2.自動化

  • 分別編譯模擬器和真機,自動執行指令碼生成framework
    首先新增Run Script新增run script

指令碼執行

  • 在工程目錄下新增資料夾ToolScripts,把指令碼createFramework.sh放進去;
  • 先編譯模擬器,再編譯真機;會看到如下彈窗:合併完成。
    合併之後的frame

二.遇到的問題

  • 編譯到最後出現個彈窗:

image

這是因為自己製作的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