Aller au contenu

SwiftLint — iOS

Configuration

Le fichier .swiftlint.yml contient 17 règles custom ciblant les violations d'accessibilité SwiftUI les plus fréquentes.

Installation

brew install swiftlint
cp mobile-ally-framework/linting/swiftlint/.swiftlint.yml ./MonProjetIOS/

Intégration Xcode

Build Phases → + → New Run Script Phase :

if which swiftlint > /dev/null; then
  swiftlint --config .swiftlint.yml
fi

Règles par skill

SKILL-01 — Éléments Graphiques

ID Règle Sévérité Description
a11y_image_systemname_no_a11y Error Image(systemName:) sans .accessibilityHidden ni .accessibilityLabel
a11y_label_redundant_prefix Warning Label commençant par "image de", "icône de"
a11y_image_name_as_label Error Nom de fichier utilisé comme label (ex: "hero_banner.png")

SKILL-02 — Couleurs et Contrastes

ID Règle Sévérité Description
a11y_hardcoded_hex_color Warning Color(hex: "#...") hardcodé
a11y_hardcoded_rgb_color Warning Color(red:green:blue:) hardcodé
a11y_color_only_status Warning .foregroundStyle(.red/.green) sans icône/texte

SKILL-03 — Adaptation

ID Règle Sévérité Description
a11y_fixed_font_size Warning .font(.system(size: N)) taille fixe
a11y_fixed_frame_height_in_list Warning .frame(height: N) fixe dans une liste

SKILL-05 — Composants Interactifs

ID Règle Sévérité Description
a11y_tap_gesture_no_accessibility Warning .onTapGesture sans sémantique
a11y_button_image_only_no_label Warning Button { Image(...) } sans label
a11y_empty_accessibility_label Error .accessibilityLabel("") vide
a11y_accessibility_value_missing_context Warning .accessibilityValue sans .accessibilityLabel

SKILL-09 — Formulaires

ID Règle Sévérité Description
a11y_textfield_placeholder_only Warning TextField avec placeholder uniquement
a11y_securefield_no_label Warning SecureField sans label
a11y_error_text_missing_announcement Warning Erreur sans annonce VoiceOver

SKILL-10 — Navigation

ID Règle Sévérité Description
a11y_modal_without_is_modal Warning Modale sans .accessibilityAddTraits(.isModal)

SKILL-11 — Consultation

ID Règle Sévérité Description
a11y_small_touch_target Warning Zone de touche < 44pt

Personnaliser

Désactiver une règle globalement

.swiftlint.yml
disabled_rules:
  - a11y_fixed_frame_height_in_list

Désactiver dans un fichier

// swiftlint:disable a11y_hardcoded_hex_color
let brandColor = Color(hex: "#FF6B35") // Couleur de marque
// swiftlint:enable a11y_hardcoded_hex_color

Exclure des dossiers

.swiftlint.yml
excluded:
  - Pods
  - Sources/DesignSystem/Theme.swift  # Définitions de couleurs