Избегайте добавления NSWindowWillEnterFullScreenNotification в предыдущую версию ОС Lion (на Leopard или Snow Leopard)

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

Прямо сейчас проверяю версию ОС с помощью этого

   if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_5) {
    /* On a 10.5.x or earlier system */
}
else if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_6) {
    /* On a 10.6 - 10.6.x system */
}  else  {
[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(willEnterFull:)
                                                 name:NSWindowWillEnterFullScreenNotification
                                               object:nil];





    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didExitFull:)
                                                 name:NSWindowDidExitFullScreenNotification
                                               object:nil];
    }

Но в предыдущей версии приложение вылетало сразу после запуска.

Вот журнал сбоев, хотя я изменил имя приложения на XYZ в журнале из-за NDA

Process:         XYZ [53319]
Path:            /Applications/XYZ.app/Contents/MacOS/XYZ
Identifier:      com.XYZ.XYZ
Version:         2.0.5 (2.0.5)
Code Type:       X86 (Native)
Parent Process:  launchd [224]

Date/Time:       2012-10-28 07:44:11.717 -0500
OS Version:      Mac OS X 10.6.8 (10K549)
Report Version:  6

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread:  0

Dyld Error Message:
  Symbol not found: _NSWindowDidExitFullScreenNotification
  Referenced from: /Applications/XYZ.app/Contents/MacOS/XYZ
  Expected in: /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
 in /Applications/XYZ.app/Contents/MacOS/XYZ

person prakhar    schedule 07.11.2012    source источник
comment
Где вылетает? Что в журнале?   -  person Georg Schölly    schedule 07.11.2012


Ответы (1)


Вот что, как я думаю, происходит. Сбой происходит уже в компоновщике, потому что он ожидает, что NSWindowDidExitFullScreenNotification существует, но этого не происходит в более старых версиях os x.

У меня нет в этом опыта. Решения кажутся хакерскими.

Взгляните на этот вопрос, где у кого-то есть почти такой же вопрос:
Как создать обратно совместимое приложение для OS X при наличии нового API?

person Georg Schölly    schedule 07.11.2012
comment
Я уже устанавливаю цель развертывания на 10.4 и базовый sdk на 10.8, как это предлагается в принятом ответе в приведенной выше ссылке. - person prakhar; 07.11.2012
comment
Scholly Можем ли мы установить структуру AppKit как слабую / необязательную структуру, как предлагается в другом ответе в этой ссылке, потому что NSWindowWillEnterFullScreenNotification находится в этой структуре? Потому что я новичок в OSx и не обладаю достаточными знаниями об этом - person prakhar; 07.11.2012
comment
@prakhar: Вы пробовали просто установить цель развертывания на 10,5? Это должно (согласно некоторым поисковым запросам) ослабить связь с новыми API. - person Georg Schölly; 07.11.2012
comment
Scholly, нет, я не пробовал прямо сейчас, моя цель развертывания - 10,4, а базовый SDK - 10,8. Вы хотите сказать, что концепция слабого звена началась с версии 10.5 или она также должна применяться в версии 10.4? - person prakhar; 08.11.2012
comment
Scholly Спасибо, что проделал для меня работу, я установил AppKit Framework как необязательный, и теперь все работает отлично. Еще раз, большое спасибо. - person prakhar; 26.11.2012