Разработка для iOS: как я могу запретить iPad запускать универсальное приложение в режиме iPad? - PullRequest
16 голосов
/ 07 февраля 2011

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

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

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

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

Ответы [ 9 ]

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

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

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

Поиск универсального или «семейства целевых устройств».

Pick iPhone.

Goodbye iPad.

2 голосов
/ 07 февраля 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 */
}
1 голос
/ 30 июля 2012

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

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

Удачи!

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

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

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

0 голосов
/ 30 октября 2017

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

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

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

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

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

enter image description here

0 голосов
/ 09 марта 2012

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

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

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

0 голосов
/ 07 февраля 2011

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

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