2011-02-07 18 views
15

Estoy inmerso en el desarrollo de iOS y creé una aplicación universal que se convirtió en una aplicación exclusiva para iPhone. Cuando se ejecuta en el iPad, solo carga una pantalla en blanco ya que aún no se ha escrito ningún código de iPad. Lo que me gustaría es que funcione en modo "iPhone" en el iPad, si de alguna manera termina en un iPad. Tengo la propiedad "Familia de dispositivos orientados" configurada en "iPhone", por lo que debería evitar que se muestre en la App Store como una aplicación para iPad, pero si alguien posee un iPad y un iPhone, la aplicación podría terminar sincronizada en el iPad, en ese momento solo cargará la pantalla en blanco porque tratará de ejecutar la aplicación en modo iPad, que no tiene ningún código que admitir. En esta situación, prefiero que funcione realmente en el iPad, pero en modo iPhone.Desarrollo iOS: ¿Cómo puedo evitar que un iPad ejecute una aplicación universal en el modo iPad?

Mis preguntas son ...

  1. Cuando un iPad se ejecuta una aplicación universal, ¿cómo sabe para ejecutarlo en modo "iPhone" o ejecutar el código específico del iPad?
  2. En una aplicación universal, ¿cómo sabe qué código es iPhone y qué código es iPad?
  3. ¿Cómo puedo evitar que el iPad intente ejecutar el código del iPad y, en su lugar, ejecutar el código del iPhone?

Disculpe si sueno como un novato total, pero lo soy. ¡Muchas gracias por tu sabiduría!

Respuesta

13
  1. El iPad se ve en Info.plist de la aplicación, para la clave UIDeviceFamily, que es una matriz. El valor '1' indica iPhone/iPod Touch, '2' indica 'iPad'. Si hay un '1' pero no '2', entonces obtienes el entorno de iPhone simulado. Este valor se escribe automáticamente en Info.plist como resultado de su 'Familia de dispositivos orientados'. Si crees que lo has configurado para iPhone pero sigues obteniendo una compilación de iPad, comprueba que no lo hayas configurado solo para una configuración de compilación. Verifique Info.plist dentro de su paquete de aplicaciones producidas si quiere tener mucha confianza.
  2. Solo hay un binario, que escriba para iniciarse correctamente en cualquier dispositivo.
  3. Simplemente no apunte al iPad.
+0

gracias, Tommy, ese era mi problema. Solo tenía configurada la familia de dispositivos orientados para el modo de depuración. – BeachRunnerFred

+1

Esta es una mala idea. No debe agregar la clave UIDeviceFamily directamente según las instrucciones de Apple: http://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW11 . En su lugar, usa la configuración de compilación TARGETED_DEVICE_FAMILY. – Erik

9

Supongo que lo que realmente quiere es eliminar la capacidad "universal" y simplemente convertirla en una aplicación de iPhone.

En Xcode, vaya a Proyecto => Editar configuración del proyecto => Construir.

Buscar universal, o 'familia de dispositivos orientados'.

Elija iPhone.

Adiós iPad.

0

Creo que hay una entrada en el archivo info.plist para cada uno de los dispositivos que dice qué ventana principal cargar. Quizás una solución rápida y sucia sería establecer MainWindow-iPhone y MainWindow-iPad en la misma ventana principal -iPhone-.

1
  1. Si construye una aplicación universal, usará su código de iPad. No es posible ejecutar una aplicación universal en "Modo iPhone". Apple comprobará que ha seguido las especificaciones de diseño del iPad.

  2. En una aplicación universal, hay dos delegados app-: AppDelegate_iPhone.h y AppDelegate_iPad.h

  3. Usted puede agregar el código en el iPhone AppDelegate_iPad, pero Apple no estará satisfecho.

+0

Gracias, Manni. La respuesta de todos a la pregunta n. ° 1 es simplemente cambiar la propiedad de la familia de dispositivos dirigidos a iPhone y todo estará bien. ¿Tus pensamientos? – BeachRunnerFred

+0

Si cambia la "Familia de dispositivos orientados" a iPhone, entonces tiene una aplicación solo para iPhone en lugar de una aplicación universal. Si ejecuta una aplicación solo para iPhone en un iPad, se mostrará en "Modo iPhone". Hmmm, no estoy seguro si esto te ayuda ... ¿Cómo fue tu pregunta exacta otra vez? ¿Quieres una aplicación universal o una aplicación solo para iPhone? ¿O quieres que tu aplicación solo para iPhone se muestre diferente en un iPad? :-) – Manni

+0

Maravilloso, eso respondió mi pregunta, ¡gracias! – BeachRunnerFred

2

Cuando un iPad se ejecuta una aplicación universal, ¿cómo sabe para ejecutarlo en modo "iPhone" o ejecutar el código específico del iPad?

El iPad busca el Targeted Device Family, si el iPad no está presente, entonces sabe que debe ejecutar la aplicación en modo iPhone.

En una aplicación universal, ¿cómo sabe qué código es iPhone y qué código es iPad?

Cuando escribe el código de la aplicación, debe especificar a qué dispositivo se dirige si hay cosas específicas que debe hacer por dispositivo. (ver el ejemplo de código siguiente)

¿Cómo puedo evitar que el iPad de intentar ejecutar el código del iPad y, en cambio, ejecute el código iPhone?

No es compatible con iPad en su Targeted Device Family. En segundo lugar, en su código, no se especifica que el código de las necesidades específicas de un dispositivo específico, por ejemplo:

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

Otra manera de hacerlo (con código) es:

En su AppDelegate de aplicación (si su aplicación se creó como una Aplicación Universal) puede encontrar el siguiente código:

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

Allí puede personalizar qué vista mostrar.

1

NO debe agregar esto a su archivo Info.plist. En su lugar, agréguela a la configuración de su compilación según el suggestion de Apple. Específicamente, use la configuración de construcción TARGETED_DEVICE_FAMILY.

Si está utilizando guiones gráficos, también se desea eliminar la clave ipad UIMainStoryboardFile ~ de su Info.plist ya que será utilizada independientemente de la configuración TARGETED_DEVICE_FAMILY.

¡Buena suerte!

0

Desde Xcode 5, puede elegir los dispositivos de destino de desarrollo del proyecto:

Desde la sección de dispositivos dentro de Development Info, ahora se puede elegir:

1-iPhone iPad 2- 3- universal

enter image description here

0

creo que algo está mal con su configuración, porque si dirige el código para el Dispositivo solo iPhone, la aplicación se ejecutará en un iPad con la pantalla que fue diseñada para iPhone (por lo tanto, reducida, con la posibilidad de x2).

  • las propuestas de la AppStore (iPhone/iPad/ambos) dependen de las preferencias del usuario
  • se puede experimentar con el simulador (y elegir el iPad como el dispositivo)
  • el código es el mismo para iPad/iPhone! ... a menos que use [[UIDevice currentDevice] userInterfaceIdiom] mencionado supra ...
Cuestiones relacionadas