iOS开发:如何防止iPad在iPad模式下运行通用应用程序?

我深入iOS开发,并创build了一个通用的应用程序,变成一个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代码?

我道歉,如果我听起来像一个全面的noob,但我是。 非常感谢您的智慧!

  1. iPad将查找应用程序的Info.plist,作为UIDeviceFamily键,这是一个数组。 值“1”表示iPhone / iPod Touch,“2”表示“iPad”。 如果有'1'但不是'2',那么你会得到模拟的iPhone环境。 这个值将作为“目标设备系列”的结果自动写入Info.plist。 如果你认为你已经把它设置为iPhone,但仍然得到一个iPad生成,检查你不只是设置一个生成configuration。 如果你想真正有信心,请检查你生成的应用程序包中的Info.plist。
  2. 只有一个二进制文件,你写在任何设备上正确启动。
  3. 只是不要瞄准iPad。

我假设你真正想要的是去除“通用”的能力,只是使其成为一个iPhone应用程序。

在Xcode中,进入Project => Edit Project Settings => Build。

search通用或“目标设备系列”。

挑选iPhone。

再见了iPad。

当iPad运行通用应用程序时,如何知道如何在“iPhone模式”下运行它或执行iPad特定的代码?

iPad寻找Targeted Device Family ,如果iPad不存在,那么它知道它必须在iPhone模式下运行应用程序。

在一个通用的应用程序,它是如何知道哪些代码是iPhone和哪个代码是iPad?

当您为应用程序编写代码时,如果您需要为每个设备执行特定的操作,则必须指定要定位的设备。 (请参阅下面的代码示例)

我怎样才能防止iPad试图运行iPad代码,而是运行iPhone代码?

不要在您的Targeted Device Family支持iPad。 其次,在你的代码中,不要指定特定的代码需要一个特定的设备,例如:

 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { /* run something specific for the iPad */ } else { /* run something specific for the iPhone */ } 
  1. 如果你build立一个通用的应用程序,它将使用你的iPad代码。 在“iPhone模式”下运行通用应用程序是不可能的。 苹果会检查你是否遵循了iPad的devise规范。

  2. 在通用应用程序中,有两个应用程序委托:AppDelegate_iPhone.h和AppDelegate_iPad.h

  3. 你可以在AppDelegate_iPad中添加你的iPhone代码,但苹果不会感到高兴。

你不应该把这个添加到你的Info.plist文件中。 相反,按照苹果的build议将其添加到您的构build设置。 具体来说,使用TARGETED_DEVICE_FAMILY构build设置。

如果您正在使用故事板,则还需要从Info.plist中删除UIMainStoryboardFile〜ipad键,因为无论您的TARGETED_DEVICE_FAMILY设置如何,都将使用它。

祝你好运!

我认为每个设备的info.plist文件中都有一个条目,指出要加载哪个主窗口。 也许一个快速而肮脏的解决scheme是将MainWindow-iPhone和MainWindow-iPad设置为相同的-iPhone-主窗口。

另一种方法(与代码)是:

在App的AppDelegate中(如果您的App是作为通用App创build的),您可以find以下代码:

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

在那里您可以自定义要显示的视图。

Xcode 5以来,您可以从项目中select您的开发目标设备:

Development Info的设备部分,现在您可以select:

1 – iPhone 2 – iPad 3 – 通用

在这里输入图像说明

我认为你的configuration有问题,因为如果你的目标代码仅用于iPhone的设备,应用程序将运行在iPad上的屏幕是专为iPhone(所以,减less,可能性为x2)。

  • AppStore(iPhone / iPad /两者)的build议取决于用户的喜好
  • 您可以使用模拟器进行试验(并selectiPad作为设备)
  • 代码是一样的iPad / iPhone! …除非你使用[[UIDevice currentDevice] userInterfaceIdiom]上面提到的…