Нет, вам не нужно использовать операторы #ifdef.Вы можете вызывать метод как угодно - вопрос в том, вызовет ли его экземпляр UIApplication :).
Кроме того, я уверен, что ваши параметры развертывания будут решать проблему с iTunes.Таким образом, вы должны установить его на 3.1.3 (или 3.0, если это не требуется специально, многие люди, которых я знаю, не обновлялись между 3-мя, потому что было минимальное количество функций, и много раз это был по сути выпуск анти-джейлбрейка).
Что касается кода, я рассмотрел эту проблему следующим образом:
- (void) applicationWillTerminate:(UIApplication *)application
{
// Just pass it on to the new iOS4 delegate
NSLog(@"Application will terminate");
[self applicationDidEnterBackground:application];
}
А для переднего плана у меня просто есть метод "загрузчик", который вызывается из application:didFinishLaunchingWithOptions:
и applicationWillEnterForeground:
.
Хорошо работает для моего программного обеспечения на моем 3G w / 3.0 (я отказываюсь обновляться после просмотра iOS4 на 3G!), а также на моем 3GS под управлением iOS4.