From 94f78c9f4e4620ee6e320fdd6d93679564653d1c Mon Sep 17 00:00:00 2001 From: leminlimez Date: Sat, 12 Jul 2025 11:29:46 -0400 Subject: [PATCH] checking for pocket poster update --- Pocket Poster.xcodeproj/project.pbxproj | 4 ++-- Pocket Poster/Localizable.xcstrings | 6 ++++++ Pocket Poster/Pocket_PosterApp.swift | 24 ++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/Pocket Poster.xcodeproj/project.pbxproj b/Pocket Poster.xcodeproj/project.pbxproj index 6422739..297575c 100644 --- a/Pocket Poster.xcodeproj/project.pbxproj +++ b/Pocket Poster.xcodeproj/project.pbxproj @@ -281,7 +281,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0.1; + MARKETING_VERSION = 2.0.2; PRODUCT_BUNDLE_IDENTIFIER = "com.lemin.Pocket-Poster"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; @@ -313,7 +313,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0.1; + MARKETING_VERSION = 2.0.2; PRODUCT_BUNDLE_IDENTIFIER = "com.lemin.Pocket-Poster"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; diff --git a/Pocket Poster/Localizable.xcstrings b/Pocket Poster/Localizable.xcstrings index cd0b104..4953e09 100644 --- a/Pocket Poster/Localizable.xcstrings +++ b/Pocket Poster/Localizable.xcstrings @@ -6569,6 +6569,9 @@ } } }, + "Pocket Poster %@ is available, do you want to visit releases page?" : { + "comment" : "app update available on GitHub" + }, "PosterBoard failed to open directly. The fallback shortcut will now be opened." : { "localizations" : { "ar" : { @@ -8677,6 +8680,9 @@ } } }, + "Update Available" : { + "comment" : "app update available on GitHub" + }, "Version %@ (%@)" : { "localizations" : { "ar" : { diff --git a/Pocket Poster/Pocket_PosterApp.swift b/Pocket Poster/Pocket_PosterApp.swift index 8e54693..2667f6f 100644 --- a/Pocket Poster/Pocket_PosterApp.swift +++ b/Pocket Poster/Pocket_PosterApp.swift @@ -14,6 +14,7 @@ struct Pocket_PosterApp: App { @AppStorage("pbHash") var pbHash: String = "" @State var downloadURL: String? = nil + @State var checkedForUpdate: Bool = false var body: some Scene { WindowGroup { @@ -26,6 +27,29 @@ struct Pocket_PosterApp: App { } .transition(.opacity) .animation(.easeOut(duration: 0.5), value: finishedTutorial) + .onAppear { + // check for update + if !checkedForUpdate { + checkedForUpdate = true + if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String, let url = URL(string: "https://api.github.com/leminlimez/Pocket-Poster/releases/latest") { + let task = URLSession.shared.dataTask(with: url) {(data, response, error) in + guard let data = data else { return } + + if let json = try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] { + if (json["tag_name"] as? String)?.replacingOccurrences(of: "v", with: "").compare(version, options: .numeric) == .orderedDescending { + UIApplication.shared.confirmAlert( + title: NSLocalizedString("Update Available", comment: "app update available on GitHub"), + body: String(format: NSLocalizedString("Pocket Poster %@ is available, do you want to visit releases page?", comment: "app update available on GitHub"), json["tag_name"] as? String ?? "update"), + onOK: { + UIApplication.shared.open(URL(string: "https://github.com/leminlimez/Pocket-Poster/releases/latest")!) + }, noCancel: false) + } + } + } + task.resume() + } + } + } .onOpenURL(perform: { url in // Download URL if url.absoluteString.starts(with: "pocketposter://download") {