Xcode 8:使用iOS 9.3 base SDK 编译?

Xcode 8: Compile with iOS 9.3 base SDK?

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

Invalid sdk value. The value provided for the sdk portion of LC_VERSION_MIN_IPHONEOS in MyApp.app/Frameworks/libswiftFoundation.dylib is 10.0 which is greater than the maximum allowed value of 9.3.2.

最后一个错误:

New apps and app updates must be built with the public (GM) versions of Xcode 6 or later, OS X, and iOS SDK. Don't submit apps built with beta software including beta OS X builds.

好的,在我升级我的应用程序之前了解这些信息会很有帮助!我将如何提交此应用程序?


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

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

然后在 Xcode 8 的构建设置中更改 Base SDK 设置。但是,它不识别新的SDK ,即使我手动输入它,并用iOS 10.0编译它。 有什么方法可以使用旧版 SDK 进行编译吗? 或者我必须将代码回滚到 Swift 2 吗?

这是快速解决方案

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

正在提交应用程序

Apps that are created using beta versions of Xcode or that are built for beta versions of operating systems will not be accepted on the App Store and Mac App Store. Apps that you submit should be developed using the latest version of Xcode from the Mac App Store and should be built for publicly available versions of iOS, OS X, and watchOS — except when GM seeds are available. When a GM Seed of Xcode becomes available, use it to develop your app for submission. When GM seeds of iOS, OS X, or watchOS become available, build your app for these versions.

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

Re: Okay, that would have been helpful to know before I upgraded my app! How would I go about submitting this app?

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

不幸的是,在 Xcode Beta 中似乎没有办法更改 SDK 版本;这可能是一个错误,也可能只是因为 Apple 希望您将 beta SDK 与 beta 软件一起使用。正如@l'L'l 所说,必须以稳定 Xcode 打开应用程序才能让 App Store 接受提交。

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

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