суббота, 13 сентября 2008 г.

Как начать программировать для iPhone под Windows

iPhone Development on Windows Platform quick start how-to

UPDATE Nov 2008: Статья касается программирования под Open SDK, Firmware 1.x

Небольшая вводная статья, возникшая как результат собственных изысканий на заданную тему и мыслей, возникших, пока я учился писать под iPhone.

Кому?

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


· Опыт программирования на C, C++ или Objective C
· Базовые знания средств разработки и администрирования мира Unix – GCC/C++, Make, SSH, shell, tar, gnu zip и так далее...
Что вам еще понадобится
· iPhone и какой-то опыт его использования
· Cygwin с кросс-компилятором G++ и LLVM (ToolChain)
· Файловая система от iphone с lib файлами для линковки
· Include files от вашей версии фреймворка
· базовые знания Objective C, C++ или plain C
· Аккаунт на Apple Connect, чтобы читать документацию Apple
· Google Code Search, чтобы искать примеры, как что сделать.
· Документация по платформе - Cocoa, WebKit, LayerKit и т.д – ищется по крохам в интернете и же на сайте Apple.

Как пишутся «родные» программы для iPhone

Есть два основных способа написать для iPhone (я имею в виду, "родные" программы на Objective C – и не рассматриваю варианты типа написания веб приложений или приложения на iUI или ином новомодном фреймворке)
- Либо вы получаете лицензию Apple, покупаете MacBook, качаете официальный iPhone SDK и ставите XCode (IDE для разработки) и становитесь настоящим эпловским разработчиком.
- Либо вы используете open source и всякие неофициальные инструменты, устанавливаете ToolChain (http://www.mattcutts.com/blog/hack-your-iphone-toolchains-and-cross-compilers/ ) и пишете все с чистого листа в каком-нибудь текстовом редакторе, поддерживающем синтаксис Objective C (для работающих на Windows могу посоветовать Notepad ++)
Windows разработчикам также понадобится специально настроенный Cygwin и всякие полезные инструменты типа WinSCP.
Сам же iPhone должен быть подвергнут процедуре Jailbreak и для работы на него нужно установить BSD tools и SSH.

Что надо сделать

Итак, перво-наперво надо попробовать хоть что-то собрать под iPhone. В качестве вводной документации по платформе можно воспользоваться книжкой "iPhone Open Application Development" (есть на Amazon, встречается в электронном виде). Из нее можно почерпнуть базовые знания, которых будет достаточно, чтобы собрать ваш первый пример. Правда, надо понимать что книга написана для Firmware v1.1 и несколько устарела.

Жизненно важно накачать как можно больше примеров приложений – можно искать на Google Code Repository, Google Code Search а начать, скачав примеры от книги (http://examples.oreilly.com/9780596518554)

Способу установки ToolChain, описанного в книге, я например предпочитаю вот такой способ:
· http://wiki.iphonegameover.com/Windows_Cygwin_Binary_Toolchain_Installation

Альтернативный вариант описан на форуме сайта iPhones.ru: http://www.iphones.ru/forum/index.php?showtopic=4659

Затем, если вы программист windows, нужно изучить Objective C :-). В принципе, базовые знания даются в книге Open App Development, но их может не хватить. Как минимум, нужно понять концепции - можно начать с Википедии: http://en.wikipedia.org/wiki/Objective_c . Еще одна интересная вводная статья про Objective C: http://cocoadevcentral.com/d/learn_objectivec/

Не помешает понять принципы построения Сocoa framework - это можно либо гуглить, либо искать на сайте http://developer.apple.com/ (там же есть документация по iPhone SDK (http://developer.apple.com/iphone/ ), которая поможет, поскольку при методе разработки, рекоммендованном Apple, используются все те же фреймворки и библиотеки, что и при кустарном методе

Обазательно прочитайте про Memory Management в Cocoa - там используются ref counters, как в COM-е, но с немного нетипичными нотациями. Читать, например, начиная отсюда - http://www.stepwise.com/Articles/Technical/2001-03-11.01.html , далее гуглить.

Как искать утечки памяти?





Можно почитать вот здесь:

Когда приложение падает с BUS ERROR?

SIGBUS, который роняет приложение, возникает от неправедной работы с памятью, например, при использовании (при попытке повторного освобождения) уже освобожденного объекта. 99% что где-то вызывается лишний release или неправильно применено событие autorelease.

Как отлаживаться?

Насколько я знаю, нормально отлаживаться можно только в эмуляторе iPhone при использовании iPhone SDK. При «неофициальном» способе я лично использую логгинг (см процедуру NSLog()) и запускаю приложение внутри iPhone из shell.
Возможно, есть способ прикрутить GNU debugger (gdb), но пока я его не познал – буду рад наводящему совету :-)

Интернационализация и локализация

На блоге weho.ru ребята достаточно подробно рассказывают.
http://blog.weho.ru/2008/04/lokalizacija-prilozhenij-iphon.html

Еще полезные ссылки

· http://ericasadun.com/ – сайт одного из лучших разработчиков и хакеров iPhone
· http://cocoadev.com/ – Wiki с документацией по cocoa, UIKit etc
· http://www.iphonedevcentral.org/home.php - множество скринкастов

Удачи в вашей практике!

PS поздравляю, что дочитали до конца - и вот вам небольшой подарок за терпение - история библиотеки Cocoa и различных KIT-ов на сайте Apple. Оттуда становится понятно происхождение префикса "NS" в назвниях ключевых классов - NSObject, NSString и др.

7 комментариев:

Anton Pilipenko комментирует...

А вы сами не пытались писать из-под винды?
И еще не совсем понятно, если писАть на винде про cocoa можно забыть?

Yury Skaletskiy комментирует...

Я как раз из-под винды и писал. Но естесственно, без SDK, без эмулятора - в notepad-е, с компилированием при помощи makefile-ов.

Анонимный комментирует...

Да какой тут наводящий совет по gdb? Несколько основных команд:
b (break) [line#] - устанавливает брыку на строчку с номером line#
disp (display) [expression] - вычисляет expression и показывает его результат.
c (cont, continue) - продолжить выполнение до след. брыки
s (step) - шаг на след. строчку
r (run) - запуск программы. argv вводить после run.
Это имхо атомарные операции дебага. С помощью них все что угодно можно сделать.

Unknown комментирует...

Я вот что - то немного не понял. чтобы протестировать написанное приложение нужен будет Iphone? Или можно какой - нить эмулятор поставить?

Yury Skaletskiy комментирует...

если для firmware 1.x - то нужен был iPhone.

Но сейчас это уже не очень актуально - все переехали на 2.x, а для него в составе Apple iPhone SDK идет симулятор (правда, только под MacOS X)

Unknown комментирует...

Уроки программирования под iPhone я читаю тут - http://lookapp.ru

Unknown комментирует...

Продаю недорого 64-разрядный Хакинтош с установленной Mountain Lion (устанавливал хакинтошник-профи), я использовал его для iOS-разработки. Подробнее на http://do.ngs.ru/1101351267