Telegram Group & Telegram Channel
Способы проверки доступности новой версии приложения в AppStore

У многих пользователей может быть выключена опция автообновления, но часто нам необходимо как-то сообщить, что наше приложение пора обновлять. Что делать?

Пол Пиелла делится двумя популярными способами в своей статье:

1. Использовать iTunes Lookup:
Вариант, который можно использовать не только для получения версии, но и для других параметров.

import Foundation

struct LookUpResponse: Decodable {
let results: [LookUpResult]

struct LookUpResult: Decodable {
let version: String
let minimumOsVersion: String
let trackViewUrl: URL
}
}

struct LatestAppStoreVersion {
let version: String
let minimumOsVersion: String
let upgradeURL: URL
}

final class LookUpAPI {
private let session: URLSession
private let jsonDecoder: JSONDecoder

init(session: URLSession = .shared, jsonDecoder: JSONDecoder = .init()) {
self.session = session
self.jsonDecoder = jsonDecoder
}

func getLatestAvailableVersion(for appID: String) async throws -> LatestAppStoreVersion? {
let url = URL(string: "https://itunes.apple.com/lookup?appId=\(appID)")!
let request = URLRequest(url: url)
let (data, _) = try await session.data(for: request)
let response = try jsonDecoder.decode(LookUpResponse.self, from: data)

print(response)

return response.results.first.map {
.init(version: $0.version,
minimumOsVersion: $0.minimumOsVersion,
upgradeURL: $0.trackViewUrl)
}
}
}


2. Использовать App Store Connect API

Можно использовать свою обёртку или использовать SDK, которую, например, я применил для Starly.

3. От себя бы я добавил, что весьма популярный способ — держать файл с обновлениями где-то ещё (или иметь собственное API для запроса актуальной версии в сторе).

4. Можно использовать ещё Firebase Remote Config (по сути повторение третьего способа, просто от Google).

После того, как мы получим данные приложения, сравнить новую версию можно с локальной:

extension LatestAppStoreVersion {
var shouldUpdate: Bool {
guard let currentVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else {
return false
}
let systemVersion = ProcessInfo().operatingSystemVersion
let versionString = "\(systemVersion.majorVersion).\(systemVersion.minorVersion).\(systemVersion.patchVersion)"

let isRemoteVersionHigherThanLocal = currentVersion.compare(self.version, options: .numeric) == .orderedAscending
let isSystemVersionAllowed = versionString.compare(self.minimumOsVersion, options: .numeric) == .orderedDescending

return isRemoteVersionHigherThanLocal && isSystemVersionAllowed
}
}


Если вы знаете другие способы (может быть, более элегантные), поделитесь, пожалуйста, в комментариях.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍10🔥62👏2👌1🏆1🎄1🆒1



tg-me.com/iosdev/1325
Create:
Last Update:

Способы проверки доступности новой версии приложения в AppStore

У многих пользователей может быть выключена опция автообновления, но часто нам необходимо как-то сообщить, что наше приложение пора обновлять. Что делать?

Пол Пиелла делится двумя популярными способами в своей статье:

1. Использовать iTunes Lookup:
Вариант, который можно использовать не только для получения версии, но и для других параметров.

import Foundation

struct LookUpResponse: Decodable {
let results: [LookUpResult]

struct LookUpResult: Decodable {
let version: String
let minimumOsVersion: String
let trackViewUrl: URL
}
}

struct LatestAppStoreVersion {
let version: String
let minimumOsVersion: String
let upgradeURL: URL
}

final class LookUpAPI {
private let session: URLSession
private let jsonDecoder: JSONDecoder

init(session: URLSession = .shared, jsonDecoder: JSONDecoder = .init()) {
self.session = session
self.jsonDecoder = jsonDecoder
}

func getLatestAvailableVersion(for appID: String) async throws -> LatestAppStoreVersion? {
let url = URL(string: "https://itunes.apple.com/lookup?appId=\(appID)")!
let request = URLRequest(url: url)
let (data, _) = try await session.data(for: request)
let response = try jsonDecoder.decode(LookUpResponse.self, from: data)

print(response)

return response.results.first.map {
.init(version: $0.version,
minimumOsVersion: $0.minimumOsVersion,
upgradeURL: $0.trackViewUrl)
}
}
}


2. Использовать App Store Connect API

Можно использовать свою обёртку или использовать SDK, которую, например, я применил для Starly.

3. От себя бы я добавил, что весьма популярный способ — держать файл с обновлениями где-то ещё (или иметь собственное API для запроса актуальной версии в сторе).

4. Можно использовать ещё Firebase Remote Config (по сути повторение третьего способа, просто от Google).

После того, как мы получим данные приложения, сравнить новую версию можно с локальной:

extension LatestAppStoreVersion {
var shouldUpdate: Bool {
guard let currentVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else {
return false
}
let systemVersion = ProcessInfo().operatingSystemVersion
let versionString = "\(systemVersion.majorVersion).\(systemVersion.minorVersion).\(systemVersion.patchVersion)"

let isRemoteVersionHigherThanLocal = currentVersion.compare(self.version, options: .numeric) == .orderedAscending
let isSystemVersionAllowed = versionString.compare(self.minimumOsVersion, options: .numeric) == .orderedDescending

return isRemoteVersionHigherThanLocal && isSystemVersionAllowed
}
}


Если вы знаете другие способы (может быть, более элегантные), поделитесь, пожалуйста, в комментариях.

😃 iOS Dev

BY iOS Dev


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/iosdev/1325

View MORE
Open in Telegram


telegram Telegram | DID YOU KNOW?

Date: |

At a time when the Indian stock market is peaking and has rallied immensely compared to global markets, there are companies that have not performed in the last 10 years. These are definitely a minor portion of the market considering there are hundreds of stocks that have turned multibagger since 2020. What went wrong with these stocks? Reasons vary from corporate governance, sectoral weakness, company specific and so on. But the more important question is, are these stocks worth buying?

The SSE was the first modern stock exchange to open in China, with trading commencing in 1990. It has now grown to become the largest stock exchange in Asia and the third-largest in the world by market capitalization, which stood at RMB 50.6 trillion (US$7.8 trillion) as of September 2021. Stocks (both A-shares and B-shares), bonds, funds, and derivatives are traded on the exchange. The SEE has two trading boards, the Main Board and the Science and Technology Innovation Board, the latter more commonly known as the STAR Market. The Main Board mainly hosts large, well-established Chinese companies and lists both A-shares and B-shares.

telegram from us


Telegram iOS Dev
FROM USA