iOS 創(chuàng)建屬于自己的Framework

前言

如果你想將你開發(fā)的控件與別人分享,一種方法是直接提供源代碼文件。然而,這種方法并不是很優(yōu)雅。它會(huì)暴露所有的實(shí)現(xiàn)細(xì)節(jié),而這些實(shí)現(xiàn)你可能并不想開源出來。此外,開發(fā)者也可能并不想看到你的所有代碼,因?yàn)樗麄兛赡軆H僅希望將你的這份漂亮代碼的一部分植入自己的應(yīng)用中。
另一種方法是將你的代碼編譯成靜態(tài)庫(kù)(library),讓其他開發(fā)者添加到自己的項(xiàng)目中。然而,這需要你一并公布所有的公開的頭文件,實(shí)在是非常不方便。
你需要一種簡(jiǎn)單的方法來編譯你的代碼,這種方法應(yīng)該使得你的代碼易分享,并且在多個(gè)工程中易復(fù)用。你需要的是一種方法來打包你的靜態(tài)庫(kù),將所有的頭文件放到一個(gè)單元中,這樣你就可以立刻將其加入到你的項(xiàng)目中并使用。
OS X完美地支持這一點(diǎn),因?yàn)閄code就提供了一個(gè)項(xiàng)目模板,包含著默認(rèn)構(gòu)建目標(biāo)(target)和可以容納類似于圖片、聲音、字體等資源的文件。你可以為iOS創(chuàng)建Framework,不過這是一個(gè)比較復(fù)雜的手工活,如果你跟著教程走,你將學(xué)到怎么樣跨過路障,順利地完成Framework的創(chuàng)建。

說明

1.什么是庫(kù)?

庫(kù)是共享程序代碼的方式,一般可分靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

2.靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的區(qū)別?

靜態(tài)庫(kù):鏈接時(shí)完整的拷貝至可執(zhí)行文件中,被多次使用就有多份冗余拷貝;
動(dòng)態(tài)庫(kù):鏈接時(shí)不復(fù)制,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存,供程序調(diào)用,系統(tǒng)只加載一次,多個(gè)程序通用,節(jié)省內(nèi)存

3.iOS 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的形式

靜態(tài)庫(kù):.a 和 .framework
動(dòng)態(tài)庫(kù): .dylib 和 .framework

4.為什么framework既是靜態(tài)庫(kù)也是動(dòng)態(tài)庫(kù)

系統(tǒng)framework為動(dòng)態(tài)庫(kù),自己創(chuàng)建的framework為靜態(tài)庫(kù)

制作流程

1.打開Xcode,新建工程,選擇"Cocoa Touch Framework",點(diǎn)擊"next",填寫工程名,并進(jìn)入工程中刪除自帶與工程同名的頭文件

image.png

2.創(chuàng)建功能類

Demo中我寫了一個(gè)叫做"MathMethod"繼承自NSObject,用來計(jì)算 加法、減法、乘法、除法!

3.實(shí)現(xiàn)功能

這里你可以將需要的文件拖入使用,也可以重新創(chuàng)建新的類;
簡(jiǎn)單的我寫了四個(gè)方法,就不上代碼了,直接截圖看:


聲明.png
實(shí)現(xiàn).png

4.重點(diǎn)來了!需要生成我們自己的Framework,需要進(jìn)行如下配置

TARGETS —> Build Settings 中設(shè)置相關(guān)項(xiàng)

1.Build Active Architecture Only 設(shè)置為NO的意思是當(dāng)前打包的.framework支持所有的設(shè)備.否則打包時(shí)只能用當(dāng)前版本的模擬器或真機(jī)運(yùn)行.


image.png

2.Build Setting 搜索linking 設(shè)置Dead Code Stripping 為NO是編譯選項(xiàng)優(yōu)化,包瘦身,(可不改) Mach-O Type 選中StaticLibrary (靜態(tài)庫(kù)) Xcode默認(rèn)是動(dòng)態(tài)庫(kù).


image.png

3.設(shè)置framework最低支持的版本
image.png
TARGETS —> Build Phases設(shè)置相關(guān)項(xiàng)

將需要呈現(xiàn)給來的頭文件,直接從Project拖到Public中. 不想呈現(xiàn)出來的.h文件不建議拖到Private中. 放在project中即可


image.png

4.在進(jìn)行編譯之前應(yīng)該設(shè)置為release模式

快捷鍵方式:command + shift + ,


image.png

5.編譯運(yùn)行

來到工程目錄樹,Products下的文件都是紅色的,現(xiàn)在我們選中.framework文件,分別真機(jī)和模擬器運(yùn)行一遍(成功運(yùn)行
然后Show in Finder 找到對(duì)應(yīng)的 .framework文件(上級(jí)目錄可以看出是真機(jī)還是模擬器文件夾)
真機(jī)和模擬器運(yùn)行成功的文件是在這倆個(gè)文件夾內(nèi)的


image.png

內(nèi)部分為Debug版本和Release版本,同時(shí)兩者有分為真機(jī)版本和模擬器版本framework(iphoneos后綴代表真機(jī)版本,iphonesimulator后綴代表模擬器)

到這里,我們的第一個(gè)framework已經(jīng)制作完成,但是呢還是有一點(diǎn)缺陷和不足,我們的真機(jī)版本和模擬器版本framework是分開的 ,如何將兩個(gè)合成為同一個(gè)???

別走開...接著往下看!前方高能?。。。?!

6.真機(jī)版本和模擬器版本framework合并(這里只做release版本合成)

(1).查看架構(gòu)信息
打開終端使用命令行 lipo -info 查看framework架構(gòu)信息
真機(jī)版本


真機(jī).png
模擬器.png

2).合并真機(jī)模擬器版本
因?yàn)橐陨汐@取的framework只能在對(duì)應(yīng)的版本上運(yùn)行(即真機(jī)只能在設(shè)備上運(yùn)行,模擬器版本只能在模擬器上面運(yùn)行使用)所以需要合并為通用版本
命令行語句:sudo lipo -create (此處請(qǐng)?zhí)顚懻鏅C(jī)AppVest文件路徑) (此處填寫模擬器AppVest文件路徑) -output 自定義合成文件存儲(chǔ)路徑(合成文件的名字MathMethod)。


合成.png

根據(jù)以上命令就在相應(yīng)位置生成了新的MathMethod文件,然后把這個(gè)新生成的文件拷貝到相應(yīng)的framework中進(jìn)行MathMethod文件替換,這里我們替換真機(jī)版release包;
3).查看替換后的framework支持全部真機(jī)模擬器架構(gòu)


image.png

7.制作好的framework集成使用

把制作好的framework拖入到工程中,引用相關(guān)頭文件,然后初始化進(jìn)行暴露方法調(diào)用


ending.png

結(jié)束了,你的第一個(gè)framework做好了嗎?

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

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

  • 介紹 動(dòng)態(tài)庫(kù)形式:.dylib和.framework 靜態(tài)庫(kù)形式:.a和.framework 動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的區(qū)別...
    齊滇大圣閱讀 46,770評(píng)論 18 251
  • 前言 1.靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)有什么異同? 靜態(tài)庫(kù):鏈接時(shí)完整地拷貝至可執(zhí)行文件中,被多次使用就有多份冗余拷貝。利用靜態(tài)...
    Ly夢(mèng)k閱讀 8,742評(píng)論 3 18
  • 一、靜態(tài)庫(kù)簡(jiǎn)介 1.1、庫(kù):是程序代碼的集合,是共享程序代碼的一種方式。 1.2、根據(jù)源代碼的公開情況,庫(kù)可以分為...
    IIronMan閱讀 5,830評(píng)論 18 29
  • 僅以方便自己查閱記錄前言1.靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)有什么異同?靜態(tài)庫(kù):鏈接時(shí)完整地拷貝至可執(zhí)行文件中,被多次使用就有多份冗...
    190CM閱讀 4,515評(píng)論 0 4
  • 今日春考,陰雨,微寒。早早地把孩子送到學(xué)校,拐彎找地方停車。急急地趕回校門口,只是孩子早已消失在茫茫人海。 佇立良...
    寒江月影照孤舟閱讀 219評(píng)論 0 0

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