Xcode10.2創(chuàng)建FrameWork包并將圖片涩笤、XIB打包bundle

因?yàn)檫@兩天有點(diǎn)時(shí)間,所以就想做個(gè)frameWork包試試盒件,雖然還留下了一點(diǎn)點(diǎn)問(wèn)題蹬碧,但是總的來(lái)說(shuō)還算是不錯(cuò)的,閑話(huà)少扯炒刁,正題開(kāi)始锰茉。

Xcode創(chuàng)建framework包的本身步驟很簡(jiǎn)單,但是過(guò)程中卻有著不少的坑切心,我在創(chuàng)建一個(gè)framework包的時(shí)候可能也只是涉及到了我需要使用的范圍內(nèi)飒筑,所以我也僅對(duì)我所用的范圍進(jìn)行一篇說(shuō)明文章。

FrameWork的創(chuàng)建

  1. 這個(gè)都挺簡(jiǎn)單的绽昏,就像你創(chuàng)建一個(gè)新工程一樣协屡,只是選擇的功能不同


    3C8C6E64-9E72-4DC1-BA38-449E66EB39D3.png

2.創(chuàng)建好之后這里面可以添加任何你想打包在一起的功能類(lèi)。


2209345B-9CAE-4378-8A57-51C571F65BB1.png

這個(gè)頭文件就是引用你自己的功能類(lèi)了全谤,在這個(gè)文件里面下面的這行英文告訴了我們一個(gè)引用類(lèi)的標(biāo)準(zhǔn)肤晓,但是我試了下不用尖括號(hào)引用功能類(lèi),但是也能被引用到认然。這應(yīng)該類(lèi)似一個(gè)標(biāo)準(zhǔn)吧补憾,所以這里還是用尖括號(hào)好一點(diǎn)。


0661E748-6CE2-40A1-85C3-ADBD9C0BACA6.png

3.引用完了之后在打包之前有幾個(gè)地方需要注意一下卷员,首先記得在general中構(gòu)建你需要的版本盈匾。

關(guān)于是選擇的是制作動(dòng)態(tài)庫(kù)還是靜態(tài)庫(kù)這個(gè)看個(gè)人,Mach-O Type->Embedded Framework/Static Framework

其他還有要在A(yíng)rchitectures支持一些類(lèi)型毕骡,但是我這邊Xcode版本是10.2有些東西都有削饵,所以我也沒(méi)去管這一塊了。

4.在Edit Scheme -> Run將Debug改為了release未巫,網(wǎng)上其他文章說(shuō)這個(gè)對(duì)系統(tǒng)型號(hào)有影響窿撬,但是我這版直接設(shè)置release了也就不管了。

5.在bundlesetting里面將bitcode 設(shè)置為NO

6.關(guān)于公開(kāi)的頭文件選擇叙凡,這個(gè)都看自己個(gè)人想公開(kāi)的就都拖到public劈伴,不想的話(huà)就private或者project

A6C010D2-F694-4465-A6F2-9520AC6EBFA8.png

到這里差不多可以導(dǎo)出我們自己的庫(kù)了,我這里用的Xcode里面自帶的功能導(dǎo)出的這樣好像沒(méi)有存在什么模擬器和真機(jī)的區(qū)別都是可以使用的


525FBD29-B115-443A-B10C-9077FFF58105.png

EB7B2325-D0D3-4004-AFB1-B0BAB8553271.png

添加完成后再利用腳本生成靜態(tài)庫(kù)并導(dǎo)出到文件夾


85F5B901-4016-4E5B-A5A5-ADCBEC58561F.png

!/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"

分別編譯模擬器和真機(jī)的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}"

刪除編譯之后生成的無(wú)關(guān)的配置文件

dir_path="{UNIVERSAL_OUTPUT_FOLDER}/{TARGET_NAME}.framework/"
for file in ls 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"

打開(kāi)合并后的文件夾

open "${UNIVERSAL_OUTPUT_FOLDER}"

將上面的腳本復(fù)制到下圖顯示的地方


574B6742-4FA1-4CA3-BFB9-1298521C4999.png

最后就是導(dǎo)出了


9611FE73-F455-445A-B6EC-52F9F60D52C5.png

target一定要選對(duì)你創(chuàng)建的aggregate名字的那個(gè),然后commd+b編譯完成就能自動(dòng)彈出輸出靜態(tài)庫(kù)的文件夾赡模,之后直接拿出來(lái)導(dǎo)入到其他工程引用庫(kù)里面的文件就可以使用了田炭。

以上則是Xcode10.2Framework靜態(tài)庫(kù)的創(chuàng)建到導(dǎo)入其他工程的全部過(guò)程,可能有些地方說(shuō)的不是很詳細(xì),不過(guò)這僅僅是我制作自己的庫(kù)的過(guò)程漓柑。

在Framework靜態(tài)庫(kù)和Framework動(dòng)態(tài)庫(kù)的使用中有點(diǎn)區(qū)別應(yīng):
靜態(tài)庫(kù)直接導(dǎo)入到項(xiàng)目里面就可以直接調(diào)用相應(yīng)的方法教硫。

動(dòng)態(tài)庫(kù)導(dǎo)入到項(xiàng)目中還需要在BuildPhases里面添加
CBCA6C99-9AD0-448F-911E-DC2C422C648A.png

A25E95B2-AA96-4B73-9B65-76F65C279473.png

接下來(lái)就是關(guān)于創(chuàng)建bundle文件。
bundle文件我只建議將圖片資源放進(jìn)去辆布,如果有xib的文件我實(shí)在是不建議一起放進(jìn)去瞬矩,因?yàn)樵谑褂胋undle里面的xib文件時(shí)候會(huì)多了幾行代碼,還不如我直接在外面使用锋玲。如果你不嫌麻煩的話(huà)可以放進(jìn)去景用。

525FBD29-B115-443A-B10C-9077FFF58105.png
5F482D1E-8EB1-4DA1-A709-03CF7A41012F.png

這樣就創(chuàng)建好了,之后的就是做一些配置然后和導(dǎo)出靜態(tài)庫(kù)一樣的操作惭蹂。
選中你的bundle文件并將你想要放進(jìn)去的圖片或者xib資源點(diǎn)加號(hào)添加進(jìn)去


67DC3492-1989-4493-99DF-25AE8F48AB9D.png
8424A766-7B86-49F1-89E4-D0C494329DAF.png
D91F5CED-55FA-4AA1-8DFB-3D1A17A32570.png
![64DE8560-2E9A-4EF1-8A4E-EF77CE3D1FB0.png](https://upload-images.jianshu.io/upload_images/6769479-1b5cd989eaca1602.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

之后就選中bundle文件右鍵show in finder 找到復(fù)制出來(lái)就行了伞插。

關(guān)于bundle包中圖片資源以及nib資源的使用(因?yàn)榘褁ib放入bundle之后都轉(zhuǎn)換成了nib)

VC
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
//在這個(gè)路徑下找到子bundle的路徑
NSString *path = [bundle pathForResource:@"StaticFramework_Xib" ofType:@"framework"];
NSBundle *SDKBundle = [NSBundle bundleWithPath:path];
FrameworkVC *fw = [[FrameworkVC alloc] initWithNibName:@"FrameworkVC" bundle:SDKBundle];
[self presentViewController:fw animated:YES completion:nil];

Cell
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"do_Album" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
UINib *nib = [UINib nibWithNibName:cellID bundle:bundle];
[_collectionView registerNib:nib forCellWithReuseIdentifier:cellID];
nibsRegistered = YES;
圖片
NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"APPBaseSDKBundle" withExtension:@"bundle"]];
UIImage *iv = [UIImage imageNamed:@"zhuanqian" inBundle:bundle compatibleWithTraitCollection:nil];
//或
UIImageView *img = [[UIImageView alloc] initWithFrame:CGRectMake(0,100, 50, 50)];
img.image = [UIImage imageNamed:@"APPBaseSDKBundle.bundle/zhuanqian"];

