'requestReview()' 在 iOS 14.0 中被弃用
'requestReview()' was deprecated in iOS 14.0
在 iOS 14 中,Xcode 显示警告:
requestReview()' was deprecated in iOS 14.0
我正在使用 StoreKit 在我的应用程序中自动请求评论。
func requestReview() {
guard shouldRequestReview else {return}
SKStoreReviewController.requestReview()
lastRequest = Date()
}
如何消除该警告?
快速解决
if let scene = UIApplication.shared.connectedScenes.first(where: { [=10=].activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
方便的解决方案
这是一个真实的 one-liner:
SKStoreReviewController.requestReviewInCurrentScene()
但首先您需要在 SKStoreReviewController
中创建以下扩展:
extension SKStoreReviewController {
public static func requestReviewInCurrentScene() {
if let scene = UIApplication.shared.connectedScenes.first(where: { [=12=].activationState == .foregroundActive }) as? UIWindowScene {
requestReview(in: scene)
}
}
}
这是一个GitHub repository with different Swift extensions including requestReviewInCurrentScene()
.
说明
requestReview
函数已在 iOS 14 中弃用:
@available(iOS, introduced: 10.3, deprecated: 14.0)
open class func requestReview()
您需要改用requestReview(in:)
函数:
@available(iOS 14.0, *)
open class func requestReview(in windowScene: UIWindowScene)
可能的解决方案
- 自定义扩展
您可以创建以下扩展:
extension UIApplication {
var currentScene: UIWindowScene? {
connectedScenes
.first { [=15=].activationState == .foregroundActive } as? UIWindowScene
}
}
并像这样使用它:
if let scene = UIApplication.shared.currentScene {
SKStoreReviewController.requestReview(in: scene)
}
- 通用one-liner:
if let scene = UIApplication.shared.connectedScenes.first(where: { [=10=].activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
- 单场景解决方案(for iOS)
if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
iOS13岁及以上
的简单解决方案
Swift 5+
if #available(iOS 14.0, *) {
if let scene = UIApplication.shared.connectedScenes.first(where: { [=10=].activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
} else if #available(iOS 10.3, *) {
SKStoreReviewController.requestReview()
}
因为 SKStoreReviewController.requestReview
在 ios14 中被弃用
您可以使用 ios14
中的 SKStoreReviewController.requestReview(in: scene)
示例代码如下
if #available(iOS 14.0, *) {
if let scene = UIApplication.shared.connectedScenes.first(where: { [=10=].activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
} else if #available(iOS 10.3, *) {
SKStoreReviewController.requestReview()
}
在 iOS 14 中,Xcode 显示警告:
requestReview()' was deprecated in iOS 14.0
我正在使用 StoreKit 在我的应用程序中自动请求评论。
func requestReview() {
guard shouldRequestReview else {return}
SKStoreReviewController.requestReview()
lastRequest = Date()
}
如何消除该警告?
快速解决
if let scene = UIApplication.shared.connectedScenes.first(where: { [=10=].activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
方便的解决方案
这是一个真实的 one-liner:
SKStoreReviewController.requestReviewInCurrentScene()
但首先您需要在 SKStoreReviewController
中创建以下扩展:
extension SKStoreReviewController {
public static func requestReviewInCurrentScene() {
if let scene = UIApplication.shared.connectedScenes.first(where: { [=12=].activationState == .foregroundActive }) as? UIWindowScene {
requestReview(in: scene)
}
}
}
这是一个GitHub repository with different Swift extensions including requestReviewInCurrentScene()
.
说明
requestReview
函数已在 iOS 14 中弃用:
@available(iOS, introduced: 10.3, deprecated: 14.0)
open class func requestReview()
您需要改用requestReview(in:)
函数:
@available(iOS 14.0, *)
open class func requestReview(in windowScene: UIWindowScene)
可能的解决方案
- 自定义扩展
您可以创建以下扩展:
extension UIApplication {
var currentScene: UIWindowScene? {
connectedScenes
.first { [=15=].activationState == .foregroundActive } as? UIWindowScene
}
}
并像这样使用它:
if let scene = UIApplication.shared.currentScene {
SKStoreReviewController.requestReview(in: scene)
}
- 通用one-liner:
if let scene = UIApplication.shared.connectedScenes.first(where: { [=10=].activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
- 单场景解决方案(for iOS)
if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
iOS13岁及以上
的简单解决方案Swift 5+
if #available(iOS 14.0, *) {
if let scene = UIApplication.shared.connectedScenes.first(where: { [=10=].activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
} else if #available(iOS 10.3, *) {
SKStoreReviewController.requestReview()
}
因为 SKStoreReviewController.requestReview
在 ios14 中被弃用
您可以使用 ios14
中的 SKStoreReviewController.requestReview(in: scene)
示例代码如下
if #available(iOS 14.0, *) {
if let scene = UIApplication.shared.connectedScenes.first(where: { [=10=].activationState == .foregroundActive }) as? UIWindowScene {
SKStoreReviewController.requestReview(in: scene)
}
} else if #available(iOS 10.3, *) {
SKStoreReviewController.requestReview()
}