Framework開發(fā)

之前一直想要封裝一個自己積累的“工具包”斤讥,以便日后搬磚家伙齊全一些退个,但是出于”懶“進(jìn)而遲遲沒有邁出第一步;最近對支付南蓬、數(shù)據(jù)持久化纺非、動畫將進(jìn)一步學(xué)習(xí)與總結(jié)。

首先對整體的 iOS 的庫有個整體的概念

庫是共享程序代碼的方式蓖康,一般分為靜態(tài)庫和動態(tài)庫铐炫。

靜態(tài)庫:鏈接時完整地拷貝至可執(zhí)行文件中,被多次使用就有多份冗余拷貝蒜焊〉剐牛【.a和.framework】

動態(tài)庫:鏈接時不復(fù)制,程序運(yùn)行時系統(tǒng)動態(tài)加載到內(nèi)存泳梆,供程序調(diào)用鳖悠,系統(tǒng)只加載一次榜掌,多個程序共用,節(jié)省內(nèi)存乘综≡髡耍【.dylib和.framework】

注:系統(tǒng)的.framework是動態(tài)庫,我們自己建立的.framework是靜態(tài)庫卡辰。

網(wǎng)上的相關(guān)資料有很多胞皱,主要參考進(jìn)行學(xué)習(xí),為方便記憶九妈,主要以截圖的方式進(jìn)行記錄:

創(chuàng)建新的工程


為做實例反砌,簡單的輸出一個message
在此設(shè)置需要給外界暴露的.h,然后Run萌朱,


找到生成的Framework所在位置宴树,導(dǎo)出用于新工程


存儲路徑如上


導(dǎo)入新的工程之后的目錄結(jié)構(gòu)
run --- crash

在stackoverflow上找到關(guān)于Link binary 和 Embeb Framework 的區(qū)別,感覺原文更直接晶疼,就直接復(fù)制過過來了酒贬;

??http://stackoverflow.com/questions/27015154/link-binary-with-libraries-vs-embed-frameworks

Link?binary with libraries Linkframeworks and libraries with your project’s object files to produce a binaryfile. You can link a target’s source files against libraries in the target’sactive SDK or against external libraries.

Embed?Frameworks You can create an embedded framework to share code between your app extension andits containing app.

在Embebdded Binaries中將自定義的Framework添加進(jìn)去


制作通用動態(tài)庫,這一塊目前還沒有完全理解翠霍,先記錄一下流程锭吨,

新建Aggregate Target

添加script到新建的Target

# 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}"

選中新建的Target壶运,Run, 如果沒有異常的話耐齐,會自動彈出生成的Framework文件

這樣生成的動態(tài)庫就能同時支持模擬器和真機(jī)了

xCode6下制作通用靜態(tài)庫

上面我們也提到了浪秘,這樣生成的動態(tài)庫恐怕很難在xCode5上使用蒋情,那我們?yōu)槭裁捶且脛討B(tài)庫呢,一般情況下不是用靜態(tài)庫就好了嗎耸携? So Easy!只需要修改一個參數(shù)即可生成靜態(tài)庫了

使用靜態(tài)庫的話棵癣,就可以把Framework從‘Embedded Binaries’中刪除了. 親測在xCode5下可用。把新生成的庫導(dǎo)入到測試工程夺衍,試試在模擬器和真機(jī)上運(yùn)行狈谊,一切OK.

不巧,如果你用的真機(jī)是iPhone5 C, 那悲劇又要發(fā)成了沟沙,生成的Framework竟然不支持armv7s,不知是xCode6的bug河劝,還是因為蘋果認(rèn)為使用armv7s的設(shè)備太少,可以不支持了.xCode6新建工程矛紫,默認(rèn)的Architectures竟然不包含armv7s

想要生成的庫支持armv7s,把a(bǔ)rmv7s添加到Architectures中赎瞎,重新生成Framework即可

判斷一個Framework支持哪些架構(gòu)

我們該怎么驗證生成的Framework支持哪些平臺呢,總不能一個個測試吧颊咬?當(dāng)然不用.下面的命令是加上armv7s前后生成的framework的對比

Yearsdembp:Products Years$ lipo -info ./MyFramework.framework/MyFramework

Architectures in the fat file: ./MyFramework.framework/MyFramework are: i386 x86_64 armv7 arm64

Yearsdembp:Products Years$ lipo -info ./MyFramework.framework/MyFramework

Architectures in the fat file: ./MyFramework.framework/MyFramework are: armv7 armv7s i386 x86_64 arm64



制作Framework的注意事項

1注意理解:無論是.a靜態(tài)庫還.framework靜態(tài)庫务甥,我們需要的都是二進(jìn)制文件+.h+其它資源文件的形式牡辽,不同的是,.a本身就是二進(jìn)制文件敞临,需要我們自己配上.h和其它文件才能使用态辛,而.framework本身已經(jīng)包含了.h和其它文件,可以直接使用挺尿。

2圖片資源的處理:兩種靜態(tài)庫奏黑,一般都是把圖片文件單獨(dú)的放在一個.bundle文件中,一般.bundle的名字和.a或.framework的名字相同编矾。.bundle文件很好弄攀涵,新建一個文件夾,把它改名為.bundle就可以了洽沟,右鍵以故,顯示包內(nèi)容可以向其中添加圖片資源。

3 category是我們實際開發(fā)項目中經(jīng)常用到的裆操,把category打成靜態(tài)庫是沒有問題的怒详,但是在用這個靜態(tài)庫的工程中,調(diào)用category中的方法時會有找不到該方法的運(yùn)行時錯誤(selector not recognized)踪区,解決辦法是:在使用靜態(tài)庫的工程中配置other

linker flags的值為-ObjC 昆烁。(注:一些第三方庫里對系統(tǒng)庫的類加了category;這時缎岗,就需要使用編譯參數(shù):-ObjC静尼,這樣第三方庫中對系統(tǒng)類作的擴(kuò)展方法才能在工程中使用)

4如果一個靜態(tài)庫很復(fù)雜,需要暴露的.h比較多的話传泊,就可以在靜態(tài)庫的內(nèi)部創(chuàng)建一個.h文件(一般這個.h文件的名字和靜態(tài)庫的名字相同)鼠渺,然后把所有需要暴露出來的.h文件都集中放在這個.h文件中,而那些原本需要暴露的.h都不需要再暴露了眷细,只需要把.h暴露出來就可以了拦盹。


接下來對github的本地倉庫與遠(yuǎn)程倉庫進(jìn)行總結(jié),代碼總的有個歸宿溪椎。。沼侣。歉秫。利人利己

更多精彩內(nèi)容請關(guān)注“IT實戰(zhàn)聯(lián)盟”哦~~~

![IT實戰(zhàn)聯(lián)盟.jpg](http://upload-images.jianshu.io/upload_images/326255-f67b0f0dd5fe5874.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/500)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雅潭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筛圆,老刑警劉巖椿浓,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件提岔,死亡現(xiàn)場離奇詭異碱蒙,居然都是意外死亡夯巷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來后雷,“玉大人臀突,你說我怎么就攤上這事×兆矗” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵边翁,是天一觀的道長符匾。 經(jīng)常有香客問我瘩例,道長,這世上最難降的妖魔是什么趣倾? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任儒恋,我火速辦了婚禮诫尽,結(jié)果婚禮上牧嫉,老公的妹妹穿的比我還像新娘减途。我一直安慰自己,他們只是感情好臊恋,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布抖仅。 她就那樣靜靜地躺著撤卢,像睡著了一般放吩。 火紅的嫁衣襯著肌膚如雪羽杰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天惕澎,我揣著相機(jī)與錄音唧喉,去河邊找鬼八孝。 笑死干跛,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闲询。 我是一名探鬼主播扭弧,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼鸽捻,長吁一口氣:“原來是場噩夢啊……” “哼御蒲!你這毒婦竟也來了厚满?” 一聲冷哼從身側(cè)響起碘箍,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秆撮,沒想到半個月后职辨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了台腥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黎侈。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贴汪,靈堂內(nèi)的尸體忽然破棺而出扳埂,到底是詐尸還是另有隱情瘤礁,我是刑警寧澤阳懂,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站柜思,受9級特大地震影響岩调,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赡盘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一号枕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧陨享,春花似錦葱淳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坑傅,卻和暖如春星爪,著一層夾襖步出監(jiān)牢的瞬間诺核,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工腿椎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肮帐,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容