I found a solution.
class AppStoreVC: UIViewController {
let appURL = URL(string: "https://itunes.apple.com/app/idxxxxxxxx")
let productID = xxxxxxxx
func openAppStore() {
let appStoreVC = SKStoreProductViewController()
appStoreVC.delegate = self
let parametersDictionary = [SKStoreProductParameterITunesItemIdentifier: productID]
appStoreVC.loadProduct(withParameters: parametersDictionary) { _, error in
if error != nil {
guard let url = self.appURL else { return }
UIApplication.shared.open(url)
} else {
let scene = UIApplication.shared.connectedScenes.first { $0.activationState == .foregroundActive }
if let windowScene = scene as? UIWindowScene {
windowScene.keyWindow?.rootViewController?.present(appStoreVC, animated: true, completion: nil)
}
}
}
}
}
extension AppStoreVC: SKStoreProductViewControllerDelegate {
func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {
viewController.dismiss(animated: true)
}
}
struct ContentView: View {
let appStoreVC = AppStoreVC()
var body: some View {
VStack {
Image(systemName: "apple.logo")
.onTapGesture {
appStoreVC.openAppStore()
}
Text("Open App Store")
}
.padding()
}
}
Topic:
UI Frameworks
SubTopic:
SwiftUI
Tags: