Correction du Plugin Camera en Doublon pour Flutter macOS
Problème
Les builds Flutter macOS échouent quand les deux packages camera_macos et camera_macos_plus sont présents dans pubspec.yaml. Les deux packages définissent la même classe CameraMacosPlugin, provoquant une ambiguïté d'enregistrement Swift.
Contexte / Conditions de Déclenchement
Message d'erreur :
Ambiguous use of 'CameraMacosPlugin.register(with:)'
Symptômes :
- Le build macOS échoue lors de la compilation Swift
- Le build iOS peut réussir (implémentations de plugin différentes)
- L'erreur se produit dans le code de registration des plugins généré
- Peut être accompagnée de plantages du système de build Xcode ou d'erreurs « stat cache file not found »
Scénarios courants :
- Le projet a
camera_macospour le support de caméra basique - Ajout de
camera_macos_pluspour des fonctionnalités supplémentaires - Une dépendance transitive a apporté le plugin en doublon
- Copie de pubspec.yaml d'un autre projet avec des besoins de caméra différents
Solution
-
Identifier les doublons - Vérifier pubspec.yaml pour les deux packages :
# Chercher ceux-ci : camera_macos: ^0.0.9 camera_macos_plus: ^0.0.3 -
Choisir celui à conserver -
camera_macos_plusest généralement préféré car c'est un fork plus complet decamera_macos -
Supprimer le doublon de pubspec.yaml :
# Garder un seul : camera_macos_plus: ^0.0.3 # Suport de caméra macOS -
Nettoyer en profondeur - Le système de build Xcode peut être dans un état corrompu :
flutter clean rm -rf build/ rm -rf macos/Pods/ rm -f macos/Podfile.lock rm -rf ~/Library/Developer/Xcode/DerivedData/Runner-* flutter pub get -
Rebuilder :
flutter build macos
Vérification
Après la correction :
flutter build macosse termine avec succès- Aucune erreur « Ambiguous use » dans la sortie de build
- L'app macOS se lance et la fonctionnalité de caméra fonctionne
Exemple
Avant (cassé) :
dependencies:
camera_macos_plus: ^0.0.3
divine_camera:
path: packages/divine_camera
camera_macos: ^0.0.9 # DOUBLON - provoque un conflit
Après (corrigé) :
dependencies:
camera_macos_plus: ^0.0.3 # Support de caméra macOS (remplace camera_macos)
divine_camera:
path: packages/divine_camera
# camera_macos supprimé
Notes
camera_macos_plusest un fork communautaire avec des fonctionnalités supplémentaires- Si vous avez spécifiquement besoin de
camera_macos, supprimezcamera_macos_plus - Vérifier les dépendances transitives avec
flutter pub depssi les doublons réapparaissent - Le système de build Xcode peut se corrompre après cette erreur ; un nettoyage en profondeur (incluant DerivedData) peut être nécessaire
- C'est spécifique à macOS - iOS utilise des implémentations différentes du plugin camera