Обновить
0

Objective C *

Компилируемый объектно-ориентированный язык

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

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

Время на прочтение8 мин
Охват и читатели9.2K
Как переводчик заранее прошу извинения за возможные ошибки в переводе. Буду признателен сообщениям об ошибках для их скорейшего исправления.

Когда iOS 7 была впервые анонсирована, одним из многих визуальных нововведений, которое особенно заинтересовало меня, был жест swipe-to-delete (смахни чтобы удалить) в приложении Mail. Вы уже давно прекрасно знакомы с этой функцией приложения. После того как проводите по ячейке таблицы, вы видите кнопки корзины, дополнительных опций («Ещё») и пометки письма флагом. При нажатии на кнопку «Ещё» становится активной панель выбора действия, на которой вы можете выбрать одну из опций действия с письмом — Ответить, Пометить флагом и т.д.

Думаю, что это отличный инструмент для манипулирования записями таблицы. Однако, как вы прекрасно знаете что Apple не предоставляет этой возможности для разработчиков в iOS 7. Вы можете только добавить жест для функции удаления записи из таблицы. Остальные опции работы с записью таблицы ограничены стандартным приложением Mail. Понятия не имею почему Apple ограничивает использование такого прекрасного инструмента только своими приложениями. К счастью, некоторые разработчики создали решения (такие как UITableView-Swipe-for-Options, MCSwipeTableViewCell) и сделали их абсолютно бесплатными.

В этом уроке я буду использовать библиотеку SWTableViewCell. Посмотрим, как она поможет нам реализовать функцию swipe-to-show-options (смахни чтобы увидеть опции) в вашем приложении. SWTableViewCell достаточно проста в использовании и если вы понимаете как работает UITableView, у вас не должно возникнуть проблем с SWTableViewCell. Кроме того, этот компонент поддерживает отображение кнопок опций при свайпе в обе стороны. Вы быстро поймете что это значит.

Итак, давайте приступим и создадим наше демонстрационное приложение.
Читать дальше →

Добавляем панель бокового меню в свое iOS-приложение

Время на прочтение10 мин
Охват и читатели45K
Как переводчик заранее прошу извинения за возможные ошибки в переводе. Буду признателен сообщениям об ошибках для их скорейшего исправления.

Как я могу добавить панель бокового меню в свое iOS-приложение? Это один из самых часто задаваемых вопросов которые мы получаем от своих читателей. Сегодня мы покажем как создать боковое меню вроде того, которое вы можете наблюдать, например, в приложении от Facebook.

Для тех кто не знаком с понятием бокового меню в мобильных приложениях, Кен Ярмост (Ken Yarmost) дал хорошее объяснение этому элементу интерфейса и определил его как:
Боковое меню представляет собой панель, которая «выезжает» снизу, слева или справа от области основного контента приложения, содержащая вертикальную, независимую от основного контента приложения прокрутку, и служит основным инструментом навигации в приложении.

С того момента как Facebook представил боковое меню в своем мобильном приложении, этот элемент интерфейса быстро стал стандартом реализации навигации по приложению. В том или ином виде вы можете видеть боковое меню в таких популярных приложениях как Path, Mailbox, Gmail, Evernote и т.д.



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

Как продвигать мобильные приложения ДО релиза. Часть 1

Время на прочтение15 мин
Охват и читатели33K

Глава 1. Вступление


Благодаря моей истории «Как я создавал мобильный файтинг», я приобрел стойкую зависимость: ежедневно, разомкнув глаза, беру в руки телефон и первым делом открываю заветную иконку хабры.

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

Хочется процитировать: “Когда человек занимается альтруистической деятельностью, отдача приходит в качестве сильнейшей эмоции ощущения смысла”. Меня вдохновляет и заряжает энергией размещение публикаций. Это дает мне сил на достижения другого порядка. Поэтому я стараюсь генерировать контент, который каждому читателю может дать исключительную пользу.
Читать дальше →

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

Время на прочтение3 мин
Охват и читатели7.2K
Хочу поделиться еще одним крешем, с которым разбирался пару месяцев назад. Сейчас, по прошествии времени, крешрепорты такого типа больше не наблюдаются в 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

