Я хотел бы вручную проверить, есть ли новые обновления для моего приложения, пока пользователь находится в нем, и предложить ему загрузить новую версию. Могу ли я сделать это, проверив версию своего приложения в магазине приложений - программно?
114
NSNumber
версии. Затем я загрузил его на свой сайт. Тот же веб-сайт, который я использую для поддержки своих приложений и веб-страниц приложений, затемviewDidLoad
проверяю номер версии на веб-сайте и проверяю текущую версию в своем приложении. Затем у меня есть готовый вариант,alertView
который автоматически предлагает обновить приложение. Я могу предоставить код, если хотите.Ответы:
Вот простой фрагмент кода, который позволяет узнать, отличается ли текущая версия
Примечание. Убедитесь, что при вводе новой версии в iTunes она соответствует версии в приложении, которое вы выпускаете. Если нет, то приведенный выше код всегда будет возвращать ДА, независимо от того, обновляет ли пользователь.
источник
Версия Swift 3:
Я думаю, лучше выдать ошибку вместо возврата false, в этом случае я создал VersionError, но это может быть какой-то другой, который вы определяете, или NSError
Также рассмотрите возможность вызова этой функции из другого потока, если соединение медленное, оно может заблокировать текущий поток.
Обновить
Использование URLSession:
Вместо использования
Data(contentsOf: url)
и блокировки потока мы можем использоватьURLSession
:пример:
источник
DispatchQueue.global()
дает вам фоновую очередь, данные загружаются в эту очередь и возвращаются в основную очередь только при загрузке данных.Спасибо Стиву Мозеру за его ссылку, вот мой код:
источник
/en/
подпутьем. После удаления всеПоскольку я столкнулся с той же проблемой, я нашел ответ, который дал Марио Хендрикс . Безусловно, когда я попытался применить его код в своем проекте, XCode пожаловался на проблемы с кастингом, сказав, что «MDLMaterialProperty не имеет элементов индекса». Его код пытался установить этот MDLMaterial ... как тип константы «lookupResult», что приводило к сбоям при приведении к «Int» каждый раз. Мое решение заключалось в том, чтобы предоставить NSDictionary аннотацию типа для моей переменной, чтобы было понятно, какое значение мне нужно. Благодаря этому я мог получить доступ к нужному мне значению «версия».
Замечания: для этого YOURBUNDLEID вы можете получить из своего проекта Xcode .... « Цели> Общие> Идентификация> Идентификатор пакета »
Итак, вот мой код с некоторыми упрощениями:
Все предложения по улучшению этого кода приветствуются!
источник
Просто используйте ATAppUpdater . Это 1 строка, потокобезопасный и быстрый. У него также есть методы делегата, если вы хотите отслеживать действия пользователя.
Вот пример:
Необязательные методы делегата:
источник
Упрощен отличный ответ, опубликованный в этой теме. Использование
Swift 4
иAlamofire
.А потом использовать:
источник
{ "resultCount":0, "results": [] }
Обновлен код Swift 4 от Анупа Гупты.
Я внес некоторые изменения в этот код . Теперь функции вызываются из фоновой очереди, поскольку соединение может быть медленным и, следовательно, блокировать основной поток.
Я также сделал CFBundleName необязательным, поскольку в представленной версии было CFBundleDisplayName, которое, вероятно, не работало в моей версии. Итак, теперь, если его нет, он не выйдет из строя, а просто не отобразит имя приложения в предупреждении.
Я призываю также добавить кнопку подтверждения:
Или вызовите его, чтобы он назывался так, чтобы включить параметр принудительного обновления:
источник
Вот моя версия с использованием Swift 4 и популярной библиотеки Alamofire (я все равно использую ее в своих приложениях). Запрос является асинхронным, и вы можете передать обратный вызов, чтобы получить уведомление, когда он будет выполнен.
Простое использование:
источник
Могу я предложить эту небольшую библиотеку: https://github.com/nicklockwood/iVersion
Его цель - упростить обработку удаленных списков для запуска уведомлений.
источник
источник
URLSession
.Этот ответ является модификацией ответа datinc https://stackoverflow.com/a/25210143/2735358 .
Функция datinc сравнивает версию путем сравнения строк. Таким образом, он не будет сравнивать версию больше или меньше чем.
Но эта модифицированная функция сравнивает версию по NSNumericSearch (числовое сравнение) .
Использование:
источник
Я видел много способов проверить обновление приложения. поэтому на основе многих ответов я смешиваю их и создаю свое решение, которое доступно на GitHub. Если требуется какое- либо обновление, дайте мне знать. Этот код для Swift 4
Ссылка GitHub на этот код. https://github.com/anupgupta-arg/iOS-Swift-ArgAppUpdater
Ссылка: https://stackoverflow.com/a/48810541/5855888 И https://github.com/emotality/ATAppUpdater
Счастливого кодирования 👍 😊
источник
ДЛЯ SWIFT 4 и 3.2:
Во-первых, нам нужно получить идентификатор пакета из словаря информации о пакете, установить isUpdaet как false.
Затем нам нужно вызвать вызов urlSession для получения версии из itunes.
ПОЛНЫЙ КОД БУДЕТ ТАК КАК ЭТО:
Затем мы можем вызвать функцию из любого нужного нам программного обеспечения.
источник
Попробуйте это с помощью одного вызова функции:
Функция оповещения для открытия URL-адреса AppStore:
Как вызвать указанную выше функцию:
Для более подробной информации попробуйте ссылку ниже с полным кодом:
AppStoreUpdate.swift
ItunesAppInfoResult.swift
ItunesAppInfoItunes.swift
Надеюсь, это поможет!
источник
Вот быстрый метод, который делает то, что предлагают некоторые ответы Objective-C. Очевидно, что как только вы получите информацию из JSON магазина приложений, вы можете извлечь примечания к выпуску, если хотите.
источник
Если вы не устанавливаете тип контента в NSUrlRequest, тогда вы наверняка не получите ответа, поэтому попробуйте приведенный ниже код, он отлично работает для меня. Надеюсь, поможет....
источник
Исходя из гибридного приложения POV, это пример javascript, у меня есть нижний колонтитул для обновления в моем главном меню. Если доступно обновление (т. Е. Номер моей версии в файле конфигурации меньше, чем полученная версия, отобразить нижний колонтитул), это направит пользователя в магазин приложений, где пользователь затем может нажать кнопку обновления.
Я также получаю новые данные (например, примечания к выпуску) и отображаю их в модальном окне при входе в систему, если это первый раз в этой версии.
Метод «Доступно обновление» можно запускать сколь угодно часто. Мой запускается каждый раз, когда пользователь переходит на главный экран.
Обратный вызов: у Apple есть API, поэтому его очень легко получить
источник
Предупреждение: большинство приведенных ответов извлекают URL-адрес синхронно (с использованием
-dataWithContentsOfURL:
или-sendSynchronousRequest:
. Это плохо, поскольку это означает, что ваше приложение не будет отвечать в течение нескольких минут, если мобильное соединение разорвется во время выполнения запроса. Никогда не выполняйте синхронный доступ к Интернету на основной поток.Правильный ответ - использовать асинхронный API:
Тайм-аут по умолчанию для сетевых подключений составляет несколько минут, и даже если запрос проходит, он может быть достаточно медленным из-за плохого EDGE-подключения, чтобы занять столько времени. В этом случае вы не хотите, чтобы ваше приложение было непригодным для использования. Чтобы протестировать подобные вещи, полезно запустить сетевой код с помощью Apple Network Link Conditioner.
источник
для сравнения строки версии:
https://github.com/eure/AppVersionMonitor
источник
Swift 4
Мы можем использовать новое
JSONDecoder
для синтаксического анализа ответа с itunes.apple.com/lookup и представления его с помощью классов или структур Decodable:Мы также можем добавить другие свойства,
AppInfo
если нам понадобится этоreleaseNotes
или какое-то другое свойство.Теперь мы можем сделать асинхронный запрос, используя
URLSession
:эта функция получает завершение завершения, которое будет вызываться, когда запрос будет завершено, и возвращает
URLSessionDataTask
в случае, если нам нужно отменить запрос, и может вызываться следующим образом:источник
LookupResult
иAppInfo
классы где - то в проекте, в отдельном файле , предпочтительно: Они используются , когда вы расшифровать ответ:JSONDecoder().decode(LookupResult.self, from: data)
они содержат строку версииЭквивалент @datinc в C # в том, что касается получения версии Apple App Store. Включенный код для получения версии как для пакета, так и для файла AssemblyInfo.
РЕДАКТИРОВАТЬ :: Обратите внимание на регион "/ us /", включенный в urlString. Этот код страны необходимо будет обработать / изменить соответствующим образом.
источник
Этот вопрос был задан в 2011 году, я нашел его в 2018 году, когда искал способ не только проверить новую версию приложения в App Store, но и уведомить об этом пользователя.
После небольшого исследования я пришел к выводу, что ответ juanjo (связанный со Swift 3) https://stackoverflow.com/a/40939740/1218405 является оптимальным решением, если вы хотите сделать это в коде самостоятельно.
Также могу предложить два отличных проекта на GitHub (2300+ звезд каждый)
Пример для сирены (AppDelegate.swift)
источник
Мое предложение кода. На основе ответов @datinc и @ Mario-Hendricks
Вы, конечно, должны заменить
dlog_Error
вызовом функции ведения журнала.Такая структура кода должна предотвратить сбой вашего приложения в случае ошибки. Получение файла
appStoreAppVersion
не является обязательным и не должно приводить к фатальным ошибкам. И все же с такой структурой кода вы все равно будете регистрировать нефатальную ошибку.источник
если вы хотите проверить текущую версию своего приложения, используйте простой код ниже:
источник