由 xcode 4.6 与 xcode 5.0 创建时,iOS 应用程序在 iOS 7.0 设备上的行为不同

Posted

技术标签:

【中文标题】由 xcode 4.6 与 xcode 5.0 创建时,iOS 应用程序在 iOS 7.0 设备上的行为不同【英文标题】:iOS app behaving differently on iOS 7.0 device when created by xcode 4.6 versus xcode 5.0 【发布时间】:2013-11-06 20:02:01 【问题描述】:

我有一个基于 ios 的应用程序,我使用 XCode 和 Jenkins 为其创建构建(用于提供给测试人员)。

现在发生的事情是,当我使用 Xcode 4.6 创建构建并安装在基于 iOS 7.0 的设备(iPhone 5)上时,它工作正常,没有任何与状态栏相关的问题和其他特定于 iOS 7.0 的问题。并且所有视图/组件都是 iOS 6 样式(iOS 7 之前)

对比:

当我从 Xcode 5.0 构建它并安装在 iOS 7.0 iPhone 5 上时,该应用程序会出现与 iOS 7.0 相关的所有问题,例如著名的状态栏重叠问题和选择器视图变得透明(新的)。

那么任何人都可以解释发生了什么吗? (据我所知,无论是由 Xcode 4.6 还是 Xcode 5.0 创建的,应用程序在 iOS 7.0 设备上的行为都应该相同)

【问题讨论】:

【参考方案1】:

当您使用 Xcode 4.6 构建时,您使用的是 iOS SDK 6,并且在 iOS 6 和 7 上的应用程序看起来相同。

使用 Xcode 5.0 构建时,您使用的是 iOS SDK 7,而 iOS 7 上的应用由于 UIKit 的变化而看起来有所不同。

【讨论】:

为什么选择器视图在 iOS 7 设备上看起来像 iOS 6.0 样式? 所有具有 iOS 6 或更早版本的 Base SDK 的应用程序在 iOS 7 下运行时将保持旧外观(操作表和警报视图除外)。当 iOS 7 上线时,Apple 不希望突然破坏成千上万的应用程序。 好的,同意,但我想从逻辑上理解它,比如当一个应用程序有一些调用选择器视图的代码时,应用程序是否应该不使用设备的 sdk 来显示视图(较新的)? 应用程序 SDK 版本是在构建时定义的,而不是在运行时。如果您想要更新的 UI,请在构建应用时使用更高版本的 SDK。 那么,我可以使用 iOS 6 作为基础 SDK 提交我的应用程序吗?还是苹果在 iOS 7.0 发布后不接受它们?【参考方案2】:

这可能有几个原因:

    iOS SDK 7 中的 UIKit 更新。 您使用预处理器指令,如#define/#ifdef,您在其中描述 基于 iOS 版本的 UI。 部署目标不同。

【讨论】:

以上是关于由 xcode 4.6 与 xcode 5.0 创建时,iOS 应用程序在 iOS 7.0 设备上的行为不同的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 4.6 不能正确识别 Xcode 5.0 创建的项目的链接框架

如何将新的 xcode 项目回滚到以前的项目?

如何在 Xcode 4.6 中使用 googletest 实现 c++ 单元测试?

Xcode 4.6 和 Xcode 5 一起安装

将 XIB 从 Xcode 5 降级到 Xcode 4.6

ios 6 ios 7 xcode 4.6 xcode5 困境