Разработка для iOS

В январе 2014 я решил, что разработка дополнений для MODX Revolution это, конечно, круто, но нужно попробовать и что-то другое. Мобильные устройства меня интересовали всегда, поэтому решил поучиться на разработчика для iOS.

Почему именно iOS, а не Android? Да просто потому, что яблочные устройства давно заменили все остальные устройства у меня дома - уж больно хороши. AppStore я считаю образцовым магазином, а приложения в нём меня постоянно восхищают.

В общем, купил пару книг, оплатил доступ в программу разработчиков ($100 в год) и... забросил это дело на 9 месяцев, во время которых сделал хостинг, пару сайтов, сгонял в отпуск и обновил почти все свои дополнения для MODX 2.3. И вот только совсем недавно я смог найти 2 спокойных недели и вдумчиво почитать книжки.

Результатом стало моё первое простенькое приложение для сайта Критиканство.

Критиканство, в первую очередь, сводная база оценок по фильмам и играм, так что приложение просто выводит информацию из БД сайта. Там нет ничего такого, чего бы вы не нашли на http://www.kritikanstvo.ru, но оно может быть полезно для быстрого просмотра оценок фильма перед походом в кинотеатр.

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

Итак, что умеет это приложение?

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

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

При клике на позицию выводится её карточка, с двумя табами: Рейтинг и Галерея. -

Как видите, приложение комфортно чувствует себя при повороте.

Самое интересное в карточке позиции - это рецензии критиков. Они выводятся в сокращенном виде примерно таким же списком, как и на сайте Критиканства, но вы можете прочитать и полную версию - при касании открывается web view с сайтом критика: -

Ну а при нажатии на синее название позиции, вы отправитесь на само Критиканство за дополнительной информацией. -

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

Второй таб карточки позиции содержит в себе изображения галереи. Они показываются на полный экран, скрывается даже status bar, чтобы вас ничего не отвлекало от разглядывания постеров. -

Здесь тоже нет никаких элементов управления, показ и скрытие происходит при одиночном касании, переключение картинки жестами вправо-влево.

Ну и последнее окно - это Поиск. Здесь та же самая таблица, что и на главном окне, и при выборе позиции вы также отправляетесь на ту же карточку фильма\игры. -

Поиск на стороне сервера пока очень простой - через LIKE по названиям. Нет никакой морфологии и подстановки похожих результатов. Возможно, со временем доработаем.

Разработка

Не претендую вообще ни на что и совсем не уверен, что приложение одобрят в AppStore, но так как работа проделана - нужно отчитаться.

Как уже говорил, от начала обучения и до релиза первой версии прошло всего 2 недели, всё сделано очень простенько, но, я надеюсь, со вкусом. Если приложение будут пользоваться спросом, то обещаю его регулярно дорабатывать и обновлять.

В работе использовал Xcode и AppCode. В первом рисовал интерфейс, а во втором, собственно, писал код. Оба инструмента отлично работают одновременно с одним проектом, так что выходит очень удобно.

Под конец работы выяснилось, что из Xcode6-beta6 нельзя ничего отправлять в магазин, так что пришлось вернуться в Xcode5 - разница приличная. Выяснилось, что в Xcode6 я наворитил всякого в интерфейсе с layout margin, из-за чего он вообще не открывался в предыдущей версии. Пришлось переделывать. Затем выяснилось, что галерея, прекрасно чувствовавшая себя в iOS8, нифига не работает в iOS7 - пришлось переделывать и её.

В общем, в последние два дня весь интерфейс бы переделан заново. Не пользуйтесь бета версиями IDE и iOS при разработке!

В работе использовал только Objective-C. Чтобы начать использовать Swift нужно сначала понять, чем он лучше\хуже Objective-C, поэтому я начал с азов (немного пришлось почитать и про сам C). К тому же, говорят, что Swift пока еще сыроват и активно дорабатывается.

Заключение

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

Здесь нет зоопарка браузеров, нет html, нет css, нет javascript и нет необходимости их все увязывать друг с другом. Код не выгружается на сервер, ты не зависишь от сетевого соединения.

Весь внешний вид рисуется в Interface Builder - и это невероятно просто и удобно (когда разберешься). Для тестирования есть эмулятор (все скриншоты в заметке сняты с его помощью), можно проверять работу в разных версиях, даже не имея реальных устройств. Ну а если у вас есть iPhone или iPad, можно зарегистрировать их в программе разработчиков и проверять работу там.

В общем, Apple очень постаралась, чтобы разработчика ничего не отвлекало - как обычно. Ну а теперь скрестим пальцы на две недели и будем ждать, пройдёт ли моя проба пера модерацию в магазине.

Обновлено 25.09.2014

Всем спасибо, отлично скрестили пальцы - приложение прошло модерацию и доступно в AppStore!

Скорее всего, это могло бы случиться и раньше, но я там исправил пару недостатков и залил новую версию 20го сентября. Так что, если считать от этой даты, то приложение стояло в очереди всего 5 дней.

Ну а если с момента загрузки первой сборки, то все 18 дней.

← Предыдущая заметка
Про ответные санкции
Следующая заметка →
Про смысл жизни
Комментарии (10)
52d534d19ee1c6c59c002b3f8328e76aDmytro Lukianenko
08.09.2014 10:01

Успехов в начинании! Рецензия в Апсторе зачастую строже чем сдать проект Клиенту. В целом это хорошо так как качество контента таки выше. Могут зарезать только по причине того что функционал полностью копирует функционал сайта не добавляя ничего нового. Хотя думаю что все возможно, хотя мой проект зарезали именно на этом.

Кста а чего AppCode? в целом в XCode есть все необходимое ? Просто не сильно вникал. Или повлиял фактор того что под веб используешь phpStorm ? и тут все аналогично ?

bezumkinВасилий Наумкин
08.09.2014 15:05

Могут зарезать только по причине того что функционал полностью копирует функционал сайта не добавляя ничего нового.

Таких приложений завались - тот же Кинопоиск, например.

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

И что, его так и нет в AppStore? Вообще, у тебя есть что посмотреть готового в магазине?

Кста а чего AppCode? в целом в XCode есть все необходимое? Просто не сильно вникал. Или повлиял фактор того что под веб используешь phpStorm? и тут все аналогично?

Конечно, после PhpStorm и PyCharm в Xcode очень непривычно работается. Как минимум, не смог настроить тёмный внешний вид. Редактор - пожалуйста, а сам интерфейс IDE ни в какую.

А в AppCode всё родное, очень удобно и приятно работать.

ElectricaМихаил
08.09.2014 11:46

Молодец! А я вот Android все никак не могу освоить. То времени то что то не так. Но думаю к новому году сяду поплотнее.

Андрей88Андрей
13.09.2014 08:31

А я вот ничего не осваиваю, но искренне за вас рад! Хорошо, когда человек не только на одном зацикливается, а ищет где бы еще себя реализовать! Круто!!!

Андрей
21.09.2014 12:52

Василий, подскажи, какие книги изучал по данной теме - что посоветуешь?

bezumkinВасилий Наумкин
21.09.2014 13:08

Я читал вот эту, плюс поисковики по всем вопросам.

Алфёров Юрий
01.10.2014 20:59

Молодец, а я ноты учу, решил освоить гриф гитары на про уровне!

alex.vakhitovAlex Vakhitov
03.10.2014 03:59

Радует что для 6 оптимизированно (: то большинство приложений используют маштабирование на большом экране.

bezumkinВасилий Наумкин
03.10.2014 06:40

Ну, там вообще "резиновая верстка", чтобы работало в ландшафтном режиме и на iPad.

Классная штука - Autolayout Constraints.

alex.vakhitovAlex Vakhitov
03.10.2014 06:43

Просто он не во всех приложениях работает. В основном везде маштаб на крупный меняется

bezumkin
Василий Наумкин
30.06.2022 03:58
Есть ли возможность формировать "friendly URL aliases", используя аналог translit MODx? ...
bezumkin
Василий Наумкин
27.06.2022 03:32
Спасибо за исправления, очень выручаешь =) Но учитывая количество не описаных в заметке дополнительн...
bezumkin
Василий Наумкин
27.06.2022 03:10
что будет использоваться для вывода многоуровневого меню Посмотри как работают комментарии на этом ...
bezumkin
Василий Наумкин
25.06.2022 11:56
Поправил, спасибо!
bezumkin
Василий Наумкин
22.06.2022 10:08
Я обычно не пользуюсь RTE редакторами, потому что они пишут всякое непонятное что в HTML. Но можно в...
bezumkin
Василий Наумкин
21.06.2022 01:58
onLoad(data) { this.total = data.total }, и onLoad({total}) { this.total = total }, В нашем случ...
bezumkin
Василий Наумкин
20.06.2022 14:01
Прекрасно тебя понимаю, я когда сам в этом разбирался - голова дымилась. Но зато теперь прямо-таки п...
bezumkin
Василий Наумкин
20.06.2022 09:30
Не надо, оно по умолчанию так - я просто чуть более подробно написал.
bezumkin
Василий Наумкин
19.06.2022 13:42
А можно же из 1 файла сделать 2 экспорта. По-умолчанию, и отдельно для футера: export const Footer =...
bezumkin
Василий Наумкин
19.06.2022 09:44
Тебе спасибо, что поддерживаешь рублём мои начинания!