iOS Development: How can I prevent an iPad from running a universal app in iPad mode?

BeachRunnerFred picture BeachRunnerFred · Feb 7, 2011 · Viewed 14.2k times · Source

I'm diving into iOS development and I created a universal app that turned into an iPhone-only app. When it runs on the iPad, it just loads a white screen since there's no iPad code written yet. What I'd like is for it to run in "iPhone" mode on the iPad, if it somehow ends up on an iPad. I have the "Targeted Device Family" property set to "iPhone", so that should prevent it from showing up in the App Store as an iPad app, but if anyone owns both an iPad and an iPhone, then the app could end up synced to the iPad, at which point it will just load the white screen because it will try to run the app in iPad mode, which it doesn't have any code to support. In this situation, I prefer that it actually ran on the iPad, but in iPhone mode.

My questions are...

  1. When an iPad runs a universal app, how does it know to run it in "iPhone mode" or execute the iPad specific code?
  2. In a universal app, how does it know which code is iPhone and which code is iPad?
  3. How can I prevent the iPad from trying to run the iPad code and, instead, run the iPhone code?

I apologize if I sound like a total noob, but I am. Thanks so much for your wisdom!

Answer

Tommy picture Tommy · Feb 7, 2011
  1. The iPad looks into the application's Info.plist, for the UIDeviceFamily key, which is an array. The value '1' indicates iPhone/iPod Touch, '2' indicates 'iPad'. If there's a '1' but no '2' then you get the simulated iPhone environment. This value is written to the Info.plist automatically as a result of your 'Targeted Device Family'. If you think you've set it to iPhone but are still getting an iPad build, check you didn't just set it for one build configuration. Check the Info.plist within your produced app bundle if you want to be really confident.
  2. There's only one binary, which you write to launch correctly on either device.
  3. Just don't target the iPad.