Обновить
0

Objective C *

Компилируемый объектно-ориентированный язык

Сначала показывать
Порог рейтинга
Уровень сложности

Работа iOS App в фоновом режиме

Время на прочтение4 мин
Охват и читатели46K
Стояла задача, чтобы программа отправляла через web socket текущие координаты по заданному пользователем интервалу. К тому же, программа должна работать в фоне и если пользователь или iOS по какой то причине её выгрузит из памяти, то желательно чтобы она перезапустилась и продолжила работу в фоне.
Поставленную задачу надо решить только средствами iOS без изменения серверной части (никаких Push Notifications).

Отправлять координаты по таймеру когда программа свернута в фон не составляет проблемы, для этого можно использовать background location mode для получения координат и long-running tasks для таймеров.

Но так как в iOS нет такой прелести как Android Background Services, то если вручную завершить программу, код перестает выполняться. Потому основная сложность заключается в том, как максимально быстро запустить программу в фоне, чтобы она продолжила выполнять свою задачу дальше, если её по каким то причинам выгрузила из памяти iOS, или если пользователь перезагрузил устройство, или если он вручную «убил» программу.

Теперь о том, что помогло решить данную задачу в приемлемом варианте:
Читать дальше →

Локализация мобильных приложений на примере iOS. Реализация, поддержка и развитие в следующих версиях

Время на прочтение4 мин
Охват и читатели4.7K
Мой коллега, Вячеслав Будников, ведущий разработчик мобильных приложений под iOS, решил поделиться опытом наведения порядка в локализации проектов.

Введение

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

Рассмотрим локализацию текстовых элементов на примере iOS. Для этого используем список Localizable.strings в котором описаны все фразы в формате «ключ»=«локализованное значение». У каждого языка локализации — разное значение ключей.

Важно:
  • следить за написанием строковых ключей в коде, иначе вместо локализованной фразы получим «техническую» фразу (название константы);
  • убедиться, что у каждого ключа есть локализованные значения;
  • следить, чтобы локализация на всех платформах приложения была идентичной. Если выходит новая версия приложения, нужно проверить уже имеющиеся фразы.

Читать дальше →

Введение в 3D Touch

Время на прочтение9 мин
Охват и читатели27K
С выходом iPhone 6s и iPhone 6s Plus компания Apple представила нам совершенно новый способ взаимодействия с нашими телефонами: жест сильного нажатия. Как вы знаете, эта функция уже доступна на Apple Watch и MacBook и в MacBook Pro под названием Force Touch. Это — буквально — добавило новое понятие к пользовательскому интерфейсу.

Если вы задаетесь вопросом, почему Force Touch было переименовано на 3D Touch для iPhone, тогда вы не одни такой. Вскоре после того, как Крейг Федериги (Craig Federighi), который также был явно озадачен названием, представил эту новую возможность, возникло много догадок. Чем не устроило название Force Touch? Слишком много шуток из Звездных войн?

Но есть разница! Очевидно, что Force Touch может распознать только сильное нажатие, тогда как функция 3D Touch более чувствительная и может выделить несколько уровней нажатий на основе того, как сильно вы нажимаете.

Введение в 3D Touch
Читать дальше →

Objective-C что такое на самом деле метод и self? + runtime

Время на прочтение8 мин
Охват и читатели23K
Как self и _cmd оказываются в методе? Как работает dispatch table и категории? Что такое мета-класс? Сколько на самом деле методов у ваших классов в ARC и в MRC? Как работает swizzling?
Интересно? Добро пожаловать под кат!

ВНИМАНИЕ!

Эта статья не рассчитана на начинающих разработчиков… Приношу свои извинения за то, что не рассматриваю многие моменты, которые должен знать Objective-C разработчик.


Читать дальше →

Использование Carthage для управления зависимостями

Время на прочтение15 мин
Охват и читатели35K


iOS разработчики это — фантастическое сообщество, которое предлагает широкий спектр доступных сторонних библиотек.

Если вы разрабатывали для этой платформы, тогда, скорее всего пользовались хотя бы одной из этих библиотек. Будь это AFNetworking, SDWebImage, SSKeychain или CocoaLumberjack, и уже должны понимать важность использования чужого кода, если вы не любите «изобретать свой велосипед».

Есть CocoaPods. Если по какой-то причине вы не знакомы с этим прекрасным инструментом, так это самый популярный менеджер зависимостей, который упрощает процесс интеграции такого рода библиотек в ваш проект.

CocoaPods широко используется в iOS сообществе, и даже Google использует его для распространения различных iOS SDK.

Хоть CocoaPods и потрясающее средство для управления зависимостями, есть и другие варианты. Carthage является одним из таких вариантов; это безжалостно простой менеджер зависимостей для Mac и iOS, созданный группой разработчиков из Github.

Это был первый менеджер зависимостей для работы с Swift; фактически, сам Carthage написан на Swift'e! Он использует исключительно динамические фреймворки вместо статических библиотек – это только способ распространения двоичных файлов Swift, которые поддерживаются в iOS 8 и выше.
Читать дальше →

iOs Debug Master

Время на прочтение6 мин
Охват и читатели21K
Однажды я почти полностью отказался от мышки для навигации по Xcode и вполне этому рад. Следующий шаг — это отказ от визуальных средств управления отладчиком. Зачем? — Увеличиваем возможности, уменьшаем время дебага, тратим меньше калорий для перемещения тяжеленькой ручишки (нам калории нужны, чтобы головой работать) и тем самым провоцируем меньше туннельного синдрома.


Читать дальше →

Про Swift, и почему мои большие проекты будут на Objective-C еще какое-то (возможно долгое) время

Время на прочтение4 мин
Охват и читатели41K
От переводчика: C пятницей, дорогие хабровчане! Хочу поделиться сегодня с вами переводом статьи из небольшого блога об опыте работы с языком Swift. Вряд ли она претендует на лавры серьезного и скрупулезного анализа, но, думаю, будет интересна всем, кто задумывался: «а не пора ли отправить на свалку истории этот Objective-C?».

Когда Apple представила нам Swift — это было круто! Наконец-то мы получили next-gen (т. е. модный-скриптоподобный) язык для разработки под яблочные девайсы (но без поддержки приватных членов класса, хм....). Теперь этот [языкДинозавр квадратноскобочный] может отправиться в музей, а мы начнем тыкать эти новые блестящие фичи языка. Безусловно, наивно предполагать, что язык, которому менее года, будет без тараканов. Очевидно, некоторое время нужно дать ему на избавление от детских болячек. Именно поэтому я не бросился переписывать все мои проекты на Swift сразу после анонса.


Заметили, что птица падает вниз?
Но ты-таки взялся за Swift, ведь так?

Использование NSOperation и NSOperationQueue в Swift

Время на прочтение20 мин
Охват и читатели41K
Почти каждый из нас испытывал дискомфорт, когда при нажатии на кнопку или при вводе текста в iOS или Mac приложениях, как внезапно пользовательский интерфейс переставал отвечать, приложение будто замирало и переставало реагировать на ваши действия.

На Mac, пользователи видит песочные часы или вращающийся радужный курсор, пока снова не возобновится взаимодействие с пользовательским интерфейсом. Многие пользователи ошибочно предполагают, что приложения сразу же заработает при прикосновению к экрану. Такие приложение дают ощущение низкой производительности и кажутся медленными, и, как правило, получает плохие отзывы в AppStore.

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

Что же должен делать «несчастный» разработчик? Решение есть, оно состоит в том, чтобы отделить основной поток через параллелизм. Параллелизм, это свойство приложения выполнять задачи в несколько потоков одновременно – и при этом пользовательский интерфейс остается отзывчивым, поскольку Вы выполняете свою работу в разных потоках.

Одним из методов для одновременного выполнения операций в iOS являются использование классов NSOperation и NSOperationQueue. В этой статье вы узнаете, как их использовать! Вы будете работать с приложением, которое совсем не использует многопоточность, таким образом, оно будет очень медленным, и будет «тормозить». Когда вы измените приложение, чтобы можно было добавлять параллельные операций и — надеюсь – это обеспечит более отзывчивый интерфейс для пользователя!
Читать дальше →

Опыт отправки Apple Push Notification через SNS сервис от Amazon и немного полезного кода

Время на прочтение5 мин
Охват и читатели14K
Теплым летним вечером, в процессе разработки очередного приложения для iOS, у меня совпало два фактора — возникла необходимость реализации Apple Push Notification (APN) и желание попробовать что-то совсем новое для меня. Идти проторенной дорогой через один из множества сервисов, предлагающих отправку APN не хотелось.

Для изобретения велосипеда был выбран Amazon Simple Notification Service (Amazon SNS). Amazon SNS — это сервис, который позволяет вам отправлять сообщения-нотификации, посредством разнообразных механизмов (APN, GCM, e-mail, SMS и т.д.).

О том, как это работает и более подробную информацию можно прочитать в документации Amazon. Я расскажу совсем немного, чтобы определиться с дальнейшей терминологией. У SNS есть два типа клиентов — публикаторы (publishers) и подписчики (subscribers). Публикаторы с подписчиками асинхронно обмениваются сообщениями (messages), которые доставляются подписчикам, посредством разнообразных механизмов. Для отправки групповых сообщений подписчики могут быть сгруппированы по темам (topics). Тогда все подписчики, подписанные на тему, получат сообщение в эту тему отправленное.

Картинка из документации Amazon:
image
Читать дальше →

Дайджест новостей для iOS-разработчиков

Время на прочтение2 мин
Охват и читатели7.2K
Уильяму Генри Гейтсу III 60 лет. Да-да, так его зовут полностью. Хотите проникнуться духом того времени — прочтите «Сотворение Microsoft». Сердечно поздравляем и желаем долгих лет и новых рабочих свершений. Тем временем в App Store появляется категория Shopping. Разработчики получили соответствующее письмо.



Читать дальше

Три наиболее значимых нововведения с приходом watchOS2

Время на прочтение6 мин
Охват и читатели10K
Итак, о чем действительно стоит упомянуть при переходе к разработке на watchOS2 — это следующие три пункта:

  • WKInterfacePicker
  • Complications
  • WCSession

В данной статье я коротко расскажу о каждом из них.
Читать дальше →

Использование технологий распознавания и синтеза речи для изучения английского языка на iPhone/iPad. Аспекты авторского права на методики. Мой опыт

Время на прочтение4 мин
Охват и читатели16K
Из-за некоторых вещей иногда опускаются руки, и нет настроения что-то делать дальше.

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

Казалось бы все чудесно, но тут началось…
Читать дальше →

Ближайшие события

Интеграция CoreSpotlight на примере «Рамблер.Почты»

Время на прочтение9 мин
Охват и читатели5.8K


В  iOS 9 Apple добавила поиск spotlight для сторонних приложений. Это особенно важно для приложений с однотипным контентом: новостные приложения, почтовые клиенты, афиши мероприятий. Отдел iOS разработки холдинга Rambler&Co уже интегрировал поиск в некоторые из своих приложений.

В данной статье будет освещена интеграция CoreSpotlight в уже существующий проект и рассказано о возникших проблемах и их решениях.
Читать дальше →

Подборка полезных статей для iOS-разработчиков за текущую неделю

Время на прочтение2 мин
Охват и читатели7.7K
Надеюсь, все успешно обновились до 9.0.2 и El Capitan. Уже успело подзабыться с презентации, что же там такого нового. Тем приятнее находить изменения. Сегодня вечером встреча Cocoa Heads Moscow. Большая программа. Не забывайте.
Кстати, 29 октября планируется ежегодная встреча разработчиков LLVM. Возможно там будет что-нибудь сказано про Swift и то, когда он станет Open-Source.



Читать дальше

По итогам Rambler.iOS #4

Время на прочтение2 мин
Охват и читатели9.4K


В прошлый четверг на уютной мансарде компании Rambler&Co прошла четвертая встреча iOS разработчиков Москвы.
Читать дальше →

Deep Linking для мобильных приложений

Время на прочтение8 мин
Охват и читатели151K
На WWDC 2015 инженеры компании Apple заявили, что пересмотрели подход к Deep Linking, в прошлом году компания Google анонсировала App Index — как новый взгляд на глубинные ссылки, в начале 2015 года в мире мобильной разработки заговорили о контекстных Deep Links. Что это за инструмент и как с ним работать применительно к iOS — расскажу в этой статье.

Что это?


Один из способов увеличения конверсии при продвижении IT-продукта — уменьшение барьеров для достижения пользователями искомой цели. В мобильной разработке эта проблема еще актуальней. При использовании e-mail, push или sms-рассылок с информацией о промо-акциях упрощение доступа к функционалу приложения просто необходимо. В такой ситуации просто запуск приложения из внешнего источника — не решение, ведь промо-акция — это конкретное спец.предложение в конкретном разделе. Чтобы после запуска приложения пользователю не пришлось по нему бродить, искать и раздражаться, нужен дополнительный инструмент, предопределяющий навигацию. И такой инструмент есть.
Deep Linking (глубинное связывание) — технология, благодаря которой пользователь может перемещаться между приложениями в заранее определенные разделы.


Читать дальше →

Swift 2 в быту. Еще один парсер JSON

Время на прочтение13 мин
Охват и читатели17K
Пару месяцев назад Apple выпустила мажорный апдейт своего нового детища — Swift 2. Выпустило оно его, что называется apple-way, причем не тем way, который «все очень хорошо и вам не нужно ни о чем думать, просто пользуйтесь», а другим. «Мы знаем, что так лучше, а раньше было хуже, поэтому бросайте все ваше раньше и начинайте пользоваться» — то есть язык с заметными проблемами с обратной совместимостью — начиная от того, что штатный инструмент миграции работает довольно таки нестабильно, и заканчивая, собственно, тем, что вы, определенно, не сможете разрабатывать на новой версии языка, не обновя весь инструментарий разработчика до пока еще не очень стабильного последнего — и, что самое страшное, в обратную стророну тоже. Но речь пойдет не об этом. Речь пойдет о том, что мне нравится Swift 2. К сожалению, так как язык все еще не признан сообществом как production-ready, то подавляющее большинство материалов о нем можно отнести к двум категориям — документация Apple и «я вот тут поигрался вечерком и у меня получилось прикольно». Исключения, конечно, есть, но их не хватает, поэтому я и попробую немного осветить этот язык именно с позиции работы с ним и на нем.
В этой статье, мне бы хотелось поговорить о стандартной ORM задаче десериализации JSONа — то есть о том, как из объекта NSDictionary словаря [String: AnyObject] получить некоторую десериализованную структуру. Что изменилось с появлением Swift 2? Как оно было раньше? Кроме того, мы будем рассматривать эту задачу с точки зрения около-функционального подхода, что налагает определенные ограничения — такие, как иммутабельность единожды созданных данных, например. Поэтому рассматриваемое решение может быть несколько сложнее других — но ну и ладно.
image

Читать дальше →

Симулятор призрака. От идеи стать программистом к готовой игре на IOS

Время на прочтение11 мин
Охват и читатели19K
Прошло около 10 месяцев с тех пор, как я решил учить программирование, поскольку текущая работа инженером тех-поддержки попросту нагоняла апатию и ни к чему не вела. А чтобы сделать процесс обучения максимально интересным, я решил написать игру для мобильных устройств. Далее речь пойдёт о том, что конкретно я пытался создать, и с какими трудностями приходиться сталкиваться новичкам.



Здесь есть один важный момент для начинающих разработчиков, которые горят желанием связать свою жизнь с миром ИТ-индустрии. Вы должны определить для себя максимально комфортную стратегию самообразования. Одному нужно регулярно решать практические задания, другой не сдвинется с места, пока не разберётся в тонких нюансах теории. Ведь подавляющее большинство, не смотря на чистоту своих намерений, имеют основную работу, семью, друзей, хобби… И так или иначе, весь этот рутинный водоворот влияет на время и качество вашего обучения. И может привести к тому, что вы забросите свои ежедневные занятия в долгий ящик и больше никогда к ним не вернётесь.

Лично для себя я определил, что максимально комфортный способ разработки, это когда я могу видеть целостную наглядную картину своего результата в виде игры, или приложения. В качестве платформы я выбрал IOS и сопутствующий язык Apple — objective-C. Для игрового фреймворка отлично подошел cocos2d-iphone. Он простой, бесплатный, а так же имеет огромное количество примеров и туториалов в интернете.

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

Осенняя встреча Rambler.iOS

Время на прочтение2 мин
Охват и читатели6.9K
image

Пришла осень, астрологи предсказали пору повышенной активности мобильных разработчиков — и 24 сентября мы готовы провести новую встречу Rambler.iOS, официально под номером четыре.
Читать дальше →