IOSDEV Telegram 1325
Способы проверки доступности новой версии приложения в 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



tgoop.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


Share with your friend now:
tgoop.com/iosdev/1325

View MORE
Open in Telegram


Telegram News

Date: |

3How to create a Telegram channel? In handing down the sentence yesterday, deputy judge Peter Hui Shiu-keung of the district court said that even if Ng did not post the messages, he cannot shirk responsibility as the owner and administrator of such a big group for allowing these messages that incite illegal behaviors to exist. Members can post their voice notes of themselves screaming. Interestingly, the group doesn’t allow to post anything else which might lead to an instant ban. As of now, there are more than 330 members in the group. Hui said the messages, which included urging the disruption of airport operations, were attempts to incite followers to make use of poisonous, corrosive or flammable substances to vandalize police vehicles, and also called on others to make weapons to harm police. Hashtags are a fast way to find the correct information on social media. To put your content out there, be sure to add hashtags to each post. We have two intelligent tips to give you:
from us


Telegram iOS Dev
FROM American