iOS開發(fā)之Xcode多工程聯(lián)編,打包靜態(tài)庫

最近項目要加快開發(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é)約生命,從我做起

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容