Время на прочтение3 мин
Охват и читатели6.6K
Хочу написать про один странный креш, с которым разбирался на работе.

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

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

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

Записки iOS программиста о его молотках, кувалдах и микрометрах

Время на прочтение20 мин
Охват и читатели32K
В один прекрасный момент, когда на собеседованиях меня уже убеждали, что я senior iOS developer — у меня возникло ощущение, что я уперся. Пишу похожий код, решаю задачи похожими способами и ощущение, что непонятно, куда развиваться дальше. Я думаю, с этой проблемой сталкивался не один я — нехваткой новых идей, концепций, направлений. Я бы хотел рассказать вам о тех инструментах и фреймворках, которые помогли преодолеть мне это ощущение.

Думаю, большинство из здесь присутствующих разработчиков читали таких ребят, как банду четырех. Все, хотя бы на собеседованиях, слышали слово паттерн, кто-то более (или менее) везучий слышал слова пострашнее — императивный, функциональный, монада, реактивность и другие ужасы. Вообще, довольно много ярких и интересных идей ходит в мире разработки ПО и, к счастью, далеко не все из них существуют только в виде словесных абстракций. Я бы хотел в этой статье немного рассказать не столько о прикладном инструментарии (хотя именно с ним мы и сталкиваемся большую часть рабочего времени), сколько о примерах инструментария, для использования которых нужно осмысление, которое существенно помогает в дальнейшем. Я бы хотел рассказать о том, как (и какие) инструменты изменяют сам процесс проектирования, написания кода, по крайней мере сделали это для меня.


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

Основы боевой системы в играх

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



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

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

ZeptoLab Code Rush 2015 уже близко

Время на прочтение3 мин
Охват и читатели14K
Привет Хабражителям!

В 2014 году мы провели свой первый совместный контест по спортивному программированию совместно с Codeforces, об этом мы писали здесь.

Коротко о том, как это было:

Контест состоял из 6 задач, на решение отводилось 2,5 часа (ознакомиться с задачами прошлого года и даже попробовать свои силы в их решении вы можете здесь).
Конечно же, даже на сугубо девелоперском мероприятии мы остались верны себе, поэтому все задачи были придуманы по мотивам наших игр, и, разумеется, мы их заботливо проиллюстрировали:



Впервые за всю историю Codeforces в контесте приняли участие одновременно более 2148 человек (зарегистрировалось более 4600 (!) со всего мира. К слову сказать, первые 3 места заняли
Читать дальше →

Как разработчики Tuffle попробовали себя в мобильном геймдеве

Время на прочтение4 мин
Охват и читатели13K
image


После полутора лет упорной работы над сервисом цифровых воспоминаний Tuffle.com, выпуска мобильного приложения, а затем и его раскрутки, наша команда стала искать новые направления, которые могли бы обеспечить финансирование стартапа. Мы отметили несколько вполне перспективных вариантов и остановились на поприще игровой индустрии. И если в разработке iOS-приложений опыт уже был, то в мобильном геймдеве мы оказались дилетантами. Изначально относясь к будущему проекту как к тестовому, мы начали перебирать всевозможные идеи и жанры. Поскольку с ходу создать крупный тайтл не позволяли ни финансовые, ни людские возможности, нужно было сделать что-нибудь маленькое, но интересное.
Читать дальше →

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

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


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

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

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



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


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

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

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

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

Время на прочтение11 мин
Охват и читатели50K

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


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

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



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

Первый опыт разработки игры на Sprite Kit

Время на прочтение6 мин
Охват и читатели22K
После создания и выкладки в App Store игры на Sprite Kit хотелось бы поделиться опытом. Немного расскажу о создании геймплея, а также о попытках связаться с издателями и о впечатлениях от фреймворка.


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

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

Стриминг аудио в iOS на примере Яндекс.Диск

Время на прочтение12 мин
Охват и читатели14K


Во время работы над проектом по стримингу аудио необходимо было добавить поддержку новых сервисов, таких как Яндекс.Диск. Работа с аудио в приложении реализована через AVPlayer, который проигрывает файлы по url и поддерживает стандартные схемы, такие как file, http, https. Все работает отлично для сервисов, в которых токен авторизации передается в url запроса, среди них DropBox, Box, Google Drive. Для таких сервисов, как Яндекс.Диск, токен авторизации передается в заголовке запроса и к нему AVPlayer доступ не предоставляет.

Поиск решения этой проблемы среди имеющегося API привели к использованию объекта resourceLoader в AVURLAsset. С его помощью мы предоставляем доступ к файлу, размещенному на удаленном ресурсе, для AVPlayer. Работает это по принципу локального HTTP прокси но с максимальным упрощением для использования.
Читать дальше →

Особенности создания NSString

Время на прочтение4 мин
Охват и читатели16K
NSLog(123456789) != 123456789Статья расчитана на новичков в Objective-C и рассказывает об одном способе выстрелить себе в ногу. Мы попытаемся создать два различных объекта NSString с одинаковым текстом, исследуем реакцию на это различных компиляторов, а также узнаем, при каких условиях NSLog(@"%@", @«123456789») выведет совсем не «123456789».

Объекты NSString и указатели


Как вы думаете, что выведет следующий код?
Читать дальше →

Компас, указывающий не на север, или как мне пригодилась тригонометрия

Время на прочтение3 мин
Охват и читатели11K
Привет, Хабр!

Я занимаюсь разработкой под iOS и недавно передо мной встала задача – создать компас, который указывает направление не на север, а на определенную точку земли. Это конечно не совсем компас, но за неимением лучшего названия, буду называть его так.

Наша компания занималась разработкой мобильного помощника для мусульман, частью которого и был этот самый компас. Его задача – указывать направление на Мекку. Подобная функция имеется практически в каждом подобном приложении, так что идея далеко не новая, однако над реализацией пришлось поломать голову.
Читать дальше →

Xcode 6 Objective-C Modernization Tool

Время на прочтение5 мин
Охват и читатели12K
Уже довольно давно в Xсode есть возможность проверить свой код на соответствие современным особенностям Objective-C (Edit > Refactor > Convert to Modern Objective-C Syntax…). Мне всегда было интересно наблюдать за тем, что Apple продвигает в качестве хорошей практики; и даже если вы не доверяете Xcode автоматически изменять код, это простой способ проверить его на возможность внесения потенциальных улучшений.

Xcode 6 представляет несколько нововведений, а кроме того, гораздо большую гибкость, позволяя самостоятельно контролировать, какие преобразования запускать:



К сожалению, из описания преобразования не всегда очевидно, что оно делает. Некоторые полезные подробности можно прочитать в руководстве Adopting Modern Objective-C, а также посмотреть на WWDC 2014 Session 417 What’s New in LLVM. Эта статья содержит мои заметки по каждому из преобразований.
Читать дальше →

Основы программирования графики на Apple Metal: Начало

Время на прочтение18 мин
Охват и читатели28K
imageПривет, Хабр! Мой сегодняшний пост — это руководство для начинающих программировать графику на Apple Metal API. Когда я начал разбираться с этой темой, то обнаружилось, что помимо документации от Apple и примеров от них же и смотреть особо нечего. Сегодня я расскажу о том, как создать простое приложение на Metal, которое отображает трехмерный куб с освещением. Затем мы нарисуем несколько кубов с использованием одной из главных фишек Metal — рендеринга в нескольких потоках. Заинтересовавшихся прошу под кат.
Читать дальше →

Безопасность Parse в iOS приложении

Время на прочтение5 мин
Охват и читатели14K


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

Как скрэшить любое приложение на айфоне, и как этого не допустить

Время на прочтение4 мин
Охват и читатели31K
image

Однажды мы, в Surfingbird, нашли странную ошибку, из-за которой приложение стабильно крэшилось. Позже оказалось, что почти любое приложение можно довольно просто скрэшить (даже приложения, написанные самой Apple). О том, что же это за ошибка и как её обойти, мы расскажем в статье.
Читать дальше →