ffmpeg-kit-macos-codesign-crash

Par divinevideo · divine-mobile

Correction du crash au lancement d'une app Flutter macOS causé par un échec de chargement de la bibliothèque FFmpeg Kit. À utiliser dans les cas suivants : (1) L'app macOS compile correctement mais plante immédiatement au lancement, (2) Le journal de crash indique "Library not loaded: libfontconfig.1.dylib" ou une bibliothèque homebrew similaire, (3) L'erreur mentionne "code signature not valid for use in process" avec "different Team IDs", (4) Utilisation de ffmpeg_kit_flutter_new (variante Full GPL). La variante Full GPL a des dépendances externes sur des bibliothèques homebrew qui échouent à la signature de code macOS. Passer à ffmpeg_kit_flutter_new_min.

npx skills add https://github.com/divinevideo/divine-mobile --skill ffmpeg-kit-macos-codesign-crash

FFmpeg Kit macOS Crash de Signature de Code

Problème

Une app Flutter macOS se compile avec succès mais crash immédiatement au lancement avec une erreur de chargement de bibliothèque. Le crash est causé par la variante Full GPL de FFmpeg Kit qui a des dépendances à l'exécution sur des bibliothèques installées via homebrew (comme fontconfig) qui échouent la validation de signature de code macOS.

Contexte / Conditions de Déclenchement

  • Plateforme : macOS uniquement (iOS et Android ne sont pas affectés)
  • Package : Utilisation de ffmpeg_kit_flutter_new (variante Full GPL)
  • Symptôme : L'app se compile avec succès mais crash au lancement
  • Le log de crash montre :
    Library not loaded: /opt/homebrew/*/libfontconfig.1.dylib
    Referenced from: .../libswresample.framework/...
    Reason: code signature in (.../libfontconfig.1.dylib) not valid for use in process:
    mapping process and mapped file (non-platform) have different Team IDs

Cause Racine

Le package ffmpeg_kit_flutter_new est la variante « Full GPL » qui inclut de nombreuses bibliothèques FFmpeg pour des fonctionnalités avancées comme le rendu de texte (filtre drawtext). Ces bibliothèques ont des dépendances externes sur les polices système via libfontconfig.

Sur macOS, quand l'app tente de charger libswresample.framework, elle essaie aussi de charger libfontconfig.1.dylib depuis homebrew. La validation de signature de code macOS rejette ceci car la bibliothèque homebrew a un Team ID différent de celui de votre app.

Solution

Basculez de ffmpeg_kit_flutter_new (Full GPL) à ffmpeg_kit_flutter_new_min (Minimal).

Étape 1 : Mettre à jour pubspec.yaml

# Avant
ffmpeg_kit_flutter_new: ^3.2.0

# Après
ffmpeg_kit_flutter_new_min: ^3.1.0

Étape 2 : Mettre à jour les imports dans tous les fichiers Dart

// Avant
import 'package:ffmpeg_kit_flutter_new/ffmpeg_kit.dart';
import 'package:ffmpeg_kit_flutter_new/ffprobe_kit.dart';
import 'package:ffmpeg_kit_flutter_new/return_code.dart';

// Après
import 'package:ffmpeg_kit_flutter_new_min/ffmpeg_kit.dart';
import 'package:ffmpeg_kit_flutter_new_min/ffprobe_kit.dart';
import 'package:ffmpeg_kit_flutter_new_min/return_code.dart';

Étape 3 : Nettoyer et recompiler

flutter clean
rm -f macos/Podfile.lock
flutter pub get
flutter run -d macos

Fonctionnalités Conservées

La variante minimale inclut tout ce qui est nécessaire pour les apps vidéo typiques :

  • h264/libx264 encodage vidéo
  • AAC encodage audio
  • VideoToolbox accélération matérielle (plateformes Apple)
  • Filtres standard : overlay, crop, scale, concat, amix
  • FFprobe pour l'information médias

Fonctionnalités Supprimées

La variante minimale n'inclut PAS :

  • Filtre drawtext (rendu de police) - utilisez des overlays PNG à la place
  • Bibliothèques de codecs avancées avec dépendances externes
  • Fonctionnalités nécessitant fontconfig, freetype, etc.

Vérification

Après le correctif :

  1. flutter run -d macos devrait lancer l'app sans crash
  2. Les opérations d'encodage/décodage vidéo devraient fonctionner normalement
  3. Les builds iOS continuent de fonctionner (elles n'étaient pas affectées)

Exemple

Trouver les fichiers nécessitant des mises à jour d'imports :

grep -r "ffmpeg_kit_flutter_new" lib/ --include="*.dart" -l

Mettre à jour tous les imports (exemple sed) :

find lib -name "*.dart" -exec sed -i '' \
  's/ffmpeg_kit_flutter_new/ffmpeg_kit_flutter_new_min/g' {} \;

Notes

  • Ce problème n'affecte que macOS ; iOS et Android n'ont pas les mêmes restrictions de signature de code
  • Le message d'erreur est trompeur - il mentionne fontconfig mais le correctif est de changer les variantes de FFmpeg Kit
  • Si vous avez vraiment besoin du filtre drawtext sur macOS, vous devriez bundler fontconfig avec une signature correcte (complexe)
  • Alternative : Utilisez le ffmpeg_kit_flutter officiel d'arthenica si vous avez besoin de plus de contrôle sur les variantes

Références

Skills similaires