Как стать автором
Поиск
Написать публикацию
Обновить
0

Cocoa *

Среда разработки приложений Mac OS X

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

Управляем зависимостями в iOS-приложениях правильно: Знакомство с Typhoon

Время на прочтение8 мин
Количество просмотров36K
«Any magic, sufficiently analyzed is indistinguishable from technology.»

Артур Кларк
(эпиграф в официальной wiki проекта Typhoon Framework)




Цикл «Управляем зависимостями в iOS-приложениях правильно»



Введение


В рамках этого цикла статей я не буду углубляться в теорию, рассматривать Dependency Inversion Principle или паттерны Dependency Injection — примем за данность, что читатель уже достаточно подготовлен к тому, чтобы познать дзен, и перейдем сразу к практике (ссылки для знакомства с теорией даны в самом конце поста).

Typhoon Framework — это самая известная и популярная реализация DI-контейнера для Objective-C и Swift приложений. Проект достаточно молодой — первый коммит был сделан в самом конце 2012 года, но уже обзавелся большим количеством поклонников. Отдельного упоминания заслуживает активная поддержка проекта его создателями (один из которых, между прочим, живет и работает в Омске) — на большинство создаваемых Issue отвечают в течение десяти минут, а уже через несколько часов к обсуждению присоединяется вся команда.
Читать дальше →

Multiple Delegate

Время на прочтение4 мин
Количество просмотров10K
В Cocoa очень популярен паттерн делегирование. Стандартный способ реализации этого паттерна — добавление к делегатору weak свойства, которое хранит ссылку на делегат.

У делегирования много различных применений. Например, реализация какого-то поведения в другом классе без наследования. Еще делегирование используется как способ передачи уведомлений. Например, UITextField вызывает у делегата метод textFieldDidEndEditing:, который информирует его о том, что редактирование закончено, и т.д.

А теперь представьте задачу: надо сделать так, чтобы делегатор посылал сообщения не одному делегату, а нескольким, причем делегирование реализовано стандартным методом через свойство.
Читать дальше →

Scroll Views внутри Scroll Views

Время на прочтение9 мин
Количество просмотров12K
В данной статье я хочу представить OLEContainerScrollView, который является потомком UIScrollView и позволяет вам добавлять несколько scroll views, таблиц (UITableView) или коллекций (UICollectionView) в один контейнер.

Возможное применение



Вы можете использоваться OLEContainerScrollView для достижения следующих целей:
  • Размещение несколько scroll views (или таблиц, или коллекций) один под другим так, чтобы при этом их обычное поведение при прокрутке не пострадало. В случае таблиц или коллекций речь идет о сохранении работоспособности механизма повторного использования ячеек.
  • Превращение одного сложного UITableViewDataSource или UICollectionViewDataSource в несколько простых источников данных путем разделения таблицы или коллекций, состоящей из нескольких секций, на несколько односекционных таблиц или коллекций, расположенных друг за другом.
  • Добавление заголовка или подвала (header или footer) над или под коллекцию без необходимости управлять их разметкой. В таком случае это будут простые UIScrollViews или UIViews.
Читать дальше →

Работа с DB Oracle из Xcode

