Me gustaría verificar manualmente si hay nuevas actualizaciones para mi aplicación mientras el usuario está en ella y pedirle que descargue la nueva versión. ¿Puedo hacer esto comprobando la versión de mi aplicación en la tienda de aplicaciones, mediante programación?
112
NSNumber
número de versión. Luego lo subí a mi sitio web. El mismo sitio web que utilizo para el soporte de mi aplicación y las páginas web de la aplicación, luego enviewDidLoad
, reviso el sitio web para ver el número de versión allí y verifico la versión actual en mi aplicación. Luego tengo un prefabricadoalertView
que solicita automáticamente actualizar la aplicación. Puedo proporcionar el código si lo desea.Respuestas:
Aquí hay un fragmento de código simple que le permite saber si la versión actual es diferente
Nota: asegúrese de que cuando ingrese la nueva versión en iTunes, esta coincida con la versión de la aplicación que está lanzando. De lo contrario, el código anterior siempre devolverá SÍ independientemente de si el usuario actualiza.
fuente
Versión Swift 3:
Creo que es mejor lanzar un error en lugar de devolver falso, en este caso creé un VersionError pero puede ser otro que defina o NSError
También considere llamar a esta función desde otro hilo, si la conexión es lenta, puede bloquear el hilo actual.
Actualizar
Usando URLSession:
En lugar de usar
Data(contentsOf: url)
y bloquear un hilo, podemos usarURLSession
:ejemplo:
fuente
DispatchQueue.global()
le da una cola en segundo plano, los datos se cargan en esa cola y solo vuelven a la cola principal cuando se cargan los datos.Gracias a Steve Moser por su enlace, aquí está mi código:
fuente
/en/
subruta. Después de quitarlo, funcionóComo estaba enfrentando el mismo problema, encontré la respuesta proporcionada por Mario Hendricks . Lamentablemente, cuando intenté aplicar su código en mi proyecto, XCode se quejó de los problemas de Casting diciendo "MDLMaterialProperty no tiene miembros de subíndice". Su código intentaba establecer este MDLMaterial ... como el tipo de "lookupResult" constante, haciendo que la conversión a "Int" fallara cada vez. Mi solución fue proporcionar una anotación de tipo para mi variable en NSDictionary para tener claro el tipo de valor que necesitaba. Con eso, pude acceder al valor "versión" que necesitaba.
Obs: Para este YOURBUNDLEID , puede obtenerlo de su proyecto Xcode ... " Objetivos> General> Identidad> Identificador de paquete "
Así que aquí está mi código con algunas simplificaciones también:
¡Todas las sugerencias para mejorar este código son bienvenidas!
fuente
Simplemente use ATAppUpdater . Es de 1 línea, seguro para subprocesos y rápido. También tiene métodos delegados si desea realizar un seguimiento de la acción del usuario.
Aquí hay un ejemplo:
Métodos de delegado opcionales:
fuente
Simplificado una gran respuesta publicada en este hilo. Usando
Swift 4
yAlamofire
.Y luego para usarlo:
fuente
{ "resultCount":0, "results": [] }
Se actualizó el código swift 4 de Anup Gupta
He realizado algunas modificaciones en este código . Ahora las funciones se llaman desde una cola en segundo plano, ya que la conexión puede ser lenta y por tanto bloquear el hilo principal.
También hice que CFBundleName sea opcional, ya que la versión presentada tenía "CFBundleDisplayName" que probablemente no funcionó en mi versión. Entonces, si no está presente, no se bloqueará, pero no mostrará el nombre de la aplicación en la alerta.
Hago esta llamada para agregar también el botón de confirmación:
O llámelo para que se llame así para tener la opción de forzar actualización en:
fuente
Aquí está mi versión que usa Swift 4 y la popular biblioteca Alamofire (de todos modos la uso en mis aplicaciones). La solicitud es asincrónica y puede pasar una devolución de llamada para recibir una notificación cuando haya terminado.
El uso es tan simple como esto:
fuente
¿Puedo sugerir esta pequeña biblioteca: https://github.com/nicklockwood/iVersion
Su propósito es simplificar el manejo de plists remotas para activar notificaciones.
fuente
fuente
URLSession
.Esta respuesta es una modificación de la respuesta de datinc https://stackoverflow.com/a/25210143/2735358 .
La función de datinc compara versión por comparación de cadena. Por lo tanto, no comparará la versión por mayor o menor que.
Pero esta función modificada compara la versión por NSNumericSearch (comparación numérica) .
Utilizar:
fuente
Vi muchas formas de verificar la actualización de la aplicación. así que en base a muchas respuestas, las mezclo y creo mi solución que está disponible en GitHub. Si se requiere alguna actualización, hágamelo saber. Este código para Swift 4
Enlace de GitHub a este código. https://github.com/anupgupta-arg/iOS-Swift-ArgAppUpdater
Refrence: https://stackoverflow.com/a/48810541/5855888 y https://github.com/emotality/ATAppUpdater
Codificación feliz 👍 😊
fuente
Intente esto con una sola llamada de función:
Función de alerta para abrir la URL de la AppStore:
Cómo llamar a la función anterior:
Para obtener más detalles, pruebe el siguiente enlace con el código completo:
AppStoreUpdate.swift
ItunesAppInfoResult.swift
ItunesAppInfoItunes.swift
¡Espero que esto ayude!
fuente
Aquí hay un método rápido que hace lo que sugieren algunas de las respuestas de Objective-C. Obviamente, una vez que obtenga la información de la tienda de aplicaciones JSON, puede extraer las notas de la versión, si las desea.
fuente
Si no está configurando el tipo de contenido en NSUrlRequest, entonces seguro que no obtendrá respuesta, así que pruebe el siguiente código, funciona bien para mí. Espero eso ayude....
fuente
Viniendo de un punto de vista de aplicación híbrida, este es un ejemplo de javascript, tengo un pie de página de actualización disponible en mi menú principal. Si hay una actualización disponible (es decir, mi número de versión dentro del archivo de configuración es menor que la versión recuperada, muestre el pie de página) Esto dirigirá al usuario a la tienda de aplicaciones, donde el usuario puede hacer clic en el botón actualizar.
También obtengo los datos nuevos (es decir, notas de la versión) y los muestro en un modal al iniciar sesión si es la primera vez en esta versión.
El método Actualizar disponible se puede ejecutar con la frecuencia que desee. El mío se ejecuta cada vez que el usuario navega a la pantalla de inicio.
Devolución de llamada: Apple tiene una API, por lo que es muy fácil de obtener
fuente
Advertencia: la mayoría de las respuestas dadas recuperan la URL sincrónicamente (usando
-dataWithContentsOfURL:
o-sendSynchronousRequest:
. Esto es malo, ya que significa que su aplicación no responderá durante varios minutos si la conexión móvil se cae mientras la solicitud está en curso. Nunca acceda a Internet sincrónicamente en el Hilo principal.La respuesta correcta es usar API asincrónica:
El tiempo de espera predeterminado para las conexiones de red es de varios minutos, e incluso si la solicitud se realiza, puede ser lo suficientemente lento en una conexión EDGE defectuosa como para tardar tanto. En ese caso, no desea que su aplicación quede inutilizable. Para probar cosas como esta, es útil ejecutar su código de red con Network Link Conditioner de Apple.
fuente
para comparar la cadena de versión:
https://github.com/eure/AppVersionMonitor
fuente
PARA SWIFT 4 y 3.2:
Primero, necesitamos obtener el ID del paquete del diccionario de información del paquete, establecer isUpdaet como falso.
Luego, debemos llamar a una llamada urlSession para obtener la versión de itunes.
EL CÓDIGO COMPLETO SERÁ ASÍ:
Entonces podemos llamar a la función cuando necesitemos.
fuente
Equivalencia C # de @datinc, en cuanto a obtener la versión de la App Store de Apple. Código incluido para obtener la versión del paquete o del archivo AssemblyInfo.
EDITAR :: Tenga en cuenta la región, "/ us /", incluida en urlString. Este código de país deberá manipularse / cambiarse en consecuencia.
fuente
Esta pregunta se hizo en 2011, la encontré en 2018 mientras buscaba alguna forma no solo para verificar la nueva versión de la aplicación en la App Store, sino también para notificar al usuario al respecto.
Después de una pequeña investigación, llegué a la conclusión de que la respuesta de juanjo (relacionada con Swift 3) https://stackoverflow.com/a/40939740/1218405 es la solución óptima si quieres hacer esto en código por ti mismo
También puedo sugerir dos grandes proyectos en GitHub (más de 2300 estrellas cada uno)
Ejemplo de Siren (AppDelegate.swift)
fuente
Rápido 4
Podemos usar el nuevo
JSONDecoder
para analizar la respuesta de itunes.apple.com/lookup y representarla con clases o estructuras decodificables:También podemos agregar otras propiedades
AppInfo
en caso de que necesitemos elreleaseNotes
o alguna otra propiedad.Ahora podemos hacer una solicitud asincrónica usando
URLSession
:esta función recibe un cierre de finalización que se llamará cuando se complete la solicitud y devuelve un
URLSessionDataTask
en caso de que necesitemos cancelar la solicitud, y se puede llamar así:fuente
LookupResult
yAppInfo
en algún lugar de tu proyecto, preferiblemente en un archivo separado: se usan cuando decodificas la respuesta:JSONDecoder().decode(LookupResult.self, from: data)
y contienen la cadena de versiónMi propuesta de código. Basado en las respuestas de @datinc y @ Mario-Hendricks
Por supuesto, debe reemplazarlo
dlog_Error
con su llamada de función de registro.Este tipo de estructura de código debería evitar que su aplicación se bloquee en caso de error. Para obtener el
appStoreAppVersion
no es imperativo y no debe conducir a errores fatales. Y, sin embargo, con este tipo de estructura de código, seguirá registrando su error no fatal.fuente
si desea verificar la versión actual de su aplicación, use el siguiente código simple:
fuente