????? 首先聲明一下,我是一個(gè)菜鳥,只是在工作中需要給別的公司提供SDK所以學(xué)習(xí)了如何去打包生成屬于自己的SDK,有什么不足的地方,還希望大家能夠指正.
????? 好了,廢話不多說,首先,我使用的Xcode版本是7.2,新建一個(gè)工程,在進(jìn)入頁面之后,選擇Framework & Libray 選項(xiàng)中的 Cocoa Touch Framework.

????? 因?yàn)橐虬璧奈募?所以這里我自己創(chuàng)建了CveniEs.h,CveniEs.m文件,并且自定義了一個(gè)初始化方法,在,初始化方法中調(diào)用了 - (void)getString:(NSString *)string方法,并且打印了一句話,為了證明生成framework之后確實(shí)走了該方法;在實(shí)際工作過程中,直接把需要打包的所有文件拖到該工程中即可,

?????? 然后選中Target,選中Build Phases -> Headers,可以看出有三個(gè)選項(xiàng),分別是Public,Private,Project;把需要暴露給別人的.h文件拖到Public中,剩下的不要暴露的,即為隱藏的文件,放在Project中,

?????? 完成上述步驟之后,在littleCveniEs.h文件中,把所有需要暴露的.h文件都用#import <littleCveniEs/PublicHeader.h>引入,記住一定要將所有的需要暴露的.h文件都寫在給定位置,不然編譯后生成的.framework在引用的時(shí)候會(huì)有警告;

新建一個(gè)Target,選擇Other - >Aggregate,重命名,PS:圖中的標(biāo)記太過于丑陋,可以忽略, - -!

選中新建的Target,點(diǎn)擊Build Pharas ,選中左上角的+,New Run Script Phase;

點(diǎn)開Run Script,添加如下的腳本;

?????? 選中Targets中的第一個(gè)Target,也就是littleCveniEs,點(diǎn)擊Build Setting -> Mach-O Type,選擇Static Library,到這里會(huì)有一個(gè)問題存在,就是無法在iPhone5c上使用.framework,這是我們需要在Build Setting -> Architectures ->Architectures中添加armv7s


?????? 我們已經(jīng)完成了所有的工作,可以選擇Command + B,不過編譯之前,按照下圖選擇正確的Target,編譯完成后會(huì)自動(dòng)彈出已經(jīng)創(chuàng)建完成的.framework;

????? 到這里,我們已經(jīng)完成了百分之九十九的步驟了,導(dǎo)入自己創(chuàng)建的.framework可以實(shí)現(xiàn)方法的調(diào)用,不過,如果你需要隱藏的文件中含有通過Category創(chuàng)建的類,當(dāng)你運(yùn)行程序的時(shí)候會(huì)發(fā)現(xiàn)出現(xiàn)崩潰的現(xiàn)象,如下圖,我在創(chuàng)建自己的.framework的時(shí)候隨便寫了一個(gè)NSString的Category,并且在初始化方法中調(diào)用了Category中的方法,程序直接出現(xiàn)了Unrecognized selector sent to instance 0x10008c098的錯(cuò)誤,這時(shí)我們需要在引用我們.framework的工程中設(shè)置 Build Pharse -> Other Linker Flags中加上 -all_load 就OK了,再次運(yùn)行工程,可以完成所有的打印過程.



????? 最后一張圖是輸出結(jié)果,可以看出所有我想要的打印都生成了,我們的.framework也完成了.在制作SDK,生成.framework的過程中,我遇到了上面的問題,查閱了網(wǎng)上的關(guān)于制作.framework的文章或者博客,都沒有把所有的問題集中,或者就Xcode版本過低,這里我把自己遇到的所有的問題都羅列了出來,并且給出了相應(yīng)的解決方法,大家可以參考一下,如果有大牛發(fā)現(xiàn)我哪里寫的有問題,還請(qǐng)指正出來.我會(huì)努力改正,做的更好.