войти зарегистрироваться

Разработка под iPhone OS. Курс молодого бойца

iPhone DevВ последнее время многие начали интересоваться разработкой под iPhone. Причины для этого разные: для кого-то новый рынок, кому-то просто нравится девайс, кто-то услышал сказки о том, что в AppStore полные безделушки могут принести миллионы, банальный интерес, да и суть не в том. Многие до этого занимались программированием в лучшем случае только под Windows, поэтому возникает много вопросов, как писать софт: какой язык, какая среда, как тестировать, как распространять, как получать деньги. И, так как я сам занимаюсь разработкой игрового движка под эту платформу, меня часто просят рассказать что и как. Это я и постараюсь сделать в данной статье, думаю, кому-то пригодится.

Итак, о чем мы поговорим:
1) Что нужно для разработки (OS, язык программирования, среда разработки и т.п.)?
2) Подписка разработчика и зачем она нужна.
3) Как собрать простейшее приложение для запуска на своем девайсе и для Ad Hoc?

1) Что нужно для разработки (OS, язык программирования, среда разработки и т.п.)?

Начать стоит с того, что разработка возможна только под Mac OS X. Следовательно, необходим Мак (официально заявлена работа только на Intel, но люди говорят, что получалось и на PPC архитектуре работать), но при желании можно обойтись и хакинтошем (как поставить знает гугл, это выходит за рамки статьи), и, возможно, получится работать даже на VM (сама MacOS вполне нормально бегает, а вот с XCode бывают проблемы). Необходим минимум Leopard 10.5.6 для SDK версии 3.1.3 (текущая доступная для скачивания с сайта Apple) и Snow Leopard 10.6.2 для SDK версии 3.2 (это только для iPad). Впрочем, на торрентах можно найти старые версии SDK, но, насколько я помню, даже версия 2.2.1 требовала леопарда версии 10.5.4.
В принципе, существует возможность собирать приложения под Windows, но тестировать их можно будет только на джейлбрейкнутых устройствах, к тому же без возможности отладки. В любом случае, OS это меньшая из проблем.
Итак, будем считать, что MacOS у нас есть. Для разработки приложений под iPhone OS необходимо скачать и установить iPhone SDK, доступный в соответствующем Dev-центре (http://developer.apple.com/iphone/). Стоит заметить, что инструменты Apple предоставляет бесплатно, платить придется за подписку разработчика. Весит это чудо что-то около 3-х гигабайт и включает в себя IDE (XCode), компилятор (GCC), отладчик (GDB), набор библиотек и заголовков, симулятор iPhone и некоторые дополнительные утилиты (вроде редакторов интерфейса и т.п.). Кстати, используя XCode можно с тем же успехом писать приложения для MacOS.
Для написания программ под iPhone предлагается использовать Objective-C. При этом есть возможность писать так же и на C и на C++ (для этого необходимо изменять расширения файлов с .m на .mm). Правда при этом полностью уйти от Obj-C не удастся, почти весь API рассчитан именно на Obj-C, исключения составляют например OpenGL (хотя для его инициализации придется использовать несколько строк кода на Obj-C), так же полностью доступны стандартные библиотеки C/C++ (так, например, с файловой системой можно работать как средствами SDK на Obj-C, так и используя стандартную библиотеку С для ввода/вывода (fopen(), fgetc(), etc)). Тут уже что кому удобнее и привычнее, но с другой стороны отправка сообщений в Objective-C дороже вызова C-шной функции, поэтому критичный по времени выполнения код лучше наверно писать на C/C++ (а еще лучше на ассемблере или, в некоторых случаях, с использованием VFP (некоторое подобие SSE и т.п. на x86, особенно полезно для игровой математики типа трансформации вектора матрицей в скелетной анимации)). Официальной возможности использования других языков нет (хотя я встречал реализацию Basic генерирующего вместо кода проект для XCode).
О IDE. Apple предлагает нам использовать XCode:
XCode IDE
Ничего сверхъестественного, но вполне подходит для работы. Подсветка синтаксиса есть, автоподстановка есть (правда иногда она мешает), менеджер файлов проекта есть, имеется встроенная поддержка систем контроля версий (сам использую svnX, поэтому о встроенной ничего плохого сказать не могу). Для визуального редактирования интерфейса имеются встроенные средства (как для iPhone так и для MacOS). В целом все продумано, удобно. Из недостатков замеченных — часто не видит измененных файлов (изображения, звуки), приходится делать полную очистку проекта и пересобирать полностью. Так же жаловались на лаги подсветки кода. В теории можно воспользоваться и другими IDE, но я этим не интересовался. Для отладки имеем GDB:
GDB
Имеются встроенные инструменты профилирования (использование/утечки памяти, нагрузка процессора, статистика OpenGL и т.п.):
Performance Tools
Теперь о самом интересном — тестировании приложений.
Во-первых, в SDK имеется симулятор iPhone:
iPhone Simulator
К сожалению, его функционал сильно урезан, например, нет эмуляции акселерометра, функций плеера iPod, проблемы со звуком, жуткая эмуляция мультитача, используется софтварный OpenGL рендер работающий чуть ли не хуже чем на устройстве. С одной стороны, при наличии возможности тестирования и отладки сразу на девайсе симулятор не особо то и нужен, с другой — можно было бы легко записывать видео работы приложения в нормальном качестве и без пальцев поверх экрана (к сожалению, на девайсе можно делать лишь скриншоты одновременным нажатием Home + Power). Так же стоит заметить, что для смулятора приложения компилируются под x86 архитектуру, это необходимо учитывать при работе со сторонними библиотеками.
Что касается тестирования и отладки сразу на девайсе. Для тестирования можно использовать как iPhone так и iPod touch (многие почему-то думают что iPod нельзя). При подключении девайса XCode спросит, хотите ли вы использовать его для разработки. В XCode имеется органайзер (“Window” -> “Organizer”) для управления устройствами, используемыми для разработки:
Organizer
Используя его, вы можете менять прошивку девайса (для этого их необходимо скачать и установить), управлять provision-профилями (о них позже), управлять установленными приложениями (в том числе получать созданные ими данные), просматривать логи и делать скриншоты. Так же там доступен UDID (Unique Device ID, необходим для создания сертификатов и профилей в iTunes Connect). Главная проблема — для тестирования на устройстве необходимо оформить подписку разработчика ($99 в год), создать и установить сертификаты и provision-профили. Только тогда можно будет установить приложение на устройство. Если был сделан джейлбрейк можно обойтись и без сертификата, так же попадались статьи об обходе подписей, но я не проверял на работоспособность, в конце-концов, $100 в год не такая большая сумма и по большому счету оформление подписки не вызывает проблем если все верно сделать. Подробнее об этом я расскажу ниже.
При запуске приложения из XCode, если оно было собрано под устройство, произойдет автоматическая установка его на девайс и запуск (с отладчиком или без). Отладчик работает полностью, отображает значения переменных, стек вызова функций, функционирует пошаговая отладка и т.п. В общем, практически никаких отличий от разработки и отладки под Windows, например.

2) Подписка разработчика и зачем она нужна.

Теперь о подписке. Как я уже говорил, она необходима для тестирования приложений на девайсе. Кроме того, она дает возможность размешать свои приложения в AppStore (как платные, так и бесплатные) и доступ к форумам разработчиков. Стоит это удовольствие $99 в год. Итак, как оформить подписку.
Для начала необходимо зарегистрироваться в Developers Connection. Тут, я полагаю, ни у кого трудностей не возникнет. Далее залогиниваемся и в iPhone Dev-центре видим справа описание программы и ссылку “Learn More”.
iPhone Devcenter
Жмем на ссылку, читаем информацию о том, как нам станет хорошо, когда мы оформим подписку, ищем кнопку «Enroll now» и переходим непосредственно к оформлению. Существует два типа подписок. Первая — для индивидуального разработчика. Вы регистрируете подписку лично на себя и доступ к iTunes Connect имеете только Вы. Это, пожалуй, наиболее простой вариант регистрации, от Вас потребуется только указать свои данные типа адреса, телефона и т.п. Для компаний подойдет второй вариант. Подписка оформляется на компанию, создаются аккаунты администраторов и разработчиков и каждый из них имеет доступ к iTunes Connect (ограниченный их статусом, например, разработчик не может утверждать сертификаты — это задача администраторов компании). Для регистрации могут потребоваться разные бумажки типа разрешение на ведение бизнеса, устава организации и т.п.
Program type
После того как Вы заполните все формы, и дело дойдет до оплаты Apple Вас обрадуют сообщением, что в России (Украине и т.д.) невозможно оплатить подписку он-лайн.
FFFFUUUUUUUU-
Будет предложено скачать PDF с формой, форму необходимо распечатать, заполнить (свои данные, тип подписки, номер регистрации, данные пластиковой карточки (оплатить можно только карточкой, хотя были случаи, когда все-таки соглашались на оплату вайром)) и отправить факсом Apple (не забудьте записать Enrollment ID и Person ID, они потребуются для заполнения формы). Таким образом, понадобится пластиковая карта (MasterCard Standard подойдет точно, VISA не использовал никогда, но знаю человека, который утверждает, что смог оплатить VISA Electron, хотя многие говорили, что ее не принимают). Важно чтобы были разрешены международные транзакции, и стоит вместе с номером карты указать CVV (если есть возможность и боитесь светить его – можно отключить его проверку, хотя многие указывают его, и ни у кого проблем не возникало). Зачастую отсутствующий CVV — главная проблема при регистрации, и, из-за банального незнания как пользоваться карточкой, многие оформляют подписку неделями или даже месяцами. Если все заполнить правильно и Вашу карту примут — весь процесс занимает не более 3-5 дней. Отправлять рекомендуется факсом (лучше настоящим, но можно и через интернет, например в Skype есть расширение для этого, и там даже есть 1 бесплатная тестовая страница), но некоторые кидали и на e-mail, это, во-первых, для уверенности, что они ее получат, а во-вторых, так может оказаться быстрее, т.к. обработкой факсов занимается специальный отдел, не имеющий никакого отношения к iTunes Connect. При получении формы, первым делом проверяют карточку — для этого снимут доллар, который позже вернут. Если транзакция пройдет — снимают стоимость подписки — $99. В любом случае Вы получите сообщение на e-mail о результате. В случае неудачи Вам помогут решить проблему. Если все пройдет успешно — в течение суток с момента получения уведомления об успешной оплате Вы получите письмо со ссылкой для активации подписки. Этим и заканчивается оформление, теперь Вы официальный разработчик под IPhone, и можете выкладывать бесплатные приложения хоть сейчас же (разумеется, сперва они проходят апрув и только потом попадают в AppStore), для платных же необходимо будет заполнить информацию с Вашими банковскими реквизитами, после их проверки будет активирован и контракт для платных приложений.
Вывод денег у нас может стать проблемой (суть в том, что многие банки требуют контракт для подтверждения легальности доходов, а контракта этого на бумаге от Apple разумеется не получить, а товарищи в банках зачастую тупо смотрят на тебя и кричат — «Мы ничего не знаем ни о каком выводе из AppStore! Нет контракта — нет денег!»), но вроде с Альфа-Банком и Райффайзеном проблем не возникает.
На этом о подписке, пожалуй, и все, о создании сертификатов и профилей расскажу далее.

3) Как собрать простейшее приложение для запуска на своем девайсе и для Ad Hoc?

Что ж, iPhone SDK установлен, подписка оформлена, мы готовы начать разработку. Принципы создания, запуска и отладки приложений на девайсе мы рассмотрим на простейшем примере (качать тут). Но сперва подготовительный этап — создание сертификатов и provision-профилей.
Начем с создания запроса сертификата. Запускаем в MacOS Key Chain (Связка ключей), в меню выбираем «Ассистент сертификации» -> «Запросить сертификат у бюро сертификации» и видим такое окошко:
KeyChain
Вписываем свой e-mail и имя (обязательно так же как указывали при регистрации подписки), выбираем «Сохранить на диске» и «Самостоятельно установить информацию о паре ключей» и жмем «Продолжить». Шифрование оставляем без изменения (RSA 2048 бит) и жмем «Продолжить», запрос будет создан и сохранен на диске.
Далее заходим в Dev-центр, в меню справа имеется пункт «iPhone Provisioning Portal», открываем. Данный портал позволяет Вам управлять Вашими сертификатами, устройствами и т.д. В меню выбираем пункт «Certificates» и видим вот это:
Certificates
Имеется 2 закладки для 2-х типов сертификатов — для разработки и тестирования на девайсах и для дистрибуции. Нам необходимо создать оба. Выбираем файл с запросом сертификата и жмеим «Submit». После этого необходимо подтверждение сертификата администратором компании (если Вы регистрировались как частное лицо — это Вы сами). После подтверждения сертификаты доступны для скачивания. Их необходимо скачать и установить в Связку ключей на MacOS.
KeyChain
Без этих сертификатов Вы не сможете подписывать свои приложения, и, следовательно, распространять их или тестировать.
Мы имеем сертификаты и можем подписывать приложения, но этого не достаточно, еще необходимы provision-профили. Для начала необходимо добавить идентификаторы своих девайсов в iPhone Provisioning Portal. для этого жмем в меню «Devices» и видим вот такое окно со списком:
Devices
Apple установила ограничение на добавление девайсов — 100 штук в год. Печально то, что при удалении добавленного девайса счетчик не увеличивается обратно. Жмем кнопку «Add devices» и попадаем сюда:
Add Devices
Тут необходимо ввести имя для устройства и его UDID. За раз можно добавлять несколько устройств. Когда все необходимые данные указаны, жмем «Submit» и устройства окажутся в списке.
Далее, каждое приложение имеет свой идентификатор типа «com.yoursite.appname», они создаются в разделе «App IDs»:
Create App ID
Необходимо указать название для идентификатора (оно ни на что не влияет) и собственно сам идентификатор (обычно это доменное имя, записанное в обратном порядке). Причем есть возможность использовать нечто вроде «com.yoursite.*», тогда этот идентификатор будет подходить для любого Вашего приложения, но для таких универсалов не доступны In App Purchases и Push Notifications.
Теперь все готово для создания provision-профилей. Открываем раздел «Provisioning». Профили, как и сертификаты, делятся на 2 типа: для разработки и дистрибуции. В свою очередь профили для дистрибуции бывают так же 2-х типов: для размещения в AppStore и для Ad Hoc. Ad Hoc дает возможность устанавливать приложения в обход AppStore простым перетаскиванием в iTunes. Это полезно, например, для бета-тестирования, Вы можете добавить UDID девайсов Ваших друзей и коллег и давать им Ad Hoc сборки для запуска.
Итак, создание профиля для разработки:
Create Development Provision Profile
Вводим имя профиля, выбираем сертификаты, для которых он действителен, выбираем нужный идентификатор приложения и устройства на которых он будет работать.
Процесс создания профиля для дистрибуции практически ничем не отличается:
Create Distibute Provision Profile
Разница только в том, что можно выбрать тип дистрибуции, и для AppStore нет необходимости указывать устройства.
После создания профилей необходимо скачать их и установить на устройство через Органайзер. Теперь можно собирать приложения для запуска и тестирования.
Открываем наш тестовый проект, Для начала необходимо внести небольшие изменения в свойства проекта связанные с подписью. Раскрываем группу “Targets” выбираем единственную цель и жмем кнопку Info (либо просто двойной щелчок). В открывшемся окне выбираем закладку «Properties» и в поле «Identifier» пишем необходимый идентификатор приложения, подходящий под имеющиеся provision-профили.
Properties
Потом откроем вкладку «Build» ищем там группу «Code Signing» и проверяем, чтобы там стоял правильный идентификатор. Если в выпадающем меню Вы не можете выбрать ни один пункт — проблема либо с сертификатами, либо с provision-профилями.
Build
После этих изменений приложение должно успешно собираться и запускаться на девайсе.
Теперь рассмотрим код и структуру приложения.
Программа, как обычно, имеет точку входа:
  1. int main(int argc, char * argv[])
  2. {
  3.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  4.     int returnValue = UIApplicationMain(argc, argv, nil, nil);
  5.     [pool release];
  6.     return returnValue;
  7. }

В принципе, менять ее не нужно, тут происходит создание пула для сборщика мусора Objective-C и запуск самого приложения. Функция UIApplicationMain() создает делегат приложения и запускает цикл обработки событий. Данные об делегате приложения, связанном с ним окне и элементах управления на нем берутся из специального XML файла генерируемого редактором интерфейса. Программисту остается написать обработку событий. Сам делегат объявлен в заголовке «HabraSampleAppDelegate.h», его реализация находится в «HabraSampleAppDelegate.m». Данный класс примечателен лишь тем, что должен реализовывать протокол UIApplicationDelegate. Реализация его тоже простая и заключается в запуске/остановке отрисовки по различным событиям (типа завершения загрузки приложения, входящему звонку, закрытию приложения).
Чуть больший интерес представляет класс EAGLView, отвечающий за отрисовку средствами OpenGL ES 1.1. При инициализации настраивается слой для рисования:
  1. CAEAGLLayer * eaglLayer      = (CAEAGLLayer*)self.layer;
  2. eaglLayer.opaque             = TRUE;
  3. eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool: FALSE]
  4.    kEAGLDrawablePropertyRetainedBacking, 
  5.    kEAGLColorFormatRGBA8, 
  6.    kEAGLDrawablePropertyColorFormat, nil];

Создается и устанавливается активным OpenGL контекст:
  1. context = [[EAGLContext alloc] initWithAPI: kEAGLRenderingAPIOpenGLES1];
  2. if(!context || ![EAGLContext setCurrentContext: context])
  3. {
  4.     [self release];
  5.     return nil;
  6. }

Создаются буферы кадра и цвета (буфер глубины не создается за ненадобностью):
  1. glGenFramebuffersOES(1&defaultFramebuffer);
  2. glGenRenderbuffersOES(1&colorRenderbuffer);
  3. glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer);
  4. glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);
  5. glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorRenderbuffer);

И загружается текстура. Для загрузки изображения из файла используются средства iPhone (CGImage):
  1. CGImageRef cgImage = [UIImage imageNamed: @"media/logo.png"].CGImage;
  2. if(!cgImage)
  3. {
  4.     NSLog(@"Unable to load texture from file.");
  5.     return;
  6. }

Далее ими же (GCContext) происходит преобразование к формату RGBA8:
  1. int             width      = CGImageGetWidth(cgImage);
  2. int             height     = CGImageGetHeight(cgImage);
  3. CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
  4. GLuint        * pixels     = (GLuint*)malloc(width * height * 4);
  5. CGContextRef    cgContext  = CGBitmapContextCreate(pixels, width, height, 84 * width, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
  6. CGContextClearRect(cgContext, CGRectMake(, , width, height));
  7. CGContextDrawImage(cgContext, CGRectMake(, , width, height), cgImage);

И создается OpenGL текстура:
  1. glActiveTexture(GL_TEXTURE0);
  2. glGenTextures(1&textureID);
  3. glBindTexture(GL_TEXTURE_2D, textureID);
  4. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  5. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  6. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  7. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  8. glTexImage2D(GL_TEXTURE_2D, , GL_RGBA, width, height, , GL_RGBA, GL_UNSIGNED_BYTE, pixels);

За отрисовку состояния кадра отвечает метод drawView, состоящий почти полностью из стандартных OpenGL ES команд. Сама отрисовка ведется по таймеру который активируется/деактивируется в зависимости от состояния приложения.
Напоследок разберемся, как сделать Ad Hoc сборку приложения.
Будем считать, что сертификаты и provision-профили созданы и успешно установлены. Теперь необходимо создать дополнительную конфигурацию “Distribution” (скопируем ее с конфигурации “Release”, для этого выберем в менеджере файлов проект и нажмем кнопку «Info», выберем вкладку «Configurations», выделим «Release» и нажмем кнопку «Duplicate»):
Configurations
После этого перейдем на вкладку «Build» и поставим новую конфигурацию активной. В секции «Code Signing» поставим подпись сертификатом на дистрибуцию, тут же в пункте «Code Signing Entitlements» впишем «Entitlements.plist» (при сборке для AppStore делать этого не нужно):
Build
Далее создадим этот файл. Жмем «File» -> «New file», в появившемся окне выбираем в меню пункт «Code Signing» и выбираем «Entitlements»:
Entitlements
Далее указываем имя для нового файла («Entitlements.plist») и создаем его. В данном файле содержится всего 1 поле — «get-task-allow», просто снимаем с него галочку.
Теперь можно собирать приложение под конфигурацией «Distribution» и отправлять полученное приложение вместе в provision-профилем пользователю. Пользователю же необходимо просто перетащить эти два файла в iTunes и синхронизировать устройство. Если все было сделано правильно — приложение установится, и будет успешно работать.
На этом, пожалуй, и все. Если к теме разработки под iPhone будет интерес — могу написать еще ряд статей, в комментариях в таком случае хотелось бы увидеть интересующие Вас темы.

комментарии (112)

  • payoneer virtual us bank account wire-transfer не поддерживает, его нельзя использовать для получения платежей от iTunes*
    • Спасибо, убрал про Payoneer. Просто получив рассылку о введении виртуального счета, я задал вопрос саппорту о возможности вывода денег с AppStore. И они ответили, что это таки возможно.
    • а почему невозможно? со стороны кого бока? пионер говорит любая компания из США может слать на счет деньги, значит ITunes не хочет работать с пионером?
      • Не любая, а ограниченный список, насколько мне известно. Платежи от эппла приходят не только из США. Wire transfer не поддерживается вообще, только ACH.
        • любая из США, я просил список у суппорта, я вот получаю от одной
          • ок, тут я не буду спорить, так как не в курсе. Но насчет ACH – оно же никуда не делось.
  • Статью еще не прочел, но все-равно спасибо! Давно хотел что-нибудь написать на свой айфон(хотябы для себя). Жалко только что придется пол дня угрохать на хакинтош…
    • Вам огромно повезет, если вы управитесь за полдня :-)
      Легко можете убить неделю!
      • Ну многое от железа зависит. Иногда вообще не получается поставить.
        • за каким-то хреном взял себе AMD, теперь bye-bye hackintosh…
          • Под AMD тоже встает. Правда геморроя больше.
            • полгода назад интересовался, был торрент с образом виртуальной машины, патченой под amd
              но перезагрузку он не выдерживал
              ну, может довели уже до ума, время идет

              а макинтош и на работе есть, жалко времени нет на все это, только облизываюсь пока ))
            • Можете посоветовать сборки хакинтоша, которые чаще встают под АМД?
              • Точно подсказать не могу, но попробуйте iDeneb или iATKOS.
            • Могу порекомендовать еще для таких целей qemu — оно тормозит меньше. У меня на интелах все работало быстро, на AMD — тормозит (в зависимости от сборки, но как правило настолько, что работать там невозможно). Я тогда делал так — качал предустановленные образы, затем конвертировал их в qemu, а уже на ней запускал — получалось быстрее. Правда (это от железа зависит), запуск на qemu может быть капризнее, чем в vmware. Как правило, можно достаточно недолго поиграться с флагами запуска ядра, попробовать разные комбинации, а если не поможет — смело выкидывать сборку и качать следующую. Я штук 6 перепробовал, пока нашел ту, которая запускается.
          • у меня АМД)) вобще я уже пытался поставить хакинтош — не встал, надо прост еще пробовать, все руки никак не дойдут…
            • У меня на АМД (Voodoo kernel) не работал GDB — отлаживать не получалось :(
    • виртуальная машина вам в помощь
  • >кто-то услышал сказки о том, что в AppStore полные безделушки могут принести миллионы

    почему сказки?
    • Это скорее исключения на данный момент. Когда AppStore открылся, возможно, оно так и было, но я не застал этого.
      • Doodle Jump — не безделушка? :) Она совсем недавно провисела в топе на 1 месте несколько недель.
    • все простые идеи уже окучены
      вряд ли вы с первого раза синтезируете killer-app, и вряд ли у вас получится его продать большим тиражом
  • Очень круто и подробно! Спасибо Knightmare!
  • По поводу договора для подтверждения легальности доходов в валюте на СПД-ФОП и выше, в Украине его требуют все без исключения банки.
    • Добавлю, в договоре должны быть прописаны конкретные суммы, желательно с ориентировочными датами поступления. Так что даже если мы и выжмем договор с печатью из Apple, это нам ничего не даст.
      Выход один — оффшоры, а шо делать…
    • вообще необязательно оформлять СПД.
      habrahabr.ru/blogs/apple/82758/
  • Не смог сходу придумать, как же еще Apple могла усложнить жизнь рядовому девелоперу. Хозяин, конечно, барин, но каким-то средневековьем пахнуло от описания процедур регистрации и прочего…

    А вы не занимались разработкой на Qt? Насколько сложно портировать софт на iPod/iPhone?
    • Ну на самом деле проблема только у нас. В той же Европе оплатил кредиткой он-лайн и всего делов.
      Насчет портирования с Qt. Я занимаюсь 2D/3D графикой в основном, поэтому точно не уверен. Но, вероятнее всего, придется полностью переписывать на айфоновский гуй.
    • Что бы начать писать под айфон нужно 1. поставить икскод (бесплатный, на любом диске с ОС) 2. запустить икскод. Сложно, ага.

      Ну и не знаю ниодного человека добровольно променявшего Cocoa на Qt.
  • Зря Apple под windows свой SDK не портировали, по-моему много разработчиков потеряли. Косвенно это подтверждается повышенным интересом к предложению Adobe собирать приложения для iphone на flash. А ещё зря с Россией и, наверно, многими другими странами нормально не работают в плане оплаты приложений и выплат разработчикам. Видимо считают, что это не стоит их усилий :(
    • Для Windows существует тулчейн собранный народными умельцами. Он работает (хоть и без возможности отладки), но только с джейлбрейкнутыми девайсами. Правда при этом его использование нарушает пользовательское соглашение.
      • А где его искать? Хоть название\ориентир.
    • Многие изначально покупают мак для разработки под iPhone, а потом окончательно пересаживаются. Стратегия :)
      • а еще это избавляет от приложений который написаны под влиянием другой философии.
  • Отличная статья. Коротко и полезно оглавном :) Спасибо
  • в закладки на будущее… чувствуется очень подробно ))
  • Понятное дело, почему не портируют СДК под винду. Защищают свой продукт. Хочешь писать софт и\или зарабатывать на этом деньги, пожалуйста, работай. Вот тебе СДК, специально созданное для этого. К тому же, это хорошая возможность привлечь в ряды простых пользователей, разработчиков, а в дальнейшем может быть ярых фанатов и поклонников Apple.
    • Нет, мне это не понято. Это ограничение прав разработчиков, если можно так сказать. Если уж Apple такие идейные, то зачем они портировали под windows свой iTunes? Обосрались потерять большую часть пользователей? Не нравится мне такая политика, монополизацией сильно пахнет. Спасают их пока только первоклассные продукты.
      • >Это ограничение прав разработчиков, если можно так сказать.

        а майкрософт ограничивает меня не делая SDK для WinMobile под Мак.

        Такова жизнь
      • Всем лишь бы идейность подавать… Портировать айфон сдк на винду практически означает портировать мак ос тен на винду. При наличии сотен тысяч первоклассных программистов удовольствие сомнительное. Ну и да «купи мак, напиши под айфон, стань эплодрочером»
        • С этим не согласен. Если даже умельцы сделали тулчейн, то для самой Apple это точно не проблема.
          • Ага, но как только речь заходит не только о компиляции софта под айфон (gcc не вчера придуман), а о симуляторе и интерфейс-билдере, все «несколько» усложняется.
          • Вы вообще знакомы с iPhone SDK? что там используется? как оно устроено? Что самом деле представляет собой iPhone Simulator?
            • неужели виртуальную машину? ;)
          • Блин, да о чём речь то ведёте? Какая из компаний портировала СДК своей системы под неродную систему? Да и зачем это вообще? Если есть серьёзная необходимость разрабатывать софт под макос/айфон, то, как сказал автор, ОС это не самая большая проблема.
            Я вот вынужден держать эпизодически необходимые средства разработки под win (причём, легально владея ими!) и windows-SDK в не-win-системе под виртуальной машиной, что же теперь, тоже горевать, что микрософт ограничивает меня, как девелопера?
  • Для первой картинки поста сделай уже align=left, столько места в пустую пропадает ведь!
    • Спасибо, поправил.
      • Для большого изображения устройства в середине текста можно сделать так же, для широких картинок — выравнивание по центру и будет конфетка.
        • Поправил, благодарю за советы.
  • Спасибо за статью.

    PS. Хороший ник! Ностальгическая игрушка :)
    • > PS. Хороший ник! Ностальгическая игрушка :)
      Ага, мне она тоже очень нравилась.
  • Кто-нибудь Mono пробовал?
  • так что с деньгами?

    400 000 приложений, втиснутые в 20 категорий маркета, просто убивают рынок
    ну как можно выделиться, если ты потерялся среди 10 000 страниц
    да, есть рейтинг продаж и список новичков
    но в топ ты с разу не попадешь, а из новичков через неделю уже выпадаешь

    ни тэгов, ни ключевых слов, ни контекстной рекламы…
    и кончается все в $2 000 за удачное приложение, на которое ты убил пару месяцев
    а $1 000 в месяц уж как-нибудь и попроще можно заработать

    такая вот жизнь…
    //в цифрах могу ошибаться, но сути это не меняет
    • Кстати о деньгах. Забыл сказать в статье, что Apple оставляет себе 30%. Причем, в случае refund'а деньги пользователю возвращаются только из Вашей части, Apple в любом случае имеет свою долю.
      Ну а вообще AppStore смахивает на лотерею — иногда выстреливают безделушки, а иногда проваливаются достойные проекты.
      • Контекстная реклама в приложениях есть.
    • Эти 20 категорий ноу хау аппле. До айфоновские методы продвижения приложений никто не отменял. Сайты там всякие, реклама, блого-посты.
      • это все да, но поскольку центральной темой остается маркет, его усеченность не в плюс
        понятно, что в любом случае все сливки снимаются с вершины пирамиды, но очевидно, что она слишком тесная
  • Я уже почти как год плотно постигаю дао open-source и поэтому мне кажется, что все что вы рассказали — это ужасно :) Проприетарщина на проприетарщине и все закрыто.

    Предыдущий комментарий навел меня на мысль. Есть системы т.н. «прямых продаж» — это преславутый Цептер и не к ночи упомянутый Амвэй и иже с ними. Тебе кажется, что ты — без пяти минут предприниматель, и еще чуть чуть и вот пойдет прибыль. А на самом деле прибыль делают на тебе самом и другие. Отношения «магазина» Эппл и программистов кажутся мне похожими.

  • Я подозревал раньше, что создание и продвижение софта под iPhone не сахар, но эта статья (в смысле полная информация) полностью убила всякое желание. Почему всё так сложно?
    И главное — это ж все существующие разработчики прошли этот путь, неужели оно окупается?
    Как-то всё это неправильно…
    • создание не настолько проблемно, как может казаться. Вот продвижение до более-менее реальных сумм — это сложнее.
  • Так ок, а если завтра компания скажем Nokia выпускает ещё более крутой коммуникатор чем iPhone мне что надо будет делать как разработчику под iPhone?
    • а каким образом это коснется вас?
      • -«мне что надо будет делать как разработчику под iPhone?»
        • выпуск коммуникатора нокией никак не касается айфона
          • да уж, я чё про это говорил? мы же тут про разработку софта под конкретную ОС и да же больше под конкретную ОС
            • тогда я тем более вас не понял %)
    • Естественно, все пользователи iphone тут же выкинут свои никчемные железки и купят сочне мжвячне Нокию. Эппл разорится, аппстор закроют.
  • Думал геморроя с разработкой будет меньше. Недавно скачала Android SDK — просто песня. Всего-то плагин для Eclipse и указать путь к скачаному SDK
    • Стоит учитывать, что рассчитано оно, в первую очередь, на владельцев маков. Т.е. никаких проблем с OS и т.п. Оформление подписки тоже не такая и проблема. Главная проблема — вывод заработанных денег. К сожалению, с тем же Android в этом плане не многим лучше. Android SDK тоже ставил, хорошо то что он есть и под Windows, и под Linux, и под MacOS. Но лично мне не понравилась, что поддержка С++ выполненная в виде жуткого костыля, т.е. да, писать приложения можно и на Java, не проблема, но писать игровой движок я бы хотел на С++ все таки.
      • Лично для меня $99 баксов при регистрации — проблема
        • Я тебе открою страшную тайну – скачать iPhone SDK просто и абсолютно бесплатно.

          А вот зарегистрироваться в Android Market стоит $25 и чуть меньше головной боли
          • а если ты делаешь, например, клиент для своего веб-сервиса, т.е. пиаришься не магазином приложений, можешь просто выложить apk у себя.
            и/или бесплатно выложить в SlideMe.
            • и трахаться с оплатой пользователями покупки программы? Нет уж, спасибо. Лучше через AppStore, процедура там как раз такой сложности, чтобы отсеять полных калек
              • а зачем платную программу писать? аппстор и для бесплатных просит 99$.
                если хочется бабла, можно сделать как RTM — бесплатное приложение для Android и iPhone работает с премиум-аккаунтом + 14 дней триал.
                • >а зачем платную программу писать?

                  а ты как думаешь?

                  >аппстор и для бесплатных просит 99$.

                  и правильно делает, а то бесплатнго шлака было бы на порядки больше

                  >если хочется бабла, можно сделать как RTM — бесплатное приложение для Android и iPhone работает с премиум-аккаунтом + 14 дней триал.

                  далеко не во всех случаях такая схема подходит
  • Подписка у Эппл теперь только одна версия и стоит 99$. Поправьте статью.
    • Готово. Сам регистрировался когда еще 3 было, потом когда делал скрины (уже после написания текста) заметил, что регистрация поменялась, но что убрали третий вариант внимания не обратил.
  • отличное faq для новичка!
    думаю теперь оно будет в многих блогах ;)
    спасибо!
  • Спасибо, отличный faq.
    Маленький комент — у меня прошло «в лёт» без cvv (платил visa classic).
  • Оффтоп-вопрос как разработчику движка игрового.
    Не в курсе, есть ли хорошие движки для Андроида?
    • Я не знаю таких. Была мысль наш портировать под Android, но NDK совсем не порадовал как-то, а переписывать все на Java нет ни желания, ни времени. А вообще, разработчики то ли Unity3D, то ли Torque обещали поддержку Android'a.
      Хотя если погуглить, думаю найдется что-нибудь.
      Еще есть вот такая штука — www.airplaysdk.com/, но это не совсем движок.
      • Мдя, не густо)
        Пишу третью игрушку, а про движки ниче не слышно хорошего :)
    • jME3
      • пасиб
        но оно не совсем под андроид как я понимаю еще?
        портируют с j2me, еще в процессе?
  • про скринкасты на симуляторе: blog.atebits.com/2009/03/not-your-average-iphone-screencast/
  • Автор, для вывода денег на СПД ФОП нужен обязательно контракт, не знаю, что там вам о Райффайзене говорили, они такого бреда не могли сказать.

    Но можно выводить как физлицо — это, фактически, роялти.
    Описано здесь: habrahabr.ru/blogs/apple/82758/
  • блин где Вы были два года назад, когда я с этим разбирался. Сэконимл бы себе пару часов.
    • Где вы были два года назад, когда с этим разобрались и не тиснули статью на Хабре. Сэкономили бы пару часов автору.
      • два года назад я не знал о существовании habrahabr :-)
  • Хмм теперь все стало понятнее, но синтаксис Obj-C вырвиглазный какой-то. Сдлали бы биндинги для руби :). От меня несколько вопросов:
    1. Если не сложно могли бы вы описать как там работать с сетью (банально отправка xml, получение этого xml, парсинг его)
    2. Люто бешенно реквестирую обзор 3d движков.
    • 1. Ну сеть это либо обычные сокеты, либо CFNetwork Framework, либо GameKit если конкретно для игр.
      2. Это легко.
      В общем, как будет время — постараюсь написать что-нибудь по этим темам.
      • 1. Тут я хочу http использовать, пытался что-то сообразить, но одного примера не хватило.
  • Автору ++ и огромное спасибо.
    Парни у меня следующая ситуация:
    Исходные данные:
    *Работаю удалённо
    *Нужно тестить аппликацию как локально так и на стороне заказчика
    *Финальный деплой будет на местные ифоны( т.е. аппстор совсем не нужен, теоретически )
    *Суммарное количество девайсов, которые будет юзать мою поделку < 100
    Вопросы:
    00. Какую версию подписки нужно брать (standard или enterprise ).
    01. Как удобнее деплоить тестовые версии на QA девайс( который удалённый ), обязательно ли наличие мака на той стороне.
    03.…
    04. Спасибо!
    • >Финальный деплой будет на местные ифоны( т.е. аппстор совсем не нужен, теоретически )

      >00. Какую версию подписки нужно брать (standard или enterprise ).
      enterprise

      >01. Как удобнее деплоить тестовые версии на QA девайс( который удалённый ), обязательно ли наличие мака на той стороне.
      в принципе нет, можно сделать ipa файл, и он установится через iTunes
  • странно, столько коментов и никто не сказал про vmware.
    Уже можно запускать Мак ОСь в виртуалке: wiki.osx86project.org/wiki/index.php/Vmware_how_to

    + гдето видел в сети, что скоро, или уже, совсем официально это будет(или уже) возможно.
    • начал перечитывать статью — и таки да. про VM указано. извиняюсь :)
  • Не по теме… Сделал бы кто читалку хабра для iPhone. А то по GPRS проблематично грузить весь сайт, а rss то обрезанные, да и коменты ни почитать, ни добавить((( Или бы какую нибудь мобильную версию хабра…
  • Удобно что собрали много информации в одном месте.

    Несколько предложений для большего удобства
    1. Как я понял необходимости в Distribution Method = AppStore нету никакой — в апстор принимается код подписаный Adhoc. Меньше сущностей — меньше путаницы.
    2. App IDs = com.yoursite.* — не нужен. Лучше использовать App IDs = * (нет проблем компиляцией чужого кода, в том числе примеров от эпл). А вот App IDs = com.yoursite.appname может и пригодится (для inapp purchase)
  • Недостатки разработки для iPhone:
    1. Дорого. Если брать по минимуму, то это Mac Mini + iPhone + $99 за программу. В принципе, можно поставить хакантош, но остальное должно быть.
    2. Постоянные обновления (раз в месяц, бывает чаще). Это приводит к тому, что программа может корректно работать в 3.1.1 и уже не работать корректно в 3.1.2. За переход версий 2.x -> 3.x я уже молчу.
    3. Сложность во всем, начиная от регистрации, заканчивая публикацией в AppStore. Даже вменяемых отчетов по загрузкам / продажам нет.
    4. Xcode — это полный ужас, назвать это вменяемым средством для разработки язык не поворачивается. Obj-C имеет очень избыточный синтаксис.
    5. Лотерея. Хорошее приложение не обязательно принесет много денег и наоборот.
    6. Симулятор не отображает реального поведения на девайсе (у меня ситуация когда на симуляторе OpenGL программа работает корректно, а не девайсе появляются артефакты).

    Из преимуществ:
    1. Маленькая конкуренция — это единственно важный пункт из списка преимуществ.
    1. Легко можно перейти с C++.
    2. Для геймдевов есть где разгуляться.
    3. Есть доля вероятности везения, что позволит подняться на 1-2 приложениях.

    На MonoTouch большие надежды, а если появится какие-то плагины под виндовые IDE или полноценные независимые IDE (даже если нужно компилировать под маком), то тогда это будет просто счастье.
    • Недостатки
      1 — угу
      2 — если писать без хаков то будет все ок
      3 — да муторно но подсилу любому смертному: завести валютную кредитку, заполнить apple бумажку, отсканить, отправить через PamFax им, с тебя снимают 100$, на Apple сайте заполняешь данные банка для заключения договора о публикации платных программ. Для удобоваримой статистики можно вдиать спец программу покупать.
      4 — Xcode хорош, ты зря так, Obj-C тоже хорош.
      5 — угу, имхо без маркетинга будет сложно
      6 — может быть, но если писать без хаков то будет все оукей

      MonoTouch имхо нафиг не нужен, а то зависить помимо от SDK еще и от разработчиков MonoTouch как-то не здорово. Нужен мак-мини и точка ))
  • Есть вопрос: а было бы интересно взяться разработать приложение для iPhone по моей идее? Не знаю как найти разработчика.
    • Если вопрос мне адресован — все от приложения зависит и условий.
      • Не кинете свой емейл-контакт на мою почту kamnevn@mail.ru — я напишу поподробнее, а если вы в Питере, то можем и встретиться.
  • Расскажите пожалуйста про размещение приложений в AppStore и сборе статистики по скачиваниям и продажам.
Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.