16

我正在潜入 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 回答 9

16
  1. iPad 在应用程序的 Info.plist 中查找 UIDeviceFamily 键,它是一个数组。值“1”表示 iPhone/iPod Touch,“2”表示“iPad”。如果有“1”但没有“2”,那么您将获得模拟的 iPhone 环境。作为“目标设备系列”的结果,该值会自动写入 Info.plist。如果您认为您已将其设置为 iPhone 但仍在获取 iPad 版本,请检查您是否仅将其设置为一种版本配置。如果您想真正自信,请检查您生成的应用程序包中的 Info.plist。
  2. 只有一个二进制文件,您可以编写它以在任一设备上正确启动。
  3. 只是不要针对 iPad。
于 2011-02-07T17:05:01.213 回答
9

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

在 Xcode 中,转到 Project => Edit Project Settings => Build。

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

选择 iPhone。

再见 iPad。

于 2011-02-07T16:59:11.567 回答
2

当 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 */
}
于 2011-02-07T17:08:00.797 回答
1

您不应该将此添加到您的 Info.plist 文件中。相反,请按照 Apple 的建议将其添加到您的构建设置中。具体来说,使用 TARGETED_DEVICE_FAMILY 构建设置。

如果您正在使用情节提要,您还希望从 Info.plist 中删除 UIMainStoryboardFile~ipad 键,因为无论您的 TARGETED_DEVICE_FAMILY 设置如何,都会使用它。

祝你好运!

于 2012-07-29T20:09:45.873 回答
1
  1. 如果您构建一个通用应用程序,它将使用您的 iPad 代码。无法在“iPhone 模式”下运行通用应用程序。Apple 将检查您是否遵循了 iPad 设计规范。

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

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

于 2011-02-07T17:02:14.350 回答
0

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

在您应用的 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;
}

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

于 2012-03-09T18:22:32.710 回答
0

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

于 2011-02-07T17:01:53.730 回答
0

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

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

1-iPhone 2- iPad 3- 通用

在此处输入图像描述

于 2014-03-06T14:06:38.597 回答
0

我认为您的配置有问题,因为如果您将代码定位为仅适用于 iPhone 的设备,则该应用程序将可以在具有专为 iPhone 设计的屏幕的 iPad 上运行(因此,减少了,有可能达到 x2)。

  • AppStore(iPhone/iPad/两者)的建议取决于用户的偏好
  • 您可以使用模拟器进行试验(并选择 iPad 作为设备)
  • iPad/iPhone 的代码相同!...除非您使用[[UIDevice currentDevice] userInterfaceIdiom] 上面提到的...
于 2017-10-30T15:06:45.500 回答