Программирование в Mac OS X: пишем для iPhone

    в этом топике я покажу как написать простенькое приложение для iPhone с использованием официального SDK. Заполучить его просто, нужны:
    1. Intel-based Mac(хотя и на PowerPC тоже работает, но после некоторых телодвижений)
    2. iPhone SDK. Я буду писать на beta 2. Последнюю версию можно получить, зарегистрировавшись на developer.apple.com. Beta 2 можно найти в торрентах


    HelloHabr


    чтобы сильно не напрягать моск сделаем самое простое: приложение будет всего-лишь показывать логотип хабра. Открываем XCode(обязательно в 32-битном режиме) и создаем новое Cocoa Touch приложение:
    Image Hosted by ImageShack.us
    назовем его HelloHabr и сохраним на рабочий стол.

    Мастер создания проэктов уже сделал за нас. Посмотрим на содержимое main.m:
    #import <UIKit/UIKit.h>

    int main(int argc, char *argv[])
    {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    //поскольку в айфоне нельзя использовать сборку мусора, то для облегчения жизни используем autorelease pool
    int retVal = UIApplicationMain(argc, argv, nil, @«HelloHabrAppDelegate»);
    //чтобы запустить приложение, нужно вызвать эту функцию. @«HelloHabrAppDelegate» — класс, которому будет передано управление
    [pool release];
    return retVal;
    }

    теперь взглянем на HelloHabrAppDelegate.h:
    #import <UIKit/UIKit.h>

    class MyView;

    interface HelloHabrAppDelegate: NSObject {
    UIWindow *window; //главное окно приложения
    MyView *contentView; //экземпляр класса MyView(он тоже создался автоматически).
    }

    //чтобы можно было обращатся к window и contentView через точку, а не писать get и set. Особенность ObjC 2.0
    @property (nonatomic, retain) UIWindow *window;
    @property (nonatomic, retain) MyView *contentView;

    end

    и на HelloHabrAppDelegate.m:
    #import «HelloHabrAppDelegate.h»
    #import «MyView.h»

    @implementation HelloHabrAppDelegate
    //эти директивы означают, что при компияции вместо обращений через ., вписать getter'ы и setter'ы
    synthesize window;
    synthesize contentView;

    //функция, делегированная от UIApplication
    — (void)applicationDidFinishLaunching:(UIApplication *)application {
    // Создаем главное окно
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // создаем contentView
    self.contentView = [[[MyView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
    //добавляем наш contetntView к главному окну, чтобы оно отобразилось
    [window addSubview:contentView];
    // делаем видимым главное окно
    [window makeKeyAndVisible];
    }

    — (void)dealloc {[contentView release];
    [window release];
    [super dealloc];
    }

    end

    Маленькая мат.часть закончена, приступим к написанию приложения. Сохраняем логотип хабра в папку с приложением. Затем перетяем его из папки в папку Resources нашего проэкта в окне XCode:


    Теперь добавим в класс MyView новое поле «habrView» типа «UIImageView *», т.е. MyView.h будет выглядеть так:
    #import <UIKit/UIKit.h>

    interface MyView: UIView { UIImageView *habrView;
    }

    end

    а теперь определим в классе MyView процедуры init и dealloc:
    #import «MyView.h»

    @implementation MyView
    — (id) initWithFrame:(CGRect)frame {if(self = [super initWithFrame:frame]) {
    //цвет фона — черный
    [self setBackgroundColor:[UIColor blackColor]];
    //создаем новое объект с изображением логотипа хабра
    UIImage *image = [UIImage imageNamed:@«habr.gif»];
    //создаем компонент, который и будет показывать логотип
    self->habrView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, [image size].width, [image size].height)];
    [habrView setImage:image];
    [habrView setCenter:[self center]];

    [image release];
    //добавляем компонент отображения логотипа хабра на форму
    [self addSubview:self->habrView];
    }
    return self;
    }

    — (void) dealloc {[self->habrView dealloc];
    [super dealloc];
    }
    end

    Все. Компилируем, запускаем и получаем то, что и хотели:

    А теперь метод создания приложений для ленивых. Dashcode умеет создавать веб-приложения для iPhone и iPod Touch. Открываем Dashcode и в качестве заготовки выбираем RSS. Переходим на вкладку Page Attributes, задаем Page Title:«Harbrahabr RSS», Feed URL: «feed://habrahabr.ru/rss/main/». Затем переходим на вкладку «Harbrahabr RSS»(откроется дизайнер) и меняем надпись «My RSS Feed» на «Habrahabr RSS Feed»:
    Нажимаем Run и получаем RSS-ридер Хабра:


    В принципе все. Отзывы, пожелания, предложения жду в комментариях

    Upd: немного подправил форматирование, код читается получше, но до идеала далеко
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 50
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        блин, забыл. Спасибо большое что напомнили
      • 0
        offtop:кто-нибудь знает, как сделать так, чтобы оступы в блоках кода сохранялись?
        • 0
          Если я не ошибаюсь, то никак :-) Спасибо за статью, оч. интересно! :-)
          • 0
            Наверно,
              можно использовать
                неразрыный пробел.
            Но неуверен.

            Спасибо за пост!
            • 0
              простые пробелы движек хабра убирает, а что такое "неразрыный пробел"?
              • 0
                Его код в мнемонике html&nbsp;.
                И еще он между кавычками — « ».

                Как показал предыдущий комент, движок его не режет.
                • 0
                  ладно, будем надеятся что в Суперхабре будет какой-нибудь тег типа , который будет понимать что это код на ObjectiveC и выводить его по человечески
                  • 0
                    блин. движек схавал тег "#code lang=objc# #/code#"
          • 0
            прошу прощения за криво вставленные местами картинки. Хабр грузить их не захотел, пришлось копировать с imageshack и получилась такое
            • 0
              забыл сказать, что XCode надо запускать в 32-битном режиме
              • +1
                Большое спасибо!!!
                • 0
                  пожалуйста. Про что еще стоит написать?
                  • 0
                    Читал, что в леопарде питон поставляется с биндингами к ObjC, т.е. можно писать приложения на питоне с использованием Cocoa? Было бы интересно почитать статью на эту тему.
                    • 0
                      спасибо, учту.
                      А вообще смысла с этих биндингов я не вижу, т.к. вся красота ObjC теряется. Например, в ObjC:
                      [object sendMessageWithArg1:10 Arg2:20]
                      в питоне выглядит так
                      object.sendMessageWithArg1_Arg2(10,20).

                      Правда биндингам к Руби почему-то уделяется внимания намного больше. Для него даже какой-то препроцессор(или типа того) написали, чтобы в Руби функции использовать так же как и в ObjC
                      • 0
                        Согласен, код на питоне выглядит некрасиво. А питон с препроцессором а-ля ObjC был бы занятной штукой:-)
                        • 0
                          object.sendMessageWithArg1_Arg2_(10,20)
                          Все двоеточия заменятся на подчеркивания.
                        • 0
                          Для iPhone'ов, я так понимаю, нельзя писать на python'e. Только objc.
                          Для osx можно и на питоне, и на руби, и на яве. Но как было сказано выше — вызывать методы не очень удобно.
                          Часто для того чтобы найти правильное название метода приходится пользоваться конструкциями:


                          NSLog(str(dir(myObject)))
                          • 0
                            насколько я понимаю, то python/ruby/другой интерпритируемый язык в iPhone SDK отменяется т.к. Apple запретила выполнение интерпритируемого кода. Что очень грустно. Хотя биндинги фиг с ними, если что-то серьезное писать, так и ObjC выучить не проблема, а игроделы будут решать эту проблему я не знаю.
                            • 0
                              не будут использовать скриптовые языки :)
                              • 0
                                тогда на айфоне будут только примитивные игры и конкуренцию PSP он не составит никакой
                    • 0
                      Скажите, а можно ли такие штуки писать под iPod touch? Да, и ещё пардон за оффтопик, но вот интересует вопрос: как обстоят дела с русской клавой для того же touch? Заранее спасибо. :)
                      • 0
                        конечно можно, только нужно не забывать, что в iPod Touch нету GSM модуля.

                        А насчет русской клавиатуры толком ничего вам не скажу. Ни iPhone, ни iPod Touch у меня нету, поэтому больше чем гугл я не знаю. На данный момент русскую клавиатуру можно бесплатно поставить на айфон. Хотя уже в beta 4 найдены следы того, что во второй версии прошивки айфона будет расская локализация => будет русская клавиатура в айфоне => будет русская клавиатура в iPod Touch
                        • 0
                          Спасибо! Может, и сам чего-нить покруче RSS-ридера когда-нить напишу... А насчёт клавиатуры, купил сей чудный девайс, и ситуация такова: русский интерфейс имеется, а клавиатуры и в помине нет. Уже кое-что нагуглил, буду ковыряться. :)
                          • 0
                            да написать приложение - пол беды. Другой вопрос - как его туда закинуть? Приложение для себя можно закинуть взломав его и вручную записав файлы. А если официальный путь только один - AppStore, а туда приложения характера "MyFirstCocoaTouchApp" не пустят, да и для ломаный телефонов/айподов он закрыт
                            • 0
                              Пропишите в Installer репозиторий (в нем внизу окна самая правая иконка Sources далее Edit далее Add ) http://rus-iphone.com/rus и так же добавьте http://repository.ripdev.com
                              После этого там же в Install в категориях (Categories) у вас появятся пункты Rip Dev и RUS-iPhones (возможно , что они у вас уже есть)
                              Там вы найдете и бесплатную руссификацию и бесплатную русскую клавиатуру вполне качественну. При установке приложений обращайте внимание на прошивку вашего телефона.
                              • 0
                                Пропишите репозиторий в Installer внизу окна самая правая иконка Sources далее Edit далее Add
                                http://rus-iphone.com/rus и так же добавьте
                                http://repository.ripdev.com
                                Там вы найдете и бесплатную русификацию
                                и бесплатную русскую клавиатуру вполне качественну.
                                При установке приложений обращайте внимание на версию прошивки вашего телефона.
                                Скорее всего , что клавиатура русская уже установлена.
                                Зайдите в настройки телефона Основные/клавиатура/Язык клавиатуры и просто добавьте 2й язык клавиатуры Русский.

                                Для этого в
                                • 0
                                  Что то или у меня Инет сбоит.. Или еще что то. Сдвоило. Sorry
                            • 0
                              Iphone и touch почти идентичны
                            • 0
                              замувти в родной блог :)
                              • 0
                                да я думаю вообще создать отдельный блог программирования под Mac OS X, а то 3 прошлых статьи можно было четко в Apple поместить, а эту и толком незнаю куда
                                • –1
                                  Отдельный блог! Именно!!! Чур я первый в очередь на подписку :)
                            • 0
                              А макбук необходим? Может сгодится Хакинтош?
                              • 0
                                хз, может и сгодится.
                                • 0
                                  да вроде как работает...за исключением того что сам пример не подходит к последнему СДК :)
                                • 0
                                  спасибо за урок, но ничё не получилось :)
                                  • 0
                                    почему? какие ошибки выдает XCode?
                                    • 0
                                      дак дело в том что всё компилится...запускается...но ничего не показывает :)
                                      но откровенно говоря урок плохо расписан...ни пошагово что куда мы дописывали, что за чем...может для того, кто с этим сталкивался всё понятно, но мне не очень =(
                                      просто у меня опыта программирования под мак(Obj C) 0.0, а хотелось попробовать...но видать не судьба :)
                                      • 0
                                        раз опыта ноль, то почитайте мои предыдущие статьи, все станет немного понятнее.

                                        P.S.:содержание MyView.h и MyView.m в студию
                                        • 0
                                          project (1.4 Mb)
                                          • 0
                                            а какой версии у вас SDK?
                                            а ваш проэкт заставил работать, только пришлось удалить из проэкта MainMenu.xib, в Info.plist удалить строки про MainMenu, и в applicationDidFinishLaunching вызвать функцию [window makeKeyAndVisible] и в настройках проэкта выбрать Simulator-Aspen 1.2 в комбобоксе напротив Base SDK for All configurations
                                            • 0
                                              вчера с сайта слил... iphone_sdk_9m2165.dmg
                                              • 0
                                                ага, это значит beta 4. Не ожидал что они так быстро буду менять API.
                                                Статья писалась на втором, слова что любой подойдет я тогда уберу.
                                                Вобщем привыкайте к быстрому изменению API, почитайте мои предыдущие статьи чтобы было легче ориентироваться.
                                                • 0
                                                  вот теперь заработало =)
                                        • 0
                                          чтоно добавили логотип хабра к проэкту и при создании объекта image правильно указали его имя?
                                    • +1
                                      Интересненько. Спасибо..

                                      PS поначалу попытался утащить в сторону неизвестно откуда взявшееся окошко, оказалось – скрин %)
                                      • 0
                                        и меняем надпись «My RSS Feed» на «Habrahabr RSS Feed»

                                        А на последнем скриншоте поменять забыли.
                                        • 0
                                          UIKit не найде пишет, на форумах пишут, что мол cocoa.h достаточно, но все равно пишет appdelegate.h что не хватает такого файла… у вас есть какие то еще инструкции или курсы по кодингу для iphone?

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.