Как стать автором
Обновить
0

Cocoa *

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

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

Весёлые табы в MAC OS X или история про тот самый Tab View

Время на прочтение5 мин
Количество просмотров14K
Привет всем!

История началась с того, что мне понадобилось написать приложение под Mac OS X. Все реже можно увидеть статьи по поводу разработок под desktop, да еще и под Mac OS X, но эта тема именно об этом.

Я уже писал много чего на QT, а тут встала задача использовать исключительно Cocoa.

Существует определенная аура святости вокруг продуктов apple, ну и я наивно подпал под нее от моего макбука. Мне казалось что с пользовательским интерфейсом особых проблем не будет, ну разве что какие-то мелочи, которые встречаются везде (ох, как я ошибался).

Вот в проекте я дошел до разработки пользовательского интерфейса и тут мне понадобился классический шаблон Tab View. Продолжение читайте уже под катом.

Подробности
Всего голосов 15: ↑13 и ↓2+11
Комментарии11

Введение в Firebase: пишем простое социальное приложение на Swift

Время на прочтение16 мин
Количество просмотров215K
В связи с неожиданным решением Facebook закрыть Parse, многое разработчики задались вопросом, что использовать вместо него. Сегодня практически невозможно представить полностью автономное приложение, которое было бы полезное всем. В связи с этим, iOS разработчики в своей работе пользуются инструментами и ресурсами, предоставленные Apple для доступа к данным. Backend-as-a-service, или сокращенно BaaS является потрясающим инструментом для разработчиков.

Среди наилучших и наиболее популярных BaaSs можно выделить Firebase от компании Google. По существу, Firebase является безусловно потрясающим в исполнении, реализации и эксплуатации. Firebase служит базой данных, которая изменяется в реальном времени и хранит данные в JSON. Любые изменения в базе данных тут же синхронизируются между всеми клиентами, или девайсами, которые используют одну и ту же базу данных. Другими словами, обновление в Firebase происходят мгновенно.

Вместе с хранилищем, Firebase также предоставляет пользовательскую аутентификацию, и поэтому все данные передаются через защищенное соединение SSL. Мы можем выбрать любую комбинацию email и пароля для аутентификации, будь то Facebook, Twitter, GitHub, Google, или что-то другое.

В добавку к iOS SDK, у Firebase есть SDK для Android и JavaScript. Все платформы могут использовать одну базу данных.
Сложно представить что Firebase со всеми этими функциями бюджетное решение.

На момент написания этой статьи, в бесплатном пакете Firebase может обрабатывать до 100 одновременных соединений. Этого вполне достаточно для работы популярного приложения. За $49 в месяц ограничений на сетевую активность нет.
Читать дальше →
Всего голосов 18: ↑16 и ↓2+14
Комментарии5

Реализуем свой dropDown ViewController (aka iOS 8 Mail app) в 200 строк

Время на прочтение7 мин
Количество просмотров13K
Еще с beta версии iOS 8 мне очень понравилась эта новая фича приложения почты: при создании нового письма можно просто смахнуть это окно вниз и продолжить работу на предыдущем экране. Не уверен, насколько эта фича оказалась полезной конкретно в этом приложении, но идея то отличная! В тот же вечер я сел делать подобную штуку, и таки сделал свой велосипед, и на время забыл об этом.

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

image
Читать дальше →
Всего голосов 10: ↑9 и ↓1+8
Комментарии13

Работа с JSON в Swift

Время на прочтение9 мин
Количество просмотров48K
JavaScript Object Notation, или сокращенно JSON является самым распространенным способом связи с сервером и получения информации с него. Он чрезвычайно популярен из-за простоты в использовании и восприятии.

Рассмотрим следующий фрагмент JSON:
[
  {
    "person": {
      "name": "Dani",
      "age": "24"
    }
  },
  {
    "person": {
      "name": "ray",
      "age": "70"
    }
  }
]

Читать дальше →
Всего голосов 13: ↑10 и ↓3+7
Комментарии11

Истории

Введение в VIPER

