Разработка под Apple. Шаг первый

48

С сегодняшнего дня мы открываем новую рубрику, которую от нас долго ждали и которая наверняка будет очень полезной для многих наших читателей. В ней мы будем апеллировать к огромной доле нашей аудитории, которая заслуживает настолько большого внимания, что мы не можем ее игнорировать. Речь идет о разработчиках программного обеспечения для устройств Apple. Отныне каждую неделю мы будем публиковать полезные материалы, призванные помочь начинающим разработчикам под такие платформы как iOS и Mac OS X разобраться в этом сложном, но интересном процессе.

Мы обещаем делать так, чтобы наши материалы в помощь разработчикам читались максимально легко и интересно. И в первой вводной статье мы рассмотрим инструменты, необходимые для создания приложений, а также создадим наше первое приложение для iPhone.

В 2010 году на конференции разработчиков WWDC компания Apple представила новую версию Xcode 4. Во всех материалах данного курса будет использоваться именно эта версия среды разработки, однако в случае невозможности использования Xcode 4, все примеры можно будет выполнить и в предыдущей версии — Xcode 3.

Для установки и первого запуска нам потребуются:

1)  Относительно первоначальных знаний не ожидается, что вы умеете программировать. В курсе будет рассмотрен язык программирования Objective-C, который является надстройкой над C. Чтобы курс не превратился в изучение С, будет дана обзорная статья и ссылки на материалы для самостоятельного изучения.

2)  Любой Mac с процессором Intel и установленной Mac OS X 10.6 Snow Leopard.

Если вы устанавливаете Xcode 4, существуют два варианта:

•  скачать его с сайта developer.apple.com, при этом имея сертификат разработчика, который стоит $99 в год;

•  либо купить Xcode 4 в Mac App Store за $4.99.

Xcode 3 можно скачать бесплатно с сайта developer.apple.com.

Установка достаточно проста, нужно следовать инструкциям установщика, убедиться, что отмечен пункт iPhone SDK и не менять стандартное место установки.

После установки запустить приложение можно из папки Macintosh HD —> Developer —> Applications

Итак, всё готово, чтобы написать наше первое приложение и одновременно разобраться в новом интерфейсе программы.

Запустим Xcode 4, после запуска появится окно приветствия:

В левой части мы видим команды «Создать новый проект», «Создать проект из репозитория» и ссылки на справочную информацию. В правой части окна расположен список существующих проектов.

Нажмем “Create a new Xcode project” и выберем View-based Application

Выбираем название проекта. Принято, что приложения с графическим интерфейсом именуются с заглавной буквы, а если приложение предназначено для запуска из командной строки, — с прописной.

Далее выбираем куда сохранить проект. Рекомендуем создать отдельную папку для хранения всех проектов, например, создать папку Developer в домашней директории:

После того, как мы нажали Create, перед нами появляется главное окно программы:

В левой части расположен список файлов, входящих в проект, над ним небольшие иконки, открывающие другие вкладки: поиск, логи, отладка. С ними мы познакомимся позднее.

Xcode поддерживает одновременное использование вкладок, которые очень похожи на вкладки в браузерах, при этом каждую вкладку можно организовать как отдельное рабочее пространство, разделив экран на несколько частей:

Одним из ключевых отличий Xcode 4 от предшественника является интегрированный Interface Builder, который раньше был отдельной программой. Interface Builder, как понятно из названия, предоставляет графический интерфейс для построения интерфейсов приложений перетягиванием элементов из библиотеки и настройки свойст в Инспекторе (аналогичном инспектору в стандартных приложениях Mac OS X).

Итак, рассмотрим файлы в нашем проекте.

В папке FirstLaunch находятся файлы, с которыми мы чаще всего будем работать:

1)  Пары файлов с расширениями .h и .m — это интерфейсы и реализации наших классов соответственно.

2)  Файлы с расширением .xib (или .nib) хранят наш графический интерфейс.

3)  В файлах .plist хранятся настройки нашего приложения.