Время на прочтение7 мин
Количество просмотров6K
Я хотел научиться работать с oracle из xcode, так как не обнаружил готового фреймворка от apple для работы с базой данных oracle напрямую.
Для начала, я попробовал создать тестовый проект и подключить к нему instantclient от oracle. Также я использовал тестовый пример от Oracle ( cdemo81.c ), включил его код в проект на xcode и протестировал работу. Да, все работает, хотя пришлось немножко побить в шаманский бубен от google. Тем не менее, использовать напрямую oci библиотеку тяжело, так как нужно реализовать интерфейс, а это похоже на изобретение велосипеда.
Тогда я решил попробовать использовать кросс-платформенную библиотеку ocilib ( http://orclib.sourceforge.net )
Далее в тексте пошаговая инструкция о том, как сделать тестовый проект на cocoa и использовать эту библиотеку. Цель тестового проекта — подключив библиотеку получить данные с сервера oracle.
Читать дальше →

Четыре способа нарезки картинок в OS X

Время на прочтение5 мин
Количество просмотров6.4K
Всем привет.
Сразу уточню заголовок: под нарезкой подразумевалось создание уменьшенных копий png и jpg файлов. То есть, то, что иногда требуется разработчикам/верстальщикам/дизайнерам. В моем конкретном случае — уменьшение картинкок для Retina дисплеев в два раза под обычные экраны.

Способ #0, канонический

То есть фотошопом или каким-нибудь другим редактором изображений при непосредственном участии пользователя. Последовательность действий такова: открываешь картинку в редакторе, уменьшаешь до 50 % (вставить нужное число), сохраняешь с требуемым именем. Если уменьшение изображения повесить макросом на хоткей, то время тратится только на переименование файла и первоначальную загрузку редактора. В итоге — секунд 30 на файл, недолго, но если файлов много, то потеря времени ощутима.
Могу поспорить, что многие, очень многие, так и делают или делали в течение какого-то периода своей карьеры. Я сам, зная о том, что все это можно легко автоматизировать, все равно рубил дрова тупым топором, успокаиваясь мыслью, что просто нет времени его наточить. И наконец это время пришло.
Маловажная информация
Катализатором, кстати, выступила эта ветка комментариев.

Способ #1: «Все уже сделали за нас»

Существуют вполне себе многофункциональные платные программы, а также инструмент в Photoshop начиная с v. 14.1 (спасибо designiac за ссылку). Они проворачивают свою магию прямо с psd файлом, избавляя от некоторых рутинных операций. Все это, конечно, круто, но во-первых, за деньги (все же пользуются лицензионным софтом!), а во-вторых, они все равно не сделают все за вас. Конечно, хотелось бы услышать мнение тех, кто пользовался подобными инструментами, может я не прав, и они действительно творят волшебство.
Читать дальше

Часть 2. Делим наш «pod» на модули. Используем чужой «pod» для разработки своего

Время на прочтение6 мин
Количество просмотров8.5K

Введение


Продолжая разрабатывать «pod» в определённый момент приходит понимание, что проект становится большим и похож на лапшу состоит из нескольких логических частей. Чем раньше приходит такое понимание, тем проще выделить различные сущности одного проекта в отдельные блоки. Например, одна часть проекта отвечает за установку соединения с сервером, другая сериализует объекты в JSON и наоборот, третья взаимодействует с UI и т.п. Каждую такую сущность можно выделить отдельным модулем, называемым «subspec» (для простоты изложения далее буду использовать слово «модуль»). Такой подход не только поможет гибче управлять разработкой «pod»'а, но так же даст пользователям вашего «pod»'а возможность использовать только нужные им модули, не захламляя свои проекты ненужным кодом.
Читать дальше →

Часть 1. Подробная инструкция по созданию своего CocoaPod

Время на прочтение5 мин
Количество просмотров22K
Нельзя не упомянуть опубликованные ранее статьи по этой теме — введение в Cocoapods и краткое резюме по созданию своего «pod»'а.
Последняя указанная статья дала толчок в нужном направлении, но не хватало знаний для полного понимания поданной информации. Цель данной статьи — максимально подробно описать процесс создания и использования своего собственного CocoaPod'а, далее для краткости — «pod». Ну и упорядочить свои познания в данной области.
Читать дальше →

UIAppearance. Управление внешним видом iOS-приложений

Время на прочтение2 мин
Количество просмотров18K
Стиль или Суть
Сообщение или Носитель
Риторика или Диалектика

Красота — это нечто поверхностное или же идущее из глубинных истин?
Что значит «хороший дизайн»?
Эстетические суждения относительны или абсолютны?

Это важные вопросы, которые обсуждались философами, художниками и поэтами на протяжении тысячелетий.

И пока мы продолжаем наши поиски красоты и понимания мира, рынок мобильных приложений в данной области однозначно утверждает:

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

При покупке iPhone, пользователь покупает также философию Apple: вещи должны не только хорошо работать, но и хорошо выглядеть. То же относится к разработке на iOS — некрасивый интерфейс пользователя сказывается и на программном коде.

Исторически даже для незначительного изменения внешнего вида приложения в iOS требовался набор хаков, сопряженных с опасностью отклонения приложения в AppStore. К счастью, начиная с iOS 5 у разработчиков есть новый инструмент: UIAppearance.
Читать дальше →

RADUG + DI = WWDC

Время на прочтение1 мин
Количество просмотров2.1K
Привет!
Новая встреча RADUG пройдет 10 июня (СЕГОДНЯ) в 20:30 в офисе Dream Industries, в Центральном Телеграфе по адресу Москва, ул. Тверская, 7. Ходят слухи, что Apple в этом году обещает транслировать Keynote WWDC, поэтому это отличный повод собраться и посмотреть его вместе на проекторе.

Будет круто обсудить iOS 7, OSX 10.9 и возможно AppleTV SDK. Если не будет live-трансляции, то как всегда откроем ленту The Verge. После Keynote можно будет пообщаться на кухне на небольшой afterparty.

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

Регистрация здесь

Сетевое кеширование в iOS. NSURLCache

Время на прочтение5 мин
Количество просмотров22K
Данная тема важна при разработке любого приложения, взаимодействующего с сетью. Здесь грамотное использование возможностей системы может значительно улучшить взаимодействие пользователя с программой.

NSURLCache — это комплексное решение для кеширования сетевых запросов в оперативной памяти или на диске. В соответствии с документацией Apple, любой запрос с использованием NSURLConnection будет «пропущен» через NSURLCache.

Кеширование уменьшает количество необходимых обращений к сети, улучшает впечатление от работы с программой во время полного отсутствия интернета или проблем с сетевым соединением.
Читать дальше →

Разработка игры-бесконечной гонки для iOS при помощи Cocos2D-iphone

Время на прочтение9 мин
Количество просмотров43K
Сегодня я хочу вам рассказать о создании игры для iOS на основе Cocos2D на примере недавно вышедшей игры «Пчелогонки» (анг. – Bee Race).
Геймплей не содержит в себе ничего сложного – это по сути бесконечный ранер, в котором нужно собирать поинты и уворачиваться от препятствий. Только вместо рыжей девочки или кладоискателя – здесь летает двухмерная пчелка.
Для заинтересовавшихся, прошу под кат (Ахтунг! Минен унд много буквирен).
Основные разделы для рассмотрения:
  1. Очень краткое введение в Cocos2D
  2. Используем Cocos2D одновременно с StoryBoard
  3. Краткое описание геймплея и структуры проекта
  4. Покупаем инструменты и что делать, если душит жаба
  5. Чем не пахнет приложение или подключаем in-app билинг
  6. Социализируем. Подключаем Game Center и создаем мультиплеерную версию на два игрока
  7. В чём промахнулся Акела
  8. Паблиш


Спойлер:

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

Автоматическое обновление номера сборки проекта в Xcode

Время на прочтение3 мин
Количество просмотров6.8K
При передаче приложения тестировщикам или конечным пользователям не стоит забывать увеличивать версию проекта / номера сборки для того, чтобы в будущем можно было без проблем идентифицировать установленное приложение.

Память, как известно, бывает подводит. Здесь на помощь приходит простой и действенный чудо-рецепт автоматической установки номера сборки проекта.

Готовый проект с кратким описанием доступен на github: github.com/eshurakov/XcodeAutoBundleVersion
Подробнее

Auto-Renewable Subscription в iOS: правильная реализация и подводные камни

Время на прочтение6 мин
Количество просмотров30K
Auto-Renewable Subscription, наверное, самый сложный из всех типов In-App Purchase в iOS, и реализовать его правильно, от начала и до конца, совсем непросто, и даже пройдя этот нелегкий путь, вы можете столкнуться с отказом цензоров принимать ваше приложение.

В данном посте я постараюсь провести вас через все этапы внедрения подписки и, возможно, смогу отговорить вас от этой идеи.
Читать дальше →

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

Кастомизация заголовка окна в Mac OS X

Время на прочтение6 мин
Количество просмотров6K
Добрый день, %username%!

Не так давно пришла необходимость в кастомизации заголовка окна своей программы в Mac OS X. Если это делают iCal.app и Adress Book.app, то почему бы и мне не сделать так же?

Первые же ссылки из гугла дали мне несколько зацепок, и даже одна тестовая программа (после долгих плясок с бубном) скомпилилась и отобразила свой нестандартный заголовок. Но она требовала подключения приватных хедеров, их модификации (для соответствия новой версии Mac OS X) и т.п… А мне хотелось лучшего, хотелось сделать проще, да ещё и задать цвет текста заголовка окна (для гармонии с новым цветом заголовка). Отбросив все неудачные примеры, начал я копать зацепки…

И выяснил, что в обычной программе за отрисовку окна отвечает недокументированный класс NSThemeFrame, с ним-то мы и будем работать.

Осторожно! Под катом присутствует магия рантайма.
Магию в студию!