У меня появилась задача позвонить с iPhone на iOS7. На предыдущих версиях iOS (6 и ранее) было достаточно воспользоваться private API и все работало, но на iOS7 этот подход перестал работать. В этом посте я хочу рассказать как сделать звонок и получить собственный номер телефона из приложения.
Disclaimer. Этот пост написан на основе доклада на SQADays’15. Вы можете также посмотреть видео выступления или полистать презентацию. Обращаю внимание, что доклад был начального уровня, то есть пост будет интересен в основном менеджерам и начинающим тестировщикам. А также на то, что автор — ненастоящий сварщик и местами делает довольно грубые округления.
Меня зовут Алёна, и я релиз-менеджер. Отдел компании i-Free, в котором я работаю, в основном занимается приложениями под iOS и Android. Ещё мы поддерживаем Tizen, Windows Phone, альтернативные сторы, но в данном посте речь пойдёт об Apple iOS Appstore и Google Play.
В обоих маркетах, помимо платных и бесплатных приложений, есть возможность проводить внутренние платежи — ин-аппы (In-App Purchases).
Почему я рассказываю про тестирование ин-аппов? Потому что могу!
Будучи релиз-менеджером, я участвую в проектах обычно в начале разработки и в конце тех итераций, которые заканчиваются выкладкой в сторы. Перед началом проекта выдаю разработчикам ключи и сертификаты, а к концу работы над версией разработчики отдают мне билды для релиза. Но между этими точками есть момент, когда надо завести внутренние платежи — ин-аппы и выдать тестировщикам тестовые аккаунты. И вот на этом этапе иногда случается что-то странное, когда разработчики считают, что у них всё хорошо, а тестировщики — что всё плохо.
С появлением iOS 7 мир узрел новый игровой движок от Apple — SpriteKit. В свете того, что он появился совсем недавно об этом движке еще мало что написано, конечно в сети можно найти несколько tutorial -ов по нему но в основном все они на Английском языке. И по этому я задалась целью написать подробный Туториал об этом замечательном движке.
Итак, что же такое SpriteKit?
SpriteKit — это 2D движок, оптимизированный для создание игр для устройств от компании Apple. В его основе лежит популярный физический движок Box 2D. Поскольку разработчики создавали его заточенным специально для устройств Apple он существенно выигрывает в скорости у остальных движков.
В SpriteKit всю роль по оптимизации и рисованию графики берет на себя OpenGl, это все происходит на низком уровне и по этому вы можете сосредоточить свои усилия на решении проблем более высокого уровня и создание больших 2D игр. Для создание игр на SpriteKit используется язык Objective-c, но с выходом iOS 8 и нового языка Swift, игры также можно создавать и на нем.
От себя хотела бы добавить, что в некотором роде на Swift писать даже легче, так что если вы только начинаете и думаете какой язык выбрать то советую выбрать Swift.
Ниже, я предоставила видео с демонстрацией игрового процесса SpriteKit, если вам стало интересно то милости прошу.
Захотел разработать небольшое приложение — Qtty. Приложение должно уметь делать снимок и применять набор фильтров к нему, после чего публиковать этот самый снимок в качестве основной фотографии в профиле ВКонтакте.
Автор будет пробовать делать всё через прототипы, так как это делали в 223 сессии WWDC 2014.
Естественно, в двух больших системах всегда найдутся общие концепции. Например, сложно избежать использования базовых алгоритмов и структур данных. Таких, как списки, массивы, деревья. Но я хочу рассказать не об этом.
iOS является объектно-ориентированной штукой. Где-то ниже Objective-C (а скоро мы сможем говорить уже и о Swift) залегают огромные пласты не-объектного кода, и под ними — Unix (а точнее BSD) система. И на том уровне у Linux и у iOS много общего. Но я и не об этом.
Давайте сравним основные структуры ядра Linux с объектно-ориентированной частью iOS.
1. Основные структуры
В обеих системах присутствует некоторое количество фундаментальных структур. Например, в iOS это будут:
Строки (NSSrting);
Массивы (NSArray);
Коллекции (NSSet);
Словари (NSDictionary);
Представление числовых примитивов (NSNumber);
Скаляры (NSRange).
World of Tanks Assistant (WOT Assistant) и World of Warplanes Assitant (WOWP Assistant) — это приложения–компаньоны для игроков, которые позволяют следить за внутриигровой статистикой, сравнивать свои боевые показатели с друзьями, а также предоставляют оффлайн-доступ к справочной информации по технике.
WOWP Assistant появился относительно недавно (ноябрь 2013), а версия для World of Tanks была переписана почти с нуля в начале 2013, что по времени совпало с переходом на новый Wargaming Public API. Надеюсь, наиболее технически интересные моменты разработки iOS-библиотеки для взаимодействия Assistant’ов с API будут полезны для разработчиков и послужат источником вдохновения для участников конкурса Wargaming Developers Contest.
На это неделе мы узнали как стать ниндзя Xcode, возмутились политикой Google Play, рассмотрели ему альтернативы, научились делать прототипы и встраивать планшет в автомобиль. Мобильная разработка не затихает даже в жарком августе!
Компания, в которой я работаю, разрабатывает ПО на заказ, в том числе мобильные приложения на базе Android и iOS. В связи с тем, что конкуренция в этом сегменте рынка довольно высока, тестировщики не только отвечают за соответствие конечного продукта спецификациям и ожиданиям клиента, но еще и поставлены в жесткие рамки по бюджету и срокам тестирования. Это побуждает нас исследовать новые инструменты и методы, которые позволили бы нам уменьшать затраты на тестирование и повышать качество продуктов.
Imagrium — это результат одного из таких исследований. Технически это Jython фреймворк для кросс-платформенного тестирования мобильных Android/iOS приложений с помощью распознавания изображений, написанный нашей компанией. Он представлен в виде рабочего PyDev проекта, который вы можете изменить под свои нужды. Код распространяется под MIT лицензией и доступен на Github. В этой статье я расскажу о принципах работы фреймворка и его устройстве.
О блоках в ObjC и правильной работе с ними написано очень много, в том числе и на хабре. Вопрос о том, как правильно работать с self в блоках, чтобы избежать циклических ссылок, регулярно задается на собеседованиях. При использовании таких фреймворков, как ReactiveCocoa количество блоков в коде сильно возрастает, при этом увеличивается шанс допустить ошибку и потерять в памяти объекты. Про попытку окончательно решить эту проблему, метапрограммирование для с99 с экстеншнами и блоками + хипстерсткие макросы с @ под катом.
Выбирая тему для этой статьи, я находился под впечатлением от общения с замечательным и, что не маловажно, бесплатным приложением для создания собственных приложений для iPad и iPhone – AppArchitect.
Что касается Jabber Guest – он как нельзя лучше подходит для задачи – продемонстрировать как просто выполнить видеосоединение с мобильного устройства без необходимости получения аккаунта или регистрации.
Но сначала, в двух словах, – что же такое Jabber Guest .
Если ты много времени проводишь в одном и том же окружении — рано или поздно возникает желание начать как-то экономить свое время и оптимизировать свои действия. В этой статье речь пойдет о некоторых рабочих инструментах и подходах, которые накопились у меня за время программирования под iOS в IDE XCode от очевидных и часто применимых, до редких и довольно тяжеловесных.
Чем запомнилась прошедшая неделя: Яндекс объяснил, как проверять безопасность мобильных приложений, глава Минкомсвязи предложит Apple раскрыть свои исходные коды, сама Apple открыла iAd в России и собственную CDN по всему миру, Intel обновил XDK, Wooga объяснила, как попасть в мобильные топы. Все это и многое другое в еженедельном дайджесте материалов о мобильной разработке.
Совсем недавно прошел наш небольшой хакатон, на котором мы написали социальную сеть за 48 часов — и вот, уже сегодня, iOS клиент стал доступен в публичном доступе. Мы довольно долго тестировали систему под высокой нагрузкой, спорили с Apple, предоставляли нужные бумаги по регистрации продукта, правили минорные баги — но, наконец-то, наше детище в сети.
Прошу вас обратиться к Свитру с присущим нашему народу юмором. Мы ни в коем случае не претендуем на популярность, известность, деньги или женщин. Сама идея написать Твиттер за 48 часов не давала мне спать с того момента, как я начал работать с профессиональными командами разработчиков. Экая шутка — убить выходные ради никому не нужного проекта.
Я работаю в компании, которая делает достаточно большое и, не побоюсь этого слова, громоздкое мобильное приложение с солидной для мобильного приложения историей в несколько лет и, соответственно, с довольно солидным и монструозным кодом.
Поток пожеланий от заказчика разнообразен и обилен, и в связи с этим время от времени приходится вносить изменения даже в те места, которые для этого, вроде как, не предназначены. Некоторые возникающие при этом проблемы — регрессионные баги — доставляют время от времени немало сложных часов.
При этом, по тем или иным причинам на проекте существует лишь ручное тестирование и довольно внушительного количество тестировщиков, а довольно наивные попытки автоматизации оного остались лишь на уровне нескольких довольно тривиальных юнит-тестов на уровне «Hello world».
В частности — у отдела тестирования есть внушительный цикл тестов для поиска регрессии, который проводится достаточно регулярно и занимает приличное количество времени. Соответственно, однажды возникла задача как-то оптимизировать этот процесс. Об этом и пойдет речь.
Честно, я не помню, какие средства для автоматизированного приемочного тестирования я смотрел и почему они мне не подошли. (Буду очень благодарен, если кто-то в комментариях подскажет интересные варианты решения этого — наверняка я пропустил что-то очень стоящее) Одно могу сказать точно — так как наше приложение, фактически тонкий клиент — очень многие кейсы невозможно(ну или как минимум, я не знаю как) покрыть юнит-тестами и нужно что-то еще. Так или иначе было решено написать свою библиотеку для автоматизации приемочного тестирования.
Недавно Apple представила общественности достаточно важное изменение в разработке iOS приложений, анонсировав новый язык программирования Swift. Я принял решение: изучая этот язык пошагово, я буду в своих статьях рассказывать обо всём, что мне удалось найти. Это лишь первый пост из многих на эту тему, но я надеюсь, что вы решите изучать язык вместе со мной!
Весьма вероятно, что многие примеры кода, представленные в постах, будут позже изменены. Это отчасти потому, что мой стиль программирования – написать сейчас, чтобы проверить идею, а потом заняться рефакторингом, а также отчасти это потому, что для меня (как и для многих других) Swift – абсолютно новый язык программирования. Так что, скорее всего, как только я узнаю что-нибудь новое, ход этих уроков будет меняться.
Итак, я собираюсь начать с довольно простого приложения. Также я буду объяснять, как работает код. Готовы? Поехали…
На этой неделе раскрылась интересная история о недокументированных процессах на iOS-устройствах, Хабр дружно разбирался, за что могут заблокировать разработчика в Google Play, вышел новый отчет Developer Economics, наконец, Yahoo купила Flurry — консолидация на рынке инструментов для разработчиков набирает обороты.
Недавно Джонатан Здзиарски (Jonathan Zdziarski), на конференции Hackers On Planet Earth в Нью-Йорке, опубликовал доклад, в котором рассказал о нескольких скрытых, не документированных фоновых процессах, запущенных на всех iOS-устройствах. Эксперт предположил, что эти функции нужны Apple для того, чтобы организовывать слежку за пользователям при поступлении запросов от властей.
Джонатан Здзиарски, также известный как NerveGas, принимал активное участие в разработке джейлбрейков для первых моделей iPhone. Он автор нескольких книг по разработке приложений для iOS. Т.е. человек явно «в теме».
Удивительно, что Apple не проигнорировали этот доклад, а описали задачи каждого процесса. Для чего, по их мнению, служат эти сервисы.
В этой статье я хочу описать способ, при помощи которого мы сделали такой красивый кастомный progress bar — на иллюстрации — в одном из последних проектов.
Задача была поставлена следующим образом:
Картинки были нарисованны дизайнером.
Progress bar должен перекрывать и блокировать весь UI.
Элемент должен вызываться нотификацией в NSNotificationCenter.
Должна быть возможность досрочно завершить действие элемента.
Progress bar должен быть один, вне зависимости от количества посланных нотификаций.
Несколько месяцев назад в App Store и Google Play вышло большое обновление мобильного банка R-Mobile для клиентов РайффайзенБанка.
Этим проектом команда e-Legion занимается уже более двух лет, и в данном посте мы хотим рассказать о технических особенностях разработки. Наш опыт будет полезен тем, кто хочет писать большие, сложные, долгоживущие и успешно развивающиеся мобильные проекты для реального мира.
Вместе с пользователями мы хотим сделать R-Mobile еще лучше, поэтому будем рады конструктивным отзывам на специальной странице или в комментариях к посту.
Ну а за техническими подробностями просим под кат.
Сегодня вышел новый отчет в серии Developer Economics – State of the Developer Nation за 3 квартал 2014 года.
Основан он на рекордном опросе более чем 10,000 индивидуальных разработчиков и компаний из 137 стран и посвящен традиционно мобильной разработке, тенденциям рынка, платформам, инструментам и моделям монетизации. В этом году особое внимание уделили Enterprise и игровым разработчикам.