AProposScreen.swift 85 lignes · 3565 octets
import SwiftUI

/// Écran « À propos » accessible depuis les Réglages.
/// Version et nom lus depuis le bundle (jamais en dur).
struct AProposScreen: View {
    let onBack: () -> Void

    private var appVersion: String {
        Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "—"
    }

    private var appName: String {
        Bundle.main.infoDictionary?["CFBundleDisplayName"] as? String
            ?? Bundle.main.infoDictionary?["CFBundleName"] as? String
            ?? "PicLead"
    }

    var body: some View {
        VStack(spacing: 0) {
            ScreenTopBar(title: "À propos", onBack: onBack)
            ScrollView {
                VStack(alignment: .leading, spacing: 20) {

                    // Nom + version
                    VStack(alignment: .leading, spacing: 4) {
                        Text(appName)
                            .font(C2VFont.titleMedium)
                            .foregroundColor(C2VColor.encre)
                        Text("Version \(appVersion)")
                            .font(C2VFont.bodyMedium)
                            .foregroundColor(C2VColor.texteFaible)
                    }

                    C2VDivider()

                    // Éditeur
                    VStack(alignment: .leading, spacing: 4) {
                        Text("Éditeur")
                            .font(C2VFont.labelMedium)
                            .foregroundColor(C2VColor.texteFaible)
                        Text("Eric Bouhana Ingénierie Informatique (ebii)")
                            .font(C2VFont.bodyLarge)
                            .foregroundColor(C2VColor.ink)
                        Button("https://www.ebii.fr/fr/editions/piclead") {
                            ExternalLinks.web("https://www.ebii.fr/fr/editions/piclead")
                        }
                        .buttonStyle(.plain)
                        .font(C2VFont.bodyMedium)
                        .foregroundColor(C2VColor.link)
                        Button("contact@ebii.fr") {
                            ExternalLinks.email("contact@ebii.fr")
                        }
                        .buttonStyle(.plain)
                        .font(C2VFont.bodyMedium)
                        .foregroundColor(C2VColor.link)
                    }

                    C2VDivider()

                    // Licence
                    VStack(alignment: .leading, spacing: 4) {
                        Text("Licence")
                            .font(C2VFont.labelMedium)
                            .foregroundColor(C2VColor.texteFaible)
                        Text("GNU Affero General Public License v3 (AGPL-3.0)")
                            .font(C2VFont.bodyLarge)
                            .foregroundColor(C2VColor.ink)
                        Text(
                            "Ce logiciel est un logiciel libre distribué selon les termes de la "
                            + "licence GNU AGPL v3. Vous pouvez le redistribuer et/ou le modifier "
                            + "sous les conditions définies par la Free Software Foundation."
                        )
                        .font(C2VFont.bodyMedium)
                        .foregroundColor(C2VColor.texteFaible)
                    }
                }
                .frame(maxWidth: .infinity, alignment: .leading)
                .padding(18)
            }
        }
        .frame(maxHeight: .infinity, alignment: .top)
        .background(C2VColor.fond)
        .toolbar(.hidden, for: .navigationBar)
    }
}