Когда-то давно в толксах я писал о том, что собрал iPhone Toolchain в линуксе, и даже что-то показывал, но потом свободного времени стало меньше и я перестал заниматься этим делом.
Теперь снова решил поковыряться с Objecitve-C и iPhoneOS и для начала перенести пример (http://www.iphonesdkarticles.com/2008/07/first-iphone-application.html) с XCode на iPhone Toolchain в линукс.
Основная сложность этого дела - это создание интерфейса приложения без Interface Builder, потому что IB в линуксе естественно нет, поэтому я открыл XCode на макбуке и, пользуясь такими благами цивилизации как автодополнение и iPhone Simulator, начал писать интерфейс вручную. Немного помучившись с видами и контроллерами у меня это получилось.
Далее я перенес написанный код в линукс и попытался его собрать, все собралось успешно, без единой ошибки, очень удивило то что iPhone Toolchain поддерживает все плюшки Objective-C 2.0, такие как @property, я ожидал, что с ними будут проблемы (кстати, а гнустеповский компилятор поддерживает Objective-C 2.0?). Но при запуске я видел только пустой экран и фоновую картинку. После некоторых экспериментов я понял в чем дело, XCode по-другому определяет точку входа в Cocoa-приложение. В XCode-проекте функция main выглядит так:
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
Видно, что функции UIApplicationMain передаются пустые аргументы, а в iPhone Toolchain проекте эта же функция должна получить название класса основной программы:
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, @"HelloUniverseProgAppDelegate", @"HelloUniverseProgAppDelegate");
[pool release];
return retVal;
}
в моем случае это HelloUniverseProgAppDelegate. И еще одно отличие: класс HelloUniverseProgAppDelegate в XCode наследуется от NSObject с интерфейсом UIApplicationDelegate, а в iPhone Toolchain от UIApplication.
На картинке рядом виден результат работы программы. Программа простая, но основной целью этого действа была проверка насколько сложно портировать код для XCode в iPhone Toolchain, оказалось, что совсем не сложно.
А вообще на скриншоте Gnome в OpenSuSE 11.2 с дефолтной темой (даже обоина дефолтная) от которой тошнит мужика2, global-menu вверху, gnome-do внизу, на заднем плане gajim с конфой любителей Objective-C (гы-гы) loosers@conference.jabber.ru и opera.
Зачем я это все написал? надоели пустые скриншоты с дефолтными кедами4 и скриншоты повествующие о то как автор настроил себе тайловый WM.
P.S. Это не закос на мак, я просто привык к подобному интерфейсу.
>>> Просмотр
(1280x1024,
383 Kb)