【问题标题】:Xcode 8: Compile with iOS 9.3 base SDK?Xcode 8:使用 iOS 9.3 基础 SDK 编译?
【发布时间】:2016-06-22 00:39:07
【问题描述】:

我在 Xcode 8.0 beta (8S128d) 中将我的 iOS 应用程序升级到了 Swift 3.0。我认为一切准备就绪,并将其上传到 iTunes Connect。当我点击“提交审核”时,它给了我一个包含 26 个错误的列表,每个嵌入式框架都有一个,例如:

SDK 值无效。 MyApp.app/Frameworks/libswiftFoundation.dylib 中为 LC_VERSION_MIN_IPHONEOS 的 sdk 部分提供的值为 10.0,大于允许的最大值 9.3.2。

最后一个错误:

新应用和应用更新必须使用 Xcode 6 或更高版本、OS X 和 iOS SDK 的公共 (GM) 版本构建。不要提交使用 beta 软件构建的应用,包括 beta OS X 版本。

好的,在我升级我的应用程序之前知道这会很有帮助!我将如何提交此应用程序?


我注意到通过将base SDK from Xcode 7.3.1 复制到 Xcode 8 将项目 Base SDK 从 iOS 10.0 更改为 iOS 9.3:

/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk

然后在 Xcode 8 的 Build Settings 中更改 Base SDK 设置。但是,它无法识别新的 SDK (see this question),即使我手动输入它并使用 iOS 10.0 编译它也是如此。 有没有办法使用旧版 SDK 进行编译?或者我必须将我的代码回滚到 Swift 2 吗?

【问题讨论】:

  • 看,愚蠢的问题,但是你关闭并重新打开 Xcode 了吗?
  • 是的,现在有几次,它只是拒绝识别其他SDK!不过还是谢谢。

标签: ios xcode swift xcode8


【解决方案1】:

这是快速解决方案

不要使用 Xcode 测试版提交应用以供发布 - 它是测试版是有原因的,不应与生产代码一起使用。

提交应用

使用 Xcode 测试版创建或构建的应用程序 应用程序不接受测试版操作系统 商店和 Mac App Store。您提交的应用程序应该被开发 使用来自 Mac App Store 的最新版本的 Xcode,并且应该是 专为 iOS、OS X 和 watchOS 的公开版本而构建 — 除非有转基因种子。当 Xcode 的 GM 种子变成 可用,使用它来开发您的应用程序以供提交。当转基因种子 iOS、OS X 或 watchOS 可用,为这些构建您的应用程序 版本。

https://developer.apple.com/support/pre-release-software/

Re:好的,在我升级我的应用程序之前知道这会很有帮助! 我将如何提交此应用程序?

使用 Xcode 的当前或 GM 版本来构建和提交您的应用程序。

【讨论】:

  • 我现在明白了!但我已经升级到 Swift 3,Xcode 7.3.1(最新稳定版本)无法识别:\ 我的问题是是否有任何方法可以将 Swift 3 项目与稳定的 iOS 9.3 SDK 链接?
  • 希望您使用的是源代码控制,即 Git,然后您可以回滚到您的 Swift 2 版本。但在你这样做之前,当然要备份你的 Swift 3 版本,以便你准备好以后再去。或者也许你使用时间机器?你可以回到你的 Swift 2 版本。
  • @BradzTech:你的代码中有多少函数依赖于 Swift 3?
  • 没有什么是“依赖的”... 很确定我在 Swift 3 中所做的一切也可以在 Swift 2 中完成。但是在 Xcode 7.3.1 中打开项目会由于语法问题而出现数百个错误差异。如果我回滚,我也会损失很多。如果没有更好的方法,我可能最终会手动“降级”语法错误。
  • TestFlight 对我有用。一切正常上传,只是在提交应用以供审核时出错。
【解决方案2】:

不幸的是,在 Xcode Beta 中似乎无法更改 SDK 版本;这可能是一个错误,也可能只是 Apple 希望您在使用 beta 软件的同时使用 beta SDK 的事实。就像@l'L'l 说的,必须在稳定的 Xcode 中打开应用程序才能让 App Store 接受提交。

但是,我确实发现将项目降级到 Swift 2 并不是特别困难。通过手动修复 Xcode 7.3 中的所有错误,我只花了一个小时就“降级”了整个项目。如果它对任何人都有帮助,我在此过程中注意到的主要模式是:

  • 将函数声明更改为在第一个参数之前没有 _,因为第一个参数在 Swift 3 中不是匿名的
  • 从所有函数调用中删除第一个参数标签,这有时涉及重命名函数(包括在委托中,有时不报告错误)
  • 将几个内置属性,如 label.isOn 更改为 label.on
  • 在多个对象名称前添加NS,例如 NSData 和 NSTimer,在 Swift 3 中分别成为 Data 和 Timer
  • “降级”情节提要by re-saving it
  • 使用 Xcode-stable 编译,但使用 Xcode-beta 上传; Xcode-stable 与我的配置文件存在问题,但事实证明,您使用哪个版本从 Organizer 上传二进制文件并不重要

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2011-06-17
    • 2018-11-01
    • 2011-03-03
    相关资源
    最近更新 更多