Как запустить универсальное приложение на симуляторе iPhone 3.1.3? - PullRequest
10 голосов
/ 03 мая 2010

Я работаю над новым приложением, которое я хочу сделать универсальным для iPhone и iPad. Я начал с мастера «Создание оконного приложения», и он создавал отдельных делегатов в группах «iPhone» и «iPad». Поскольку я уже был хорошо знаком с iPhone dev, я сделал эту часть своего проекта, и теперь я готов сделать кое-что для iPad.

Итак ... Я начал с добавления UISplitViewController к моему делегату на iPad, переключил Active SDK на 3.2, и это работает! Но когда я переключаюсь обратно на 3.1.3 и пытаюсь запустить его в симуляторе, Build and Go не работает. Для начала я вижу:

... путь ... / iPad / AppDelegate_Pad.h: 13: ошибка: ожидаемый список спецификаторов-спецификаторов до 'UISplitViewController'

Мой Базовый SDK установлен на 3.2, а Цель развертывания - 3.1.3. Я думал, что этого было достаточно. Но я также нашел в документации этот метод для условной компиляции:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
   MyIPadViewController* vc;
// Create the iPad view controller
#else
   MyIPhoneViewController* vc;
// Create the iPhone view controller
#endif

Так мне нужно делать это везде? Кажется, что нужно добавить очень много кода (от которого я все равно скоро избавлюсь для 4.0), поэтому я чувствую, что, должно быть, что-то делаю не так. И я даже не представляю, как это работает для таких вещей, как объявления @property или @synthesize.

tl; dr версия вопроса - я где-то пропустил настройку?

Ответы [ 3 ]

39 голосов
/ 03 мая 2010

Я использую эту функцию C, чтобы сделать код кратким:

BOOL isPad() {
    return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
}

Еще одна вещь, которую я делаю, когда у меня разные xib-файлы для iPhone против iPad. У меня есть функция stripPadSuffixOnPhone (), которая помогает упростить код:

// Load/create the Delete table cell with delete button
self.deleteCell = [Utilities loadNib:stripPadSuffixOnPhone(@"DeleteCell~ipad") 
                           ClassName:@"DeleteCell" 
                   Owner:self];

Подобные вещи могут сделать кодирование более простым и намного менее условным. Тем не менее, все равно придется проверить все дважды.

23 голосов
/ 03 мая 2010

Совсем наоборот. Универсальное приложение запускает один и тот же двоичный файл на iPhone и iPad, поэтому вы не можете использовать условную компиляцию для различения двух версий. Но вам нужно использовать макрос, который Apple цитирует в документации:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    // iPad-specific code
} else {
    // iPhone-specific code
}
0 голосов
/ 06 июня 2010

Вот что у меня работает:

  1. Создайте свое приложение, используя SDK 3.2.
  2. Переключите активный SDK на iPhone Simulator 3.1.3 (или любой другой).
  3. В меню «Выполнить» выберите «Отладка» (не «Сборка и отладка»).

Бинарный файл, созданный в соответствии с 3.2, будет установлен в симуляторе 3.x без перекомпоновки. Когда вы закончите, не забудьте установить активный SDK обратно на 3.2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...