Код: Выделить всё
ld: Undefined symbols:
os.Logger.logObject.getter : __C.OS_os_log, referenced from:
(1) suspend resume partial function for closure #1 @Sendable () async -> () in static godot_plugin.SwiftClass.launch_review_flow() -> () in InappReviewPlugin.a[4](SwiftClass.o)
(3) suspend resume partial function for closure #1 @Sendable () async -> () in static godot_plugin.SwiftClass.launch_review_flow() -> () in InappReviewPlugin.a[4](SwiftClass.o)
os.Logger.init() -> os.Logger, referenced from:
one-time initialization function for logger in InappReviewPlugin.a[4](SwiftClass.o)
type metadata accessor for os.Logger, referenced from:
one-time initialization function for logger in InappReviewPlugin.a[4](SwiftClass.o)
(1) suspend resume partial function for closure #1 @Sendable () async -> () in static godot_plugin.SwiftClass.launch_review_flow() -> () in InappReviewPlugin.a[4](SwiftClass.o)
Код: Выделить всё
import Foundation
import SwiftUI
import OSLog
import StoreKit
@available(iOS 16.0, *)
extension UIApplication {
class func getTopViewController(base: UIViewController? = UIApplication.shared.windows.first { $0.isKeyWindow }?.rootViewController) -> UIViewController? {
if let nav = base as? UINavigationController {
return getTopViewController(base: nav.visibleViewController)
} else if let tab = base as? UITabBarController, let selected = tab.selectedViewController {
return getTopViewController(base: selected)
} else if let presented = base?.presentedViewController {
return getTopViewController(base: presented)
}
return base
}
}
@available(iOS 16.0, *)
extension UIViewController {
/// Request a App Store review from the user
///
/// - Parameters:
/// - delay: The number of seconds this function will wait before showing the modal.
func requestReview(delay: Double) {
Task {
// Use the equation n * 10^9 to convert seconds to nanoseconds.
try? await Task.sleep(nanoseconds: UInt64(delay * pow(10.0, 9.0)))
if let windowScene = self.view.window?.windowScene,
self.navigationController?.topViewController == self {
SKStoreReviewController.requestReview(in: windowScene)
}
}
}
}
@available(iOS 16.0, *)
@objcMembers public class SwiftClass : NSObject
{
static let logger = Logger()
static func launch_review_flow() {
Task {
logger.info("SwiftClass: launch_review_flow(): Task")
if let topVC = await UIApplication.getTopViewController() {
logger.info("SwiftClass: launch_review_flow(): Task: topVC")
await topVC.requestReview(delay: 1.5)
}
}
}
}
Любая помощь будем признательны за решение этой проблемы.
Кроме того, мы будем очень признательны за любые предложения по оптимизации или исправлению связанных или несвязанных частей кода.
Подробнее здесь: https://stackoverflow.com/questions/783 ... nd-logging
Мобильная версия