繁体   English   中英

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

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

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

如果我听起来像一个总菜鸟,我道歉,但我是。 非常感谢你的智慧!

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

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

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

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

选择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 */
}

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

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

祝好运!

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

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

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

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

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

1-iPhone 2- iPad 3- Universal

在此输入图像描述

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM