пятница, 28 декабря 2012 г.
Ссылки и статьи для iOS-программистов
Моя страница в Evernote, куда я сохраняю различные ссылки и фрагменты статей, интересующие меня как iOS-разработчика
четверг, 1 ноября 2012 г.
Как отключать все вызовы NSLog для release-сборки
Опыт показывает, что перед release-сборкой очередной версии (для
отправки в AppStore) комментировать десятки или даже сотни отладочных
выводов в консоль слишком утомительно, да и не всегда полезно (некоторые
выводы в консоль могут ещё пригодиться). Добавьте удобную макрофункцию
где-нибудь в общий заголовок проекта (который включаете почти везде,
например пусть это будет AppMacros.h).
#ifdef DEBUG
#define DLog(f, ...) NSLog(f, ## __VA_ARGS__)
#else
#define DLog(f, ...)
#endif
Теперь с помощью Find and Replace замените все NSLog на DLog. Если в некоторых исходниках вылезут ошибки компиляции, то добавьте в эти исходники #include "AppMacros.h"
#ifdef DEBUG
#define DLog(f, ...) NSLog(f, ## __VA_ARGS__)
#else
#define DLog(f, ...)
#endif
Теперь с помощью Find and Replace замените все NSLog на DLog. Если в некоторых исходниках вылезут ошибки компиляции, то добавьте в эти исходники #include "AppMacros.h"
суббота, 4 февраля 2012 г.
О важности IBOutlet прикрепления объектов к объекту-хозяину
Очень важно, если вы решили часть рутинных операций возложить на такой удобный инструмент как Interface Builder не забывать об одном правиле. Каждый объект, который создаётся не динамически в коде (например smthObject = [[SmthClass alloc] initWith... ]), а создан с помощью Interface Builder, каждый такой объект должен иметь своего хозяина (разве что главный делегат приложения гарантированно работает по умолчанию).
То есть любой ваш объект (созданный с помощью Interface Builder) должен принадлежать кому-нибудь как IBOutlet-переменная. Я убеждался в этом уже много раз на практике. Иначе происходят падения программы при попытке заставить этот объект что-либо сделать, из-за того, что у этого объекта (если он не принадлежит никому как IBOutlet-переменная) например вызывается метод, а объект вроде не существует (раз ни к кому не принадлежит). Может быть гуру-программисты дадут более точное объяснение этому явлению...
То есть любой ваш объект (созданный с помощью Interface Builder) должен принадлежать кому-нибудь как IBOutlet-переменная. Я убеждался в этом уже много раз на практике. Иначе происходят падения программы при попытке заставить этот объект что-либо сделать, из-за того, что у этого объекта (если он не принадлежит никому как IBOutlet-переменная) например вызывается метод, а объект вроде не существует (раз ни к кому не принадлежит). Может быть гуру-программисты дадут более точное объяснение этому явлению...
четверг, 15 декабря 2011 г.
О важности округления размеров GUI-контролов
Вчера мучался в догадках, почему под одной и той же ячейкой в UITableView (одна ячейка в одной группе, стиль выбран UITableViewStyleGrouped) появлялась одна и та же горизонтальная полосочка. Баг был явно привязан именно к этой ячейке.
Оказалось, что я задавал высоту ячейки не как целое или округлённое до целого число (то есть возвращал из метода heightForRowAtIndexPath значение с заметной на экране дробной частью).
Оказалось, что я задавал высоту ячейки не как целое или округлённое до целого число (то есть возвращал из метода heightForRowAtIndexPath значение с заметной на экране дробной частью).
Ярлыки:
полоска,
GUI,
ios,
iphone,
ipod touch,
line,
UITableView,
UITableViewCell
среда, 2 ноября 2011 г.
Как собирать проекты с гигантскими функциями
Случается так, что гигантские функции (в несколько тысяч строк кода) не позволяют собрать проект. Если нет ошибок компиляции, но есть непонятная ошибка линковки, то попробуйте в свойствах Xcode-проекта убрать галочку с пункта GCC 4.2 Code Generation -> Compile for Thumb. Мне это помогло (нашёл совет где-то в англоязычных сайтах).
Ярлыки:
большая,
гигантская,
компиляция,
линковка,
настройка,
ошибка,
функция,
xcode
понедельник, 31 октября 2011 г.
Мои скрипты для работы в Xcode
Вот какие скрипты я использую для работы в Xcode (на них можно назначать сочетания клавиш). Для добавления скриптов и назначения им сочетаний клавиш найдите в полосе меню (у меня Xcode 3) пункт, напоминающий свиток, а в нём субменю Edit user scripts...
В ОСНОВНОМ ЭТО СКРИПТЫ ДЛЯ ДОБАВЛЕНИЯ ЧАСТО ИСПОЛЬЗУЕМЫХ СТРОК (без горячих сочетаний клавиш теряется их неоценимая помощь в работе):
1) Добавление NSLocalizedString(@"", @"")
#!/bin/sh
echo "NSLocalizedString(@\"\", @\"\")"
2) Добавление // property
#!/bin/sh
echo "// property"
3) и так далее до пункта 11)
#!/bin/sh
echo "@property (nonatomic, retain) IBOutlet "
4)
#!/bin/sh
echo "//----------------------------------------------------------"
5)
#!/bin/sh
echo "////////////////////////////////////////////////////////////"
6)
#!/bin/sh
echo "NSLog(@\"\");"
7)
#!/bin/sh
echo "NSLog(@\"%s function %s \", __FILE__, __FUNCTION__);"
8)
#!/bin/sh
echo "NSLog(@\"%s line %d \", __FILE__, __LINE__);"
9)
#!/bin/sh
echo "using namespace "
10)
#!/bin/sh
echo "@synthesize "
11) Вставляю свои инициалы, дату и время (чтобы не забыть удалить после экспериментов)
#!/bin/sh
echo "//MD:$(date +%Y%m%d-%H:%M)"
12)
#!/bin/sh
echo "////////////////////////////////////////////////////////////"
echo "#pragma mark -"
echo "#pragma mark methods"
echo "////////////////////////////////////////////////////////////"
13) Сначала выделяете нужный текст (например имя функции). После выполнения этого скрипта у вас получится в коде вывод в отладочную консоль выделенного текста.
#!/bin/sh
echo "NSLog(@\"%%%{PBXSelectedText}%%%\");";
В ОСНОВНОМ ЭТО СКРИПТЫ ДЛЯ ДОБАВЛЕНИЯ ЧАСТО ИСПОЛЬЗУЕМЫХ СТРОК (без горячих сочетаний клавиш теряется их неоценимая помощь в работе):
1) Добавление NSLocalizedString(@"", @"")
#!/bin/sh
echo "NSLocalizedString(@\"\", @\"\")"
2) Добавление // property
#!/bin/sh
echo "// property"
3) и так далее до пункта 11)
#!/bin/sh
echo "@property (nonatomic, retain) IBOutlet "
4)
#!/bin/sh
echo "//----------------------------------------------------------"
5)
#!/bin/sh
echo "////////////////////////////////////////////////////////////"
6)
#!/bin/sh
echo "NSLog(@\"\");"
7)
#!/bin/sh
echo "NSLog(@\"%s function %s \", __FILE__, __FUNCTION__);"
8)
#!/bin/sh
echo "NSLog(@\"%s line %d \", __FILE__, __LINE__);"
9)
#!/bin/sh
echo "using namespace "
10)
#!/bin/sh
echo "@synthesize "
11) Вставляю свои инициалы, дату и время (чтобы не забыть удалить после экспериментов)
#!/bin/sh
echo "//MD:$(date +%Y%m%d-%H:%M)"
12)
#!/bin/sh
echo "////////////////////////////////////////////////////////////"
echo "#pragma mark -"
echo "#pragma mark methods"
echo "////////////////////////////////////////////////////////////"
13) Сначала выделяете нужный текст (например имя функции). После выполнения этого скрипта у вас получится в коде вывод в отладочную консоль выделенного текста.
#!/bin/sh
echo "NSLog(@\"%%%{PBXSelectedText}%%%\");";
вторник, 18 октября 2011 г.
Новый Xcode 4.2 меня разочаровал
Новый Xcode 4.2 меня разочаровал примерно в том же отношении, как меня лет 10 тому назад основательно разочаровал Windows 98 (тогда приходилось как минимум каждый час нажимать кнопку Reset). Тогда я всерьёз решил перейти на Linux (хотя Линукс имхо хорошо подходит для людей, готовых в любой момент серьёзно заниматься именно Линуксом, то есть Линукс - это не инструмент для решения таких задач, где можно забыть про инструмент и решать задачи, а Линукс - это инструмент для овладения инструмента под названием Линукс. Но это моё мнение).
Так вот, Xcode 4.2 постоянно преподносит мне какие-то сюрпризы... Совершенно запутанные и нелогичные. Я уже втайне начал мечтать заняться по работе другой темой в программировании.
Сейчас истратил полчаса, из-за того, что Xcode утверждал мне о том, что невозможно использовать StoryBoard в IOS 4.3 и более ранних, хотя я многократно переключал DeploymentTarget в IOS 5.0. Оказывается, кроме моих действий (Clean не помогает) нужно ещё и поменять хотя бы что-то в исходниках, и снова сбилдить приложение. Жопа, жопа, жопа...
Много ещё и других глюков (столько глюков сразу в Xcode не было ни разу, хотя в этой новой версии много хороших задумок). Неужели после того, как Apple осталась без Стива Джобса, эта компания обречена потерять лидерские позиции? Я думаю, что очень даже может быть. Любое могущество основано на могуществе личности (это я прочитал у Наполеона Хилла).
Так вот, Xcode 4.2 постоянно преподносит мне какие-то сюрпризы... Совершенно запутанные и нелогичные. Я уже втайне начал мечтать заняться по работе другой темой в программировании.
Сейчас истратил полчаса, из-за того, что Xcode утверждал мне о том, что невозможно использовать StoryBoard в IOS 4.3 и более ранних, хотя я многократно переключал DeploymentTarget в IOS 5.0. Оказывается, кроме моих действий (Clean не помогает) нужно ещё и поменять хотя бы что-то в исходниках, и снова сбилдить приложение. Жопа, жопа, жопа...
Много ещё и других глюков (столько глюков сразу в Xcode не было ни разу, хотя в этой новой версии много хороших задумок). Неужели после того, как Apple осталась без Стива Джобса, эта компания обречена потерять лидерские позиции? Я думаю, что очень даже может быть. Любое могущество основано на могуществе личности (это я прочитал у Наполеона Хилла).
Подписаться на:
Сообщения (Atom)