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 |
| 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.ymldisabled_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.ymlexcluded:
- Pods
- Sources/DesignSystem/Theme.swift # Définitions de couleurs