Придерживаясь традиций, мы собираемся создать очень простое «Привет, мир!» приложение, без использования конструктора графического интерфейса пользователя; мы просто пишем код, чтобы дать вам общее представление о том, как приложения iOS держатся вместе.
Предпосылки
Для начала нам понадобится копия Xcode и iOS Software Development Kit (SDK).
Apple сохраняет контроль над своими инструментами для разработчиков, поэтому вам, в конечном итоге, придется подписаться на программу Apple Developer Program, если вы хотите опубликовать свое приложение. Xcode можно загрузить бесплатно после того, как вы зарегистрируетесь в программе iOS Developer, и членство в нем — единственный способ протестировать ваше приложение на реальном оборудовании Apple.
При регистрации в Программе разработчика iOS вы можете использовать существующую учетную запись iTunes, Apple Online Store или MobileMe. Как только вы создали свою учетную запись, вы можете скачать Xcode и iOS Developer Kit из iOS Dev Center.
Вы также можете приобрести Xcode 4 в магазине приложений Mac за 4,99 австралийских долларов. Это даст вам возможность запускать ваши программы iOS в Simulator на вашем Mac (программная эмуляция iPad или iPhone), но вы не сможете запускать свои программы на реальном оборудовании Apple, пока не зарегистрируетесь в iOS Программа для разработчиков.
Пойдем!
Обычно при создании приложения для iOS рекомендуется использовать инструменты дизайна пользовательского интерфейса Apple (ранее известный как «Interface Builder»). Это определенно правильный путь, если вы не создаете очень сложные, динамические интерфейсы (игры, инструмент визуализации данных и т. Д.). Как только ваше приложение начинает становиться даже немного сложным, переполнение вашего пользовательского интерфейса в коде становится настоящей болью — настраивайте, компилируйте, тестируйте, повторяйте до тошноты!
Приятно знать, что происходит под капотом, поэтому для начала мы создадим действительно простое приложение исключительно в коде. Следующая статья этой серии будет посвящена использованию Interface Builder.
Запустите Xcode, и вы попадете на экран приветствия; левая сторона будет выглядеть как на рисунке 1 «Добро пожаловать в Xcode».
Нажмите New Project, и появится диалоговое окно Xcode New Project, как показано на рисунке 2 . Вы можете открыть это диалоговое окно в любое время, выбрав «Файл»> «Новый проект».
Чтобы узнать больше о различных типах приложений iOS, см. Быстрый запуск разработки iOS в Библиотеке разработчиков iOS .
Начнем с оконного приложения. Это основные варианты. Назовите свой проект так, как считаете нужным, но учтите, что мы будем использовать «HelloWorld» в качестве токена в наших примерах для представления любого имени, которое вы выберете, если оно отличается. Мы настраиваем остальные наши настройки, как показано на рисунке 3 .
Поскольку идентификатор компании — это просто строка, используемая для определения того, кто подал заявку, это может быть что угодно. Часто в качестве идентификатора компании используют соглашение об обратном доменном имени, например com.buildmobile. Эта строка объединяется с именем продукта для генерации идентификатора пакета, который в результате должен быть уникальной, удобочитаемой строкой, идентифицирующей ваше приложение.
Сейчас все будет просто, поэтому поменяйте семейство устройств на «iPhone». Можно писать приложения, которые работают на устройствах iPhone и iPad (без необходимости создавать отдельные версии вашего приложения). Мы не будем этого делать (пока).
В этом упражнении убедитесь, что «Использовать базовые данные» и «Включить юнит-тесты» не отмечено. Мы вернемся к этим опциям в следующем уроке.
Нажмите «Далее», и вас спросят, где вы хотите сохранить приложение. Внизу этого диалогового окна находится опция с пометкой «Управление исходным кодом — Создать локальный репозиторий git для этого проекта». Использование управления исходным кодом в Xcode 4 выходит за рамки этой статьи, но это хорошо, и мы вернемся к этому позже. Нажмите «Создать», и вы готовы.
Добро пожаловать в ваше приложение
Все приложения для iPhone имеют довольно общую структуру. Каждое приложение будет (обычно) иметь файл main.m
(в разделе «Поддержка файлов в браузере файлов»), который создает экземпляр AppController (подробнее об этом чуть ниже).
Приложения для iOS написаны на языке Objective-C. Иногда это называется Какао, но строго говоря, Какао относится к библиотекам и API, предоставляемым Apple. Мы объявляем объекты и структуры данных в файлах ‘header’ (* .h), а затем пишем код, который реализует их, в отдельных файлах реализации (* .m). Согласно многим источникам, «m» означает «сообщение», что является основной особенностью языка Objective-C.
Каталог Supporting Files (ранее «Ресурсы» в Xcode3) — это место, где должны храниться все ваши не кодовые файлы. Как только вы начнете разрабатывать более сложные приложения, вы захотите разместить здесь изображения, текстовые файлы и прочее. На рисунке 4 показана структура файлов и каталогов.
AppController — это первая точка входа сообщений ОС в ваше приложение. Стоит взглянуть на HelloWorldAppDelegate.m
чтобы получить представление о событиях, на которые ваше приложение должно будет реагировать. Некоторые из этих методов являются более или менее необязательными, если вы создаете очень простые приложения, но если вы планируете хранить данные, основанные на вводе данных пользователем, который имеет какую-либо значительную сложность, вам нужно реализовать такие методы, как applicationWillResignActive
и applicationDidBecomeActive
. Эти методы позволяют вам реагировать на изменения в жизненном цикле вашего приложения, например, когда оно должно быть завершено.
AppDelegate сам по себе мало что делает. Нам нужно добавить вид. И поскольку большинство приложений iOS следуют шаблону Model-View-Controller, нам также понадобится Controller для этого View. Они называются ViewControllers в iOS; они позволяют переключаться между программно созданными представлениями, которые мы здесь используем, или представлениями, созданными с помощью графического интерфейса XCode, которые хранятся в файлах XIB. Обратите внимание, что использование ViewControllers настоятельно рекомендуется.
Создайте новый файл, используя File> New File (или Command + N). Один из вариантов, который Xcode дает нам, это подкласс UIViewController
. Ухоженная! Выберите это. На первом появившемся экране будет задан вопрос, от какого класса вы хотите подкласс. Возможно, вы захотите иногда создавать подкласс одного из ваших собственных пользовательских классов ViewController, но прямо сейчас выберите UIViewController
как UIViewController
на рисунке 5 .
По умолчанию «таргетинг на iPad» и «С XIB для пользовательского интерфейса» должны быть отключены. Если вы найдете разные значения по умолчанию, снимите оба флажка на этот раз. Проверьте свой выбор по рисунку 6 и нажмите «Далее», когда вы счастливы.
Вам будет предложено «Сохранить как». Дайте вашему классу имя в поле «Сохранить как». Мы будем использовать HelloWorldViewController
как показано на рисунке 7, поэтому вам нужно будет заменить его своим собственным именем, если оно будет другим, в оставшейся части этого урока. Обратите внимание, что Xcode автоматически создаст файл заголовка для нас (* .h) тоже.
У вас должно быть два новых файла. Они включают в себя ваш ViewController, который отвечает за получение входных событий и реагирует на них, манипулируя View. Как правило, один ViewController должен отвечать за один View. Это не жесткое правило, хотя; это зависит от вас, если вы хотите организовать свое приложение по-другому.
Если вы посмотрите на файл реализации вашего ViewController (это файл HelloWorldViewController.m
), вы увидите, что Apple предоставила нам набор готовых функций, закомментированных, как показано выше на рисунке 8 . Мы можем реализовать те, которые нам нужны, но какими они будут? У нас есть ViewController, но нам нужен View. Давайте продолжим и создадим View в нашем ViewController. loadView
и сделайте так, чтобы он выглядел следующим образом:
- (void)loadView { UIScreen *screen = [UIScreen mainScreen]; self.view = [[UIView alloc] initWithFrame:[screen applicationFrame]]; self.view.backgroundColor = [UIColor greenColor]; }
Если вы нажмете «Run» сейчас … вы будете разочарованы. Мы создали наш View, но нам все еще нужно сообщить нашему AppDelegate о существовании ViewController, который мы создали, и попросить AppDelegate создать экземпляр View. Переключитесь на HelloWorldAppDelegate.h
и добавьте ViewController как свойство AppDelegate, например, так:
#import <UIKit/UIKit.h> #import "HelloWorldViewController.h" @interface HelloWorldAppDelegate : NSObject { HelloWorldViewController *viewController; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) HelloWorldViewController *viewController; @end
Вы заметите, что мы добавили ViewController как свойство AppDelegate в определении @interface. Позже мы будем использовать @property
, который является небольшим синтаксическим сахаром для автоматического объявления методов получения и установки для этого свойства, делая его «открытым» (по умолчанию свойства в объектах в Objective-C являются частными).
Переключитесь на ваш файл реализации AppDelegate сейчас. Это файл HelloWorldAppDelegate.m
. Знаете ли вы, что есть хорошая комбинация клавиш для переключения между файлом реализации (* .m) и файлом заголовка (* .h) и наоборот: его Command + Ctrl + Up.
Во-первых, нам нужно создать методы getter и setter для свойства viewController
нашего viewController
. Мы могли бы объявить эти методы сами, но есть более простой (синтаксически волшебный) способ сделать это, используя @synthesize
следующим образом:
@implementation HelloWorldAppDelegate @synthesize window=_window; @synthesize viewController;
Мы можем использовать @synthesize
потому что мы объявили viewController
как @property
в заголовочном файле. @synthesize
должны, по соглашению, всегда следовать вашему объявлению @implementation
и предшествовать любым определениям методов.
Мы объявили, что хотим использовать наш новый класс в AppDelegate, и создали методы доступа, чтобы получить и установить его в нашем AppController. Теперь нам нужно сказать AppController для создания экземпляра класса. Мы изменим метод applicationDidFinishLaunchingWithOptions
для этого:
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self.window makeKeyAndVisible]; self.viewController = [HelloWorldViewController alloc]; [self.window addSubview:self.viewController.view]; return YES; }
Мы добавили одну строку, чтобы выделить ( alloc
) ViewController, и одну, чтобы добавить ViewController View в Window. Это очень важно, потому что окно должно знать о представлениях, которые оно содержит, и представления должны знать о любых других представлениях или элементах пользовательского интерфейса, которые они содержат. Мы создаем вложенную иерархию представлений.
Если вы нажмете «Выполнить» сейчас (Command + R), вы увидите потрясающе ярко-зеленый экран внутри симулятора. Отлично сработано! Вы создали представление. Здесь довольно скучно, так что давайте немного оживим его. Вы можете закрыть Симулятор сейчас, если хотите, с помощью Command + Q, как отдельное приложение.
Давайте добавим ярлык. Это простой визуальный элемент, содержащий текст. В вашем методе HelloWorldViewController.m loadView
добавьте код, чтобы он обновился до следующего:
- (void)loadView { UIScreen *screen = [UIScreen mainScreen]; self.view = [[UIView alloc] initWithFrame:[screen applicationFrame]]; self.view.backgroundColor = [UIColor greenColor]; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 200, 200, 80)]; label.text = @"Hello, World!"; label.textAlignment = UITextAlignmentCenter; label.shadowOffset = CGSizeMake(1,1); label.backgroundColor = [UIColor greenColor]; [self.view addSubview:label]; [label release]; }
Мы выделили память для элемента UILabel. Мы инициализировали его шириной 50 единиц и высотой 200 единиц, сместив ось X (вверх и вниз) и ось 80 (слева направо). Нажмите «Выполнить» сейчас, и вы увидите, что ярлык появится в вашем представлении, как показано на рисунке 9, «Наше ярко-зеленое приложение« Hello, World! »».
Отлично сработано! Стоит отметить, что по умолчанию приложение также загружает некоторые элементы (в частности, Window) из файлов XIB (* .xib или * .nib), включенных в проект. Мы накладываем наш пользовательский вид поверх них. В следующей статье мы научимся работать с файлами Interface Builder и XIB для создания приложения.
Серия «Орни»
С условием наличия вкусного освежающего напитка в руках, используйте метку для всех статей Орни , или прыгайте прямо в статью специально из этого индекса.
- Основы разработки под iOS с Xcode 4
- Приложения для iOS с Tasty UI
- Интерактивный Орни
- Управление информацией с CoreData