前言
之前有很多的大神們已經(jīng)寫過framework的制作渔期,但最近由于Xcode7的出現(xiàn),很多之前的教程內(nèi)容已經(jīng)不符渴邦,對于初學(xué)者來說疯趟,找到一篇能夠直接明了,簡單易學(xué)的制作framework的文章比較困難谋梭。本文將基于Xcode7創(chuàng)建一個簡單的工程信峻,通過兩種方法來教大家如何制作一個自己的framework。
簡介
Mac OS X擴(kuò)展了framework的功能瓮床,讓我們能夠利用它來共享代碼和資源盹舞。通過framework我們可以共享所有形式的資源,如動態(tài)共享庫隘庄,nib文件踢步,圖像字符資源以及文檔等。
系統(tǒng)會在需要的時候?qū)ramework載入內(nèi)存中峭沦,多個應(yīng)用程序可以同時使用同一個framework贾虽。這種方法可以使得你的代碼易分享,在多個工程中復(fù)用吼鱼,并且可以隱藏實(shí)現(xiàn)細(xì)節(jié)蓬豁,控制公開的頭文件绰咽。
制作
步驟
- 打開Xcode,創(chuàng)建新工程地粪。手下留情取募,請先看圖!
- 創(chuàng)建功能類蟆技。這里我創(chuàng)建一個繼承自NSObject的SayHello類
-
在新創(chuàng)建的類里面聲明方法并實(shí)現(xiàn)玩敏。這里我寫一個
sayHello的方法,以便后面測試使用质礼。SayHello.h
#import <Foundation/Foundation.h> @interface SayHello : NSObject -(void)sayHello; @end
SayHello.m
#import "SayHello.h" @implementation SayHello -(void)sayHello { NSLog(@"你好旺聚,第一次見面,請多關(guān)照"); } @end
-
在TARGETS下選中工程眶蕉,在Build Settings下更改幾個參數(shù)砰粹。
在Architectures下增加armv7s,并選中造挽。將Build Active Architecture Only 設(shè)置為NO碱璃。
-
設(shè)置Headers
將你要公開的頭文件移動到Public下,要隱藏的放在Private或者Project下饭入,當(dāng)然嵌器,隱藏的頭文件就無法再被引用。
然后需要在Test.h(必須是公開的谐丢,否則無法引用)中將你所有要公開的.h引入爽航。
打包framework
-
方法一
1.選中模擬器,編譯程序
2.選中測試機(jī)乾忱,編譯程序
3.在finder中找到framework文件
選中圖中所標(biāo)示的framework岳掐,然后右鍵show in finder。
找到下圖中所示的Test文件饭耳,一個是Debug-iphoneos(真機(jī))下的,一個是Debug-iphonesimulator(模擬器)下的执解。4.通過終端命令將兩個framework合為一個模擬器和真機(jī)都可使用的framework寞肖。
打開控制臺輸入 lipo -create iphoneos下frameworkTest的路徑 simulator下frameworkTest的路徑 -output 新的路徑,這樣就完成了模擬器和真機(jī)版本的合并衰腌,新路徑下的frameworkTest就是你合并后的文件新蟆,將這個文件名字改成和你未合并之前的Test一樣的名字,放到framework文件夾下右蕊,替換掉原來的frameworkTest文件琼稻。
上面這段命令就是把真機(jī)和模擬器的frameworkTest合并成一個MyNewFrameworktest文件并存放在桌面上的New文件夾下。
5.將修改后的framework拷貝出來保存饶囚,這就是我們最終制作的framework帕翻。
-
方法二
1.選中TARGETS下的工程鸠补,點(diǎn)擊上方的Editor,選擇Add Target創(chuàng)建一個Aggregate.
選擇Other下的Aggregate,點(diǎn)擊Next創(chuàng)建嘀掸。2.嵌入腳本紫岩。選中剛剛創(chuàng)建的Aggregate,然后選中右側(cè)的Build Phases,點(diǎn)擊左下方加號,選擇New Run Script Phase
將這段腳本復(fù)制進(jìn)去睬塌。
FMK_NAME=${PROJECT_NAME} INSTALL_DIR=${SRCROOT}/Products/$ {FMK_NAME}.framework WRK_DIR=build DEVICE_DIR=${WRK_DIR}/Release-iphoneos/$ {FMK_NAME}.framework SIMULATOR_DIR=${WRK_DIR}/Release- iphonesimulator/${FMK_NAME}.framework xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build if [ -d "${INSTALL_DIR}" ] then rm -rf "${INSTALL_DIR}" fi mkdir -p "${INSTALL_DIR}" cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/" 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}"
3.編譯泉蝌。如圖所示,command+B編譯揩晴。
4.在finder中找到framework勋陪,拷貝出來。
-
使用制作完成的framework
直接將你制作出來的framework添加到要使用的工程里硫兰,在需要使用的文件里引入頭文件诅愚,使用framework中的功能類。如下圖
提醒
1.在制作framework或者lib的時候瞄崇,如果使用了category呻粹,則使用改FMWK的程序運(yùn)行時會crash,此時需要在該工程中 other linker flags添加兩個參數(shù) -ObjC -all_load.
2.帶有圖片資源的需要把圖片打包成Bundle文件苏研,和framework一起拷貝到相應(yīng)的項目中等浊。
3.公開的類中如果引用的private的類,打包以后對外會報錯摹蘑,找不到那個private的類筹燕,可以把那個private的.h放到
結(jié)言
現(xiàn)在,相信你已經(jīng)可以按照文檔步驟制作出一個framework衅鹿,相信過程中可能還會遇到一些問題撒踪,希望大家能夠把這些問題記錄并整理,將這些經(jīng)驗(yàn)分享出來大渤。也歡迎大家聯(lián)系制妄、討論。
最后泵三,希望大家能完成帶有圖片資源的Bundle的制作耕捞。
Try your best!