Je voudrais vérifier manuellement s'il y a de nouvelles mises à jour pour mon application pendant que l'utilisateur y est, et l'inviter à télécharger la nouvelle version. Puis-je le faire en vérifiant la version de mon application dans l'App Store - par programme?
113
NSNumber
numéro de version. Ensuite, je l'ai téléchargé sur mon site Web. Le même site Web que j'utilise pour le support de mon application et les pages Web de l'application, puis dansviewDidLoad
, je consulte le site Web pour le numéro de version et je vérifie la version actuelle dans mon application. Ensuite, j'ai un premadealertView
qui invite automatiquement à mettre à jour l'application. Je peux fournir du code si vous le souhaitez.Réponses:
Voici un simple extrait de code qui vous permet de savoir si la version actuelle est différente
Remarque: assurez-vous que lorsque vous entrez la nouvelle version dans iTunes, cela correspond à la version de l'application que vous publiez. Sinon, le code ci-dessus retournera toujours OUI, que l'utilisateur soit mis à jour.
la source
Version Swift 3:
Je pense qu'il est préférable de lancer une erreur au lieu de renvoyer false, dans ce cas, j'ai créé une VersionError mais cela peut être une autre que vous définissez ou NSError
Pensez également à appeler cette fonction à partir d'un autre thread, si la connexion est lente, cela peut bloquer le thread actuel.
Mettre à jour
Utilisation d'URLSession:
Au lieu d'utiliser
Data(contentsOf: url)
et de bloquer un thread, nous pouvons utiliserURLSession
:exemple:
la source
DispatchQueue.global()
vous donne une file d'attente en arrière-plan, les données sont chargées dans cette file d'attente et ne retournent à la file d'attente principale que lorsque les données sont chargées.Merci à Steve Moser pour son lien, voici mon code:
la source
/en/
chemin. Après l'avoir retiré, cela a fonctionnéComme j'étais confronté au même problème, j'ai trouvé la réponse apportée par Mario Hendricks . Malheureusement, lorsque j'ai essayé d'appliquer son code sur mon projet, XCode s'est plaint de problèmes de diffusion en disant "MDLMaterialProperty n'a pas de membres en indice". Son code essayait de définir ce MDLMaterial ... comme le type de la constante "lookupResult", faisant échouer la conversion en "Int" à chaque fois. Ma solution était de fournir une annotation de type pour ma variable à NSDictionary pour être claire sur le type de valeur dont j'avais besoin. Avec cela, j'ai pu accéder à la valeur "version" dont j'avais besoin.
Obs: Pour ce YOURBUNDLEID , vous pouvez obtenir à partir de votre projet Xcode .... " Cibles> Général> Identité> Bundle Identifier "
Voici donc mon code avec quelques simplifications:
Toutes les suggestions d'amélioration de ce code sont les bienvenues!
la source
Utilisez simplement ATAppUpdater . Il s'agit d'une ligne, sûre et rapide. Il a également des méthodes de délégation si vous souhaitez suivre l'action de l'utilisateur.
Voici un exemple:
Méthodes de délégué facultatives:
la source
Simplifié une excellente réponse publiée sur ce fil. Utilisation
Swift 4
etAlamofire
.Et puis pour l'utiliser:
la source
{ "resultCount":0, "results": [] }
Mise à jour du code Swift 4 d' Anup Gupta
J'ai apporté quelques modifications à ce code . Désormais, les fonctions sont appelées à partir d'une file d'attente en arrière-plan, car la connexion peut être lente et donc bloquer le thread principal.
J'ai également rendu le CFBundleName facultatif, car la version présentée avait "CFBundleDisplayName" qui ne fonctionnait probablement pas dans ma version. Alors maintenant, s'il n'est pas présent, il ne plantera pas mais n'affichera tout simplement pas le nom de l'application dans l'alerte.
Je fais cet appel pour ajouter également le bouton de confirmation:
Ou appelez-le comme ceci pour avoir l'option de mise à jour forcée sur:
la source
Voici ma version utilisant Swift 4 et la populaire bibliothèque Alamofire (je l'utilise quand même dans mes applications). La demande est asynchrone et vous pouvez transmettre un rappel pour être averti une fois terminé.
L'utilisation est simple comme ceci:
la source
Puis-je suggérer cette petite bibliothèque: https://github.com/nicklockwood/iVersion
Son but est de simplifier la gestion des plists distants pour déclencher des notifications.
la source
la source
URLSession
.Cette réponse est une modification de la réponse de datinc https://stackoverflow.com/a/25210143/2735358 .
La fonction de datinc compare la version par comparaison de chaînes. Ainsi, il ne comparera pas la version supérieure ou inférieure à.
Mais, cette fonction modifiée compare la version par NSNumericSearch (comparaison numérique) .
Utilisation:
la source
J'ai vu de nombreuses façons de vérifier la mise à jour de l'application. donc basé sur de nombreuses réponses, je les mélange et crée ma solution qui est disponible sur GitHub. Si une mise à jour est nécessaire, veuillez me le faire savoir. Ce code pour Swift 4
Lien GitHub vers ce code. https://github.com/anupgupta-arg/iOS-Swift-ArgAppUpdater
Réfrence: https://stackoverflow.com/a/48810541/5855888 et https://github.com/emotality/ATAppUpdater
Codage heureux 👍 😊
la source
Essayez ceci avec un seul appel de fonction:
Fonction d'alerte pour ouvrir l'URL de l'AppStore:
Comment appeler la fonction ci-dessus:
Pour plus de détails, essayez le lien ci-dessous avec le code complet:
AppStoreUpdate.swift
ItunesAppInfoResult.swift
ItunesAppInfoItunes.swift
J'espère que cela aidera!
la source
Voici une méthode rapide qui fait ce que suggèrent certaines des réponses Objective-C. Évidemment, une fois que vous avez obtenu les informations de l'App Store JSON, vous pouvez extraire les notes de publication, si vous le souhaitez.
la source
Si vous ne définissez pas le type de contenu dans NSUrlRequest, vous n'obtiendrez certainement pas de réponse, alors essayez le code ci-dessous, cela fonctionne bien pour moi. J'espère que ça aide....
la source
Venant d'un POV d'application hybride, ceci est un exemple javascript, j'ai un pied de page Mise à jour disponible dans mon menu principal. Si une mise à jour est disponible (c'est-à-dire que mon numéro de version dans le fichier de configuration est inférieur à la version récupérée, affichez le pied de page) Cela dirigera alors l'utilisateur vers l'App Store, où l'utilisateur peut alors cliquer sur le bouton de mise à jour.
Je reçois également les nouvelles données (c'est-à-dire les notes de publication) et les affiche dans un modal lors de la connexion si c'est la première fois sur cette version.
La méthode Update Available peut être exécutée aussi souvent que vous le souhaitez. Le mien est exécuté chaque fois que l'utilisateur accède à l'écran d'accueil.
Rappel: Apple a une API, donc très facile à obtenir
la source
Avertissement: la plupart des réponses données récupèrent l'URL de manière synchrone (en utilisant
-dataWithContentsOfURL:
ou-sendSynchronousRequest:
. Ceci est incorrect, car cela signifie que votre application ne répondra pas pendant plusieurs minutes si la connexion mobile est interrompue pendant que la requête est en cours. Ne jamais accéder à Internet de manière synchrone sur le fil principal.La bonne réponse est d'utiliser l'API asynchrone:
Le délai d'expiration par défaut pour les connexions réseau est de plusieurs minutes., Et même si la demande aboutit, elle peut être suffisamment lente sur une mauvaise connexion EDGE pour prendre autant de temps. Vous ne voulez pas que votre application soit inutilisable dans ce cas. Pour tester des choses comme celle-ci, il est utile d'exécuter votre code réseau avec le conditionneur de lien réseau d'Apple.
la source
pour comparer la chaîne de version:
https://github.com/eure/AppVersionMonitor
la source
POUR SWIFT 4 et 3.2:
Tout d'abord, nous devons obtenir l'identifiant du bundle à partir du dictionnaire d'informations du bundle, définissez isUpdaet sur false.
Ensuite, nous devons appeler un appel urlSession pour obtenir la version d'itunes.
LE CODE COMPLET SERA COMME CECI:
Ensuite, nous pouvons appeler la fonction tout logiciel dont nous avons besoin.
la source
Équivalence C # de @datinc, dans la mesure où l'obtention de la version Apple App Store. Code inclus pour obtenir la version du bundle ou du fichier AssemblyInfo.
EDIT :: Veuillez noter la région, "/ us /", incluse dans l'urlString. Ce code de pays devra être traité / modifié en conséquence.
la source
Cette question a été posée en 2011, je l'ai trouvée en 2018 en cherchant un moyen non seulement de vérifier la nouvelle version de l'application dans l'App Store, mais également d'en informer l'utilisateur.
Après de petites recherches, je suis arrivé à la conclusion que la réponse de juanjo (liée à Swift 3) https://stackoverflow.com/a/40939740/1218405 est la solution optimale si vous voulez faire cela dans le code par vous-même
Je peux aussi suggérer deux grands projets sur GitHub (2300+ étoiles chacun)
Exemple pour Siren (AppDelegate.swift)
la source
Swift 4
Nous pouvons utiliser le nouveau
JSONDecoder
pour analyser la réponse de itunes.apple.com/lookup et la représenter avec des classes ou des structures décodables:Nous pouvons également ajouter d'autres propriétés au
AppInfo
cas où nous aurions besoin de lareleaseNotes
propriété ou d'une autre propriété.Nous pouvons maintenant faire une requête asynchrone en utilisant
URLSession
:cette fonction reçoit une fermeture d'achèvement qui sera appelée lorsque la demande est terminée et retourne un
URLSessionDataTask
au cas où nous aurions besoin d'annuler la demande, et peut être appelée comme ceci:la source
LookupResult
etAppInfo
quelque part dans votre projet, dans un fichier séparé de préférence: Elles sont utilisées lorsque vous décodez la réponse:JSONDecoder().decode(LookupResult.self, from: data)
et elles contiennent la chaîne de versionMa proposition de code. Basé sur les réponses de @datinc et @ Mario-Hendricks
Vous devriez bien sûr remplacer
dlog_Error
par votre appel de fonction de journalisation.Ce type de structure de code devrait empêcher votre application de planter en cas d'erreur. Pour récupérer le
appStoreAppVersion
n'est pas impératif, et ne doit pas conduire à des erreurs fatales. Et pourtant, avec ce type de structure de code, votre erreur non fatale sera toujours enregistrée.la source
si vous souhaitez vérifier la version actuelle de votre application, utilisée ci-dessous un code simple:
la source