最近項目要加快開發(fā)速度,所以想到了把一大堆第三方庫打成靜態(tài)包的方法,以下記錄一下流程,以防以后用到忘記了
1.創(chuàng)建一個靜態(tài)庫工程,不多講,百度都有
2.將靜態(tài)庫文件拉進項目的主工程,因為我主項目用的cocoapods管理,所以在podfile文件里面需要修改以下,使cocoapods管理兩個工程文件
platform :ios,'8.0'
inhibit_all_warnings!
#use_frameworks!? 使用這行以后makeframework工程打不了靜態(tài)庫文件
source 'https://github.com/CocoaPods/Specs.git'
workspace 'xxx.xcworkspace'
defshared_pods
pod 'a'
pod'b'
end
target'主工程名稱'do
? ? shared_pods
end
target '項目名稱' do
? ?project'MakeFrameWork/MakeFrameWork.xcodeproj' //項目靜態(tài)庫工程,寫上路徑,不然cocoapods找不到的
? pod'YYKit'
? pod'SDWebImage'
? pod'FMDB', '~> 2.6.2' # 為了兼容GYDataCenter
end
3.接下來 pod install?
4.為靜態(tài)庫工程弄一個編譯的腳本,打出來的包就可以自動合并了(選中progect? 在targets下的+號添加一個aggregate的 target,然后復制下面的腳本就可以了) 注意,用腳本編譯的話如果出錯是不會報錯的,而是直接顯示success 所以要看彈出的文件夾里的framework里面有沒有 真的靜態(tài)庫文件,如果只是一個header,那就是有錯誤。
#!/bin/sh
#要build的target名
TARGET_NAME=${PROJECT_NAME}
if[[ $1]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}_Products/"
#創(chuàng)建輸出目錄,并刪除之前的framework文件
mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"
rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"
#分別編譯模擬器和真機的Framework
xcodebuild -target"${TARGET_NAME}"ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}"BUILD_ROOT="${BUILD_ROOT}"clean build
xcodebuild -target"${TARGET_NAME}"ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}"BUILD_ROOT="${BUILD_ROOT}"clean build
#拷貝framework到univer目錄
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}"
#合并framework,輸出最終的framework到build目錄
lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}"
#刪除編譯之后生成的無關的配置文件
dir_path="${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/"
forfileinls $dir_path
do
if[[ ${file} =~".xcconfig"]]
then
rm -f "${dir_path}/${file}"
fi
done
#判斷build文件夾是否存在,存在則刪除
if [ -d "${SRCROOT}/build" ]
then
rm -rf "${SRCROOT}/build"
fi
rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos"
#打開合并后的文件夾
open "${UNIVERSAL_OUTPUT_FOLDER}"
5.編譯中會遇到一個 lpods-framework xxx not a library 的問題,記不太得了,把build phases下的Link Binary with Library 下的a包刪除就可以解決了
6.編譯通過以后在主工程的general里把生成的a包拉進去就可以直接關聯(lián)了,然后運行 OK,節(jié)約生命,從我做起