Разработка для 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 комментариев

Dmytro Lukianenko
Успехов в начинании! Рецензия в Апсторе зачастую строже чем сдать проект Клиенту. В целом это хорошо так как качество контента таки выше. Могут зарезать только по причине того что функционал полностью копирует функционал сайта не добавляя ничего нового. Хотя думаю что все возможно, хотя мой проект зарезали именно на этом.
Кста а чего AppCode? в целом в XCode есть все необходимое ? Просто не сильно вникал. Или повлиял фактор того что под веб используешь phpStorm ? и тут все аналогично ?
Василий Наумкин
Могут зарезать только по причине того что функционал полностью копирует функционал сайта не добавляя ничего нового.
Таких приложений завались - тот же Кинопоиск, например.
Хотя думаю что все возможно, хотя мой проект зарезали именно на этом.
И что, его так и нет в AppStore? Вообще, у тебя есть что посмотреть готового в магазине?
Кста а чего AppCode? в целом в XCode есть все необходимое? Просто не сильно вникал. Или повлиял фактор того что под веб используешь phpStorm? и тут все аналогично?
Конечно, после PhpStorm и PyCharm в Xcode очень непривычно работается. Как минимум, не смог настроить тёмный внешний вид. Редактор - пожалуйста, а сам интерфейс IDE ни в какую.
А в AppCode всё родное, очень удобно и приятно работать.
Молодец! А я вот Android все никак не могу освоить. То времени то что то не так. Но думаю к новому году сяду поплотнее.
А я вот ничего не осваиваю, но искренне за вас рад! Хорошо, когда человек не только на одном зацикливается, а ищет где бы еще себя реализовать! Круто!!!
Василий, подскажи, какие книги изучал по данной теме - что посоветуешь?
Василий Наумкин
Я читал вот эту, плюс поисковики по всем вопросам.
Алфёров Юрий
Молодец, а я ноты учу, решил освоить гриф гитары на про уровне!
Alex Vakhitov
Радует что для 6 оптимизированно (: то большинство приложений используют маштабирование на большом экране.
Василий Наумкин
Ну, там вообще "резиновая верстка", чтобы работало в ландшафтном режиме и на iPad.
Классная штука - Autolayout Constraints.
Alex Vakhitov
Просто он не во всех приложениях работает. В основном везде маштаб на крупный меняется
bezumkin.ru
Personal website of Vasily Naumkin
Прямой эфир
Александр Наумов
23.07.2024, 00:20:37
Василий, спасибо большое!!
Василий Наумкин
01.07.2024, 11:56:41
Да, верно, именно так. А в контроллере, скорее всего, ловить данные методом post.
Василий Наумкин
26.06.2024, 09:38:15
О, точно, вылезает если не залогинен. Спасибо, исправил!
Василий Наумкин
09.04.2024, 04:45:01
> Ошибка 500 Это не похоже на ошибку Nginx, это скорее всего ошибка PHP - надо смотреть его логи. ...
Василий Наумкин
20.03.2024, 21:21:52
Volledig!
Андрей
14.03.2024, 13:47:10
Василий! Как всегда очень круто! Моё почтение!
russel gal
09.03.2024, 20:17:18
> А этот стоило написать хотя бы затем, чтобы получить комментарий от юзера, который ничего не писал...
Александр Наумов
27.01.2024, 03:06:18
Василий, спасибо! Извини, тупанул.
Василий Наумкин
22.01.2024, 07:43:20
Давай-давай!
Василий Наумкин
24.12.2023, 14:26:13
Спасибо!