以上則是靜態(tài)庫(kù)以及bundle資源的創(chuàng)建和使用。
下面說(shuō)下還有幾個(gè)注意的地方

1.使用庫(kù)的時(shí)候報(bào):unrecognized selector sent to

因?yàn)閹?kù)里有分類(lèi)盾碗,使用庫(kù)的時(shí)候媚污,調(diào)用分類(lèi)的方法就會(huì)這樣報(bào)錯(cuò),要修改使用庫(kù)的項(xiàng)目的鏈接配置廷雅。

(1)如果只有分類(lèi)耗美,把Build Settings里的Other Linker Flags修改為-ObjC;

(2)如果庫(kù)里同時(shí)有類(lèi)和分類(lèi)航缀,把Build Settings里的Other Linker Flags修改為:(第二個(gè)可以把庫(kù)拖進(jìn)去商架,再添加"/庫(kù)名")

-force_load

(SRCROOT)/XXXXX/framework/Debug/XXXXX.framework/XXXXX (例:(SRCROOT)/Test/Resource/Test.framework/Test)

2.使用庫(kù)的時(shí)候報(bào):Reason: image not found(這個(gè)我沒(méi)遇到過(guò)我也是找到網(wǎng)上的資料有說(shuō)讓大家知道下)

將生成庫(kù)的target里的Build Settings里的Mach-O Type修改為Static Library,重新生成庫(kù)

3.使用庫(kù)的時(shí)候芥玉,編譯報(bào):ld: symbol(s) not found for architecture

因?yàn)閹?kù)用到了第三方庫(kù)蛇摸,而使用庫(kù)的項(xiàng)目沒(méi)有。把需要的第三方庫(kù)添加進(jìn)來(lái)飞傀。

以上本次文章到這里就結(jié)束了皇型,自己也有過(guò)網(wǎng)上找不少資料,但是都有點(diǎn)零零散散砸烦,我這個(gè)算是通過(guò)自己的實(shí)際操作結(jié)合來(lái)做了一篇這樣的文章,如果有不對(duì)的地方多謝大家指出绞吁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末幢痘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子家破,更是在濱河造成了極大的恐慌颜说,老刑警劉巖购岗,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異门粪,居然都是意外死亡喊积,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)玄妈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乾吻,“玉大人,你說(shuō)我怎么就攤上這事拟蜻∫锴” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵酝锅,是天一觀(guān)的道長(zhǎng)诡必。 經(jīng)常有香客問(wèn)我,道長(zhǎng)搔扁,這世上最難降的妖魔是什么爸舒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮稿蹲,結(jié)果婚禮上扭勉,老公的妹妹穿的比我還像新娘。我一直安慰自己场绿,他們只是感情好剖效,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著焰盗,像睡著了一般璧尸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上熬拒,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天爷光,我揣著相機(jī)與錄音,去河邊找鬼澎粟。 笑死蛀序,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的活烙。 我是一名探鬼主播徐裸,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼啸盏!你這毒婦竟也來(lái)了重贺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎气笙,沒(méi)想到半個(gè)月后次企,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡潜圃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年缸棵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谭期。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堵第,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出崇堵,到底是詐尸還是另有隱情型诚,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布鸳劳,位于F島的核電站狰贯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赏廓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一幔摸、第九天 我趴在偏房一處隱蔽的房頂上張望摸柄。 院中可真熱鬧,春花似錦既忆、人聲如沸驱负。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)跃脊。三九已至,卻和暖如春苛吱,著一層夾襖步出監(jiān)牢的瞬間酪术,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工翠储, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绘雁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓援所,卻偏偏與公主長(zhǎng)得像庐舟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子住拭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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