UmbrellaFramework(一)創(chuàng)建基礎(chǔ)framework

開發(fā)過程中會(huì)遇到各種各樣的情況,比如需要將幾個(gè)已經(jīng)封裝好的framework封裝成一個(gè),統(tǒng)一提供出去,封裝的這種framework就是umbrellaframework。Apple的官方文檔中明確提到了不建議自己去創(chuàng)建umbrellaframework,但是既然遇到了這種情況,還是動(dòng)手試一試。

首先先引入Apple的 Guidelins for Creating Frameworks 的一段

Don’t Create Umbrella Frameworks

While it is possible to create umbrella frameworks using Xcode, doing so is unnecessary for most developers and is not recommended. Apple uses umbrella frameworks to mask some of the interdependencies between libraries in the operating system. In nearly all cases, you should be able to include your code in a single, standard framework bundle. Alternatively, if your code was sufficiently modular, you could create multiple frameworks, but in that case, the dependencies between modules would be minimal or nonexistent and should not warrant the creation of an umbrella for them

文章將分三個(gè)部分逐步創(chuàng)建并使用UmbrellaFramework

  • SubFramework 創(chuàng)建一個(gè)基礎(chǔ)framework
  • UmbrellaFramework framework里封裝framework
  • UmbrellaFrameworkDemo 使用demo

本篇是第一部分,這一部分將會(huì)一步步創(chuàng)建一個(gè)基礎(chǔ)framework,那么伸伸懶腰,我們開始吧!

demo地址:https://github.com/huibaoer/Demo_UmbrellaFramework

創(chuàng)建一個(gè)基礎(chǔ)的framework

1.創(chuàng)建一個(gè)framework工程:Subframework

SubFramework_1

2.添加類SubSayHello,添加sayHello方法

SubFramework_2

3.在SubFramework.h頭文件中導(dǎo)入SubSayHello.h

SubFramework_3

4.將SubSayHello.h添加到公共Header中

SubFramework_4

5.Architectures添加armv7s

SubFramework_5

6.連接選項(xiàng) Mach-O Type 選擇Static Library靜態(tài)庫

SubFramework_6

7.生成通用framework

到了這一步framework已經(jīng)基本完成了,只需要生成最終需要使用的framework了。一般有兩種方式生成:

  • 分別在模擬器和真機(jī)下運(yùn)行工程,分別導(dǎo)出兩個(gè)運(yùn)行出來的framework,用命令行合并成一個(gè)通用的framework
  • 在工程中添加腳本,運(yùn)行腳本生成通用framework

兩種方式介紹的文章很多,這里不做過多解釋,下面使用第二種添加腳本的方式生成framework

7.1為SubFramework工程添加Target -> Aggregate
SubFramework_7
7.2在SubFramework新添加的Target中添加腳本

腳本內(nèi)容如下:

# Sets the target folders and the final framework product.

# 如果工程名稱和Framework的Target名稱不一樣的話,要自定義FMKNAME

# 例如: FMK_NAME = "MyFramework"

FMK_NAME=${PROJECT_NAME}

# Install dir will be the final output to the framework.

# The following line create it in the root folder of the current project.

INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework

# Working dir will be deleted after the framework creation.

WRK_DIR=build

DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework

SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework

# -configuration ${CONFIGURATION}

# Clean and Building both architectures.

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build

# Cleaning the oldest.

if [ -d "${INSTALL_DIR}" ]

then

rm -rf "${INSTALL_DIR}"

fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.

lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"

rm -r "${WRK_DIR}"

open "${INSTALL_DIR}"
SubFramework_8
7.3運(yùn)行新添加的Target,會(huì)自動(dòng)彈出窗口,包含了已經(jīng)生成好的framework。大功告成!

8.最后,可以檢查一下生成的framework信息,命令行執(zhí)行如下命令,注意cd到SubFramework的所在目錄

lipo -info  SubFramework.framework/SubFramework

正常情況下結(jié)果如下,支持的架構(gòu)已經(jīng)顯示出來
Architectures in the fat file: SubFramework.framework/SubFramework are: armv7 armv7s i386 x86_64 arm64

當(dāng)然,也可以自己建一個(gè)demo工程,將SubFramework導(dǎo)入,試著調(diào)用一下 SubSayHello 的 sayHello 方法。相信會(huì)愉快的收到響應(yīng)的,?

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

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

  • 在相對較大的互聯(lián)網(wǎng)App研發(fā)中, framework靜態(tài)庫被廣泛應(yīng)用, 那么在研發(fā)framework的時(shí)候也產(chǎn)生好...
    Startry閱讀 21,567評論 17 29
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,421評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,150評論 25 708
  • 原博地址 :http://ios.jobbole.com/81583/ 本篇主要是根據(jù)對制作完整版的項(xiàng)目作為SDK...
    蓋世英雄_ix4n04閱讀 2,767評論 2 5
  • 與大北農(nóng)集團(tuán)的緣分源自成都之行,那次我們十幾個(gè)人被派去成都參加《六項(xiàng)精進(jìn)》研討會(huì),在空巴晚宴的分享環(huán)節(jié),所有參加這...
    孟雯雯閱讀 1,458評論 0 2

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