Highlight.js (en/ru) обзавелся поддержкой Objective-C не без помощи вашего покорного слуги. Фидбек принимается с удовольствием. Пока фича доступна только в репозитории.
Mike Ash: Friday Q&A
Mike Ash выпустил свои пятничные вопросы/ответы в виде отдельной книги. Это серия статей о самых интересных/сложных/низкоуровневых моментах программирования на Objective-C. Что называется must read. iBooks / Amazon
AdHoc тестирование - легко и просто
Открылся замечательный бесплатный сервис TestFlight для легкой и быстрой работы с тестерами. Все проходит примерно так:
Регистрируемся на сайте
Создаем Team (их может быть много)
Приглашаем людей в Team (или рекрутируем, об этом дальше)
Каждый, получивший приглашение, должен зайти со своего устройства на сайт
При первом заходе появится кнопочка “Register”, которая потребует установки дополнительных профилей
После установки надо зайти на сайт с устройства снова и UDID устройства будет зарегистрирован (Иногда это не проходит с первого раза, у меня получилось с 3-го, у некоторых при использовании jailbreak’а не получается вообще)
Разработчик может добавлять новые билды
Собственно это все - следующий заход на сайт с тестеровского девайса будет отображать доступные для установки новые версии приложения(ий) с краткими комментариями, для установки достаточно будет перейти по ссылке
О каждой версии приходят почтовые уведомления. Тестеров можно группировать и распространять соответственно по группам. Кроме того, при публикации билда автоматически показываются все устройства из группы, которые не входят в provisioning profile.
Для широкого охвата существует рекрутирование - Вы публикуете ссылку с комментарием в публичных источниках (твиттер, фейсбук, блог) и каждый желающий может изъявить желание присоединиться к бета тестированию.
Первые впечатления сугубо положительные, никаких нареканий нет. Посмотрим что будет дальше и сколько будет стоить сервис в дальнейшем.
[Перевод] Шифрование SQLite с помощью SQLCipher (iOS/Mac)
Оригинал на английском (disclaimer: перевод вольный)
SQLite является самым распространенным средством для хранения данных на iPhone со стабильным API и хорошей документацией. Очевидно, что не хотелось бы мешать код приложения с собственно шифрованием, а делать это как можно прозрачней.
Такую функциональность предоставляют SQLCipher и OpenSSL. Оба проекта замечательны своим открытым исходным кодом, а также поддержкой Mac/Windows/Linux.
Итак, что нам потребуется…
Акселерометр в симуляторе
Использование акселерометра в симуляторе http://builtby.me/2010/10/use-the-accelerometer-in-the-iphone-simulator/ Для отладки очень полезно
iOS Dev Promises
Подробное ревью что же вкусного ждет разработчиков в iOS4
Старые баги
Выкладывая расширение, столкнулся со странной проблемой: несмотря на то, что был прописан правильный Content-Type, Safari открывал файл в текстовом виде. Что конечно же было не комильфо.
В процессе отладки выяснилось, что это все происходило из-за того, что по счастливой случайности переход строки в заголовках попадал на 256-ой или 257-ой баг. И сервер в этом случае добавлял дополнительный заголовок “X-Pad: avoid browser bug”.
Оказалось, что сервер обходил баг Netscape с версии 2.0 и до 4.0b2. И сей фикс со стороны сервера существует с 21 апреля 1997 года.
Каким образом этот невинный заголовок портил жизнь Safari я не знаю, но сама ситуация позабавила - современный браузер некорректно работал с файлом из-за серверного фикса бага в другом браузере 13 лет назад :)
Победить не удалось, пришлось обходить стороной - менять размер заголовков переименовыванием файла :)
Visualize Us Safari Extension
С выходом API для Safari свершилось моими же руками то, о чем так давно мечтал: постинг в visualize.us из контекстного меню.
Adium & iTerm 64 Bit
PIL (Python Imaging) в Snow Leopard
После перехода на Snow Leopard в Django перестали работать ImageField’ы. Причина оказалась в неработоспособном PIL’е, а точней в его привязке к libjpeg.
(типичное сообщение об ошибке:
ImportError: dlopen(/Library/Python/2.6/site-packages/PIL/_imaging.so, 2): Symbol not found: _jpeg_resync_to_restart)
Решение проблемы частично описано здесь (english)
качаем отсюда:
tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
cp /usr/share/libtool/config/config.sub .
cp /usr/share/libtool/config/config.guess .
./configure --enable-shared --enable-static
make
sudo make install
Однако мне “повезло” и я оказался в числе тех, у кого это сразу не заработало - причина была в “зоопарке” установленных libjpeg’ов.
Итак, делаем следующее:
1. Смотрим все зависимости imaging:
otool -L /Library/Python/2.6/site-packages/PIL/_imaging.so
2. Получаем что-то вроде:
/Library/Python/2.6/site-packages/PIL/_imaging.so:
**/sw/lib/**libjpeg.62.dylib (compatibility version 63.0.0, current version 63.0.0)
Дальше можно решить двумя способами:
а) удалить “зоопарковую” библиотеку (в моем случае - из /sw/lib и пересобрать все заново)
б) если удалять - не вариант, то можно перелинковать питоновский imaging на правильную, свежесобраную библиотеку:
install_name_tool -change **/sw/lib/**libjpeg.62.dylib **/usr/local/lib**/libjpeg.62.dylib _imaging.so
После этого все должно работать :)