2 мая 2008 в 19:15

Программирование в 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: немного подправил форматирование, код читается получше, но до идеала далеко
Игорь @hellraiser09
карма
23,2
рейтинг 0,0
Похожие публикации
Самое читаемое Разработка

Комментарии (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
      да вроде как работает...за исключением того что сам пример не подходит к последнему СДК :)
  • 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?

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

Интересные публикации