2011-02-07 3 views
15

Я погружаюсь в iOS, и я создал универсальное приложение, превратившееся в iPhone-приложение. Когда он работает на iPad, он просто загружает белый экран, так как еще нет кода iPad. Я бы хотел, чтобы он работал в режиме «iPhone» на iPad, если он каким-то образом оказался на iPad. У меня есть свойство «Targeted Device Family», установленное на «iPhone», поэтому оно должно помешать ему появиться в App Store в качестве приложения для iPad, но если у кого-то есть iPad и iPhone, приложение может быть синхронизировано на iPad, после чего он просто загрузит белый экран, потому что он попытается запустить приложение в iPad режиме, в котором у него нет никакого кода для поддержки. В этой ситуации я предпочитаю, чтобы он действительно работал на iPad, но в режиме iPhone.iOS Development: Как я могу запретить iPad запускать универсальное приложение в iPad режиме?

Мои вопросы ...

  1. Когда IPad работает универсальное приложение, как он знает, чтобы запустить его в «режиме iPhone» или выполнить определенный код IPad?
  2. В универсальном приложении, как он узнает, какой код является iPhone и какой код iPad?
  3. Как я могу предотвратить iPad от попыток запуска iPad-кода и вместо этого запустить код iPhone?

Приносим извинения, если я говорю, как полный ном, но я. Большое спасибо за вашу мудрость!

ответ

13
  1. IPad смотрит в Info.plist приложения для ключа UIDeviceFamily, который является массивом. Значение «1» означает iPhone/iPod Touch, «2» означает «iPad». Если есть «1», но нет «2», вы получаете смоделированную среду iPhone. Это значение автоматически записывается в Info.plist в результате вашего «Целевого семейства устройств». Если вы считаете, что настроили его на iPhone, но все еще получаете сборку iPad, убедитесь, что вы не просто установили его для одной конфигурации сборки. Проверьте Info.plist в своем выпуске приложения, если вы хотите быть действительно уверенным.
  2. Существует только один двоичный файл, который вы пишете для правильного запуска на любом устройстве.
  3. Просто не нацеливайте iPad.
+0

спасибо, Томми, это была моя проблема. У меня только было настроено целевое семейство устройств для режима отладки. – BeachRunnerFred

+1

Это плохая идея. Вы не должны добавлять ключ UIDeviceFamily непосредственно по инструкциям Apple: http://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW11 , Вместо этого используйте параметр построения TARGETED_DEVICE_FAMILY. – Erik

9

Я предполагаю, что вы действительно хотите удалить «универсальную» возможность, и просто сделайте это приложение для iPhone.

В Xcode перейдите в Project => Edit Project Settings => Build.

Поиск универсальной или "Целевой семейства устройств".

Выберите iPhone.

Прощай, iPad.

0

Я думаю, что есть запись в файле info.plist для каждого из устройств, в котором говорится, какое главное окно для загрузки. Возможно, быстрое и грязное решение - установить как MainWindow-iPhone, так и MainWindow-iPad в одно и то же главное окно -iPhone.

1
  1. Если вы создадите универсальное приложение, оно будет использовать ваш код iPad. Невозможно запустить универсальное приложение в «iPhone Mode». Apple проверит, что вы следовали спецификациям дизайна iPad.

  2. В универсальное приложение, есть два приложения-делегаты: AppDelegate_iPhone.h и AppDelegate_iPad.h

  3. Вы можете добавить свой код iPhone в AppDelegate_iPad, но Apple, не будет доволен.

+0

Thanks, Manni. Ответ каждого на вопрос № 1 заключается в том, чтобы просто изменить свойство Targeted Device Family на iPhone, и все должно быть хорошо. Твои мысли? – BeachRunnerFred

+0

Если вы измените «Целевое семейство устройств» на iPhone, то вместо универсального приложения у вас есть iPhone-only-app. Если вы запустите iPhone-only-app на iPad, оно будет отображаться в «режиме iPhone». Хммм, я не уверен, что это поможет вам ... Как снова был ваш точный вопрос? Вы хотите универсальное приложение или приложение для iPhone? Или вы хотите, чтобы ваше iPhone-only-приложение показывалось на iPad другим? :-) – Manni

+0

Замечательно, что ответил на мой вопрос, спасибо! – BeachRunnerFred

2

Когда IPad работает универсальное приложение, как он знает, чтобы запустить его в «режиме iPhone» или выполнить определенный код IPad?

iPad ищет Targeted Device Family, если iPad нет, то он знает, что он должен запускать приложение в режиме iPhone.

В универсальном приложении, как он узнает, какой код является iPhone и какой код iPad?

Когда вы пишете код для приложения, вы должны указать, на каком устройстве вы нацеливаетесь, если на устройство требуется определенное количество действий. (смотри пример кода ниже)

Как я могу предотвратить IPad от попыток запустить код IPad и, вместо этого, запустить код iPhone?

Не поддерживайте iPad в своем Targeted Device Family. Во-вторых, в вашем коде, не указывается, что конкретный код нужен конкретное устройство, например:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
{ 
    /* run something specific for the iPad */ 
} 
else 
{ 
    /* run something specific for the iPhone */ 
} 
0

Другой способ сделать это (с кодом) является:

В приложения AppDelegate ваш (если приложение был создан как универсальное приложение), вы можете найти следующий код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
     //iPad... 

    } else { 
     //iPhone and iPod Touch... 

    } 

    return YES; 
} 

Там вы можете настроить, какой вид показать.

1

Вы не должны добавлять это в свой файл Info.plist. Вместо этого добавьте его в свои настройки сборки на номер suggestion. В частности, используйте параметр TARGETED_DEVICE_FAMILY.

Если вы используете раскадровки, вы также хотите удалить ключ UIMainStoryboardFile ~ ipad из своего Info.plist, поскольку он будет использоваться независимо от вашего TARGETED_DEVICE_FAMILY.

Удачи вам!

0

С Xcode 5, вы можете выбрать целевые устройства для развития от проекта:

В разделе устройств в Development Info, теперь вы можете выбрать:

1-iPhone 2 IPad 3 Универсальный

enter image description here

0

Я думаю, что что-то не так с ваша конфигурация, потому что, если вы нацеливаете код только для iPhone, приложение будет работать на iPad с экраном, который был разработан для iPhone (так, сокращенно, с возможностью x2).

  • предложения от AppStore (iPhone/IPad/оба) в зависимости от предпочтений пользователя
  • вы можете экспериментировать с Simulator (и выберите IPad в качестве устройства)
  • код одинаков для iPad/iPhone! ... если вы не используете [[UIDevice currentDevice] userInterfaceIdiom], упомянутые выше ...
Смежные вопросы