iOS開發之靜態庫(二)—— .a

來源:互聯網
上載者:User

標籤:style   blog   http   io   os   使用   ar   檔案   2014   

 

前面已經介紹了iOS中靜態庫的基本概念和特點,這裡就不再多廢話,直接上代碼

編譯環境Xcode5.1 + Mac OS X 10.9.3

建立靜態庫項目

Xcode中建立靜態庫的模板有兩個,一個是建立iOS靜態庫,另一個是建立Mac OS X靜態庫,我們選擇前者

點擊右下角Next按鈕進入下一步

給工程起個名字MyToolsA,其餘的按預設值

點擊Next下一步

我們所關心的就只有MyToolsA.h和MyToolsAm檔案,其他的暫且不管

//  MyToolsA.h//  MyToolsA////  Created by LZH on 14-8-14.//  Copyright (c) 2014年 LZH. All rights reserved.//#import <Foundation/Foundation.h>@interface MyToolsA : NSObject- (int)add: (int)x Second: (int)y; //對象方法+ (int)sub: (int)x Second: (int)y; //類方法@end
//  MyToolsA.m//  MyToolsA////  Created by LZH on 14-8-14.//  Copyright (c) 2014年 LZH. All rights reserved.//#import "MyToolsA.h"@implementation MyToolsA- (int)add: (int)x Second: (int)y{    return x + y;}+ (int)sub: (int)x Second: (int)y{        return x - y;}@end

程式碼完成後開始編譯

編譯之前需要先配置工程,因為預設情況是產生Debug版本,如果需要產生Release版本就需要重新設定

Xcode->Product->Scheme->Edit Scheme... 或者直接按快速鍵"Shift + Command + 逗號"彈出配置面板

將Debug選項改為Release選項

將編譯目標改為iOS Device ,表示編譯產生的是真機版本的靜態庫

點擊左上方紅框內的三角按鈕或者快速鍵"Command + b"進行編譯,當看到“Build Succeeded”表明編譯成功

然後便可以看到Products目錄下的libMyToolsA.a由紅色變成了黑色,說明我們已經成功產生了靜態庫檔案

右鍵點擊libMyToolsA.a選擇"Show in Finder"

找到libMyToolsA.a所在檔案夾

切換編譯目標,將iOS Device 改為 iPhone Retina (3.5-inch),編譯產生適用於模擬器的靜態庫

OK,現在真機版本的靜態庫和模擬器版本的靜態庫都已經產生,下面的工作是要將二者合并,產生一個既適用於真機又適用於模擬器的靜態庫

需要使用下面的命令

lipo -create 1.a 2.a -output 12.a

開啟終端,為了方便期間,直接切換到超級使用者

找到靜態庫所在目錄

彈出屬性菜單,在“位置”屬性中記錄的便是該目錄所在的絕對路徑,複製粘貼到終端視窗,即可進入指定檔案夾

然後使用lipo命令合成靜態庫

我們來驗證一下產生的庫是否支援我們想要的平台

可以看出,我們最終產生的庫libMyToolsA.a同時支援32位模擬器架構i386、64位模擬器架構x86_64、32位真機架構armv7/armv7s及64位真機架構arm64

跟我們的預期相吻合。

下面便是測試工程

此處選擇iOS工程的單視圖模板

右鍵點擊"New Group"新群組"MyTools",將剛剛產生的庫檔案libMyToolsA.a和標頭檔MyToolsA.h拖動至MyTools下

注意:

拖動時同時按住Alt鍵,這樣就是複製而不是移動,原來的檔案都還在,否則就會把原位置的檔案刪除了

由於.a靜態庫的使用必須由標頭檔配合,所以也要把.h檔案拷貝過來

必須勾選上Add to targets 下的StaticLibATest目標,否則即使把檔案放進來編譯目標時也無法使用

要使用剛剛匯入的靜態庫,只需要加入其標頭檔即可

修改ViewController.m檔案

//  ViewController.m//  MyToolsATest////  Created by LZH on 14-8-15.//  Copyright (c) 2014年 LZH. All rights reserved.//#import "ViewController.h"#import "MyToolsA.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.        int x = 10, y = 7;        //使用類方法    NSLog(@"%d - %d = %d", x, y, [MyToolsA sub: x Second: y]);        //使用對象方法    MyToolsA *myToolsA = [[MyToolsA alloc] init];        NSLog(@"%d + %d = %d", x, y, [myToolsA add: x Second: y]);        }- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end

運行結果:

模擬器

真機

 

OK,大功告成,輸出結果跟我們預期的完全一樣。

   

 

iOS開發之靜態庫(二)—— .a

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.