О том, как я написал простое приложение для Android/iOS

    Хочу сразу отметить, что это не статья от профессионала, скорее взгляд любителя на мобильную разработку, скажем так, «с нуля». Мое основное занятие — это создание сайтов. В данное время я работаю у провайдера интернета и занимаюсь поддержкой внутреннего биллинга/сайта и так далее (PHP и немного Perl), довольно скучное занятие, скажу я вам. В общем, я обычный провинциальный «программист».

    В один прекрасный момент у руководства компании возникла идея сделать мобильное приложение для iPhone, которое могло бы показать баланс пользователю, его статус, возможность взять «обещанный платеж», фактически, дублирование личного кабинета, но чтобы приложение. Не зная про мобильную разработку совсем ничего, идею воспринял с большим энтузиазмом, потому что всегда приятно делать/узнавать что-то новое, думаю, это у всех так.

    Придя на работу в один из серых скучных дней, я решился и написал в поиске Google «как сделать мобильное приложение». Это было очень наивно. Кажется, я даже попробовал задать вопрос на Toster, «с чего начать разработку под мобильные приложения», тогда я еще не понимал насколько глупым воспринимается этот вопрос профессионалами.

    Довольно быстро я разделил для себя разработку на две части, это был Android и iOS, потому что они совсем разные (поиск подсказал.

    Как-то я наткнулся на Phonegap, насколько я понял, пишем на Javascript+html+css, а потом получаем готовое приложение для Android/iOS, но почему-то мне не хотелось пользоваться подобными решениями, во-первых: были непонятные отзывы, кто-то хвалил, кто-то ругал, а во-вторых: мне хотелось попробовать как это изнутри, каково это сделать «нативное» приложение.

    План и подготовка


    Собственно, идея довольно проста:
    • Логин экран с логином/паролем
    • Основной экран с информацией об абоненте (ФИО, № договора, баланс, статус (Активен, Отключен), есть ли авария на доме, кнопка Активировать обещанный платеж
    • Экран с платежами (зачисления на счет)
    • Экран со списаниями по счету

    Для функционирования приложения я написал простейшее API на PHP, скрипт который по определенному запросу отвечал строкой в JSON-формате. Сделать это оказалось элементарно.

    Начать решил с Android.

    Android


    Начал я с установки Android Studio, первоначально смутило количество кнопочек/иконок, но за пару дней я уже был как рыба в воде. Для начала надо было понять как вообще делаются приложения, очень помогает изначальное «Hello world!» которое создается по-умолчанию. Выглядело все достаточно просто и понятно. Погуглив «Как начать разработку в Android Studio», я понял, что надо скачать SDK. Открыв SDK-manager я не понял вообще ничего, ну, точнее, не понял что именно надо делать, поэтому поставил все галочки и ждал пока все скачается. Для чего оно мне нужно я совсем не понимал, общее представление конечно было «чтобы работала поддержка такой-то версии», но почему надо все отдельно качать и выбирать среди сотен галочек — бррр.

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

    Как оказалось, для Android пишут на Java. Про Java я знал только то, что это язык программирования и это не Javascript.
    Решил разбить большую задачу на более мелкие.

    Теперь возникла ситуация когда у меня, в принципе, все готово, но я не знал как вообще делается приложение, поэтому, погуглив, я понял что никакой нормальной информации на русском языке мне не найти (либо я плохо искал). Информация либо устаревшая, либо не то что мне требуется. Спас меня youtube и знание английского языка. Сделав несколько запросов в ютюбе можно найти массу информации, да еще и с самим процессом — это очень помогло, если бы не обучающие видео, думаю, приложение я бы делал несколько месяцев.

    Выбирая минимальную версию Android я остановился на 4 что-то там :) (Охват аудитории 90%+ если верить Google).

    Опять же разбив свои задачи на более мелкие я искал туториалы в youtube, например: «how to get json in android» или «menu in android studio». Конечно, пришлось пересмотреть штук 30 разных видео и все они были на английском (одно на немецком и одно на китайском — когда показывают не так сложно самому дойти что же говорят :)).

    Разработка под Android заняла примерно неделю с момента установки Android Studio. После чего отобрав планшет у сына я смог протестировать свое приложение на реальном устройстве — просто подсоединив его к компьютеру.

    Публикация в Google Play


    Сначала я думал что будет очень сложно и даже переживал, но как оказалось всего 25$ и фактически без каких-либо серьезных проверок приложение попало в Google Play и через несколько часов было доступно в поиске, публикация заняла около одного дня.

    iOS


    Отдохнув пару дней и поразмыслив, решил что пора реализовать тоже самое приложение под iOS. Но, оказалось, что бесплатная среда разработки xCode может быть запущена исключительно в среде Mac. Пришлось скачать образ виртуальной машины MAC OS Yosemite и запустить ее через VMWare. Сделать это было очень просто и фактически не требовало от меня никаких телодвижений кроме как «ждать».

    После чего я скачал xCode и начал разбираться, дело пошло быстрее, так как разработка под мобильные устройства что для Android, что для iOS примерно схожа в своих идеях.

    Язык программирования выбрал Swift. Версию iOS минимум 7.1+

    В принципе разработка под iOS была более простой, хотя баги симулятора присутствовали, но весь процесс оказался более удобным, нежели под Android. Опять же я открыл youtube и смотрел видео/читал руководства о том, как сделать какую-то вещь. Например, нагуглил прекрасный скрипт который делает slide menu, которого у меня не было в Android. В общем, еще один марафон и за неделю было готово улучшенное приложение, добавил возможность пополнить счет с помощью карты предоплаты и совместил платежи/списания в одно окно.

    Использовал тоже самое API (тот же скрипт, что и для Android).

    Публикация в iOS


    Тут все оказалось не так радужно и просто как в Android. Во-первых, оказалось, что мне требуется реальное устройство для тестирования приложения, а без него никак не опубликоваться. Пришлось искать iPhone и привязать его к профилю тестирования.

    Опять же, при создании аккаунта был выбор между «компания» и «индивидуальный разработчик», но начитавшись страшилок про 4+ месяца проверки компаний я решил регистрироваться как индивидуальный разработчик. Сделать это было не сложно, главное оплатить 99$ за аккаунт разработчика iOS со своей кредитной карты чтобы имя совпадало (подсказал поиск). Платеж проходил 2 дня.

    После чего пришлось искать целое видео «how to publish in app store» и следовать инструкции, настолько там все непонятно. Какие-то сертификаты, туда — сюда. В общем, не очень удобно, хотя и сделать надо лишь один раз :).

    Приложение ушло на проверку и ждало очереди около полутора недель. После чего было принято. Кстати, как показали логи, проверка была примерно такая: Логин -> Баланс -> Платежи -> Баланс. И все, хотя была еще страница «Пополнить баланс», но ее не проверяли (а зря, я там накосячил и пришлось выкладывать новую версию программы 1.1 которую тоже проверяли больше недели).

    Выводы


    1. Как оказалось это не сложно даже для человека который никогда не использовал Java/Swift/Mac OS.

    2. Много новой информации заставляло мой мозг просто переполняться в первые дни и зависать. Помогал только сон, после него я более четко понимал что делать дальше. Не надо бояться таких этапов. Иногда мне казалось что «я вообще ничего не понимаю», были ощущения что я бьюсь головой в бетонную стену. Но на следующий день я решал проблему. Например, в Android, в самом начале у меня возникла ситуация «ничего не работает», когда я подключался к серверу и должен был получать информацию, оказалось, надо было это делать в асинхронном потоке. Потратил целый день.

    3. Очень быстрое устаревание руководств/видео уроков. Платформы настолько быстро развиваются, что надо сразу проверять актуальность информации. На русском языке ее очень мало, после нескольких попыток я даже бросил искать и сразу начал штудировать stackoverflow и англоязычный интернет. Youtube со своими видео-уроками просто спас меня! Я открывал видео на одном мониторе и работал на втором. Без базового английского — никуда.

    4. Сервисы вопрос-ответ реально помогают! Иногда, впадая в ступор я задавал вопросы и почти сразу получал ответы — очень удобно если находишься в тупике.

    5. Apple более чутко относится к публикации приложений, но особых проблем кроме длительного времени я не заметил. Android же делают все очень быстро (зато пускают всех подряд, как я понял).

    6. В общей сложности я потратил почти месяц (на разработку около двух недель с перерывами). Стоило ли оно того — думаю да, было очень интересно. Если у вас есть желание — попробуйте, все оказалось не так сложно. У меня нет смартфона Android/iPhone, но и без них все оказалось просто. Симуляторы работают достоверно.

    Приложение называется dagotel, но оно создано для клиентов, поэтому дальше логина не пустит. Разве что посмотреть скриншоты.

    Понятия не имею, зачем я написал эту статью и какие цели преследовал, но раз написал, решил опубликовать.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 47

      0
      Занятно. :) Только вот непонятно, почему сразу не подключили устройство Android к среде разработки, вместо AVD? В режиме разработчика и отладки по USB?
      AVD — это для супер-мощных компьютеров со 100500 гигабайтами оперативной памяти. Пока ни разу в жизни не встречал разработчика, который реально постоянно запускал и отлаживал свои приложения на AVD. :)
        0
        Я обычно отлаживаю на реальных устройствах, виртуалки не люблю. Хотя существуют случаи когда AVD необходим, например эмуляция умных часов. Сейчас на рынке много предложений, быструю виртуалку телефона/планшета не трудно найти.
          0
          Эм… эмулятор работает отлично, если запускать его в x86-режиме и с OpenGL, даже на среднем компьютере разработчика. И пользоваться им гораздо удобнее — заливается софтинка быстрее, чем в реальное устройство, не нужно рвать контекст разработки и голову туда-сюда водить, просто выводим изображение на второй монитор например и всё.
            +1
            Посоветуйте пожалуйста «быстрый» эмулятор Android для Windows 7. Я пробовала только гугловский стандартный, он страшно медленный, невозможно пользоваться. Перешла на отладку с планшетом — намного быстрее, но все равно недовольна временем заливки/деплоя/старта приложения. Думаю полярные мнения по этому вопросу связаны с разным опытом — некоторые, как я, столкнувшись один раз с медленным эмулятором не стали ничего больше пробовать.
              +2
              Если вдруг актуально ещё — попробуйте Genymotion. На Core i7 действительно неплохо работает штатный эмулятор Android, если поставить модуль аппаратной акселерации от Intel, выбрать тип процессора виртуального андроида Intel Atom, и использовать аппаратное ускорение графики. Но с Genymotion всё чуть проще :)
                0
                www.genymotion.com
                System requirements: Microsoft Windows Vista (32/64 bit) or above
                с работы гляну, дома хипстерская WinXP :(

                а вообще я кроссплатформу пишу, и так совпало что основные функции уже дописаны, теперь под Win только тестирую, на планшете изредка — все работает, в основном чтобы FPS глянуть, мобильные GPU помедленнее будут
            +3
            А как же всеми любимый Genymotion? Ну а вообще идеально TDD с использованием Robolectric.
              0
              Глупости. Уже на протяжении лет трёх известно о том, что дело вот вообще не в оперативной памяти. почитайте про HAXM
                0
                Спасибо за наводку, прочитаю, чтобы более не заблуждать и не заблуждаться :)
              0
              Не так давно сам окунулся в мир мобильной разработки, но только на ios. Самое сложное было сломать парадигмы сложившиеся в голове после php.

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

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

              Далее натыкаешь на блокировку ресурсов. Та же камера инициализированная в одной сцене и не деинициализированая при закрытии этой сцены не поддается инициализации во второй раз.

              Далее ты понимаешь, что у тебя потекла память и обнаруживаешь, что у тебя жесткие ссылки между мертвыми контроллерами и они висят в памяти ссылаясь друг на друга, начинаешь переделывать.

              И еще куча всякой специфики на освоение которой у меня ушло недели две. В итоге приложение пришлось переписать с 0 уже с пониманием, что вообще там внутри происходит.
                +1
                Ну, у меня аналогичная картина. Сам программист PHP c 6-ти летним опытом, активно пишу на Symfony2. Год назад залез в iOS, и понеслась, точно то же, что и написано. Здесь я бы сказал, что сама проблема в подходе.
                PHP — «инлайновый» скриптовой язык, при разработке на котором, все привыкли что процесс потом умирает. В результате, кто же смотрит за ссылками на объекте, их количество и прочью ерунду, которая должна активно удалятся при неиспользовании. Сломать этот стереотип может ReactPHP, где все крутится на том же одном процессе (libevent).

                P.S. Пиарюсь: вот что получилось после PHP — itunes.apple.com/ru/app/zolotaa-kollekcia-skazok/id972444801?mt=8
                  0
                  А я читал ваши комментарии к какому то посту. Вы кажется разрабатывали это приложение в свободное время уже имея жену и ребенка. На самом деле вызывает уважение. Дизайн покупали или нашли такого же энтузиаста?
                    0
                    Да, покупали. Скажим, финансы просто позволяли купить. Если бы не было возможности, наверное бы искал точно такого же энтузиаста. Но что-то очень сильно сомневаюсь, что качество тогда бы было в хорошее.
                +4
                Сам потихоньку осваиваю Android разработку, смотрю и читаю этого человека — startandroid.ru/ru, может кому пригодится.
                Очень просто и доходчиво. Уроки(уже больше 150) от «Hello world!» до трехмерной графики.
                  +1
                  Для 3Д используй Unity, заметно жизнь себе облегчишь :)
                    0
                    Пока до графики не дошел, спасибо за наводку.
                      0
                      Когда дойдете до графики, а потом наиграетесь с Unity, вспомните мои слова — попробуйте Open GL напрямую, для Android это OpenGL ES, GLES, он по тексту совместим с OpenGL на PC.
                        +2
                        Ок, тогда план действий:
                        1. Попробовать ту библиотеку, которую предлагают в уроках(пока не знаю какую) для ознакомления
                        2. Попробовать Unity т.к. остальное рядом не стояло
                        3. Пересмотреть всю свою жизнь и перейти на светлую сторону OpenGL и обрести дзен.

                        Пункт №0 — написать диплом.
                    +2
                    При заходе с WP 8.1 (IE)
                    image

                    Автору сайта написал.

                    P.S. разумеется, ясно, что взломать пытаются совсем не устройство =)
                      0
                      Заходил на этот сайт первым делом, но там было мало свежих уроков и на сайте был вирус. Как я понял им больше не занимаются.
                        0
                        Последняя новость за 24 апреля 2015 года.
                        Занимаются, но по мере необходимости походу.
                      +5
                      требуется реальное устройство для тестирования приложения, а без него никак не опубликоваться


                      Это заблуждение. При компиляции выбираете вместо симулятора iOS device и нажимаете Archive…
                        +1
                        Но тогда есть некий шанс, что ваше приложение дико тупит, едет в плане вёрстки или не работает вообще на реальном устройстве, хотя в симуляторе всё ок.
                          +3
                          Ни разу не сталкивался с вышеупомянутым, но, вероятно, такое случается. В любом случае review team поймает забесплатно эти ошибки)
                            +3
                            А с чем связаны данные проблемы? с тем, что оно было архивировано без реального устройства или с тем, что оно не было на нем протестировано? Предполагаю, что второй вариант верный. Тогда надо разделить два утверждения.

                            1) Для тестирования требуется реальное устройство, так как запущенное на эмуляторе приложение ведет себя не на 100% как на реальном устройстве и некоторые функции (например камера) вообще не доступны.

                            2) Для публикации реальное устройство не обязательно, достаточно сделать как советовал PapaBubaDiop
                            0
                            Я проходил этапы публикации через xCode и жестко завис на этапе тестирования на реальном устройстве, даже создавать вопрос на stackoverflow и там ответили что мол да, нужно (http://stackoverflow.com/questions/29747066/do-i-have-to-register-ios-device-in-apple-developer-programm). Возможно, где-то натупил.
                              0
                              Для выкладывания в магазин не надо. Кстати, Вам там ответили так же.
                              You can create «Distribution provisional profile» to publish app. its not required to add device id
                                0
                                Это значит я натупил )
                                  +1
                                  Не, телефон нужен для комфорта — в эмуляторе тыкаешь мышкой, в жизни — пальцем. В играх есть разница. Например, какое deltaX выбрать для события двинуться вправо? Мышкой этого не уловишь.
                            0
                            Лучше бы привели все ссылки на видео и т.п., чтобы новичкам не нужно было тратить время.
                              +2
                              Их очень много и ссылки я не сохранял, думаю новички сами способны использовать поиск :)
                              +2
                              Хорошая статья, интересно читается, познавательно, автор молодец. Мне не понравился только один момент:
                              После чего отобрав планшет у сына я смог протестировать свое приложение на реальном устройстве — просто подсоединив его к компьютеру.

                              Наверное, с боем отбирали? Нехорошо. Отбирать планшет нужно было бы у руководства компании (они должны были обеспечить). Верните планшет сыну, это персональное устройство. Я вот свой планшет не могу дать в чужие руки — личные данные как-никак. Лучше купите ему новую модель (премии «за разработку нужного для компании мобильного клиента» должно хватить), а старый пускай будет у вас, самое то для тестирования и отладки. Надеюсь планшет вам еще пригодится — пишите новые программы и статьи.
                                +1
                                Это немного утрировано, конечно же, у него есть свой компьютер, так что отряд не заметил потери бойца )
                                  +2
                                  Ваша история несколько типична. В компании Х руководству приходит в голову светлая идея: нам нужно мобильное приложение (тот же приём платежей от клиентов, мобильный клиент для некого сервиса в дополнение к обычному, приложение-спутник для основного проекта, полностью мобильное решение по профилю компании и т.п. что угодно). При этом ни один программист в компании никогда не занимался разработкой мобильных приложений (а те кто занимались, почему-то сменили место работы и теперь занимаются только этим профессионально, говорят там платят больше и работа интереснее). Привлекать фрилансеров или субподрядчиков руководству неохота — как это можно, такую ценную идею отдать в чужие руки, еще и денег заплатить. Значит кто-то из сотрудников должен совершить подвиг, ударными темпами освоить чего-там-надо и разработать желаемое.
                                    +2
                                    А разве это плохо, ну конечно если не брать в расчет ударные темпы? Фактически, вам дали карт-бланш на обучение, сняли другие задачи, что бы вы не отвлекались во время обучения, еще и зп платить не перестали. Это же великолепная возможность для роста.

                                    В данной ситуации в проигрыше скорее останется компания, так как приложение с большей долей вероятности получится с плохим соотношением цена/качество.
                                      0
                                      Нет, неплохо. В довесок к приложению с любым соотношением цена/качество компания получает «своего» специалиста, который уж в своём проекте-то разбирается и может его развивать, если потребуется.
                                      У меня в моём случае всё было почти так же, «ударные темпы» длились 3 недели, даже сны стали мобильные :)) Попутно нашла возможность интересную лично мне, теперь пишу в своё удовольствие.
                                        +1
                                        Кстати да, я тоже достаточно сильно погрузился, что бы и во сне продолжать думать о приложении)
                                          0
                                          Дохожу до релиза, все работает как надо и тут внезапно… звонит будильник, подъем. Проверяю — я точно помню что во сне делала коммит и пушила в репо — а его нет :((
                                            +1
                                            Ну у меня не так точно было. Просто снились приложение, какие то мысли в голову приходили, которые я кстати даже не забывал утром. Мне кажется я и не спал толком)
                                +1
                                С ndk не работали?
                                  0
                                  Нет, честно сказать я только что нагуглил что это такое вообще :)
                                  0
                                  Вместо айфона можно тестировать на айпаде. Для тех кто хочет сэкономить на покупке устройства.
                                    0
                                    Вопрос немного не по теме, но все же… Рассматривался ли вариант одностраничного HTML5 сайта/приложения (без PhoneGap), и почему все таки решили, что вам нужно нативное приложение? Имидж или какие-то другие причины? Ведь одну HTML-страницу проще и разработать и поддерживать, и не надо юзеров лишний раз тревожить апгрейдами. У меня вот у банка тоже есть свое приложение, занимает под 50Мб на телефоне (для моего телефона это существенно), а функционал по сравнению с сайтом урезан сильно. Если бы они сделали нормальную мобильную веб-страничку, то было бы намного удобней.
                                      0
                                      Автор писал об этом в статье.

                                      Как-то я наткнулся на Phonegap, насколько я понял, пишем на Javascript+html+css, а потом получаем готовое приложение для Android/iOS, но почему-то мне не хотелось пользоваться подобными решениями, во-первых: были непонятные отзывы, кто-то хвалил, кто-то ругал, а во-вторых: мне хотелось попробовать как это изнутри, каково это сделать «нативное» приложение.


                                      Кстати 50мб, при маленьком функционале, это действительно много и я подозреваю, что это чьи то кривые руки виноваты.
                                        +1
                                        Я делал приложение на Cordova, который бывший Phonegap — около 7Мб.
                                          +1
                                          То приложение которое я сделал с кучей изображений (которые и занимают основной объем) и логики занимает всего 24мб. Так что размер в 50мб для меня не ясен.
                                      0
                                      Отличная статья-(де)мотиватор, буду посылать к ней всех ноющих «как бы мне научиться программировать под Х».

                                      Спасибо.

                                      Only users with full accounts can post comments. Log in, please.