在Ubuntu上iPhone开发教程


想开发iPhone应用,没有Mac Book也没有Mac Mini,怎么办?

想尝试在Linux上开发iPhone吗,那就请接着往下看。

1.  前提条件:

在Ubuntu上编译好toolchain,参见。

因为不能跑模拟器,需要一部iPhone手机来测试程序,iPhone3或iPhone4都可以

(目前支持到iPhone 3.1SDK,程序可以在iPhone4上运行)

2.  从UIApplication派生你的应用程序类:

头文件MyScylla.h

  1. #import <CoreFoundation/CoreFoundation.h>   
  2. #import <UIKit/UIKit.h>   
  3. @class MyMainView;   
  4. @interface MyScylla : UIApplication   
  5. {   
  6.     UIWindow *window;   
  7.     MyMainView *mainView;   
  8. }   
  9. @property (nonatomic, retain) IBOutlet UIWindow *window;     
  10. @property (nonatomic, retain) IBOutlet MyMainView *mainView;     
  11. - (void)applicationDidFinishLaunching:(UIApplication *)application;   
  12. - (void)dealloc;   
  13. - (void) redirectConsoleLogToDocumentFolder;   
  14. @end  

m文件MyScylla.m

  1. #import <Foundation/Foundation.h>   
  2. #import <UIKit/UIKit.h>   
  3. #import <UIKit/UIAlert.h>   
  4. #import "MyMainView.h"   
  5. #import "MyScylla.h"   
  6. int main(int argc, char* argv[])   
  7. {   
  8.        
  9.     NSAutoreleasePool *autoreleasePool = [   
  10.         [ NSAutoreleasePool alloc ] init   
  11.     ];   
  12.     int returnCode = UIApplicationMain(argc, argv, @"MyScylla", @"MyScylla");   
  13.     [ autoreleasePool release ];   
  14.     return returnCode;   
  15. }   
  16.   
  17. @implementation MyScylla   
  18. @synthesize window;   
  19. @synthesize mainView;   
  20. - (void)applicationDidFinishLaunching:(UIApplication *)application {   
  21.     NSLog(@"applicationDidFinishLaunching");   
  22.     [self redirectConsoleLogToDocumentFolder];   
  23.        
  24.     // 可以用bounds方法会得到整个屏幕区域,包括状态栏   
  25.     CGRect screenBounds = [ [ UIScreen mainScreen ] bounds ];   
  26.        
  27.     // 然后用initWithFrame创建UIWindow对象   
  28.     window = [ [ UIWindow alloc ] initWithFrame: screenBounds ];   
  29.     // 用applicationFrame方法返回可显示区域,不包括状态栏   
  30.     CGRect rect = [ [ UIScreen mainScreen ] applicationFrame ];   
  31.     rect.origin.x = rect.origin.y = 0.0f;   
  32.     mainView = [[MyMainView alloc]init];   
  33.     [window addSubview: mainView];   
  34.     [window makeKeyAndVisible];   
  35. }   
  36. - (void)dealloc {   
  37.     [window release];   
  38.     [mainView release];   
  39.     [super dealloc];   
  40. }   
  41. - (void) redirectConsoleLogToDocumentFolder {   
  42.     
  43.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUSErDomainMask, YES);   
  44.     NSString *documentsDirectory = [paths objectAtIndex:0];   
  45.     NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"myscylla_log.txt"];   
  46.     freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);   
  47. }   
  48. @end  
  • 1
  • 2
  • 3
  • 下一页

相关内容