суббота, 24 сентября 2011 г.

Два месяца с XCode 4

Перешли на новую ide от apple. Можно подвести некоторые итоги.

Понравилось
+ концепция all-in-one ( на большом мониторе чертовски удобно )
+ поддержка workspace ( огромный шаг вперед на встречу с visual studio )
+ переработанный debuger ( мета информация для типов, переключение по потокам )
+ редактор ( tab-интерфейс в редакторе, snippets )
+ help ( удобно интегрирован - Quick Help )
+ инструменты статического анализа и Fix-it (утилиты полезные)
+ Instruments - классно, только железо нужно приличное

Минусы
- сочетания клавиш стали другие
- для разработки нужен монитор желательно 23+ дюйма и достаточно шустрое железо ( разработка не макбуке 13дюймов, будет полным адом )
- иногда вылетает, подвисает ( возможно версия 4.1 на которой работаем глюкавая, надо попробовать 4.2, статус который увы beta )
- редактор ресурсов при сохранении по прежнему создает "тысячу изменений" на одно действие ( поэтому работа с gui по большей части в коде )
- refactoring - лучше не использовать

В целом стало лучше, много мелких улучшений. В 3.x меня напрягал момент набора текста и debuger, в новой версии все это довели до приемлемого уровня. Со всем остальным можно жить и даже получать от этого profit.

понедельник, 5 сентября 2011 г.

Полноэкранный режим в Mac OS X Lion 10.7

Новая операционная система. Новые проблемы и приятные неожиданности.
Переход приложения в полноэкранный режим в новой ОС выглядит гармонично. Анимация, плавное скольжения окна и т.д. Прекрасно в реальности, но пока сыро в плане разработки. Увы сделать свой интересный анимированый переход пока не получилось. Первое на чем споткнулся принудительно запускать  приложение в полноэкранный режим. Есть механизм сохранения состояния программы (мощная штука, но избыточная). Простое решение в коде получилось методом проб и ошибок. 


  1. ................  
  2.  
  3. #import <CoreServices/CoreServices.h>  
  4.   
  5. @implementation NSApplication (SystemVersion)  
  6.   
  7. + (BOOL) usingLionOSX  
  8. {  
  9.     SInt32 minorVersion = 0;  
  10.     SInt32 majorVersion = 0;  
  11.       
  12.     Gestalt(gestaltSystemVersionMajor, &majorVersion);  
  13.     Gestalt(gestaltSystemVersionMinor, &minorVersion);  
  14.       
  15.     return majorVersion == 10 && minorVersion >= 7;      
  16. }  
  17.   
  18. @end  
  19.   
  20. ................  
  21.   
  22. IBOutlet NSWindow*  _mainWindow;    //  in h-file  
  23.   
  24. ................  
  25.   
  26. - (void) applicationDidFinishLaunching : (NSNotification*) notification  
  27. {         
  28. #if (defined(MAC_OS_X_VERSION_10_7)) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7  
  29.       
  30.     if ( [ NSApplication usingLionOSX ] )  
  31.     {  
  32.         [ [ NSApplication sharedApplication ] setPresentationOptions : NSApplicationPresentationAutoHideMenuBar | NSApplicationPresentationAutoHideDock ];  
  33.           
  34.         NSWindowCollectionBehavior collection = [ _mainWindow collectionBehavior ];  
  35.         collection |= NSWindowCollectionBehaviorFullScreenPrimary;  
  36.          
  37.         [ _mainWindow setCollectionBehavior : collection ];  
  38.         [ _mainWindow toggleFullScreen : self ];  
  39.     }  
  40.      
  41. #endif  
  42. }