В нашем первом приложении мы используем два элемента — слайдер (UISlider) и текстовое поле (UILabel). Приложения для iOS создаются с использованием паттерна MVC (Model-View-Controller), с которым мы познакомимся в следующих статьях. Хорошей практикой является написание в первую очередь API (программного интерфейса приложения), и далее назначение элементов интерфейса для взаимодействия с ним.

Но в сегодняшнем примере мы пойдем по другому пути. Наше приложение будет выводить на экран значение текущей позиции слайдера и обновлять его при каждом перемещении слайдера.

Откроем файл FirstLaunchViewController.xib, в появившемся Interface Builder перетащим элементы UILabel и UISlider в окно нашего приложения.

Можно менять размер элементов, а также настраивать вид их отображения, используя свойства в правой части окна.

Приступим к реализации нашего приложения. Для этого откроем файл FirstLaunchViewController.m и нажмем кнопку Assistant, чтобы в правой части экрана появился связанный с ним файл FirstLaunchViewController.h

Как мы помним, в нашем приложении два объекта — UILabel, отображающий строки, и UISlider имеющий свойство value (значение), передающее десятичное значение float (с плавающей точкой) позиции слайдера.

В файле .h мы объявляем переменные, методы, объекты, а в файле .m описываем их реализацию.

Начем с FirstLaunchViewController.h. В поле

@interface FirstLaunchViewController : UIViewController {

//объекты и переменные

}

между фигурными скобками {…} добавим наши объекты UILabel и UISlider:

@interface FirstLaunchViewController : UIViewController {

IBOutlet UILabel *labelValue;

IBOutlet UISlider *sliderValue;

}

после закрывающейся скобки «}» и перед @end располагаются методы. Подробнее о методах будет расскзано в следующих статьях. Сейчас можно представить, что это аналог функции в языке Си, адресованный объекту.

В нашем примере будет всего один метод — (IBAction)valueChanged;

Перейдем к реализации нашего класса. Существующий код в файле FirstLaunchViewController.m можно удалить, оставив

#import "FirstLaunchViewController.h"

@implementation FirstLaunchViewController

@end

Между @implementation и @end располагается реализация нашего класса. Директива #import сообщает, что мы можем использовать описания из головного (header) файла нашего класса.

В нашей реализации всего один метод:

@implementation FirstLaunchViewController

- (IBAction)valueChanged {

}

@end

Нам нужно получить значение UISlider, для чего используем дополнительную переменную:

float sliderValue;

Далее присваиваем этой переменной значение текущей позиции слайдера:

sliderValue = [slider value];

Скобки [получатель сообщение] типичный синтаксис Objective-C, когда объекту (получателю) отправляется метод (сообщение) и в итоге возвращается соответствующее значение.

Теперь у нас есть переменная, хранящая значение UISlider в формате float, однако UILabel может отображать только строковые данные (формат NSString). Необходимо отобразить float sliderValue как строку. Для этого используем метод для работы со строками  -stringWithFormat, возвращающий объект строку NSString.

NSString *labelValue = [NSString stringWithFormat:@"%f", sliderValue];

Выше мы создаем объект labelValue, используя метод с аргументом stringWithFormat:аргумент. Аргументом выступает sliderValue.

Далее выводим строку в UILabel:

[label setText:labelValue];

Если мы запустим приложение, и изменим положение слайдера ничего не произойдет. Дело в том, что мы не связали элементы интерфейса в Interface Builder с нашими объектами в реализации.

Interface Builder предоставляет графический интерфейс для решения нашей задачи. Откроем файл FirstLaunchViewController.xib и, нажав Ctrl перетянем File’s Owner на UILabel в окне нашего приложения и выберем label, повторим тоже самое с UISlider. Следует отметить, когда мы связываем Outlets направление перетягивания от File’s Owner к элементу интерфейса, а когда связываем метод (Action) — наоборот. Поэтому перетянем теперь также с нажатой Ctrl от UISlider к File’s Owner и выберем valueChanged:

Теперь можно запускать приложение и перемещать слайдер, наблюдая изменяющееся значение в UILabel. Значение, которое мы видим в UILabel по умолчанию изменяется от 0 до 1 и установлено по умолчанию в положении 0.5.

