Настраиваем удобную консоль в Mac (iTerm2, Oh My Zsh)

В этом руководстве я постараюсь собрать все необходимое, по шагам с минимум необходимых действий. Вот что получится в итоге. Для начала скачаем и установим альтернативу стандартному терминалу, а именно iTerm2. По умолчанию в Mac OS установлена оболочка zsh. Это альтернатива оболчки shell по умолчанию. Следующий шаг это установка Oh My Zsh. Oh-My-Zsh это open source фреймворк, который поддерживается сообществом. Предназначен для управления настройками ZSH. Поставляется с большим количеством дополнительных функций, плагинов и тем.

Автоматическая валидация объектов POST запросов в Asp.Net Mvc Web Api

Разрабатывая серверную часть web api хочется быть уверенным, что все данные, которые необходимы для обработки конкретного запроса с клиента переданы. Что все данные проходят валидацию на соответствие требований. Update 2016-06-27 Поиск пути Написав несколько серверных методов web api я получив пару 500 ошибок. Дело в том, что с клиента не всегда приходят данные, которые я ожидаю. Самый простой пример это может быть опечатка в свойстве переданного объекта. Чуть посложнее: таких данных у клиента может не быть (например его текущие координаты, в случае если пользователь мобильного приложения не разрешил доступ приложению к этим данным).

Боковое меню и открытая клавиатура

Столкнулся с проблемой, что боковое меню (MMDrawerController) при открытии оставляет открытую клавиатуру. Это конечно не проблема меню, но повозиться пришлось. Существует несколько вариантов скрыть клавиатуру в iOS. Вся их идея заключается в том, чтобы снять так называемый фокус с объекта, который этот фокус поддерживает. Первый способ это вызвать соответствующий метод. textField.resignFirstResponder() Для вызова этого метода нужно знать соответствующий testField (или другой объект, являющимся в фокусе). Второй способ вызвать метод endEditing у UIView, которая содержит объект в фокусе.

Сравнение словарей NSDictionary в Swift

Сравнение объектов довольно частое занятие. Сравнение словарей может казаться довольно сложным процессом. Но не в Swift. Он элегантно сравнивает объекты словарей без ошибок определяя правильное значение. Для проведения эксперимента создадим несколько словарей с одинаковыми значениями, разными, в разном порядке и разные словари. let dic1: [String: AnyObject] = ["key1": 100, "key2": 200] let dic2: [String: AnyObject] = ["key1": 100, "key2": 200] let dic3: [String: AnyObject] = ["key1": 100, "key2": 250] let dic4: [String: AnyObject] = ["

Ссылки на функции в Swift и циклические ссылки

Язык программирования Swift появился с некоторыми замечательными возможностями. И, хотя эти функции давно уже есть в других языках программирования, в мире iOS это как глоток свежего воздуха. Во-первых это замыкания. Это функции специального типа замыкания, которые могут быть переданы как аргументы в другие функции и установлены как значение соответствующих свойств. В этом посте разберемся что такое замыкания и как их употреблять.  Для начала создадим кнопку, которая выполняет определенный блок кода при тапе.

Прототипирование анимаций в XCode Playground

Создание анимаций не всегда веселое занятие. Чаще всего это утомительный труд, который сопровождается бесконечными циклами запуска и проверки анимаций в симуляторе. Одно дело разработать концепт анимации, другое важное дело закончить эту работу полностью, отполировать анимацию, чтобы она выглядела идеально. Playground поможет сделать этот процесс эффективнее, убрав ненужные шаги. Создаем Playground Создаем Playground с настройками по умолчанию. Далее включим панель Navigator (пункт 2) и Assistant Editor (пункт 1). Первый пункт нужен как раз для того, чтобы видеть визуальную составляющую кода в Playground.

Как тестировать приложение с плохим интернетом на симуляторе в XCode / Mac

Качественные приложения должны уметь работать при плохом интернете. Должны показывать статус операций. Не говоря уже о том, что ни в коем случае не должны падать при отсутствии или плохом интернете. В идеале при работе в оффлайн приложение должно запомнить что происходило и при возвращении в онлайн все операции выполнить. В iOS для этого есть в режиме разработчика так называемый Network Link Conditioner. Это очень удобный инструмент для тестирования приложений с плохой связью с интернетом.

Ловим зомби объекты в iOS (XCode) или как решать message sent to deallocated instance

История начинается с того, что жил был один наследник UITextView. Это был не простой наследник, а наследник, использующийся в чате. Этакий инпут для сообщений чата. Жил он себе не тужил, как в один прекрасный момент начал доводить своими падениями. Этот монстр выдавал сухую ошибку exc_bad_access в консоли. Больше ничего не говорил. Я обнаружил последовательность в которой происходит этот крэш. Обнаружилось, что ошибка возникает в момент deinit этого класса. Очень странное поведение.

Siri

Однажды Siri поведала тайну... Пост больше про оффтопик, но интересно, насколько глубоки познания Siri о календаре

Начало Swift. Guard и defer

Довольно долго я не писал в блог. Случилось это потому, что я сменил основной язык программирования и полностью погрузился в мобильную разработку на нативном языке программирования от Apple Swift 2.0. Все программирование для мобильных платформ ранее сводилось к Xamarin. Xamarin это удобно, это просто и быстро. Ранее я писал, что для быстрого старта следует выбирать Xamarin. Разумеется, тем кто знает C# еще проще войти в мир мобильной разработки. Но наступает момент, когда инструментов Xamarin и мощи Microsoft не хватает для действительно Rocket Science приложений.