是否可以在 Xcode 5 中构建 iphoneos6.1 项目,保留 Xcode 4.6.3 故事板中布局的视图行为?
Posted
技术标签:
【中文标题】是否可以在 Xcode 5 中构建 iphoneos6.1 项目,保留 Xcode 4.6.3 故事板中布局的视图行为?【英文标题】:Is it possible to build iphoneos6.1 projects in Xcode 5, preserving the behaviour of views laid out in an Xcode 4.6.3 storyboard? 【发布时间】:2013-09-18 23:58:39 【问题描述】:我们的构建服务器最近更新为使用 Xcode 5 的 xcodebuild。我们已经安装了 iphoneos6.1,因此我们仍然可以将 iPhone SDK 6.1 用于一些尚不支持 ios7 的遗留项目。但是,当我们使用 xcodebuild 使用 -sdk iphoneos6.1 构建这些项目时,我们仍然会看到 UIViewController 的内容在导航栏和标签栏下方布局的问题。
有没有办法使用 Xcode 5 的 xcodebuild 构建这些使用 Xcode 4.6.3/base sdk iOS 6.1 开发的项目,但保留使用 Xcode 4.6.3 开发的情节提要中布置的视图?我查看了 ibtool 的手册页,但没有看到与选择目标 SDK 相关的任何选项,或者与我上面提到的“扩展边缘”问题相关的任何其他选项。
请注意,我们尚未使用 Xcode 5 更新情节提要 - 该项目仍在 Xcode 4.6.3 中继续开发,并且仅在我们的构建服务器克隆项目的 git 存储库并使用 xcodebuild 构建时触及 Xcode 5 工具链。
【问题讨论】:
当您在 iOS 7 中运行应用程序时会发生这种情况吗?还是在 6.1 中? 在 iOS 7 中运行应用程序时会发生这种情况。当我们使用 Xcode 4.6.3 构建时,应用程序在 iOS 6 或 7 上运行时都可以正常工作。当我们使用 Xcode 5 构建时,应用程序可以正常工作在 iOS 6 上运行时正确,但在 iOS 7 上运行时视图控制器内容会延伸到顶部/底部栏下方。 Xcode 5 只有 iOS 7 SDK。在针对新 SDK 构建时,iOS 7 会自动使用新行为,而 iOS 6 仍将正常运行,因为它不知道其他任何内容。使用较旧的 Xcode 构建时,会使用较旧的 SDK,并且 iOS 7 假定应用程序尚未更新为使用 iOS 7 功能,因此会像 iOS 6 一样显示应用程序。 @BergQuester,我符号链接了 iphoneos6.1 sdk,以便它可以在 Xcode 5 中使用,如下所述:***.com/questions/18423896/…,并选择该 SDK 作为基础 SDK。你是对的,即使我选择了 iphoneos6.1 sdk 作为基础 SDK,iOS 7 的一些(但不是全部)功能仍然存在于编译的应用程序中。除了在栏下延伸的内容外,我还看到了一个半透明的导航栏,但我没有看到导航栏颜色延伸到状态栏,就像我在将基本 sdk 设置为 iOS 7 时所做的那样。 我个人不相信像这样破解 Xcode,因为它不是 Apple 测试过的组合。听起来,Xcode 5 在编译时可能设置了一个标志,导致 iOS 7 以这种方式运行。理想情况下,Apple 会包含之前的一两个 SDK。取而代之的是,我更愿意为两个版本的 Xcode 使用单独的构建服务器,而不是破解旧的 SDK。根据您的情况,您甚至可以在构建服务器上的 VM 中运行旧的 Xcode,以避免需要单独的机器。 【参考方案1】:是的。在 Storyboard 上,转到 Interface Build Document 部分,有两个选择项。一种用于构建,另一种用于查看方式。您可以为 Builds For 选择从 7.0 到 4.3 的任何内容,您可以选择“7.0 及更高版本”或“6.1 及更早版本”。
【讨论】:
感谢您的建议。我尝试更改“构建”和“查看为”值,但它们没有解决问题 - 我仍然看到内容在顶部/底部栏下扩展。我想我只能硬着头皮开始在 Xcode 5 中调整情节提要。 @Greg 解决您的问题.. 点击您的 Viewcontroller... 并为“Extended edge”取消选中“Under top bars”..“Under bottom bars”...等 @TonyMkenu,谢谢,我知道这个选项,但这是一个遗留项目,我们正在尝试迁移到运行 Xcode 5 的新构建服务器,如果没有实际修改项目可能的。看起来我们需要转向拥有两个构建环境,一个用于迁移到 Xcode 5 的项目,另一个用于目前仍保留在 Xcode 4.6.3 上的项目。【参考方案2】:虽然它不是您正在寻找的东西,但您可以将 Xcode 4 和 Xcode 5 保留在同一个构建环境中,并通过使用环境变量来控制运行哪个 xcodebuild
(请参阅 man page for xcrun。我们有只需在我们的一台构建服务器上进行设置即可。在您的构建定义中,只需设置以下环境变量:
DEVELOPER_DIR=<path to Xcode 4.app>/Contents/Developer
对我们来说,结果是:
DEVELOPER_DIR=/Applications/Xcode-4.app/Contents/Developer
这会覆盖xcode-select
设置并允许您使用正确的 Xcode 环境。同样,这取决于构建系统设置环境变量的能力,以及安装两个版本的 Xcode。您可以在Downloads for Apple Developers下载旧版本代码
【讨论】:
以上是关于是否可以在 Xcode 5 中构建 iphoneos6.1 项目,保留 Xcode 4.6.3 故事板中布局的视图行为?的主要内容,如果未能解决你的问题,请参考以下文章
CODE_SIGN_IDENTITY[sdk=iphoneos*] 是啥意思
IPHONEOS_DEPLOYMENT_TARGET 设置为 8.0 Xcode 12 (Flutter)