2013年9月2日 星期一

Static Library

開新專案模板選擇 iOS -> Framework & Library -> Cocoa Touch Static Library
Product Name 輸入StaticLibrary, ARC看自己需求, 不過聽說Xcode5是不支援4.3了
專案剛建立完成時, Products裡的libStaticLibrary.a是紅的, 尚未編譯產生lib
將下列程式碼輸入
StaticLibrary.h
#import <Foundation/Foundation.h>
@interface StaticLibrary : NSObject
+ (void)showMessage;
@end


StaticLibrary.m
@implementation StaticLibrary
+ (void)showMessage {
    NSLog(@"showMessage");
}
@end



若是從模擬器編譯出來的libStaticLibrary.a, 只能在模擬器下使用
若是從實機編譯出來的libStaticLibrary.a, 只能在實機下使用
這邊使用模擬器來做範例
再來就可以按⌘+b編譯檔案
編譯出來的lib存放位置, 可以從Organizer去找, 點選Derived Data右邊的箭頭
也可以自己開Finder找
/Users/你的名稱/Library/Developer/Xcode/DerivedData/StaticLibrary-xxxx/Build/Products/Release-iphonesimulator

也可以直接從Project底下的libStaticLibrary.a右鍵show in finder, 編譯後就不會是紅色的了

裡面可以找到libStaticLibrary.a
以及include資料夾,內包含StaticLibrary.h
請記住位置或是複製下來

然後開新專案StaticLibraryTest, 將剛剛的lib跟header加入

header加入之後import看看能不能正確找到
若是沒有則 Build Settings -> Header Search Path 加入 $SOURCE_ROOT

lib加入之後去檢查Build Pasese中Link Binary With Library有沒有該lib
若是沒有則 + -> Add Other 加入
然後在 Build Settings -> Other Link Flags加入 -ObjC

最後測試
#import "StaticLibrary.h"
[StaticLibrary showMessage];





2013/9/12
因為 RAYWENDELLICH 的這篇文章 Creating a Static Library in iOS Tutorial 的關係
又把以前寫得這篇拿來看 基本上原本學得方向沒錯 然後從RAY那邊又學到怎樣做Universal Binaries, 這問題我之前就有想過, 只是不知道該怎樣解決

在那邊順便看到一些知識, iPhone CPU是ARM架構, Mac CPU是x86架構, 所以編譯起來的lib才會不相容, 而Universal Binaries則是lib把兩個架構都包在一起, 這樣壞處顯而易見, 就是要lib檔會比較肥大, 要上架的時候把lib改用實機build出來的就好了

Universal Binaries實作上就是用個叫lipo的command line tool來區別當前環境

差不多就這樣



至於另一種匯入static的方法, 簡單說一下那篇教學的介紹
把整個static library project拖進另一個project
也就是在一個Project中包含另一個static library project

在實作project -> build phases -> target dependencies加入static library project的target
在實作project -> build pasese -> link binary with library加入static library project的lib
一樣設定other link flags
看起來是這樣就結束了


沒有留言:

張貼留言