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

时间:2011-02-07 16:48:45

标签: iphone ipad ios universal-binary

我正在深入iOS开发,我创建了一个通用应用程序,变成了一个仅限iPhone的应用程序。当它在iPad上运行时,它只会加载一个白色屏幕,因为还没有写入iPad代码。我想要的是它在iPad上以“iPhone”模式运行,如果它以某种方式最终在iPad上运行。我将“目标设备系列”属性设置为“iPhone”,这样可以防止它作为iPad应用程序在App Store中显示,但如果有人同时拥有iPad和iPhone,那么应用程序最终可能会同步在iPad上,它只会加载白色屏幕,因为它会尝试在iPad模式下运行应用程序,它没有任何支持的代码。在这种情况下,我更喜欢它实际上在iPad上运行,但在iPhone模式下。

我的问题是......

  1. 当iPad运行通用应用程序时,如何知道在“iPhone模式”下运行它还是执行iPad特定代码?
  2. 在通用应用中,它如何知道哪些代码是iPhone以及哪些代码是iPad?
  3. 如何阻止iPad尝试运行iPad代码,而是运行iPhone代码?
  4. 如果我听起来像一个总菜鸟,我道歉,但我是。非常感谢你的智慧!

9 个答案:

答案 0 :(得分:13)

  1. iPad会查看应用程序的Info.plist,其中包含UIDeviceFamily键,它是一个数组。值“1”表示iPhone / iPod Touch,“2”表示“iPad”。如果有一个'1'但没有'2'那么你会得到模拟的iPhone环境。由于您的“目标设备系列”,此值会自动写入Info.plist。如果您认为自己已将其设置为iPhone但仍在进行iPad构建,请检查您是否只为一个构建配置设置了它。如果您想要真正自信,请查看生产的应用包中的Info.plist。
  2. 您只需编写一个二进制文件即可在任一设备上正确启动。
  3. 只是不要瞄准iPad。

答案 1 :(得分:9)

我假设您真正想要的是删除“通用”功能,并将其设为iPhone应用程序。

在Xcode中,转到Project =>编辑项目设置=>建立。

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

选择iPhone。

再见iPad。

答案 2 :(得分:2)

  

当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 */
}

答案 3 :(得分:1)

  1. 如果您构建通用应用,它将使用您的iPad代码。无法在“iPhone模式”下运行通用应用程序。 Apple将检查您是否遵循了iPad设计规范。

  2. 在通用应用中,有两个app-delegates:AppDelegate_iPhone.h和AppDelegate_iPad.h

  3. 您可以在AppDelegate_iPad中添加iPhone代码,但Apple不会高兴。

答案 4 :(得分:1)

您不应将此添加到Info.plist文件中。而是根据Apple的suggestion将其添加到您的构建设置中。具体来说,使用TARGETED_DEVICE_FAMILY构建设置。

如果您使用的是故事板,您还需要从Info.plist中删除UIMainStoryboardFile~ipad密钥,因为无论您的TARGETED_DEVICE_FAMILY设置如何,都会使用它。

祝你好运!

答案 5 :(得分:0)

我认为info.plist文件中有一个条目,用于说明要加载哪个主窗口的每个设备。 也许一个快速而肮脏的解决方案是将MainWindow-iPhone和MainWindow-iPad设置到同一个-iPhone-主窗口。

答案 6 :(得分:0)

另一种方法(使用代码)是:

在App的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;
}

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

答案 7 :(得分:0)

Xcode 5开始,您可以从项目中选择开发目标设备:

Development Info中的设备部分,现在您可以选择:

  

1-iPhone 2- iPad 3- Universal

enter image description here

答案 8 :(得分:0)

我认为你的配置出了问题,因为如果你只定位iPhone的设备代码,应用程序将在iPad上运行,屏幕专为iPhone设计(因此,减少了,有可能x2 )。

  • AppStore(iPhone / iPad /两者)的提案取决于用户的偏好
  • 您可以使用模拟器进行实验(并选择iPad作为设备)
  • iPad / iPhone的代码相同! ......除非你使用[[UIDevice currentDevice] userInterfaceIdiom]提及上述......