Однако эти значения можно настроить в Interface Builder, выделив UISlider в окне нашего приложения:

Итак, сегодня мы установили инструменты разработчика, включающие Xcode 4 и iPhone SDK, познакомились с интерфейсом Xcode 4, возможностями Interface Builder и создали наше первое приложение.

В следующих статьях мы подробнее познакомимся с языком программирования Objective-C и с основными объектами, с которыми мы будем работать при создании наших приложений.

48 комментариев

  1. 0
    Винницкий Алексей

    Есть смысл начинать с нуля?

  2. 0
    Ренат Гришин

    Очень большое дело делает автор. Поддерживаю всеми руками и ногами. Если не забросит — честь и хвала. Огромное спасибо за материал!

  3. 0

    Огромное СПАСИБО=))
    Очень нужная вещица..
    хочу начать программировать под iOS, пока правда нет макинтоша… как только куплю, сразу начну=)) опыт программирования под винду есть…
    автор так держать!! Удачи!!

    • 0
      Виталий Ишкулов

      ZAV, Спасибо! На самом деле, возможно не стоит откладывать. Ведь можно поставить Mac OS X как виртуальную машину с помощью VMWare (сам не пробовал, но в инете много статей).

      • 0
        Ренат Гришин

        Виталий, Нормально оно работать не будет, лучше поберечь свои нервы. Кстати у нас сегодня вечером запись подкаста (около 21-00), и место гостя вакантно. Не желаете присоединиться? Думаю многим было бы интересно вас послушать.

      • 0

        Виталий, как думаете, такой комп пойдет??
        Apple Mac Mini
        процессор: Intel Core 2 Duo 2.0 ГГц
        оперативная память: 2Гб (2 x 1Гб) DDR3 SDRAM (1066 МГц) (max 4 Гб);

        или стоит купить еще, например, 2 ОЗУ??

        • 0
          Виталий Ишкулов

          ZAV, Вообще в маках чем больше ОЗУ, тем лучше. В среднем Xcode 4 «кушает» от 500Мб (с открытой документацией) на небольших проектах.
          C 4Гб будет гораздо комфортнее работать.

          @Ренат Гришин, отвечу в личку на форуме.

          • 0

            Виталий, а не подскажете сколько в среднем может стоит 2 ОЗУ (2*1Гб)?? DDR3 SDRAM (1066 МГц)

            • 0
              Виталий Ишкулов

              ZAV, Посмотрите на market.yandex.ru. Правда в миник ведь всего две плашки вставляются, значит вам надо 2×2Гб.
              Я думаю, средняя цена такой плашки 2Гб на около 1000руб.

              • 0

                Виталий, спасибо=))
                думаю за полгода как раз соберу и куплю…
                надеюсь к тому времени у Вас будет много полезных уроков=))
                Творческих успехов в будущем =))

  4. 0
    Аноним

    Вот это то, чего не хватало! Огромное вам спасибо!

  5. 0
    Даниил

    Отличный материал, хотя и я программирую достаточно большое количество времени на Visual Studio щас на 2010 .Net С#. Я планирую изучать и писать программы под Mac OS на нормальной среде разработки, не используя Mono и так далее…Работая на Х-code попадаешь совершенно в другой мир (среду разработки) — единственный минус по моему мнению это связывание и перетаскивание объекта для связи с классом или назначение обработчика событи. Я беру с зажатой клавишей ctrl связываю, хотя почему бы не сделать назначение обработчика событий двойным нажатием на сам объект (может это привычка из VS) надеюсь среда X-code в будущем будет более гибкой.

  6. 0

    да очень хорошо написано, жаль что пока нету Мака приходится сидеть на Windows. эх когда же у меня будет мак так хочется программировать на iOS

  7. 0
    Андрей

    У Xcode довольно бедная поддержка работы с кодом (рефакторинги, умный поиск, code coverage, code completion, навигация). IDE для других языков программирования давно ушли вперед, хсode же остался «динозавром». Хотя недавно вышля альтернатива икскоду со всеми «сладостями» современного программирования — AppCode (http://www.infoq.com/news/2011/04/jetbrains-appCode). Ищет и исправляет ошибки «на лету» и сама пишет код:)

  8. 0
    Алексей

    комент по уроку, если вы откроете слева IB а справо контроллер.h и с зажатой кнопкой ctrl перетянете элемент интерфэйса прямо в код, то все обьекты он там создаст и проперти их и синтерзирует сразу — и ненадо ничо писать самому

    • 0
      Виталий Ишкулов

      Алексей, Да, правильно, и добавит release объектов в метод -dealloc. Но это будет работать только в Xcode 4, а здесь некоторые читатели могут пользоваться Xcode 3.
      Плюс в программировании, а особенно в изучении, не стоит себя слишком баловать GUI, иногда, чтобы лучше понять, нужно руками код написать.

  9. 0
    Nikolay Vorobiev

    Очень нужная и своевременная штука! Автору респект и уважуха!

  10. 0

    А вот я не понял, куда ставить вот это: float sliderValue; и то что дальше?

    • 0
      Виталий Ишкулов

      OtherF, Этот код в реализации метода -valueChanged в файле реализации класса FirstLaunchViewController.m

      Здесь вы можете наглядно увидеть, как выглядят заголовок (справа) и реализация (слева) нашего класса http://habreffect.ru/files/813/150f2995c/7.png

  11. 0

    Хотелось бы увидеть мануал по созданию программ-списков в стиле Контактов (хочу сделать приложение с номерами такси), находил подобный урок, но итоговый код полон ошибок + в итоге ничего не работает 🙁

    • 0
      Виталий Ишкулов

      nookie, Всё будет, но позже. TableView — очень важный элемент, на основе которого построено подавляющее большинство программ, или по крайней мере в программе так или иначе используется этот элемент.

      Пока могу посоветовать вам почитать документацию по UITableView и посмотреть примеры программ, созданных инженерами Apple — http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/AboutTableViewsiPhone/AboutTableViewsiPhone.html%23//apple_ref/doc/uid/TP40007451

  12. 0

    ошибка закралась в
    IBOutlet UILabel *labelValue;
    IBOutlet UISlider *sliderValue;
    а реализауия написана под
    IBOutlet UILabel *label;
    IBOutlet UISlider *slider;

    Внимательнее )))
    и было бы не плохо выкладывать
    исходный проект польностью

  13. 0

    Круто круто
    Ждемс продолжения
    Всегда интересно почитать такое

  14. 0

    Когда же все таки новый урок?

  15. 0
    Тимур

    не могу в Xcode 4 найти — Нажмем “Create a new Xcode project” и выберем View-based Application — и там потом — «Откроем файл FirstLaunchViewController.xib» — его там нет. Как быть

  16. 0

    качаем книги на русском и учимся, учимся)))

    http://idevam.blogspot.com/

  17. 0
    1lipatov1

    Очень много литературы раньше было на етом ресурсе http://texnikal.ru/

  18. 0

    Делал все по статье выше. Если бы не сообщение Gon, то так бы и не выявил ошибку. Но в итоге всеравно ничего не получилось, приложение сразe закрывается при запуске на устройстве.
    Xcode 4.3.2 & iPhone 4S 5.0.1

  19. 0

    Тажа хрень 🙂

  20. 0

    и у меня тоже нет view-based application и соответственно interface builder’a тоже нет, xcode 4 стоит, скачанный из аппстора

  21. 0

    Пожалуйста сделайте отдельный урок по программированию на базе C.

  22. 0

    пачему в среде разработки совместно с компилятором нет декомпилатора? пусть свои файлы шифруют но декомп должно быть.
    2013
    Пачему нет возможности компилировать огромный код и останавливать процесс и менять текст кода и продолжать исплнение файло. ??? Тоеисть прямсо на ходу в виртуалке исполнение и пауза -> замена -> …продолжить выполнять!!!
    Бросайте вы это дело бросьте все это прогромировоние забудь. Самого интересного нет а скуку эту пусть сами иностранцы жрут мне такого не нужно… Пусть хари свои утрут сначала прежде чем на рынок гадить…

Авторизуйтесь Чтобы оставить комментарий