創(chuàng)建靜態(tài)

簡介:

? ? ? 庫是一些沒有main函數(shù)的程序代碼集合。除了靜態(tài)庫,還有動態(tài)鏈接庫,他們之間的區(qū)別是:靜態(tài)庫可以編譯到我們的執(zhí)行代碼中,應用程序可以在沒有靜態(tài)庫的環(huán)境中運行;動態(tài)庫不能編譯到我們的執(zhí)行代碼中,應用程序必須在有鏈接庫文件的環(huán)境下運行。

創(chuàng)建靜態(tài)庫的步驟如下所示,

1、創(chuàng)建DateTest,新建->Project,選擇cocoa Touch Static Library,如圖,


2、點擊Next,我將cocoa Touch Static Library項目名稱命名為DateTest,因為這是我用于處理時間和日期的靜態(tài)庫工程,

3、靜態(tài)庫文件功能的實現(xiàn)細節(jié)

創(chuàng)建了靜態(tài)庫DateTest項目之后,Xcode自動為我們創(chuàng)建了DateTest.h和DateTest.m文件,如下圖所示

4、在DateTest.h文件 中寫入

@interface DateTest : NSObject

- (NSString *)changeToStandardTime:(NSTimeInterval)timeInterval;

@end

5、在DateTest.m文件 中寫入

@implementation DateTest

- (NSString *)changeToStandardTime:(NSTimeInterval)timeInterval

{

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSString *time = [dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:timeInterval]];

return time;

}

@end

6、編譯項目,生成對應的靜態(tài)庫.a文件

6.1、先來看一下在模擬器上編譯(Command+B)之前的項目細節(jié),如下圖

這時候libDateTest.a文件變?yōu)楹谏珷顟B(tài)了,表明編譯過后它是一個真是存在于物理磁盤的文件,我們右鍵選擇Show in Finder,如下圖,出現(xiàn)了它的物理位置,


6.2、再看一下在真機上編譯(Command+B),過程同模擬器編譯基本一樣,不同的是在真機環(huán)境下進行編譯,如下圖

? ? ?上面的Debug-iPhones里面包含iPhone真機所需要的libDateTest.a靜態(tài)庫文件,而下面的Debug-iPhoneSimulator里面包含的時iPhone模擬器所需要的libDateTest.a靜態(tài)庫文件。

7、合并靜態(tài)庫

? ? ?針對真機和模擬器的靜態(tài)庫文件只能在一個平臺下面使用,好在我們可以將真機和模擬器上面的靜態(tài)庫文件合并成一個在真機和模擬器都可以使用的靜態(tài)庫文件,通過在終端輸入命令即可完成該目的。

打開終端輸入:lipo -create 將真機和模擬器的靜態(tài)庫文件拖進終端


最后輸入:- output /Users/用戶名/Desktop/libTimeDate.a

完整的命令是:

lipo -create /Users/admin/Library/Developer/Xcode/DerivedData/DateTest-anjnqehnhjobgbgzsoxyxagyjqib/Build/Products/Debug-iphoneos/libDateTest.a /Users/admin/Library/Developer/Xcode/DerivedData/DateTest-anjnqehnhjobgbgzsoxyxagyjqib/Build/Products/Debug-iphonesimulator/libDateTest.a -output /Users/admin/Desktop/libDateTest.a

這樣就在桌面生成了一個合并過后的libDateTest.a靜態(tài)庫文件,它可以再真機和模擬器上面同時使用。

8、使用靜態(tài)庫文件,

? ? ?這時候我們就可以使用自己創(chuàng)建、編譯生成的靜態(tài)庫文件了,將TimeDate.h文件和桌面上面的libTimeDate.a文件拖到想要使用的項目中,如下圖的目錄結構,

為了方便,在新建工程的AppDelegate中使用創(chuàng)建的靜態(tài)庫文件了,代碼如下,

AppDelegate.m文件中引入#import "DateTest.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

DateTest? *dateTime = [[DateTest alloc] init];

NSTimeInterval timeInterval = 1234567890;

NSString *time = [dateTime changeToStandardTime:timeInterval];

NSLog(@"time is -------%@",time);

// Override point for customization after application launch.

return YES;

}

? ? ?這時不管是真機還是模擬器都可以編譯通過,正常運行。而使用者只能通過頭文件知道我們提供的借口,卻不知道實現(xiàn)文件中實現(xiàn)的細節(jié),這有效地隱藏了自己的核心技術和機密內容。

總結:

? ? ?我們開發(fā)的就是iOS真機程序,所以可以選擇不合并靜態(tài)庫,直接使用真機編譯生成的靜態(tài)庫文件進行開發(fā),沒有必要為了兼容模擬器而合并靜態(tài)庫文件。當然,如果有強迫癥或者公司設備不夠,那么還是合并靜態(tài)庫文件吧。

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

相關閱讀更多精彩內容

  • 一、簡單介紹 1.1. 什么是庫1.2. 庫的分類1.3. 靜態(tài)庫和動態(tài)庫 二、創(chuàng)建靜態(tài)庫 2.1. 創(chuàng)建.a 靜...
    C丶丶H閱讀 742評論 1 1
  • 一、靜態(tài)庫和動態(tài)庫的區(qū)別: 靜態(tài)庫和動態(tài)庫是相對編譯期和運行期的,靜態(tài)庫以 .a 和 .framework 形式存...
    Shelin閱讀 10,780評論 24 29
  • 一、靜態(tài)庫和動態(tài)庫的區(qū)別 靜態(tài)庫和動態(tài)庫是相對編譯期和運行期的,在存在形式上,靜態(tài)庫是以 .a 和 .framew...
    CMD獨白閱讀 306評論 0 3
  • 當我從你的全世界路過時,那時候我們就真的成為了陌生人。 記得你曾經對我說過的一句話:我眼光很高。然后我也回了一句...
    華麗的單身貴族閱讀 257評論 0 0

友情鏈接更多精彩內容