Архивы рубрики ‘Лекции’

Ассоциация объектов используя функции runtime

В умелых руках функции <obj/runtime.h> может быть мощным инструментом.

Для того чтобы расширить объект с дополнительными данными можно  используя механизм associated object.

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

Изменение окончания слова в зависимости от числа

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

Анализ аварийных журналов iOS.

Для того чтобы ваше приложение попала в Appstore его нужно как следует протестировать на наличие ошибок. Оно должна безупречно работать не только на конкретном устройстве, но и на всей «линейке» данных устройств (iPhone3, iPhone4, iPhone5 и iPad) и на выбранных операционных системах.
Но даже после того как оно попало в AppStore это не гарантирует, что программа написана без ошибок и в определенной ситуации может быть сбой в результате которого, как говорят пользователи, программа «вылетает».
При сбое создается так называемый аварийный журнал, но куда при этом смотреть не понятно.

Многопоточность в iOS

Рассмотрим немного теории о многопоточности.

Терминология:

Поток – отдельная нить исполняемого кода в приложении. Каждый поток содержит собственный стек. Но всю остальную часть памяти поток делит с другими потоками того же процесса.

Процесс – запущенное приложение, которое может содержать много потоков.

Задача – абстрактная концепция некоторого количества выполняемой работы.

Вообще работа непосредственно с потоками не является лучшим выбором для приложений с распределенной архитектурой. Технологии идут вперед, и сейчас перед нами появляется выбор более высокоуровневых концепций. В OS X и iSO эти концепции представлены асинхронным дизайном (asynchronous design approach).

Пример использования потока

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

Я бы создал отдельный класс, который работает с AddressBook и только он имеет на него ссылку. Все остальные классы к нему обращаются и эти обращения синхронизируются так, что только одно обращение выполняется в любой момент времени. Для этого придется  создать serial queue и складывать в него запросы на чтение/запись.

Мы создаем один раз address book и serial queue. Когда надо с ней выполнить операцию, то клиент должен передать блок, который в качестве параметра получит AddressBookRef. Соответственно, все такие блоки построятся в очередь и serial queue будет их выполнять по очереди, следовательно, нет одновременного доступа к address book из нескольких потоков.

Open Source: Определение состояния сети с использованием ARC и GCD.

Класс Reachability вы можете очень легко добавить в свой код приложения для определения состояния сети.

Apple предоставила образец кода для тестирования сети, но с выходом iOS5 и добавлением ARC (Automatic Reference Counter) и GCD (Grand Central Dispatch) этот код с июля 2010 года считается устаревшим.

Сегодня я наткнулся на прекрасную библиотеку Reachability, которая совместима с ARC и GCD с очень чистым синтаксисом, облегчая отправки изменений в главном или в фоновом потоке.

Библиотека написана Tony Milion и вы можете её найти вместе с примерами её использования на Github.
Очень хорошее и чистое решение для определения состояния сети в iPhone и iPad приложений.

Git и генерация SSH- ключей на Mac.

Давайте сначала разберем что такое SSH ключи. (Secure Shell) в переводе с английского “безопасная оболочка”. Более подробно про SSH вы можете посмотреть в Викепедии. SSH позволяют безопасно передавать в незащищенной среде практически любой другой сетевой протокол.
Эти ключи нужны для авторизации, вы генерируете два ключа, один копируете на сервер github, а другой остается у вас на машине. В итоге когда вы будете осуществлять доступ к сервису со своей машины, будет происходить авторизация с помощью ключей (того который остался у вас на машине и того который вы поместили на github сервер).

Тестирование приложения на устройствах с использованием Xcode 5

Как вы знаете iOS 7 существенно отличается от своих предыдущих iOS.
Наиболее заметным изменением является кардинально переработанный интерфейс.

В этом уроке мы рассмотрим как можно запустить приложение на самом устройстве если конечно у вас есть аккаунт разработчика Apple. Стоимость регистрации аккаунта разработчика на данный момент составляет $99 в год.

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

Поддержка iPhone5

С выходом iPhone5 стала задача поддержки в приложении разных разрешений экрана. iPhone5 получил крупный 4-дюймовый экран с разрешением 1136*640 пикселей. Таким образом, формат изображения стал 16:9, тогда как раньше он был 3:2.
iPhone5 требует новый набор инструкций ARMv7S. Генерацию данного набора инструкций поддерживает xCode4.5 и выше. Кроме того, xCode4.5 больше не поддерживает архитектуру ARMv6 (iPhone 3G и более старых устройств).
Чтобы сделать поддержку iPhone5 нужно открыть проект в xCode4.5. Он автоматически предложит добавить изображение загрузки (lauch image) (Default-568@2x.png).

Интеграция Google Analytics

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