From 83b5260bc1de3772ffde24c65942778aaf01056d Mon Sep 17 00:00:00 2001 From: Sylvain Bettinelli Date: Fri, 8 May 2026 10:05:06 +0000 Subject: [PATCH] Plugin discovery : MainViewController sous-classe CAPBridgeViewController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Capacitor 8 n'auto-découvre pas les plugins in-app Swift (qui ne sont pas des npm packages). Les plugins définis dans le target App doivent être enregistrés manuellement via une sous-classe de CAPBridgeViewController qui override capacitorDidLoad(). Ajouts : - ios/App/App/MainViewController.swift : sous-classe qui registers CoachWorkoutKitPlugin() dans capacitorDidLoad() - Main.storyboard : customClass pointe sur MainViewController (module 'App' target) au lieu de CAPBridgeViewController (module Capacitor) - project.pbxproj : 4 entrées pour MainViewController.swift (BuildFile, FileReference, group, Sources phase) Après rebuild, Capacitor.Plugins.CoachWorkoutKit sera dispo en JS. --- ios/App/App.xcodeproj/project.pbxproj | 4 ++++ ios/App/App/Base.lproj/Main.storyboard | 2 +- ios/App/App/MainViewController.swift | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 ios/App/App/MainViewController.swift diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index 7a67dcd..a9aac9b 100644 --- a/ios/App/App.xcodeproj/project.pbxproj +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ 504EC3081FED79650016851F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504EC3071FED79650016851F /* AppDelegate.swift */; }; C0AC4A07811751FB78AA0001 /* CoachAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0AC4A07811751FB78AA0002 /* CoachAuth.swift */; }; D1BD5B1990CF3F2B9C5D0001 /* CoachWorkoutKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1BD5B1990CF3F2B9C5D0002 /* CoachWorkoutKit.swift */; }; + E2CE6C2AA1DF4F3CAD6E0001 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2CE6C2AA1DF4F3CAD6E0002 /* MainViewController.swift */; }; 504EC30D1FED79650016851F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30B1FED79650016851F /* Main.storyboard */; }; 504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; }; 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; }; @@ -26,6 +27,7 @@ 504EC3071FED79650016851F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; C0AC4A07811751FB78AA0002 /* CoachAuth.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoachAuth.swift; sourceTree = ""; }; D1BD5B1990CF3F2B9C5D0002 /* CoachWorkoutKit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoachWorkoutKit.swift; sourceTree = ""; }; + E2CE6C2AA1DF4F3CAD6E0002 /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; }; 504EC30C1FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 504EC30E1FED79650016851F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; @@ -72,6 +74,7 @@ 504EC3071FED79650016851F /* AppDelegate.swift */, C0AC4A07811751FB78AA0002 /* CoachAuth.swift */, D1BD5B1990CF3F2B9C5D0002 /* CoachWorkoutKit.swift */, + E2CE6C2AA1DF4F3CAD6E0002 /* MainViewController.swift */, 504EC30B1FED79650016851F /* Main.storyboard */, 504EC30E1FED79650016851F /* Assets.xcassets */, 504EC3101FED79650016851F /* LaunchScreen.storyboard */, @@ -166,6 +169,7 @@ 504EC3081FED79650016851F /* AppDelegate.swift in Sources */, C0AC4A07811751FB78AA0001 /* CoachAuth.swift in Sources */, D1BD5B1990CF3F2B9C5D0001 /* CoachWorkoutKit.swift in Sources */, + E2CE6C2AA1DF4F3CAD6E0001 /* MainViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/App/App/Base.lproj/Main.storyboard b/ios/App/App/Base.lproj/Main.storyboard index b44df7b..b09af01 100644 --- a/ios/App/App/Base.lproj/Main.storyboard +++ b/ios/App/App/Base.lproj/Main.storyboard @@ -11,7 +11,7 @@ - + diff --git a/ios/App/App/MainViewController.swift b/ios/App/App/MainViewController.swift new file mode 100644 index 0000000..123c950 --- /dev/null +++ b/ios/App/App/MainViewController.swift @@ -0,0 +1,16 @@ +// MainViewController.swift +// Sous-classe de CAPBridgeViewController pour enregistrer manuellement les +// plugins Capacitor in-app (i.e. plugins définis directement dans le target +// App, pas en npm package). Capacitor 8 n'auto-découvre pas ces plugins, +// faut les registrer ici dans capacitorDidLoad(). + +import UIKit +import Capacitor + +class MainViewController: CAPBridgeViewController { + override func capacitorDidLoad() { + // Plugin natif WorkoutKit — pousse des workouts intervalles vers + // l'Apple Watch (cf. CoachWorkoutKit.swift). + bridge?.registerPluginInstance(CoachWorkoutKitPlugin()) + } +}