Search
Write a publication
Pull to refresh
6
0
Сергей Петрук @SPetruk

Dev2Dev Lead at Qiwi

Send message

Убийственная связка из NSCache и UINib

Reading time3 min
Views7.1K
Хочу поделиться еще одним крешем, с которым разбирался пару месяцев назад. Сейчас, по прошествии времени, крешрепорты такого типа больше не наблюдаются в HockeyApp, а раньше были одними из самых популярных. Собственно, проблема наблюдалась уже довольно давно, но тогда наше приложение еще использовало TestFlight и информации для анализа не доставало. Креш характеризовался примерно таким стеком:

Thread 0 Crashed:
0   libobjc.A.dylib                      0x39abcf42 objc_msgSend + 2
1   CoreFoundation                       0x2bfe0c61 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 10
2   CoreFoundation                       0x2bf3c6d5 _CFXNotificationPost + 1782
3   Foundation                           0x2cc6e129 -[NSNotificationCenter postNotificationName:object:userInfo:] + 70
4   Foundation                           0x2cc72c8f -[NSNotificationCenter postNotificationName:object:] + 28
5   UIKit                                0x2f750883 -[UIApplication _performMemoryWarning] + 132
6   libdispatch.dylib                    0x3a0107a7 _dispatch_client_callout + 20
7   libdispatch.dylib                    0x3a021253 _dispatch_source_latch_and_call + 624
8   libdispatch.dylib                    0x3a0122ed _dispatch_source_invoke + 210
9   libdispatch.dylib                    0x3a013e1f _dispatch_main_queue_callback_4CF + 328
10  CoreFoundation                       0x2bfee3b1 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 6
11  CoreFoundation                       0x2bfecab1 __CFRunLoopRun + 1510
12  CoreFoundation                       0x2bf3a3c1 CFRunLoopRunSpecific + 474
13  CoreFoundation                       0x2bf3a1d3 CFRunLoopRunInMode + 104
14  GraphicsServices                     0x332cf0a9 GSEventRunModal + 134
15  UIKit                                0x2f5487b1 UIApplicationMain + 1438
16  xxx                                  0x0015bb81 main (main.m:18)
17  libdyld.dylib                        0x3a030aaf start + 0
Читать дальше →

Повреждение стека в одном из методов NSString

Reading time3 min
Views6.5K
Хочу написать про один странный креш, с которым разбирался на работе.

Креш происходил стабильно при заходе в папку с корейскими символами. Проблема оказалась во вроде бы безобидном коде следующего вида:

NSURLComponents* urlComp = [[NSURLComponents new] autorelease];
...
urlComp.path = path;
urlComp.user = username;
...

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

А у нас есть SDK, а у вас?

Reading time12 min
Views22K
Привет, Хабр! Правильнее было бы назвать этот пост «У нас есть классная партнёрская программа и крутой SDK для неё», но не хотелось делать длинный заголовок и сразу раскрывать все карты. Как бы там ни было, в этой публикации мы хотим рассказать про SDK наших сервисов, который каждый из вас может использовать в своих приложениях.


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

Делаем свою работу в Xcode чуточку эффективнее

Reading time2 min
Views21K
Разработка программных продуктов — очень интересный процесс, который нам всем очень-очень нравится, но есть некоторые вещи, которые слишком монотонны. Сегодня я бы хотел рассказать про то, как я упростил свой рабочий процесс в Xcode с помощью различных сторонних плагинов.

Интеграции :)

Заинтересованных прошу под кат
Читать дальше →

Objective-C Runtime. Теория и практическое применение

Reading time6 min
Views61K
В данном посте я хочу обратиться к теме, о которой многие начинающие iPhone-разработчики часто имеют смутное представление: Objective-C Runtime. Многие знают, что он существует, но каковы его возможности и как его использовать на практике?
Попробуем разобраться в базовых функциях этой библиотеки. Материал основан на лекциях, которые мы в Coalla используем для обучения сотрудников.
Читать дальше →

Метаклассы в Objective-C

Reading time7 min
Views27K
Данная статья представляет собой перевод статьи What is a meta-class in Objective-C?

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

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

BDD с помощью Cucumber