Время на прочтение5 мин
Количество просмотров93K
В компании Mutual Mobile тестирование является частью создания отличного программного обеспечения. Однако тестирование не всегда было ключевой частью при создании приложений под iOS. Когда мы начали искать способы, чтобы улучшить тестирование наших приложений, то обнаружили, что написание тестов для приложений это довольно сложно. И решили, что если мы собираемся улучшить способ тестирования программного обеспечение, то мы должны сначала придумать лучший способ спроектировать приложения, и это решение мы назвали VIPER.

Традиционным способом проектирования приложения под iOS является использование шаблона MVC (модель-представление-контроллер). Использование MVC для архитектуры приложения, может натолкнуть Вас на мысль, что каждый класс представляет собой модель, или представление, или контроллер. Поскольку значительная часть логики приложения не входит в модель или представление, она обычно оказывается в контроллере. Это приводит к проблеме, известной как Massive View Controllers, где контроллеры в конечном итоге делают слишком много. Если вся логика встроена в контроллер представления, это приводит к тестированию логики через UI, в свою очередь это является неправильным способом проектированиям логики. Также проще совмещать бизнес-логику и UI код в том же методе. Когда Вам будет нужно добавить новые функциональные возможности или исправить ошибку, то будет трудно определить, где внести изменение и при этом быть уверенным, что не будет непредсказуемых последствий в другом месте.


Читать дальше →
Всего голосов 12: ↑8 и ↓4+4
Комментарии7

Реализация MVVM в iOS с помощью RxSwift

Время на прочтение5 мин
Количество просмотров45K
Существует бесчисленное множество статей относительно шаблона MVVM в iOS, но немного о RxSwift, и мало кто акцентирует внимание на том, как выглядит паттерн MVVM на практике и как его реализовать.

ReactiveX

ReactiveX — библиотека для создания асинхронных и основанных на событии программ при помощи наблюдаемой последовательности.  — reactivex.io

RxSwift — относительно молодой фреймворк, который позволяет "реактивно программировать". Если Вы ничего о нем не знаете, тогда наведите справки, потому что функциональное реактивное программирование (FRP) набирает обороты, и не собирается останавливаться.
Читать дальше →
Всего голосов 11: ↑10 и ↓1+9
Комментарии9

Создание приложения ToDo с помощью Realm и Swift

Время на прочтение17 мин
Количество просмотров64K
С развитием смартфонов в последние годы было разработано много инструментов, чтобы упростить жизнь разработчикам, обеспечив их максимальной производительностью и качеством. Занимать лидирующие позиций в App Store сегодня не простое задание. А научить ваше приложение масштабироваться еще сложнее. Когда приложением пользуются миллионы пользователей, вы должны следить за приложением и при необходимости выполнять все операции моментально. Поэтому одной из проблем, с которой сталкиваются многие разработчики, является Database. Она действительно вызывает сильную головную боль для каждого из нас, и я думаю, что сегодня у вас есть только два варианта: SQLite и Core Data. Я был большим поклонником Core Data и его способностью работать с записями и сохраняющимися данными, но я понял, что впустую трачу много времени, работая с ним при разработке приложений. Недавно, я столкнулся с Realm, новой лучшей заменой SQLite и Core Data.

Realm and Swift
Читать дальше →
Всего голосов 14: ↑13 и ↓1+12
Комментарии18

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

Время на прочтение9 мин
Количество просмотров26K
С выходом 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
Читать дальше →
Всего голосов 12: ↑10 и ↓2+8
Комментарии7

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

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


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

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

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

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

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

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

Apple iAd — опыт использования

Время на прочтение2 мин
Количество просмотров11K
Я ни разу не использовал в каких-либо проектах рекламную программу Apple iAd, и наконец решил «потренироваться на кошках», совместив приятное с полезным — узнать что-то новое в плане программирования, и попробовать посмотреть, как же «продают» в App Store бесплатные приложения. Кому интересно что из этого получилось, прошу под кат.
Читать дальше →
Всего голосов 11: ↑9 и ↓2+7
Комментарии12

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

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

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

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

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

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

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

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

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

Казалось бы все чудесно, но тут началось…
Читать дальше →
Всего голосов 16: ↑13 и ↓3+10
Комментарии26

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

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


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

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

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

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн

Screentendo — генерация уровней для Super Mario Bros на основе содержимого экрана

Время на прочтение3 мин
Количество просмотров19K
image

Screentendo – это приложение для настольных компьютеров, которое превращает выделенную область экрана в играбельный уровень для игры Super Mario Bros.

Я раньше не делал приложений для Cocoa app и не использовал Sprite Kit, и это стало для меня отличным упражнением. Исходный код доступен по ссылке.



Как это работает?


При запуске приложения появляется полупрозрачное окно, которое можно двигать и изменять его размер. После размещения окошка над какой-то областью экрана клик внутри него приведёт к тому, что приложение создаст уровень на базе контента, находящегося под ним.

У Screentendo есть два основных этапа работы: обработка картинки для определения структуры выбранного района, и создание уровня.
Читать дальше →
Всего голосов 27: ↑20 и ↓7+13
Комментарии4

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

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


В предыдущих частях цикла мы рассмотрели основные аспекты работы Typhoon и подготовились к полноценному применению его на практике. Тем не менее, помимо затронутых тем, фреймворк предоставляет большое количество других функций.
Читать дальше →
Всего голосов 15: ↑12 и ↓3+9
Комментарии1

Разработка через тестирование в iOS

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

Содержание:


  • Разработка через тестирование – что это?
  • Три закона TDD
  • Примеры применения
  • Преимущества и недостатки
  • Литература и ссылки


Разработка через тестирование – что это?


Разработка через тестирование (Test-driven development) — техника разработки программного обеспечения, которая определяет разработку через написание тестов. В сущности вам нужно выполнять три простых повторяющихся шага:
— Написать тест для новой функциональности, которую необходимо добавить;
— Написать код, который пройдет тест;
— Провести рефакторинг нового и старого кода.

Мартин Фаулер



Читать дальше →
Всего голосов 18: ↑12 и ↓6+6
Комментарии10

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

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


В предыдущей статье цикла мы кратко рассмотрели основные принципы устройства и функционирования Typhoon Framework — Dependency Injection контейнера для iOS. Тем не менее, мало понимать, как устроен инструмент — важнее всего правильно его использовать. В первой части мы рассматривали различные примеры настройки конфигураций создаваемых зависимостей, то теперь разберемся с более высоким уровнем — разбитием на модули самих TyphoonAssembly и их тестированием.
Читать дальше →
Всего голосов 10: ↑9 и ↓1+8
Комментарии0

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

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


В прошлой части цикла мы познакомились с Dependency Injection фреймворком для iOS — Typhoon, и рассмотрели базовые примеры его использования в проекте Рамблер.Почта. В этот раз мы углубимся в изучение его внутреннего устройства.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии0

Создание многоплатформенных игр с использованием Cocos2d-x версии 3.0 и выше

Время на прочтение5 мин
Количество просмотров35K
В данном руководстве вы узнаете о том, как создать простую игру с помощью Cocos2d-x 3.0 или более поздней версии в среде разработки Windows и как скомпилировать её для запуска в Windows и Android.


Читать дальше →
Всего голосов 28: ↑23 и ↓5+18
Комментарии7

App Store style кастомизируемая кнопка загрузки

Время на прочтение1 мин
Количество просмотров8.6K
github.com/PavelKatunin/DownloadButton

Недавно появилась потребность сделать кнопку загрузки для видео, сам этап загрузки был очень похож на стандартную кнопку загрузки приложений в Appstore, но только линия, отображающая уже загруженные данные, должна была быть снаружи. Я подумал, что такой контрол может быть удобен для отображения загрузки разных вещей и что он может пригодиться где-то еще — и вынес его в отдельный фреймворк и оформил в виде cocoapods. Опубликован под Apache 2.0.

Очень приветствуется использование, редактирование кода, заведение issue на github, предложения по новым фичам и отправка пул реквестов.
Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии3