Рубрика «objective-c» - 22

Observer Pattern со строгой типизацией или зачем нам нужен Objective C++

Уже много копий было сломанно о тему «обработка событий в Objective-C», о делегировании событий (к примеру, viewWillAppear:(BOOL)animated ), о том как это не удобно, когда надо слушать их одновременно в разных местах программы.

Я хочу предложить Вам свою реализацию шаблона Observer, который использует мощь C++0x и позволяет объявлять сигналы с жёстко типизированным списком параметров, например, вот так:

	new TLSignal<NSString *, BOOL>(self);

Т.к. мои знания С++ довольно таки скудны, то буду признателен любым советам по улучшению данного кода.

Заинтересовавшихся прошу под кат.
Читать полностью »

В последнее время обратил внимание на ролики программ, в которых реализован так называемый псевдо 3D эффект: когда картинка приложения изменяется в зависимости от положения пользователя относительно телефона. Или телефона относительно пользователя: смотря с какой стороны вы находитесь :). Для достижения этого эффекта можно использовать либо сенсоры либо отслеживать положение глаз пользователя (т.н. head tracking). Второй способ несколько сложнее, хотя даёт более правдоподобный результат.

В качестве эксперимента мы решили попробовать сделать такой 3Д фон в программе Deluxe Moon Pro (В версии на маркете пока этот эффект не реализован!).

Вот пример того, что у нас получилось:

Итак начнем.
Читать полностью »

Лечу Crash'и NSLog'ами. Недорого. Многолетний опыт. 100% гарантия.

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

Все началось с того, что на одном из относительно больших проектов начало стабильно вываливаться исключение при авторизации пользователя. «Ну и что тут такого? У всех бывает. Проверку на nil забыли поставить или где-то накосячили. „Тоже, мне, большое событие — crash на проекте“, — подумает большая часть программистов. В принципе — абсолютно согласен. Crash — не такое уж и редкое явление в программировании под iPhone, и с ним сталкиваешься по десять раз на день. Но этот был особенным. От него уже начало попахивать „магией“, когда мне сказали про его некоторые параметры и особенности:

  • Воспроизводимость на симуляторе: 100%
  • Воспроизводимость на устройстве: 0%
  • Путь к крэшу (после локализации крэша): ~ 40 секунд
  • Настройки оптимизации при компиляции (-O1,-O2...) не влияют на воспроизводимость
  • XIB'ы в проекте не используются

Да выглядел он довольно безобидно:

// Code
UITextView * textView = [ [UITextView alloc] initWithFrame:CGRectMake(0, 150, _width, _height)];

// Exception
*** Terminating app due to uncaught exception 'CALayerInvalidGeometry', 
    reason: 'CALayer bounds contains NaN: [0 0; nan 200]'

»Ну тут же и ежу понятно, что width — после вычисления — NaN!", — подумал я. Бегло поглядев где и как вычисляется ширина вьюхи, и не найдя ничего особого опасного, я, для утверждения своей догадки, поставил перед созданием вьюхи NSLog. А вдобавок, и точку останова на строке с созданием элемента.

// Source:
NSLog(@"width = %f", _width);

//Output:
width = 200

«Гм», — подумал про себя я, и продолжил выполнение программы после точки останова. И крэша не произошло…

Читать полностью »

Вступление

Приветствую, читатели!

В ходе разработки приложений под iOS у меня накопились некоторые хитрости, которыми я хотел бы поделиться с Вами.

Сразу предупрежу, что я стараюсь шагать в ногу со временем, поэтому примеры будут под iOS >=5.0 и использовать Storyboard и ARC, но ничего не мешает их портировать на 4.*.

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

Заинтересовавшимся — прошу под кат (Пост содержит скриншоты областей Interface Builder-а, поэтому предупреждаю о траффике).

Читать полностью »

Мой друг, bartwader, попросил меня опубликовать эту статью.

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

Часть первая.

Все было как в популярных демотиваторах — я открыл книгу, прочитал первую главу — и тут понеслось.
Что касается книги, то, на мой взгляд, она не очень хорошая. У меня сложилось впечатление, что собралась группа разработчиков, и под пивко за ночь набросали книжку. На тот момент мне казалось что обучение происходило по принципу – нету времени объяснять, делай как мы говорим. Тем не менее книгу я прочитал на одном дыхании, решил, что стоит закрепить знания, написав что-то отличное от примеров.
Читать полностью »

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

Если вы распространяете свои приложения сами, вне MacAppStore, в виде установщика, то вы должны знать, что Xcode не позволяет подписывать установщик Developer ID сертификатом. Это странно, если учесть, сколько обновлений Xcode уже выпущено после введения Developer ID.

В документации так и написано:

If you want to distribute your application outside of the Mac App Store as part of an installer package, create the package as you normally do, perhaps by using the packagemaker(1) command. Code sign the resulting package with your Developer ID Installer certificate by using the productsign command.

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

Приветствую, уважаемые читатели.

Вступление

Хочу поделиться с сообществом опытом создания игры для iOS на базе cocos2d+box2d и задачами, с которыми мне пришлось столкнуться, а также методами их решенеия. Опыт программирования у меня значительный, в game development я новичок, опыт использования Objective-C около года. Поэтому вполне допускаю, что для встреченных мной «задач» давно уже существуют решения в виде готовых библиотек/классов/методик, а я просто плохо искал и не смог найти их в интернете. А может быть в открытом доступе их нет и каждый решает их как может, с другими не делится. Я больше склоняюсь ко второму варианту, потому решил поделиться — вдруг кому-то пригодится.

Читать полностью »

Привет, друзья!

Если вы создаете приложения для гаджетов от Apple, то наверняка в курсе, что недавно произошло обновление iOS до версии 6.
Наравне с другими новыми функциями Apple внесла изменения в механизм autorotation.
На всякий случай напомню, что autorotation — это механизм, позволяющий использовать устройство как в портретной (вытянутой в высоту), так в альбомной (растянутой в ширину) ориентации, а также изменять эту ориентацию при повороте устройства.
image
Если в вашем приложении контент отображается в обеих ориентациях (а особенно если на некоторых экранах вам нужно запретить поворот) — готов поспорить, что у вас уже возникли некоторые вопросы.
Если же вы не используете функцию изменения ориентации экрана — разницы могли и не заметить. Однако знание того, как в iOS6 работает autorotation, в любом случае будет полезно и пригодится в будущем.
Читать полностью »

                                Если у тебя есть яблоко и у меня есть яблоко, и мы обменяемся
                                 этими яблоками, то у каждого из нас будет по одному яблоку.
                                  Но если у тебя есть идея и у меня есть идея, и мы обменяемся
                                              этими идеями, то у каждого из нас будет по две идеи!
                                                                                               ~ Джордж Бернард Шоу

Сегодня мы заглянем за кулисы и расскажем вам о том, как создавался логотип для AppCode — одной из новейших сред разработки от JetBrains.

Мы выпустили AppCode примерно полтора года назад как среду разработки для Objective-C, и сейчас у продукта вполне узнаваемый пользователями логотип. Не все знают, что до выхода в свет у AppCode было другое кодовое название: CIDR. У нас уже был язык — C и среда разработки — IDE, не хватало только R на конце, чтобы получить CIDER, т.е. «сидр». Как нам показалось, очень удачная ассоциация, ведь сидр делается из яблок, а на Objective-С пишут приложения для устройств Apple.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js