iOS靜態庫制作

有時候你公司已經有了成熟的產品,有了一套完全自己維護的代碼,現在公司有很多客戶,這些客戶不想要你的全部產品,只需要部分的功能,那么這個時候把你的產品模塊做成SDK給客戶使用就顯得非常有必要了。網上已經有許多教大家如何制作靜態庫的教程,但是一般大家看到的是教大家如何制作.a文件,由于.a文件中的內容無法查看,使用使用的時候還需要配套的.h文件。這樣會帶來一個問題就是當.h文件很多的時候顯得很是雜亂。我這篇教大家如何生成.framework文件的靜態庫,.framework文件里面包含了.h文件,是對外可見的,也就是說本來要提供.a文件和.h文件,現在只需一個.framework文件了。
?萬事開頭難,我們從簡單的事情做起,就是把一張圖片集成到SDK中,通過調用集成的SDK來顯示一張圖片,最終效果是這樣的:


最終效果

首先創建一個bundle工程


創建完成后它看起來是這樣子的:


工程里面只有兩個文件,Info.plist和FZQSdk.bundle文件,接下來我們將對他進行一些設置,選中項目文件,然后點擊TARGETS->Build Setting,直接搜Architectures,然后將Base SDK改為Latest iOS



接下來的操作類似請按圖修改:







注意,這步之后,Products下單文件名就變成FZQSdk.framework了,繼續我們的設置



將skip install改為no

接下來,選中Info,修改如下:



然后選中Build Phases,在下方空白處點一下,然后editor -> add build path -> add header build path,如圖



在Link Binary With Libraries將UIKit引入

經過這一步之后Build path下多處了一項,名為Headers,目前里面有0個項目,點擊左邊的三角形會發現里面有三項,Public, Private, Project. 需要對外暴露的頭文件就放在Public下,其他的就放到Project下,待會兒就會看到怎么去用。在這里我們是為了存放源程序庫,里面是二機制代碼,不能夠存放諸如xib,圖片,等資源文件。所以我們還要另外創建一個包去存放我們的圖片,選中TARGETS下單FZQSdk,點擊Editor -> Add Target選擇bundle



將bundle命名為FZQResource,創建好后整個工程看上去應該是這樣的



選中剛剛創建的那個Target,點擊Build Phase,點擊右邊的刪除圖標,將Compile Sources, Link Binary With Libraries刪除掉,刪除的原因是如果不刪除,上傳到App Store時蘋果會報錯,說你的包里面無源文件,完成后看上去是這個樣子

有時,就算你在這里進行了刪除,蘋果還會報另外一個錯,為了保險起見選中Info.plist文件里面的CFBundleExecutable這個key



繼續選中FZQResource這個TARGET,點擊Build Settings, 搜索COMBINE_HIDPI_IMAGES,將其值設為NO

把Base Sdk設置成latest iOS

由于當我們給客戶提供包時資源庫的名字一般和SDK的名字是一樣的,所以最后搜索product name,將其改為FZQSdk



至此我們的準備工作總算做的差不多了。接下來把我們準備好的要放入庫中的那張圖片拖到項目中來,注意選中copy if needs


資源圖片已經有了接下來就是使用它,選中FZQSdk文件夾,添加一個cocoa的class,讓他繼承于NSObject,將其命名為MyImage,然后在其頭文件中引入UIKit,并且在其中加入以下代碼來對用戶暴露接口
+ (UIImageView *)getIcomeImageView;

在其.m文件中加入一下代碼
+ (UIImageView *)getIcomeImageView {
NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"FZQSdk" ofType:@"bundle"]];
UIImage *image = [UIImage imageWithContentsOfFile:[bundle pathForResource:@"homeitem" ofType:@"png"]];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
imageView.image = image;
return imageView;
}
由于,這個+ (UIImageView *)getIcomeImageView方法是要讓用戶去調用的,故選中FZQSdek在Build phase下將MyImage從Project下拖到Public下



最后,做如下修改

然后選擇上方的scheme把里面的兩個target都編譯一下



則Products文件夾下就生成了我們需要的SDK以及資源文件了。



然后選中他們,右鍵 Show in Finder查看。SDK已經生成,接下來就是使用他們了,這里我們新創建一個single view application,取名為FZQSdkApp,然后將我們剛從生成的.framework文件以及.bundle文件拖到這個項目中。

然后在ViewController中引入庫頭文件#import "FZQSdk/MyImage.h",并且在viewdidload中加入以下代碼
UIImageView *imageView = [MyImage getIcomeImageView];
imageView.center = self.view.center;
[self.view addSubview:imageView];

如圖



由于我們剛從編譯的sdk是iOS device,且Enable Bitcode為NO,使用將FZQSdkApp的該設置也改為NO,然后鏈接真機



然后command + r在手機上跑起來,看看圖片是不是順利地在你的手機中顯示出來了。

本文到此結束,另外給出一個很好的制作iOS靜態庫的教程,里面會有一些本文未講解的知識,有興趣的可以去看下。希望這篇文章對有需要的人有所幫助,有任何問題可以在下方留言,我們可以一起討論。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容