新建 Xcode workspace
打開 Xcode , 選擇 File -> New -> Workspace , 將 Workspace 命名為 Test.xcworkspace , 並選擇合適的目錄。
新建 Static Library 項目
選擇 File -> New -> Project , 項目模板選擇 Cocoa Touch Static Library , 項目名稱命名為 MyLib.xcodeproj , 注意選中 Use Automatic Reference Counting 。
Xcode 會在項目中自動生成 MyLib.h 和 MyLib.m 文件, 單擊 MyLib.h 文件, 添加下面的兩個方法定義:
- (NSInteger) add:(NSInteger)a and:(NSInteger)b; + (NSString*) connect:(NSString*)str1 and:(NSString*)str2;
再打開 MyLib.m 文件, 添加剛剛定義兩個文件的實現:
- (NSInteger) add:(NSInteger)a and:(NSInteger)b { return a + b; } + (NSString*) connect:(NSString *)str1 and:(NSString *)str2 { return [NSString stringWithFormat:@"%@ %@", str1, str2]; }
現在, 最終的文件看起來是這樣的:
// // MyLib.h // MyLib // // Created by gdeic on 4/16/12. // Copyright (c) 2012 __MyCompanyName__. All rights reserved. // #import@interface MyLib : NSObject - (NSInteger) add:(NSInteger)a and:(NSInteger)b; + (NSString*) connect:(NSString*)str1 and:(NSString*)str2; @end // // MyLib.m // MyLib // // Created by gdeic on 4/16/12. // Copyright (c) 2012 __MyCompanyName__. All rights reserved. // #import "MyLib.h" @implementation MyLib - (NSInteger) add:(NSInteger)a and:(NSInteger)b { return a + b; } + (NSString*) connect:(NSString *)str1 and:(NSString *)str2 { return [NSString stringWithFormat:@"%@ %@", str1, str2]; } @end
選中 MyLib 項目, 在中間的編輯器窗口中選擇項目的 Target , 選擇 Build Phases 標簽, 展開 Copy Headers 分組, 下面有三個子分組, 分別是 Public 、 Project 與 Private , 將 MyLib.h 拖拽到 Public 分組即可。
保存所有文件, 選擇 Product -> Build , 進行編譯, 生成 libMyLib.a 文件, 同時也會將 MyLib.h 文件復制到輸出目錄。
使用靜態類庫項目
選擇 File -> New -> Project , 項目模板選擇 iOS -> Application -> Single View Application , 項目名稱命名為 MyApp , 注意勾選 Use Storyboards 和 Use Automatic Reference Counting 。
建好項目之后, 項目窗口如下如所示:
將 MyLib 項目拖拽到 MyApp 項目的 Frameworks 文件夾, 在彈出的對話框中選擇 Create groups for any added folders , 然后點擊 Finish 按鈕。
選中 MyApp 項目, 在選擇項目的目標 (Target) , 選中 Summary 標簽頁下找到 Linked Frameworks and Library 分組選項, 如下圖:
點擊下面的加號按鈕, 將工作區的 libMyLib.a 添加進去。
接下來添加頭文件搜索目錄, 選中 Targets 上面的 Project , 選擇 Build Settings 標簽頁,在搜索框內輸入 header search 進行過濾, 找到 Header Search Paths , 添加一行, 輸入 ../MyLib , 並選中遞歸復選框。
現在要先驗證一下對 MyLib 的引用是否正確, 打開 MyApp 項目的 ViewController.m , 添加對 MyLib.h 的引用, 如下圖所示, 並編譯 MyApp , 如果編譯成功, 則表示引用正確。
打開 MainStoryboard.storyboard 文件, 在生成的 ViewController 上添加兩個 UITextField 、 兩個 UIButton 以及一個 UILabel, 如下圖所示:
並添加相應的 outlet 和 action , ViewController.h 如下:
// // ViewController.h // MyApp // // Created by gdeic on 4/19/12. // Copyright (c) 2012 __MyCompanyName__. All rights reserved. // #import@interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *textField1; @property (weak, nonatomic) IBOutlet UITextField *textField2; @property (weak, nonatomic) IBOutlet UILabel *resultLabel; - (IBAction)addButtonClick:(id)sender; - (IBAction)connectButtonClick:(id)sender; @end
打開 ViewController.m 文件, 實現 addButtonClick: 和 connectButtonClick: 方法, 在 addButtonClick: 方法中調用 MyLib 的實例方法 add:and: , 在 connectButtonClick: 方法中調用 MyLib 的靜態方法 connect:and: , 如下所示:
- (IBAction)addButtonClick:(id)sender { // 獲取用戶輸入的兩個數字 NSInteger num1 = [self.textField1.text integerValue]; NSInteger num2 = [self.textField2.text integerValue]; // 初始化一個新的 MyLib 實例 MyLib* myLib = [[MyLib alloc] init]; // 調用實例方法相加 NSInteger result = [myLib add:num1 and:num2]; // 顯示結果 self.resultLabel.text = [NSString stringWithFormat:@"%d + %d = %d", num1, num2,result]; } - (IBAction)connectButtonClick:(id)sender { // 獲取用戶輸入的兩個字符串 NSString* str1 = self.textField1.text; NSString* str2 = self.textField2.text; // 調用 MyLib 的靜態方法連兩個字符串 NSString* result = [MyLib connect:str1 and:str2]; // 顯示結果 self.resultLabel.text = result; }
點擊添加按鈕時, 效果如下圖所示:
點擊 Connect 按鈕時, 效果如下圖所示: