Разработка под iOS: как я могу запретить iPad запускать универсальное приложение в режиме iPad?

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

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

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

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


person BeachRunnerFred    schedule 07.02.2011    source источник


Ответы (9)


  1. IPad ищет в Info.plist приложения ключ UIDeviceFamily, который представляет собой массив. Значение «1» означает iPhone / iPod Touch, «2» - «iPad». Если есть «1», но нет «2», вы получаете смоделированную среду iPhone. Это значение автоматически записывается в Info.plist как результат вашего «Целевого семейства устройств». Если вы думаете, что настроили его на iPhone, но все еще получаете сборку iPad, убедитесь, что вы не просто установили его для одной конфигурации сборки. Проверьте Info.plist в созданном пакете приложений, если хотите быть по-настоящему уверенным.
  2. Есть только один двоичный файл, который вы пишете для правильного запуска на любом устройстве.
  3. Только не нацеливайтесь на iPad.
person Tommy    schedule 07.02.2011
comment
спасибо, Томми, это была моя проблема. У меня было только семейство целевых устройств, настроенное для режима отладки. - person BeachRunnerFred; 07.02.2011
comment
Это плохая идея. Вы не должны добавлять ключ UIDeviceFamily непосредственно в соответствии с инструкциями Apple: developer.apple.com/library/ios/documentation/general/Reference/. Вместо этого используйте параметр сборки TARGETED_DEVICE_FAMILY. - person Erik; 30.07.2012

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

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

Найдите универсальное или целевое семейство устройств.

Выберите iPhone.

Прощай, iPad.

person jv42    schedule 07.02.2011

Когда на 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 */
}
person WrightsCS    schedule 07.02.2011

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

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

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

person Manni    schedule 07.02.2011
comment
Спасибо, Манни. Каждый ответ на вопрос №1 - просто измените свойство Целевое семейство устройств на iPhone, и все должно быть в порядке. Твои мысли? - person BeachRunnerFred; 07.02.2011
comment
Если вы измените семейство целевых устройств на iPhone, тогда у вас будет приложение только для iPhone, а не универсальное приложение. Если вы запустите приложение только для iPhone на iPad, оно будет отображаться в режиме iPhone. Хммм, я не уверен, что это поможет тебе ... Как был твой точный вопрос снова? Вы хотите универсальное приложение или приложение только для iPhone? Или вы хотите, чтобы ваше приложение только для iPhone отображалось на iPad по-другому? :-) - person Manni; 07.02.2011

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

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

Удачи!

person Erik    schedule 29.07.2012

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

person HeikoG    schedule 07.02.2011

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

В 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;
}

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

person Oscar Salguero    schedule 09.03.2012

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

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

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

введите описание изображения здесь

person Mutawe    schedule 06.03.2014

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

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