О блоках в ObjC и правильной работе с ними написано очень много, в том числе и на хабре. Вопрос о том, как правильно работать с self в блоках, чтобы избежать циклических ссылок, регулярно задается на собеседованиях. При использовании таких фреймворков, как ReactiveCocoa количество блоков в коде сильно возрастает, при этом увеличивается шанс допустить ошибку и потерять в памяти объекты. Про попытку окончательно решить эту проблему, метапрограммирование для с99 с экстеншнами и блоками + хипстерсткие макросы с @ под катом.
Читать полностью »
Рубрика «Блог компании Viber»
Решение проблемы с циклическими ссылками в блоках ObjC
2014-08-04 в 16:56, admin, рубрики: iOS, objective-c, Блог компании Viber, блоки, макросы, разработка под iOS, управление памятью, циклическая ссылкаMobileOptimized — мобильный уикенд в Минске с facebook, google и другими разработчиками
2014-06-16 в 22:10, admin, рубрики: iOS, mobile, mobile development, Блог компании Ciklum, Блог компании Viber, конференция, метки: iOS, mobile, конференцияЭтот пост о конференции MobileOptimized в Минске, и о том, как это, вероятно, одно из лучших мероприятий в СНГ для технологического нетворкинга в сфере разработки мобильных приложений.
MobileOptimized 2014 – впервые крупнейшая конференция для разработчиков мобильных приложений в Беларуси вышла на уровень лучших Европейских мероприятий. 2 дня, 60 докладчиков из США, Австралии, Тайваня, Англии, Германии, Голландии, Норвегии, Финляндии, Польши, Украины, России и Беларуси. Под крышей мероприятия соберутся для знакомства 15 технологических сообществ из разных городов Голландии, Польши, Беларуси, Украины, Литвы и России. Мероприятие пройдет 28-29 июня в Минске. Сайт конференции — mo.dev.by.
Как написать своё VoIP-приложение с работой в фоне под Windows Phone
2013-03-26 в 10:46, admin, рубрики: Viber, voip, windows phone 8, Блог компании Viber, разработка, разработка под windows phone, метки: Viber, voip, windows phone 8В этой статье я бы хотел рассказать о том, как в минимум усилий написать своё простое VoIP-приложение с бэкэндом и работой в фоне на платформе Windows Phone 8.
До выхода Windows Phone 8 пользователей voip-приложений очень разочаровывала работа в фоне, которая, собственно, практически отсутствовала — максимум из того, что могли сделать разработчики, чтобы показать пользователю входящий звонок пока приложение в бэкграунде — это показать toast notification, который слабозаметен, еле слышен и быстро исчезает. С одной стороны, это не позволяло поедать батарейку как если бы приложение работало полноценно в фоне, но с другой — делало его малополезным инструментом. До выхода WP8, Microsoft подогревала интерес публики к новой версии платформы обещаниями интегрировать Skype в операционную систему и работу в фоне. Что ж, обещания они свои выполнили — теперь стало возможно:
- инициировать звонок на Skype через контактную книгу телефона
- продолжать разговор по Skype даже если вы целенаправленно или случайно свернете приложение (раньше если при разговоре вы случайно заденете кнопку поиска — разговор обрывался)
- и самое интересное: принимать входящие звонки с интерфейсом а-ля обычный gsm-звонок в условиях когда Skype не запущен (не в foreground) и более того — он в фоне ничего не делает (не поедает батарейку)
Microsoft не стало делать это эксклюзивными возможностями (кроме интеграции в контактную книгу) для своего продукта и открыло API, что дает возможность сторонним разработчикам реализовывать такие же сценарии, не будучи при этом привилегированным партнером (как было в WP7 с native sdk). И хотя так же красиво интегрироваться в контактную книгу не получится — можно воспользоваться ContactStore и Protocol handlers, чтобы изменить в контакте поле URL и сделать открытие приложение по клику).
В конце статьи приложены исходники двух проектов: один из них пример Microsoft Chatterbox, в котором объясняется, как работают бэкграунд процессы с симуляцией бэк-энда с входящими звонками и даже с видео; второй — мой проект с простым бэкэндом, который позволяет общаться по voip на двух устройствах и использует voip push notifications, но обо всем по порядку.
Вывод текста в iOS: CoreText, NSAttributedString
2013-03-14 в 9:19, admin, рубрики: ios development, Блог компании Viber, Песочница, разработка под iOS, метки: ios developmentЯ хотел бы Вам рассказать про вывод текста на экран в iOS. Вначале это задумывалось как туториал, затем как сбор неочевидных фактов, а получилось что получилось.
Способы вывода текста условно можно разделить на несколько категорий:
- UIKit — привычные UI контролы. Дают только базовые возможности по отображению, совсем мало возможностей по форматированию
- UIKit + NSAttributedString — привычные UI контролы с возможностью установки строки с атрибутами отображения. Куча возможностей по форматированию
- CoreText — фреймворк для работы с текстом и текстовыми представлениями. В связке с NSAttributedString дает массу возможностей по форматированию текста и, благодаря нескольким уровням абстракций над элементами текста, расширенные методы по их отображению
- CoreGraphics — с помощью него тоже можно отрисовывать текст
Программирование звука с низкой задержкой в iOS
2013-03-04 в 8:14, admin, рубрики: iOS, voip, Блог компании Viber, Работа со звуком, разработка под iOS, метки: iOS, voipВ статье будут рассмотрены особенности работы низкоуровневого API для работы со звуком в iOS, с которыми пришлось столкнуться при разработке Viber. Речь пойдет о выборе размера аппаратного буфера и поведении AudioUnit при изменений частоты дискретизации.
Для программной работы со звуком в iOS Apple предоставляет 4 группы API, каждая из которых предназначена для решения определенного класса задач:
- AVFoundation позволяет проигрывать и записывать файлы и буферы в памяти с возможностью использовать предоставляемые платформой аппаратные или программные реализации некоторых аудио-кодеков. Рекомендуется использовать, когда нет жестких требований к низкой задержке проигрывания и воспроизведения.
- OpenAL API предназначено для рендеринга и воспроизведения трехмерного звука а так же использования звуковых эффектов. Применяется, в основном, в играх. Обеспечивает низкую задержку воспроизведения, но не предоставляет возможности записывать звук.
- AudioQueue базовое API для записи и воспроизведения аудиопотоков с возможностью использования кодеков, предоставляемых платформой. Используя это API, не получится получить минимальную задержку, но пользоваться им крайне просто.
- И наконец AudioUnit, мощное и богатое API, для работы со звуковыми потоками. По сравнению с Mac OS X на iOS программисту доступно не полностью, но для записи и воспроизведения звука как можно ближе к «железу» подходит лучше всего.