Reading time3 min
Views105K
Если вы привыкли сначала писать код, а потом его тестировать, то с BDD такой подход совсем не уместен. Сила BDD в том, что он помогает вести разработку начиная со стадии оформления ТЗ. Для BDD это список свойств (фич), который уместно писать вместе с заказчиком.

Но самое главное, что по этому же списку происходит автоматическое тестирование проекта. Инструмент тестирования (в нашем случае это Cucumber) методично пройдет по вашему перечню и дотошно проверит реализацию каждой фичи.
Читать дальше →

Биндинги в Swift. Делаем первые шаги к MVVM

Reading time11 min
Views28K
Доброго времени суток. Эта статья будет полезна тем, кто устал изо дня в день бороться с изменяемостью данных в интерфейсе, тем, кто еще не знает о существовании MVVM, и тем, кто сомневается, что данный паттерн можно успешно применять на практике при разработке iOS приложений. Заинтересовавшихся прошу под кат.
Читать дальше →

Создание view с анимацией изменения свойства

Reading time9 min
Views11K
Одной из типовых задач при разработке приложений под iOS является создание кастомных элементов UI, в том числе иногда может потребоваться анимировать изменения значения какого-либо из свойств. В статье рассматривается процесс создания подкласса UIView, имеющего свойства, значения которых можно изменять с анимацией. Простой пример: необходимо отрисовывать круговой прогресс с возможностью анимировать изменение цвета и значения в пределах от 0 до 1.


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

Книги по Swift

Reading time1 min
Views21K
Добрый день, Хабровчане!

Прошло уже достаточно времени, но книг на русском языке про Свифт так и не появилось.
Издательству «Питер» интересно ваше мнение о том какой должна быть эта книга. Примите участие в опросе и помогите нам выбрать идеальную книгу.

1. Книга для начинающих. Например такая
Swift for Beginners: Develop and Design
image
Читать дальше →

10 советов по работе в Sketch

Reading time3 min
Views58K


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

Как увеличить доход с рекламы в мобильных приложениях

Reading time6 min
Views30K
Рынок мобильный рекламы очень молодой и динамичный. Технологии, которые много лет существуют в вебе, в мобильном рынке всё еще активно развиваются и совершенствуются.

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

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

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

Objective-C Runtime для Си-шников. Часть 3

Reading time4 min
Views11K
image

Всем привет. Сегодня я продолжу рассказывать вам о внутреннем устройстве Objective-C Runtime, а конкретно — о его реализации на уровне языка C.

В прошлых статьях мы с вами подробно разобрались с селекторами и механизмом посылки сообщений объектам и классам. Сегодня я хотел бы закончить с сообщениями и рассказать о принципах работы некоторых встроенных возможностей языка Objective C.

Тем, с кем мы ещё не знакомы, я предлагаю для начала прочитать первую и вторую части, а прочитавших и заинтересовавшихся прошу под кат.
Читать дальше →

Лекции Технопарка. 1 семестр. Алгоритмы и структуры данных

Reading time2 min
Views169K
Очередной пост в рамках нашего цикла лекций Технопарка. В этот раз мы предлагаем вашему вниманию курс, посвящённый алгоритмам и структурам данных. Автор курса — Степан Мацкевич, сотрудник компании ABBYY.

Лекция 1. Основы


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


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

Химия геймдева или как манипулировать игроками

Reading time11 min
Views41K
После выхода в свет моей первой мобильной игрушки, я активно начал заниматься самообразованием в области гейм дизайна для совершенствования моего продукта. Наткнулся в буржнете на любопытную статью, которая заставила меня по-иному взглянуть на игры и дала более полное понимание процесса разработки. Редко удается встретить что-то действительно стоящее, а этот текст мне так понравился, что я решил сделать русский перевод. Помимо прочего, я выкинул всю лирику, попытку автора шутить и немного воды.



1. За пределами алхимии


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

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

А что если бы мы декодировали эти системы и превратили бы их в практическую методику создания игр?
Читать дальше →

Сила Objective-C 2.0. Эффективное программирование для iOS и OS X

Reading time2 min
Views14K

Для кого написана эта книга:


Книга предназначена для разработчиков, которые хотят углубить свои знания Objective-C, а также стремятся писать код, простой в сопровождении, эффективный и содержащий меньше ошибок.Даже если вы еще не являетесь разработчиком Objective-C, но у вас имеется опыт работы на других объектно-ориентированных языках (например, Java или C++), вы все равно узнаете много полезного. Впрочем, в таком случае неплохо заранее ознакомиться с синтаксисом Objective-C.

image

Какие темы рассматриваются в книге:


В книге не рассматриваются основы Objective-C — для этого есть много других книг и ресурсов. Вместо этого книга учит эффективно использовать язык. Она состоит из подходов, каждый из которых содержит простую и доступную информацию. Подходы сгруппированы по темам.

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

Встраиваем Touch ID в iOS приложение

Reading time8 min
Views30K


Вступление


Начиная с iOS 8 Apple открывает доступ к возможности использования технологии Touch ID (аутентификации с помощью сканера отпечатков пальцев, встроенного в iPhone 5s) в сторонних приложениях. В связи с этим я хотел бы поделиться с вами подробной информацией о том, что же именно стало доступно разработчикам, как это встроить в свое приложение, каким поведением это обладает, а также поделиться удобной «оберткой», которая реализует наиболее, на мой взгляд, вероятный сценарий использования Touch ID.
Читать дальше →

Указатели, ссылки и массивы в C и C++: точки над i

Reading time10 min
Views632K
В этом посте я постараюсь окончательно разобрать такие тонкие понятия в C и C++, как указатели, ссылки и массивы. В частности, я отвечу на вопрос, так являются массивы C указателями или нет.

Обозначения и предположения


  • Я буду предполагать, что читатель понимает, что, например, в C++ есть ссылки, а в C — нет, поэтому я не буду постоянно напоминать, о каком именно языке (C/C++ или именно C++) я сейчас говорю, читатель поймёт это из контекста;
  • Также, я предполагаю, что читатель уже знает C и C++ на базовом уровне и знает, к примеру, синтаксис объявления ссылки. В этом посте я буду заниматься именно дотошным разбором мелочей;
  • Буду обозначать типы так, как выглядело бы объявление переменной TYPE соответствующего типа. Например, тип «массив длины 2 int'ов» я буду обозначать как int TYPE[2];
  • Я буду предполагать, что мы в основном имеем дело с обычными типами данных, такими как int TYPE, int *TYPE и т. д., для которых операции =, &, * и другие не переопределены и обозначают обычные вещи;
  • «Объект» всегда будет означать «всё, что не ссылка», а не «экземпляр класса»;
  • Везде, за исключением специально оговоренных случаев, подразумеваются C89 и C++98.


Указатели и ссылки


Указатели. Что такое указатели, я рассказывать не буду. :) Будем считать, что вы это знаете. Напомню лишь следующие вещи (все примеры кода предполагаются находящимися внутри какой-нибудь функции, например, main):

int x;
int *y = &x; // От любой переменной можно взять адрес при помощи операции взятия адреса "&". Эта операция возвращает указатель
int z = *y; // Указатель можно разыменовать при помощи операции разыменовывания "*". Это операция возвращает тот объект, на который указывает указатель

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

Как я создавал мобильный файтинг под iOS

Reading time11 min
Views50K

Глава 1. Спасибо, Майкл Дудикофф


В детстве я любил мечтать о том, кем же я стану, когда вырасту. Какой путь выбрать: космос или океанские глубины? Нет, я хотел создавать игры. Почему игры? Я рос во времена, когда разум любого мальчишки был отравлен компьютерным бумом и первыми консольными баталиями. Шли годы, мечта моя спала медвежьим сном, задавленная трудовыми буднями. И вот, однажды…

Март 2014. 7 утра в обычном московском спортзале. Поднимаю гантели, подавляя сонное недовольство разговорами с местными хохмачами. Тут в нашу беседу внезапно вклинился ОН.



Мальчики и девочки, рожденные на заре СССР, хорошо помнят гнусавый одноголосый перевод с затертых видеокассет. И вот один из обладателей того голоса появляется на экране ТВ, подвешенного к потолку. Конечно, я сразу узнал легендарного Майкла Дудикоффа, героя киноэпопеи «Американский ниндзя».
Читать дальше →

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity