Проверка знаний iOS-программистов

В последнее время часто приходится проводить собеседования с кандидатами на должность iOS-программистов. Вывел очень простой способ проверки реальных знаний собеседуемых.

В самом начале даю задание написать незамысловатую функцию на C, которая на вход получает сишную строку с нулем на конце и инвертирует ее, при этом результат перезаписывает исходную строку.

Как оказалось, все те, кто справляются с этим чертовски-сложным заданием, отвечают и на большинство дальнейших вопросов: они и Objective-C знают неплохо, и в особенностях платформы разбираются. Ну, а если где-то им и не достает опыта, все равно видно, что прочитают документацию и выяснят, как надо.

Те же, кто сразу заявляют, что с C незнакомы (!), или пишут явную ересь, — такие, разве что, вьюшки рисовать умеют.

Еще наблюдение — хороший знак, если в резюме упоминается научная деятельность или фриланс.

Posted in Без рубрики | 1 Comment

Советы новичкам по разработке для iOS

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

1. Перед установкой новой версии Xсode создайте копию уже установленной

Чтобы сохранить предыдущую версию Xcode, надо перед установкой новой скопировать куда-нибудь целиком папку «/Developer». В исходной же папке после установки будет уже содержаться новая версия.

Update Внизу написано много букф, а толку там мало. Поэтому вкратце здесь добавлю несколько полезных фактов об Xcode. Некоторые старые симуляторы, которые не устанавливаются по умлчанию (в комплекте с последней версией среды разработки), можно доустановить: Xcode -> Preferences -> Downloads. А еще их можно просто взять у соседа-программиста и скопировать себе в /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs.

Apple всеми силами старается заставить пользователей регулярно обновляться и пользоваться новейшими версиями iOS. Желание это понятное и вполне разумное.

Только вот одним из инструментов воздействия на пользователей оказываемся мы — разработчики. Для этого Apple наделила свою среду одним маленьким, но неприятным недостатком: Хотя самая свежая на данный момент версия Xcode 4.2 (идущая вместе с SDK iOS 5.0) позволяет собирать прогрыммы, способные одновременно работать как на iOS5.0, так и на iOS3.0, Но нет опции, позволяющей при компиляции проверить, использует ли код только методы iOS3.0 или в него затесались один-два метода из более поздних версий ОС (например, 3.2 или 4.0). В принципе, то что в программе, которая предназначена в том числе и для iOS3.0, присутствуют методы из более новых версий нет ничего страшного — это совершенно нормально: в рантайме легко проверить наличие того или иного метода (с помощью respondsToSelector:) и не вызывать его, если он отсутствует. Только вот легко ошибиться и оставить парочку таких методов без проверки, что приведет к падению программы на старой версии iOS. Хорошо, если у тестеров есть девайсы со старыми версиями ОС, что позволить им выявить такие проблемы. Еще лучше было бы, если разработчики сами могли бы протестировать программу на симуляторах со старыми версиями ОС, а еще лучше — собрать программу с помощью уже устаревшей версии SDK, которая еще не в курсе новых идей Apple, а потому «сдаст» методы из последюущих версии iOS. Вот для этого и нужны устаревшие версии Xcode.

Например,  на работе на компе со Snow Leopard у меня одновременно установлены две версии Xcode: новейшая 4.2 (SDK 5.0 с симуляторами iOS 5.0) и уже устаревшая 4.0 (с SDK 4.3 и симуляторами iOS от iPad3.2 до iPhone/iPad 4.3).

К сожалению, появление версии Mac OS Lion портит всю идилию с копированием: Xcode 4.0 на ней не работает, поэтому на домашнем компе со Львом у меня установлены 4.1 (SDK 4.3) и 4.2 (SDK 5.0). Проблема в том, что в 4.1 уже нет древнего симулятора iPad c iOS 3.2, а только iPhone/iPad c iOS 4.3.

Конечно, было бы лучше писать программы только для новых iOS с полным набором методов и фич. Именно так я и делаю, когда пишу собственные программы, потому что ими занимаюсь скорее для удовольствия, а не ради заработка. А вот заказчики любят, когда поддерживается всякое древнее барахло. Например, недавно закончили проект, который будет запускаться даже на iOS3.0, хотя уже пора начинать задумываться об iOS6.0 ). Поэтому я и не обновляю свой рабочий комп до Lion — ведь там у меня уже не будет симулятора iPad c iOS 3.2)

Кстати, как раз сегодня столкнулся с ситуацией, когда понадобилось старое SDK еще и по другой причине. К своему проекту приходится подключать хитрую стороннюю библиотеку, разрабатываемую на другой сторне земного шара. Она почему-то неправильно работает при компиляции с помощью Xcode 4.2, а вот со старым-добрым (ему уже полгода стукнуло)) Xcode 4.0  все работает замечательно. Благодаря этому я могу заниматься своей работой, а не копаться в чужом коде или не ждать, пока библиотеку починят ее авторы.

Posted in Без рубрики | Tagged , | Leave a comment

UISegmentedControl and multiple selection

As you know UISegmentedControl isn’t supported multi selection. Here I describe my simple custom view — MoSegmentedControl — that look like UISegmentedControl and support multiple selection.

Demo project and source code: download.

MoSegmentedControl consists of several intersected UIButton’s. The left most and the right most buttons have rounded corners. The buttons layout is depicted bellow:

(The number of segments is unrestricted and may be greater then three.)

To make corners of buttons rounded and to add border I use this code:

#import 
 
if (buttonIsLeftmost || buttonIsRightmost) {
 
    [button.layer setCornerRadius:cornerRadius];
 
    [button.layer setMasksToBounds:YES];
 
}
 
[button.layer setBorderWidth:1.];
 
[button.layer setBorderColor:borderColor.CGColor];

 

Two images is used for buttons background:

UIImage *normalBgImage = [UIImage imageNamed:@"normalBg.png"];
 
UIImage *selectedBgImage = [UIImage imageNamed:@"selectedBg.png"];
 
[button setBackgroundImage:normalBgImage
                  forState:UIControlStateNormal];
 
[button setBackgroundImage:selectedBgImage
                  forState:UIControlStateSelected];

 

Images are 1-pixel in width and 2-pixels in height:

These images «scale to fill». So I get gradient effect. To get more sophisticated buttons it is necessary to use more complex pictures.

The using of MoSegmentedControl is pretty simple:

 NSArray *items =
    [NSArray arrayWithObjects:@"Red", @"Green", @"Blue", nil];
 
_segmentedControl =
    [[MoSegmentedControl alloc] initWithItems:items];
 
_segmentedControl.frame = CGRectMake(30, 60, 260, 30);
 
[_segmentedControl makeSegment:0 selected:YES];
 
[_segmentedControl makeSegment:2 selected:YES];
 
[_segmentedControl addTarget:self
                      action:@selector(updateColor)
            forControlEvents:UIControlEventValueChanged];
 
[self.view addSubview:_segmentedControl];

 

The number of segments corresponds to items array size.

Posted in Без рубрики | Tagged , | Leave a comment

Изучение программирования для платформы iOS (iPhone/iPad)

Со времени последнего моего поста прошло уже несколько месяцев. Причина столь долгого молчания не в том, что я забросил программирование для айфонов, совсем наоборот — я усиленно занимался изучением платформы и написанием приложений, которые вот-вот выйдут под более чем известным брендом;) Однако iOS настолько хорошо документирована и так подробно обсуждается на форумах, что еще нерешенных проблем, как реализовать ту или иную фичу, практически нет. Поэтому придумывать свое решения для какой-то достаточно распространенной задачи мне не приходилось. А описывать узкоспециальные проблемы, с которыми все же мне приходилось сталкиваться, но которые вряд ли волнуют еще кого-то из русскоговорящих программистов, бессмысленно, да и NDA не позволяет.

В общем, я в своем блоге придерживаюсь правила — не писать решение задачи, если оно где-то уже описано, пусть и не на русском. Однако, кроме технических проблем (есть задача -> вот для нее одно или несколько решений), есть и более «гуманитарные», которые предполагают множество в той или иной мере отличающихся мнений, претендующих на правильность.

