72 lines
3.6 KiB
Swift
72 lines
3.6 KiB
Swift
import Foundation
|
||
|
||
/// Desktop parity: version constants and release notes.
|
||
/// Desktop equivalent: `app/version.ts` — `APP_VERSION`, `RELEASE_NOTICE`.
|
||
enum ReleaseNotes {
|
||
|
||
/// Current release notes entries, newest first.
|
||
/// Each entry contains a version string and either a `body` (free-form markdown)
|
||
/// or a `changes` list (auto-formatted as bullets).
|
||
static let entries: [Entry] = [
|
||
Entry(
|
||
version: appVersion,
|
||
body: """
|
||
**Синхронизация**
|
||
- Исправлена критическая ошибка, из-за которой синхронизация могла не запускаться после подключения к серверу
|
||
- Исправлена ошибка с курсором синхронизации — теперь курсор передаётся без преобразования, как в Desktop
|
||
- Исправлены ложные непрочитанные сообщения после синхронизации
|
||
|
||
**Мульти-девайс**
|
||
- Сообщения с другого устройства того же аккаунта теперь корректно показываются со статусом «доставлено»
|
||
|
||
**UI (iOS 26)**
|
||
- Исправлен баг с размытием экрана чата при скролле
|
||
|
||
**Swipe-to-Reply** — свайп влево по сообщению для ответа, как в Telegram
|
||
**Reply Quote** — обновлённый дизайн цитаты ответа. Если ответ на фото — миниатюра из BlurHash
|
||
**Навигация по цитате** — тап на цитату скроллит к оригиналу с плавной подсветкой
|
||
**Коллаж фотографий** — несколько фото в сообщении отображаются в сетке в стиле Telegram
|
||
**Рамка вокруг фото** — фото обрамлены цветом пузырька с точным совпадением углов
|
||
**Просмотр фото** — полноэкранный просмотрщик с зумом, перетаскиванием и свайпом вниз для закрытия
|
||
"""
|
||
)
|
||
]
|
||
|
||
/// Current app version from bundle (matches desktop `APP_VERSION`).
|
||
static var appVersion: String {
|
||
Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "1.0.0"
|
||
}
|
||
|
||
/// Current build number from bundle.
|
||
static var buildNumber: String {
|
||
Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "1"
|
||
}
|
||
|
||
/// Formatted release notice text for the current version (desktop parity: `RELEASE_NOTICE`).
|
||
/// Sent as a system message from the "Rosetta Updates" account.
|
||
static var releaseNoticeText: String {
|
||
guard let latest = entries.first else { return "" }
|
||
|
||
if let body = latest.body {
|
||
return "**Update v\(latest.version)**\n\n\(body)"
|
||
}
|
||
|
||
// Fallback: auto-format from changes array.
|
||
var lines = ["**Update v\(latest.version)**"]
|
||
for change in latest.changes {
|
||
lines.append("- \(change)")
|
||
}
|
||
return lines.joined(separator: "\n")
|
||
}
|
||
|
||
// MARK: - Entry
|
||
|
||
struct Entry: Identifiable {
|
||
let version: String
|
||
var changes: [String] = []
|
||
var body: String? = nil
|
||
|
||
var id: String { version }
|
||
}
|
||
}
|