【问题标题】:iOS Development: How can I prevent an iPad from running a universal app in iPad mode?iOS 开发:如何防止 iPad 在 iPad 模式下运行通用应用程序?
【发布时间】:2011-06-22 21:01:06
【问题描述】:

我正在深入研究 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 代码?

如果我听起来像个菜鸟,我很抱歉,但我确实是。非常感谢你的智慧!

【问题讨论】:

    标签: iphone ipad ios universal-binary


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

    【讨论】:

    【解决方案2】:

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

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

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

    选择 iPhone。

    再见 iPad。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

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

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

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

        【讨论】:

        • 谢谢,曼尼。每个人对问题 #1 的回答是简单地将 Targeted Device Family 属性更改为 iPhone,一切都应该没问题。你的想法?
        • 如果您将“Targeted Device Family”更改为 iPhone,那么您将拥有一个仅限 iPhone 的应用程序,而不是一个通用应用程序。如果您在 iPad 上启动仅限 iPhone 的应用程序,它将以“iPhone 模式”显示。嗯,我不确定这是否对您有帮助...您的确切问题又如何?你想要一个通用应用程序还是一个仅限 iPhone 的应用程序?或者您希望您的仅 iPhone 应用程序在 iPad 上显示不同? :-)
        【解决方案5】:

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

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

        祝你好运!

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

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

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

            【讨论】:

              【解决方案8】:

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

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

              1-iPhone 2- iPad 3- 通用

              【讨论】:

                【解决方案9】:

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

                • 来自 AppStore(iPhone/iPad/两者)的建议取决于用户的偏好
                • 您可以使用模拟器进行试验(并选择 iPad 作为设备)
                • iPad/iPhone 的代码相同! ...除非您使用前面提到的[[UIDevice currentDevice] userInterfaceIdiom]...

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-02-14
                  • 1970-01-01
                  相关资源
                  最近更新 更多