2011年4月30日 星期六

Build Static Library in Xcode 4

這篇文章是要來教大家用 Xcode 4 產生 .a 檔,所謂的 Static Library。
用途就是把自己寫好的程式不想要給對方看到 source code 包成 .a 再加上 .h 這樣一樣對方可以正常使用自己寫好的程式,而且看不到自己寫的 .m 檔。
在這個文章要建立兩個專案,一個是用來產生 .a ,另一個用來測試 .a 是不是成功產生。
LibTest - 這個專案用來產生 .a ( Xcode 自動會產生一個名為 libLibTest.a 的檔案)
UsageTest - 這個專案用來測試 LibTest 產生的 .a
讓我們一步一步來進行
首先開啟一個 Static Library 的專案,如下
然後命名為 LibTest 會在導覽列看到如下

LibTest 這個 Group 裡什麼都沒有
接著我們就要新增一個 Class 打算把這個 Class 的 .m 包成 .a
如下方式新增一個 File
然後新增一個 NSObject 的子類別命名為 LibTest,之後會在導覽列看到。
LibTest.h 和 LibTest.m。之後呢,新增一個 method 在 .h 和其實作在 .m
#import <Foundation/Foundation.h> 
@interface LibTest : NSObject { 
-(void) greeting:(NSString *) message; 
@end
上面是 LibTest.h,下方是 LibTest.m


#import "LibTest.h" 
@implementation LibTest 

-(void) greeting:(NSString *) message{ 
    NSLog(@"Hello %@", message); 
@end
打完之後存檔,接下來要產生 .a 檔了。在產生之前先確定一下 configuration
目的就是要確定這個 scheme 跑的是 release 而不是 debug。確定之後。在 Product -> Build 按下之後就會 Build 這個 Target 然後會產生 .a 如下圖來 Build
重點來了,.a 檔會放在那?Xcode 4 會放在 ~/Library/Developer/Xocde/DerivedData/ 的再接下圖
也就是  ~/Library/Developer/Xocde/DerivedData/<Product Name>/Build/Products/Release-iphonesimulator/ 底下會有一個 .a 如上圖,要記得哦,是 Release 如果是 Debug 開頭,我測過是不能被用的。好記得就好。然後要把這個檔案和 .h 一起放到等一下要開啟的 UsageTest 專案裡。
簡單開始一個 Window-based Application ,Product Name 命名為 UsageTest 就可以了。如下圖
接者把上一個專案產生的 libLibTest.a 和 LibTest.h 一起 copy 到這個專案。如下圖。
然後在 UsageTestAppDelegate.m 的 application:didFinishLaunchingWithOptions: 填上如下的程式碼。


#import "UsageTestAppDelegate.h" 
#import "LibTest.h" 
@implementation UsageTestAppDelegate 
@synthesize window=_window; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    LibTest * libObj = [LibTest new]; 
    [libObj greeting:@"Michael"]; 
[self.window makeKeyAndVisible]; 
return YES; 
// 省略 

}
沒意外的話,Run 就會看到如下成功的畫面。只有 .a 和 .h 就可以成功執行了。




2011年4月29日 星期五

Continuous Integration

這個名詞 wiki 還沒有中文的翻譯,直接翻就是持續整合
說比較好理解一點就是利用 Server 可以幫助我們做 Testing 的工作。
還記得之前有一篇是討論 Unit Test 。Unit Test 可以幫我們自動地測試。
而 Continuous Integration 呢就是利用 Server 幫我們不眠不休地測試
要用到這樣的好處,基本的組合條件要有
Web Server - 產生報名給我們看那些地方測試過了還是沒過
Version Control - 把我們寫好的專案檔放到這裡
Continuous Integration Server - 連結 Web Server 和  Version Control 利用 Unit Test 自動化的特性測試

好現在問題來了要用什麼?
Web Server - Apache, Tomcat
Version Control - SVN, GIT,
Continuous Integration Sever - CruiseControl, Jenkins(Hudson)

通常由 Continuous Integration 來決定 Web Server 然後去連結 Version Control Server
從 Google 下 objective-c continuous integration 的結果好像  hudson (Jenkins) 比較多文章
其實對我們開發者而言,就是有人架好 Hudson 然後和 SVN 或是 GIT 連結設定好
我們只是把寫好 Test case 的專案 commit 到 SVN 或是 GIT Server 而己。
然後就去睡覺,一早醒來再去 debug...
有時間再寫寫怎麼設定 Continuous Integration Server
不過好像應該要先更新 Xcode 4 要怎麼來用 Unit Test
雖然我的基本的課堂上都有講,改天再分享給沒上過我的課的朋友。