К таким задачам относится и вопрос, как изучать программирование на каком-либо языке или для какой-либо платформы. Вот и я хочу высказаться на эту тему по отношению к iOS, т.к. сейчас мне стало более-менее понятно, что стоило читать и в какой последовательности.

Итак, мои советы начинающим. Правда, подойдут они только тем, кто способен читать по-английски. Без него успеха тут добиться вряд ли получится.

Objective-C

Естественно, раз речь зашла об iOS, то начать следует с изучения Objective-С. Если кто вдруг не в курсе, то это объектно-ориентированный язык, созданный на основе ANSI C (и полностью с ним совместимый). Поэтому для людей, знающих С, задача значительно упрощается.

for Advanced

К сожалению, мои советы по изучению Objective-C ориентированы на людей знакомых еще и с С++ или, хотя бы, с Java/С#. Этой категории программистов достаточно одной ссылки:

The Objective-C Programming Language /*iOS Developer Library*/

В этом документе из iOS Developer Library упоминаются и другие полезные гайды. Ну, да я думаю, сами разберетесь, что прочитать. Если все же хотите учить не по гайдам, а по нормальным учебникам, то советую внимательно подойти к его выбору. Я в свое время купил на амазоне «Programming in Objective-C» by Stephen G. Kochan просто потому, что это самая популярная там книга на эту тему. Но мне она показалась довольно скучной, т.к. ориентирована на новичков, не знающих даже С, не то что ООП. Из-за чего мне пришлось выуживать новую информацию среди хорошо известной. Поэтому, если и покупать учебник, то выбирать его надо исходя из своего текущего опыта программирования.

При изучении советую обратить особенное внимание на такую конструкцию языка, как properties. Например, выражение self.title = nil; означает далеко не то, о чем можно подумать, имея опыт программирования на C++ или Java. Если в двух словах, то произойдет вызов специального метода, а не простое присвоение нулевого значения одной из переменных объекта.

Еще один важный вопрос — управление памятью. Читать нужно здесь:

Memory Management Programming Guide /*iOS Developer Library*/

Работа с памятью строится на счетчике ссылок. На самом деле, Objective-C поддерживает и автоматическую сборку мусора, но она работает только на Mac OS, не на iOS. Поэтому при изучении этой темы новое для себя обнаружат как C++ -программисты, так и Java-программисты.

На самом деле, если кому не терпится сразу приступить к написанию программ без чтения руководств, которые я тут упомянул, то такая возможность есть: можно совместить изучение Objective-C и iOS. Об этом я напишу ниже в разделе, посвященном освоению iOS. Но в любом случае, для полного понимания языка эти руководства стоит изучить. Без этого наверняка (даже не сомневайтесь!) набьете себе немало шишек.

for Beginners

Что касается совершенных новичков, не оттягащенных знанием всяких-разных языков программирования ,то тут учебники незаменимы. На английском языке их масса. Возможно, есть и на русском. Можно почитать ту, что я только что выше упомянул. Возможно, есть и лучше. Поэтому надо идти на Amazon и читать отзывы о книгах.

iOS

Теперь перехожу непосредственно к iOS.

По iOS существует масса замечательных руководств и статей (о том где их искать подробнее напишу ниже). Это приводит к тому, что необходимость в учебниках сводится к минимуму. Но, на мой взгляд, они все же полезны, т.к. способны дать общую картину изучаемого материала, пусть даже и поверхностную. А дальше, уже имея общее представление, можно углубленно изучать отдельные разделы.

В качестве учебника рекомендую «Beginning iPhone 4 Development: Exploring the iOS SDK» by David Mark, Jack Nutting and Jeff LaMarche. На самом деле, я читал более раннюю версию, посвященную программированию для iPhone 3. Но, думаю, новое издание не хуже. Купить можно снова на Амазон. Возможно, есть книги и лучше. Подтверждением тому, то что сейчас эта книга на третьем месте в поиске, хотя, когда я ее покупал, она была на первом.

Из достоинств учебника — очень простой английский, даже проще, чем документация на сайте Apple. Возможно, тому причиной частое употребление в технической документации эпитетов типа attractive). Во вторых, в этой книге разъясняются и конструкци Objective-C. Поэтому ее можно читать даже пропустив мимо ушей мои рекомендации выше относительно изучения языка. Однако, для полноценного освоения языка чтение руководств крайне неоходимо!

Теперь, ознакомившись с учебником, можно переходить к чтению руководств из iOS Developer Library, которую я уже упоминал. Ниже список гайдов, с которыми нужно ознакомиться в первую очередь:

  • iOS Human Interface Guidelines
  • iOS Application Programming Guide
  • и т.д. Путь к написанию качественных программ лежит через чтение гайдов, посвященных view, view controller, table view… Эти руководства хороши тем, что содержат массу примеров в стиле HOWTO на все случаи жизни.

Ссылку на нужное руководство можно найти в документации к интересующему классу в Reference.

Дополнительные ресурсы

На обучающем портале Apple iTunes U в соответствующем разделе можно найти бесплатные видеолекции, посвященные программированию для iOS, читавшиеся в Оксфоде и Стэнфорде. Естественно, на английском, некоторые с английскими же субтитрами.

В общем, пособий — море. Учить — не переучить.

Posted in Без рубрики | Tagged , | Leave a comment

Размещение программы в App Store

Свершилось. Наконец-то опубликовал первую программу в App Store. Хотя это уже вторая программа, написанная мной для iPhone, размещением в магазине мне еще не приходилась заниматься.

Приложение называется «Verbs Game» и призвано помочь запомнить английские неправильные глаголы. Оно сделано в виде игры, несколько напоминающей тетрис.

Как и ожидал, процесс публикации небыстрый: 21 апреля я ее отправил в Apple и она получила статус «Waiting For Review» (т.е. была помещена в очередь на рассмотрение). 26 апреля ей наконец-то начали заниматься (об этом просигнализировала смена статуса на «In Review»). Еще через 5 часов она перешла в статус «Ready for sale», т.е. была опубликована в магазине. При этом реально она там появилась только через несколько часов, а до этого ее нельзя было найти через поиск.

В общем, процесс рассмотрения долгий, но проходит без каких-то особых проблем. У меня возникла только одна заминка: когда уже загрузил бинарник в iTunes Connect (сервис для публикации и управления приложениями), обнаружил, что в его свойствах указал, что для запуска программы требуется новейшая на данный момент версия iOS 4.2. Пришлось пересобрать и загрузить приложение заново, отметив, что достаточно iOS4.0.

Posted in Без рубрики | Tagged , | Leave a comment

Печально о Nokia

Вчера получил посылку от Nokia с подарком — смартфоном E7. Такой подарок Нокиа сделала всем участникам программы Forum Nokia Launchpad (программа поддержки разработчиков для нокиевских устройств), чтобы извиниться перед разработчиками за переход на Windows Phone. И это не единственный презент: обещают еще смартфон на этом самом Windows Phone, как только он будет готов; плюс различные бонусы по бесплатной технической поддержке. В общем, Нокиа делает все, чтобы вернуть внимание разработчиков к своим смартфонам.

А вернуть это доверие будет непросто. И дело тут не только в перескоке с Symbian на майкрософтовскую платформу. Лично у меня желение разрабатывать для их устройств пропало после того как я пару-тройку месяцев промучался с их Nokia QT SDK: более мерзкого средства разработки я не встречал — очень много недоделок. Об этом я писал в одном из своих постов еще в октябре. Складывалось впечатление, что нокиевские программисты, разрабатывающие этот сдк, нагло обманули свое руководство, отрапортовав о его готовности. И руководство бросилось рекламировать это творение и двигать его в массы. Для этого даже проводились семинары для мобильных программистов по разным городам России.

Однако, ежики кололись, но продолжали есть кактус. Так и я пытался писать QT-программу. Правда, не с помощью Nokia QT SDK, а с использованием Carbide.c++, которая хотя и была очень неудобной, но, по крайней мере, работала более менее стабильно. Разработка программы пусть медленно, но двигалась.

А потом на пару месяцев мне понадобилось переключиться на изучение и программирование для iOS. Когда срочная работа для iPhone была закончена, я попытался доделать свою программу для нокиевских смартфонов. Но вкусив прелести жизни с Xcode (IDE для iOS), к нокиевским  сдк я вернуться не смог: не мог уже мириться с неудобством карбида, а Nokia QT SDK, хотя за прошедшее время и был доработан (например, симулятор стал качественне), но все равно оставался сырым (очень долгое время компиляции).

В итоге я похоронил идею дописать свою программу для Symbian. Кстати, подарочный E7 только усилил мою уверенность в бесполезности написания программ для современных нокиевских смартфонов. И вот почему. На современном рынке мобильников правят бал устройства с тачскрином. А нокиевские смарты с тачем производят гнетущее впечатление. До этого из них я пользовался только бюджетным 5530 и сделал вывод, что это крайне неудобный смартфон: требуется делать много лишних движений для простейших задач. Например, чтобы начать ввод в текстовое поле, надо обязательно до него дотронуться.

Но я надеялся, что новый флагман Nokia E7 буде более удобным (ведь он выпущен на год с лишним позже, чем 5530). С точки зрения аппаратной части и дизайна он, и правда, оставляет нормальное впечатление: хотя и не бешенный восторг, но вполне приемлемо. Однако, когда его запускаешь, то приходишь в ужас:  за весьма сомнительными в плане юзабилити рабочими столами с виджетами скрывается тот же самый убогий интерфейс, как и на уже далеко не новых 5800 или 5530. Даже странно, что за столько лет Nokia так и не смогла доработать Symbian до более менее приличной поддержки смартфонов с тачскрином.

Поэтому у меня нет никакого желания ни использовать нынешние нокиевские смарты, как повседневные телефоны, ни писать для них софт. Остается надеятся, что устройства на Windows Phone будут гораздо лучше.

Закончу же пост словами, что все не так уж грустно: есть одна вещь, которая мне в Nokia нравится гораздо больше, чем даже в Apple — отсутствие бюрократии. Например, чтобы стать разработчиком для iPhone требуется несколько недель времени и 99 баксов денег. Чтобы вступить же в программу Forum Nokia Launchpad мне понадобилось всего несколько минут на заполнение небольшой формы на сайте и ни копейки денег, т.к. первый год членства бесплатный. А теперь вот еще и подарки получаю)

Posted in Без рубрики | Tagged , , | 2 Comments

Полезные ссылки по разработке для iOS

Написание прикладных программ под какую-либо платформу в основном состотит из решения простых задач навроде «как воспроизвести mp3-файл». При поиске ответа я предпочитаю пользоваться гуглом, а не искать в документации.

Гугл позволяет найти ответ быстее за счет того, что дает лаконичный и, как правило,  более понятный текст (и с точки зрения лингвистики, и с точки зрения семантики). В доках же надо надо проработать гораздо больший объем английского текста. А переводить я не люблю (что все равно приходится делать постоянно, и это сильно портит удовольствие от программирования).

(Хотя, естественно, к информации на разных интернет-форумах и блогах надо относиться весьма критично, и при необходимости проверять ее в документации.)

Часто бывает, что найдя в интернете решение некоторого вопроса, через некоторое время снова появляется необходимость вернуться на сайт с решением и уточнить некоторые детали. Поэтому в этом посте, который я буду регулярно обновлять, буду собирать (чтобы не потерять) полезные ссылки (как русские, так и английские) по разработке для iOS, нагугленные в процессе работы.

iPhone Programming: Using the Scroll View (devx.com) Кроме непосредственно работы с UIScrollView  в тексте рассматривается такой часто возникающий вопрос, как проблема перекрытия контролов клавиатурой.

Разработка iPhone/iPod touch приложений:Делаем шрифт Bold‘ом (stanfy.com.ua) Краткий обзор методов по работе со шрифтам. Статья особенно полезна списком имен шрифтов, установленных на iPhone.

Coming Soon to Pastebot: Music in the Background Реальный пример использования одного хитрого приема, как заставить свою программу работать в фоне, даже если она явно не предназначена для работы с геолокацией, звуком или VOIP.

UIKeyboardTypeNumberPad and the missing «return» key Из этого поста и по ссылкам из него можно узнать немало интересного, касающегося работы с клавиатурой. Например то, что клавиатура — это еще один объект UIWindow, с которым можно работать в программе.

Synthesizing a touch event on the iPhone (cocoawithlove.com) Прикольная штука.
Variable argument lists in Cocoa (cocoawithlove.com)
UIWebView must die (www.cocoanetics.com)
Tips & Tricks for conditional iOS3, iOS3.2 and iOS4 code (cocoawithlove.com)
Demystifying CGAffineTransform (iphonedevelopment.blogspot.com)
WebService [How-To] (http://www.iphonedevsdk.com/)
 

Posted in Без рубрики | Tagged | Leave a comment

Проблемы разработки под iOS на хакинтош

Как известно, для полноценной разработки под iOS необходима Mac OS (SDK работает только на ней). В свою очередь, настоящая Mac OS обитает исключительно на компьютерах Apple. Из-за этого, несмотря на бесплатность SDK, чтобы начать разработку, требуется потратить заметную сумму на покупку оборудования.

Чтобы приобщиться к миру iOS без затрат многие ищут альтернативные способы. Вариантов два: запустить Мак ОС в виртуальной машине или установить ее на обычный PC (хакинтош).

Поначалу у меня тоже не было Мака, поэтому пришлось исследовать обходные пути. В моем распоряжении был только обычный ноутбук. Вариант с виртуальной машиной проще, но не подошел: для запуска современных версий Мак ОС нужен комп с процессором, поддерживающим аппаратную виртуализацию. Мой ноут к таким не относится. Поэтому пришлось смотреть в сторону хакинтоша. Хакинтош — это обычный PC с установленной на нем Mac OS.

Установка хакинтоша — дело для новичка непростое. Информации в интернете полно, но пришлось долго в ней копаться, пока нашел относящуюся к моему железу. В результате дней через пять, перепробовав несколько версий и сборок, перебрав различные параметры установок, установив какие-то кексты, отредактировав какие-то файлы, я получил более-менее работающую систему.  Не удалось только оживить тачпад и встроенный Wi-Fi (для сети пришлось использовать внешний Wi-Fi USB контроллер DLink, благо он оказался под рукой, а нужные драйвера для мака просто скачал с сайта производителя).

Итак, промучавшись, установил Мак ОС. Наверное, можно было бы довести работу полученного хакинтоша до совершенства, разобравшись и с ВайФаем, и с тачпадом. Но решил больше с этим не заморачиваться. Тем более и так было жалко потраченного времени. Если бы знал, что все окажется так сложно, то даже и не брался бы за это дело.

В общем, начал работать с тем, что получилось. Хотя бубен постоянно приходилось держать наготове. Например, если сразу же после включения ноутбука, пытался загрузить Мак ОС, то получал неработающий экран. Случайно наткнулся на решение: сначала грузить Windows, а потом перезагружаться в Мак ОС. Почему-то это помогало.

Теперь напишу о проблемах, которые подстерегают разработчика уже после более-менее успешной установки хакинтоша. У меня была установлена сборка с версией 10.6.3. Поставил эту версию, так как она была самой новой из доступных, которую удалось установить. Она такой и до сих пор является. Это при том, что сейчас уже вышла версия Мак ОС 10.6.6. Счастливые владельцы настоящих Маков обновляются от версии к версии за несколько минут. Обладателям же хакинтошей приходится надеяться на удачу: возможно придется ждать несколько месяцев до появления обновленной сборки, которую удастся поставить на свой РС, затратив на это несколько часов, а то и дней. А проблема здесь заключается в том, что самую новую на данный момент версию iOS SDK 4.2 можно поставить, только если версия Мак ОС не ниже 10.6.4. Соттветственно, мой хакинтош оказался в пролете.

Эту статью я написал, чтобы начинающие разработчики лучше представляли сложности, с которыми им придется столкнуться при работе с хакинтошем. Пожалуй, вообще не стоит пробовать этот путь. Лучше время, потраченное на гугление, изучение хакинтошных сборок и пробование разных кекстов, провести за чтением хорошей книжки по Objective-C. Или использовать это время для зарабатывания денег на настоящий Мак.

Наверняка, в использовании хакинтоша для разработки есть и другие подводные камни, с которыми я не успел столкнуться за неполный месяц работы на нем. Как только появилась нужная сумма, я тут же побежал в магазин. Теперь на моем рабочем столе стоит красавец iMac)

Posted in Без рубрики | Tagged , , , | 2 Comments

Регистрация в Apple Developer Program

Давно не писал в блог. Связано это было с тем, что с ноября я временно оставил Symbian QT и начал осваивать iOS. По платформе Apple информации в сети море, поэтому все возникающие при работе вопросы и проблемы решаются простым гуглением. В отличие от новорожденного детища Nokia самому ничего придумывать не надо, все уже сто раз обсудили на форумах до меня.

Скажу только несколько слов о регистрации в Apple Developer Program. В первую очередь членство в этой программе необходимо для размещения своих приложений в App Store и для получения сертификатов, дающих возможность запускать приложения  на реальном неломанном устройстве (без jailbreak) во время разработки.

Процесс регистрации основательный и неторопливый. У меня он занял ровно 3 недели. Наверное, если регистрироваться как индивидуальный разработчик, он пройдет быстрее: меньше документов потребуется предоставить. Я же регистрировал ООО. Процедуру немного усложнил мой слабый разговорный английский: была пара звонков из службы поддержки. Но вцелом все просто и понятно.

Теперь могу размещать в App Store бесплатные приложения (чтобы добавить платные требуется сделать еще несколько дополнительных шагов). Первая программа уже почти готова — на днях займусь ее публикацией в магазине.

Posted in Без рубрики | Tagged , , | 21 Comments

Среда разработки для Symbian QT

Казалось бы, вопросов тут быть не может — нужно использовать Nokia QT SDK, который Нокия сейчас позиционирует как самый удобный инструмент для разработки под платформу Symbian. Однако, при использовании этой среды я столкнулся с серьезными проблемами из-за которых перешел на Carbide.c++. Подробнее об этом и хочу написать. Тем более, судя по сообщениям на форуме Нокии, эти проблемы мешают и другим программистам.

Сначала немного истории. До появления Nokia QT SDK программы для Symbian QT разрабатывали в основном с помощью Carbide.c++. Карбид  требовалось предварительно настроить. Как это сделать подробно разобрано в видеоруководстве (можно найти и аналогичную статью с скриншотами). Чтобы заставить карбид работать с QT надо загрузить и установить несколько дополнительных компонентов. Никаких сложностей это не вызывает. Единственный вопрос   появляется при установке ActivePerl: в руководстве требуют версию 5.6, которую уже сложно найти. Но можно вместо нее использовать версии 5.8 или 5.10. В итоге можно получить вполне работоспособный инструмент для работы с QT.

Разработку в карбиде нельзя назвать удобной: например, в редакторе нет поддержки сигналов и слотов. А о простейших синтаксических ошибках в коде узнаешь только после завершения компиляции.

Чтобы упростить жизнь программистам, Нокия представила Nokia QT SDK, который основан на Qt Creator (Qt Creator – это кроссплатформенная IDE, предназначенная специально для разработки на QT). Этот инструмент работает «из коробки», т.е. работу можно начинать сразу же после установки.

Лично мне Qt Creator кажется неудобным (речь идет о последней на данный момент версии 2.0.1).  Например, нет  панели для навигации по классам в проекте. Наверное, эта и другие полезные возможности появятся в последующих версиях. На данный момент это очень молодой проект. Однако особенности кьют, вроде сигналов-слотов, он поддерживает хорошо.

Ну да ладно, удобство – дело десятое, если выбирать не из чего. Главное, чтобы работало. И вот тут начинаются проблемы. В комплекте с Nokia QT SDK идет симулятор. Именно симулятор, а не эмулятор.  А это значит, что в реальности, когда мы запускаем программу в симуляторе, мы имеем дело с программой не для Symbian, а для той ОС, в которой мы работаем. Например, Windows. Эта программа лишь выглядит, как программа на смартфоне. Впрочем, в большом числе случаев возможностей симулятора было бы вполне достаточно. Тем более, что можно подключить настоящие эмуляторы. Как это сделать написано здесь: Setting Up Development Environment for Symbian.

