想開發iPhone應用,沒有Mac Book也沒有Mac Mini,怎麼辦?
想嘗試在Linux上開發iPhone嗎,那就請接著往下看。
1. 前提條件:
在Ubuntu上編譯好toolchain,參見http://www.linuxidc.com/Linux/2010-04/25542.htm。
因為不能跑模擬器,需要一部iPhone手機來測試程序,iPhone3或iPhone4都可以
(目前支持到iPhone 3.1SDK,程序可以在iPhone4上運行)
2. 從UIApplication派生你的應用程序類:
頭文件MyScylla.h
- #import <CoreFoundation/CoreFoundation.h>
- #import <UIKit/UIKit.h>
- @class MyMainView;
- @interface MyScylla : UIApplication
- {
- UIWindow *window;
- MyMainView *mainView;
- }
- @property (nonatomic, retain) IBOutlet UIWindow *window;
- @property (nonatomic, retain) IBOutlet MyMainView *mainView;
- - (void)applicationDidFinishLaunching:(UIApplication *)application;
- - (void)dealloc;
- - (void) redirectConsoleLogToDocumentFolder;
- @end
m文件MyScylla.m
- #import <Foundation/Foundation.h>
- #import <UIKit/UIKit.h>
- #import <UIKit/UIAlert.h>
- #import "MyMainView.h"
- #import "MyScylla.h"
- int main(int argc, char* argv[])
- {
-
- NSAutoreleasePool *autoreleasePool = [
- [ NSAutoreleasePool alloc ] init
- ];
- int returnCode = UIApplicationMain(argc, argv, @"MyScylla", @"MyScylla");
- [ autoreleasePool release ];
- return returnCode;
- }
-
- @implementation MyScylla
- @synthesize window;
- @synthesize mainView;
- - (void)applicationDidFinishLaunching:(UIApplication *)application {
- NSLog(@"applicationDidFinishLaunching");
- [self redirectConsoleLogToDocumentFolder];
-
- // 可以用bounds方法會得到整個屏幕區域,包括狀態欄
- CGRect screenBounds = [ [ UIScreen mainScreen ] bounds ];
-
- // 然後用initWithFrame創建UIWindow對象
- window = [ [ UIWindow alloc ] initWithFrame: screenBounds ];
- // 用applicationFrame方法返回可顯示區域,不包括狀態欄
- CGRect rect = [ [ UIScreen mainScreen ] applicationFrame ];
- rect.origin.x = rect.origin.y = 0.0f;
- mainView = [[MyMainView alloc]init];
- [window addSubview: mainView];
- [window makeKeyAndVisible];
- }
- - (void)dealloc {
- [window release];
- [mainView release];
- [super dealloc];
- }
- - (void) redirectConsoleLogToDocumentFolder {
-
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUSErDomainMask, YES);
- NSString *documentsDirectory = [paths objectAtIndex:0];
- NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"myscylla_log.txt"];
- freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
- }
- @end