Ich möchte manuell prüfen, ob neue Updates für meine App vorhanden sind, während sich der Benutzer darin befindet, und ihn auffordern, die neue Version herunterzuladen. Kann ich dies tun, indem ich die Version meiner App im App Store programmgesteuert überprüfe?
111
NSNumber
Versionsnummer. Dann habe ich es auf meine Website hochgeladen. Dieselbe Website, die ich für meinen App-Support und meine App-Webseiten verwende. AnschließendviewDidLoad
überprüfe ich auf der Website die Versionsnummer und die aktuelle Version in meiner App. Dann habe ich eine vorgefertigtealertView
, die automatisch auffordert, die App zu aktualisieren. Ich kann Code bereitstellen, wenn Sie möchten.Antworten:
Hier ist ein einfaches Code-Snippet, mit dem Sie feststellen können, ob die aktuelle Version anders ist
Hinweis: Stellen Sie sicher, dass diese bei der Eingabe der neuen Version in iTunes mit der Version in der App übereinstimmt, die Sie veröffentlichen. Wenn nicht, gibt der obige Code immer JA zurück, unabhängig davon, ob der Benutzer aktualisiert.
quelle
Swift 3 Version:
Ich denke, es ist besser, einen Fehler auszulösen, als false zurückzugeben. In diesem Fall habe ich einen VersionError erstellt, aber es kann sich um einen anderen von Ihnen definierten oder NSError handeln
Ziehen Sie auch in Betracht, diese Funktion von einem anderen Thread aus aufzurufen. Wenn die Verbindung langsam ist, kann der aktuelle Thread blockiert werden.
Aktualisieren
Verwenden von URLSession:
Anstatt
Data(contentsOf: url)
einen Thread zu verwenden und zu blockieren, können wir Folgendes verwendenURLSession
:Beispiel:
quelle
DispatchQueue.global()
gibt Ihnen eine Hintergrundwarteschlange, die Daten werden in diese Warteschlange geladen und kehren erst dann in die Hauptwarteschlange zurück, wenn die Daten geladen werden.Vielen Dank an Steve Moser für seinen Link, hier ist mein Code:
quelle
/en/
Unterpfad nicht geklappt. Nach dem Entfernen funktionierte esDa ich vor dem gleichen Problem stand, fand ich die Antwort von Mario Hendricks . Unglücklicherweise beschwerte sich XCode über Casting-Probleme, als ich versuchte, seinen Code auf mein Projekt anzuwenden, und sagte: "MDLMaterialProperty hat keine tiefgestellten Mitglieder." Sein Code versuchte, dieses MDLMaterial ... als Typ der Konstante "lookupResult" festzulegen, wodurch das Casting auf "Int" jedes Mal fehlschlug. Meine Lösung bestand darin, NSDictionary eine Typanmerkung für meine Variable bereitzustellen , um klar zu machen , welche Art von Wert ich benötigte. Damit konnte ich auf den Wert "Version" zugreifen, den ich brauchte.
Obs: Für diese YOURBUNDLEID können Sie aus Ihrem Xcode-Projekt ... " Ziele> Allgemein> Identität> Bundle-ID "
Hier ist also mein Code mit einigen Vereinfachungen:
Alle Vorschläge zur Verbesserung dieses Codes sind willkommen!
quelle
Verwenden Sie einfach ATAppUpdater . Es ist 1 Zeile, threadsicher und schnell. Es gibt auch Delegierungsmethoden, wenn Sie Benutzeraktionen verfolgen möchten.
Hier ist ein Beispiel:
Optionale Delegierungsmethoden:
quelle
Vereinfacht eine großartige Antwort auf diesen Thread. Verwenden von
Swift 4
undAlamofire
.Und dann, um es zu benutzen:
quelle
{ "resultCount":0, "results": [] }
Der schnelle 4- Code von Anup Gupta wurde aktualisiert
Ich habe einige Änderungen an diesem Code vorgenommen . Jetzt werden die Funktionen aus einer Hintergrundwarteschlange aufgerufen, da die Verbindung langsam sein kann und daher den Hauptthread blockiert.
Ich habe auch den CFBundleName optional gemacht, da die vorgestellte Version "CFBundleDisplayName" hatte, was in meiner Version wahrscheinlich nicht funktionierte. Wenn es jetzt nicht vorhanden ist, stürzt es nicht ab, sondern zeigt den App-Namen nicht in der Warnung an.
Ich rufe an, um auch die Bestätigungsschaltfläche hinzuzufügen:
Oder rufen Sie es auf, um so aufgerufen zu werden, damit die Option zum Aktualisieren erzwingen aktiviert ist:
quelle
Hier ist meine Version mit Swift 4 und der beliebten Alamofire- Bibliothek (ich verwende sie sowieso in meinen Apps). Die Anforderung ist asynchron und Sie können einen Rückruf übergeben, um benachrichtigt zu werden, wenn Sie fertig sind.
Die Verwendung ist so einfach:
quelle
Kann ich diese kleine Bibliothek vorschlagen: https://github.com/nicklockwood/iVersion
Ziel ist es, die Handhabung von Remote-Plists zu vereinfachen, um Benachrichtigungen auszulösen.
quelle
quelle
URLSession
.Diese Antwort ist eine Änderung der Antwort von datinc https://stackoverflow.com/a/25210143/2735358 .
Die Funktion von datinc vergleicht die Version durch einen Zeichenfolgenvergleich. Daher wird die Version nicht für größer oder kleiner als verglichen.
Diese modifizierte Funktion vergleicht jedoch die Version von NSNumericSearch (numerischer Vergleich) .
Verwenden:
quelle
Ich habe viele Möglichkeiten gesehen, um das App-Update zu überprüfen. Basierend auf vielen Antworten mische ich sie und erstelle meine Lösung, die auf GitHub verfügbar ist. Wenn ein Update erforderlich ist, lassen Sie es mich bitte wissen. Dieser Code für Swift 4
GitHub-Link Zu diesem Code. https://github.com/anupgupta-arg/iOS-Swift-ArgAppUpdater
Aktualisierung: https://stackoverflow.com/a/48810541/5855888 und https://github.com/emotality/ATAppUpdater
Happy Coding 👍 😊
quelle
Hier ist eine schnelle Methode, die das tut, was einige der Objective-C-Antworten vorschlagen. Sobald Sie die Informationen aus dem App Store JSON erhalten haben, können Sie natürlich die Versionshinweise extrahieren, wenn Sie dies wünschen.
quelle
Wenn Sie den Inhaltstyp nicht in NSUrlRequest festlegen, erhalten Sie mit Sicherheit keine Antwort. Versuchen Sie also den folgenden Code, der für mich in Ordnung ist. Ich hoffe es hilft....
quelle
Ausgehend von einem POV für Hybridanwendungen ist dies ein Javascript-Beispiel. In meinem Hauptmenü befindet sich die Fußzeile Update Available. Wenn ein Update verfügbar ist (dh meine Versionsnummer in der Konfigurationsdatei ist kleiner als die abgerufene Version, zeigen Sie die Fußzeile an). Dadurch wird der Benutzer zum App Store weitergeleitet, wo der Benutzer auf die Schaltfläche Update klicken kann.
Ich erhalte auch die neuen Daten (z. B. Versionshinweise) und zeige diese beim Anmelden modal an, wenn es das erste Mal in dieser Version ist.
Die Methode Update Available kann beliebig oft ausgeführt werden. Meins wird jedes Mal ausgeführt, wenn der Benutzer zum Startbildschirm navigiert.
Rückruf: Apple hat eine API, die sehr einfach zu bekommen ist
quelle
Warnung: Die meisten Antworten geben die URL synchron ab (mit
-dataWithContentsOfURL:
oder-sendSynchronousRequest:
. Dies ist schlecht, da Ihre Anwendung einige Minuten lang nicht reagiert, wenn die mobile Verbindung während der Anforderung unterbrochen wird. Führen Sie niemals synchron einen Internetzugang auf der Website durch Haupt-Bedroung.Die richtige Antwort ist die Verwendung der asynchronen API:
Das Standardzeitlimit für Netzwerkverbindungen beträgt mehrere Minuten. Selbst wenn die Anforderung ausgeführt wird, kann sie über eine schlechte EDGE-Verbindung langsam genug sein, um so lange zu dauern. Sie möchten in diesem Fall nicht, dass Ihre App unbrauchbar wird. Um solche Dinge zu testen, ist es hilfreich, Ihren Netzwerkcode mit Apples Network Link Conditioner auszuführen.
quelle
Versionszeichenfolge vergleichen:
https://github.com/eure/AppVersionMonitor
quelle
FÜR SWIFT 4 und 3.2:
Zuerst müssen wir die Bundle-ID aus dem Bundle-Info-Wörterbuch abrufen und isUpdaet auf false setzen.
Dann müssen wir einen urlSession-Aufruf aufrufen, um die Version von iTunes zu erhalten.
VOLLSTÄNDIGER CODE WIRD WIE DIESER SEIN:
Dann können wir die Funktion beliebig aufrufen.
quelle
C # -Äquivalenz von @datinc, ebenso wie das Erhalten der Apple App Store-Version. Enthaltener Code zum Abrufen der Version sowohl für das Bundle als auch für die AssemblyInfo-Datei.
BEARBEITEN :: Bitte beachten Sie die Region "/ us /", die im urlString enthalten ist. Dieser Ländercode muss entsprechend behandelt / geändert werden.
quelle
Versuchen Sie dies mit einem einzigen Funktionsaufruf:
Warnfunktion zum Öffnen der AppStore-URL:
So rufen Sie die obige Funktion auf:
Für weitere Informationen versuchen Sie den folgenden Link mit dem vollständigen Code:
AppStoreUpdate.swift
ItunesAppInfoResult.swift
ItunesAppInfoItunes.swift
Ich hoffe das wird helfen!
quelle
Diese Frage wurde 2011 gestellt. Ich fand sie 2018, als ich nach einer Möglichkeit suchte, nicht nur die neue Version der App im App Store zu überprüfen, sondern auch den Benutzer darüber zu benachrichtigen.
Nach kleinen Recherchen kam ich zu dem Schluss, dass die Antwort von juanjo (im Zusammenhang mit Swift 3) https://stackoverflow.com/a/40939740/1218405 die optimale Lösung ist, wenn Sie dies selbst im Code tun möchten
Außerdem kann ich zwei großartige Projekte auf GitHub vorschlagen (jeweils über 2300 Sterne).
Beispiel für Sirene (AppDelegate.swift)
quelle
Swift 4
Wir können das Neue verwenden
JSONDecoder
, um die Antwort von itunes.apple.com/lookup zu analysieren und sie mit decodierbaren Klassen oder Strukturen darzustellen:Wir können auch andere Eigenschaften hinzufügen,
AppInfo
falls wir diereleaseNotes
oder eine andere Eigenschaft benötigen .Jetzt können wir eine asynchrone Anfrage stellen mit
URLSession
:Diese Funktion erhält einen Abschlussabschluss, der aufgerufen wird, wenn die Anforderung abgeschlossen ist, und gibt einen
URLSessionDataTask
zurück, falls wir die Anforderung abbrechen müssen. Sie kann folgendermaßen aufgerufen werden:quelle
LookupResult
undAppInfo
irgendwo in Ihrem Projekt, vorzugsweise in einer separaten Datei: Sie werden verwendet, wenn Sie die Antwort dekodieren:JSONDecoder().decode(LookupResult.self, from: data)
und sie enthalten die VersionszeichenfolgeMein Code-Vorschlag. Basierend auf den Antworten von @datinc und @ Mario-Hendricks
Sie sollten natürlich durch
dlog_Error
Ihren Protokollierungsfunktionsaufruf ersetzen .Diese Art der Codestruktur sollte verhindern, dass Ihre App im Fehlerfall abstürzt. Zum Abrufen
appStoreAppVersion
ist das nicht zwingend erforderlich und sollte nicht zu schwerwiegenden Fehlern führen. Mit dieser Art von Codestruktur wird Ihr nicht schwerwiegender Fehler dennoch protokolliert.quelle
Wenn Sie die aktuelle Version Ihrer App überprüfen möchten, verwenden Sie den folgenden einfachen Code:
quelle