Однако, и с симулятором, и с эмулятором есть проблемы: почему-то на них нельзя работать с правым софткеем. На этом софткее всегда висит команда “Exit”.  С левым – можно работать, а с правым – нельзя. Из-за этой ошибки невозможно полноценно разрабатывать   с помощью эмуляторов-симуляторов.

Тогда я решил всегда запускать билды и отлаживаться прямо на телефонах. И тут столкнулся с еще одной проблемой: Nokia QT SDK очень долго  компилирует под реальный девайс мою пока еще не самую большую программу (около 30 классов).  На это уходит 6 минут. Как я понял, каждый раз происходит перекомпиляция всего проекта целиком, а не только измененных файлов. Кроме того я получаю тысячи предупреждений вроде такого:

In file included from /NokiaQtSDK/Symbian/SDK/epoc32/include/e32std.h:13,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/../../src/corelib/arch/qatomic_symbian.h:46,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/qatomic_symbian.h:1,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/../../src/corelib/arch/qatomic_arch.h:86,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/qatomic_arch.h:1,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/../../src/corelib/thread/qbasicatomic.h:227,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/qbasicatomic.h:1,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/../../src/corelib/thread/qatomic.h:46,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/qatomic.h:1,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/../../src/corelib/tools/qbytearray.h:45,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/qbytearray.h:1,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/../../src/corelib/tools/qstring.h:46,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/qstring.h:1,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/../../src/corelib/kernel/qobject.h:48,
from /NokiaQtSDK/Symbian/SDK/include/QtCore/qobject.h:1,
from /NokiaQtSDK/Symbian/SDK/include/QtGui/../../src/gui/kernel/qwidget.h:46,
from /NokiaQtSDK/Symbian/SDK/include/QtGui/qwidget.h:1,
from /NokiaQtSDK/Symbian/SDK/include/QtGui/../../src/gui/widgets/qmainwindow.h:45,
from /NokiaQtSDK/Symbian/SDK/include/QtGui/qmainwindow.h:1,
from /NokiaQtSDK/Symbian/SDK/include/QtGui/QMainWindow:1,
from /Users/Developer/udali23/mainwindow.h:4,
from /Users/Developer/udali23/mainwindow.cpp:1:
/NokiaQtSDK/Symbian/SDK/epoc32/include/e32cmn.h:6166: warning: 'TAny* operator new(TUint)' redeclared without dllimport attribute: previous dllimport ignored
/NokiaQtSDK/Symbian/SDK/epoc32/include/e32cmn.h:6172: warning: 'TAny* operator new(TUint, TUint)' redeclared without dllimport attribute: previous dllimport ignored
/NokiaQtSDK/Symbian/SDK/epoc32/include/e32cmn.h:6178: warning: 'void operator delete(TAny*)' redeclared without dllimport attribute: previous dllimport ignored
/NokiaQtSDK/Symbian/SDK/epoc32/include/e32cmn.h:6185: warning: 'TAny* operator new [](TUint)' redeclared without dllimport attribute: previous dllimport ignored
/NokiaQtSDK/Symbian/SDK/epoc32/include/e32cmn.h:6191: warning: 'void operator delete [](TAny*)' redeclared without dllimport attribute: previous dllimport ignored

И если тьма предупреждений – это крупное неудобство, на которое можно закрыть глаза. То 6 минут на каждый билд практически останавливают разработку.

Поэтому я использую Carbide.c++ с двумя одновременно подключенными телефонами. Один – тач 5530. Другой – клавиатурник E51. Сборка (повторная) и развертывание приложения на устройстве занимает не более 2 минут. Не самая удобная IDE, зато работает.

Update На форуме Нокии порекомендовали вместо online-версии Nokia QT SDK поставить offline-версию. Якобы это должно решить все проблемы. Не знаю, это ли мне помогло. Но одну проблему решило — теперь Nokia QT SDK не перекомпилирует весь проект целиком при изменении в одной строчке. Хотя, скорее, тут помогло то, что я пересоздал проект заново. В любом случае, повторная компиляция в карбиде все равно проходит быстрее (процентов на 30). Поэтому продолжаю пользоваться им.

Posted in Без рубрики | Tagged , , , , | Leave a comment