From 750dc46d7c5c67ef7c8a5a83c21f69cacb2fd627 Mon Sep 17 00:00:00 2001 From: Rene Floor Date: Wed, 22 Jul 2026 14:42:50 +0200 Subject: [PATCH 1/2] UIScene delegate migration --- dogfooding/ios/Podfile | 6 ++++++ dogfooding/ios/Runner/AppDelegate.swift | 15 ++++++------- dogfooding/ios/Runner/Info.plist | 21 +++++++++++++++++++ dogfooding/pubspec.yaml | 2 +- .../example/ios/Runner/AppDelegate.swift | 7 +++++-- .../example/ios/Runner/Info.plist | 21 +++++++++++++++++++ .../example/ios/Runner/AppDelegate.swift | 7 +++++-- .../example/ios/Runner/Info.plist | 21 +++++++++++++++++++ .../example/ios/Runner/AppDelegate.swift | 7 +++++-- .../example/ios/Runner/Info.plist | 21 +++++++++++++++++++ pubspec.lock | 8 +++---- 11 files changed, 118 insertions(+), 18 deletions(-) diff --git a/dogfooding/ios/Podfile b/dogfooding/ios/Podfile index ae577f1ac..aa8e20ad8 100644 --- a/dogfooding/ios/Podfile +++ b/dogfooding/ios/Podfile @@ -79,6 +79,12 @@ post_install do |installer| 'PERMISSION_NOTIFICATIONS=1', ] + # some pods still declare deployment targets below the platform minimum, + # which recent Xcode/simulator SDKs reject outright + deployment_target = config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] + if deployment_target && Gem::Version.new(deployment_target) < Gem::Version.new('15.0') + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0' + end end end end diff --git a/dogfooding/ios/Runner/AppDelegate.swift b/dogfooding/ios/Runner/AppDelegate.swift index b7a5ac141..ad03e0705 100644 --- a/dogfooding/ios/Runner/AppDelegate.swift +++ b/dogfooding/ios/Runner/AppDelegate.swift @@ -6,27 +6,28 @@ import stream_video_push_notification import stream_webrtc_flutter @main -@objc class AppDelegate: FlutterAppDelegate { +@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate { private let CHANNEL = "io.getstream.video.flutter.dogfooding.channel" override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - // Register for push notifications. StreamVideoPKDelegateManager.shared.registerForPushNotifications() UNUserNotificationCenter.current().delegate = self - let controller = window?.rootViewController as! FlutterViewController + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } + + func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) { + GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry) + let channel = FlutterMethodChannel( - name: CHANNEL, binaryMessenger: controller.binaryMessenger) + name: CHANNEL, binaryMessenger: engineBridge.applicationRegistrar.messenger()) channel.setMethodCallHandler { [weak self] (call, result) in self?.handleMethodCall(call: call, result: result) } - - return super.application(application, didFinishLaunchingWithOptions: launchOptions) } // This method will be called when notification is received diff --git a/dogfooding/ios/Runner/Info.plist b/dogfooding/ios/Runner/Info.plist index 745e6931f..5385b3df7 100644 --- a/dogfooding/ios/Runner/Info.plist +++ b/dogfooding/ios/Runner/Info.plist @@ -84,5 +84,26 @@ Grant access to your photo library to allow users access to send media on your device to a chat while on a call UIViewControllerBasedStatusBarAppearance + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + diff --git a/dogfooding/pubspec.yaml b/dogfooding/pubspec.yaml index e006691ae..f0f29dd96 100644 --- a/dogfooding/pubspec.yaml +++ b/dogfooding/pubspec.yaml @@ -10,7 +10,7 @@ environment: resolution: workspace dependencies: - app_links: ^6.4.1 + app_links: ^7.2.1 collection: ^1.19.1 crypto: ^3.0.6 cupertino_icons: ^1.0.8 diff --git a/packages/stream_video_flutter/example/ios/Runner/AppDelegate.swift b/packages/stream_video_flutter/example/ios/Runner/AppDelegate.swift index 9e8fb0243..62ccc100b 100644 --- a/packages/stream_video_flutter/example/ios/Runner/AppDelegate.swift +++ b/packages/stream_video_flutter/example/ios/Runner/AppDelegate.swift @@ -3,13 +3,16 @@ import UIKit import stream_video_push_notification @main -@objc class AppDelegate: FlutterAppDelegate { +@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { - GeneratedPluginRegistrant.register(with: self) StreamVideoPKDelegateManager.shared.registerForPushNotifications() return super.application(application, didFinishLaunchingWithOptions: launchOptions) } + + func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) { + GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry) + } } diff --git a/packages/stream_video_flutter/example/ios/Runner/Info.plist b/packages/stream_video_flutter/example/ios/Runner/Info.plist index 1eb8ae10a..773e1ad2e 100644 --- a/packages/stream_video_flutter/example/ios/Runner/Info.plist +++ b/packages/stream_video_flutter/example/ios/Runner/Info.plist @@ -63,5 +63,26 @@ UIViewControllerBasedStatusBarAppearance + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + diff --git a/packages/stream_video_noise_cancellation/example/ios/Runner/AppDelegate.swift b/packages/stream_video_noise_cancellation/example/ios/Runner/AppDelegate.swift index 626664468..c30b367ec 100644 --- a/packages/stream_video_noise_cancellation/example/ios/Runner/AppDelegate.swift +++ b/packages/stream_video_noise_cancellation/example/ios/Runner/AppDelegate.swift @@ -2,12 +2,15 @@ import Flutter import UIKit @main -@objc class AppDelegate: FlutterAppDelegate { +@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { - GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } + + func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) { + GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry) + } } diff --git a/packages/stream_video_noise_cancellation/example/ios/Runner/Info.plist b/packages/stream_video_noise_cancellation/example/ios/Runner/Info.plist index 5458fc418..52cf36cf8 100644 --- a/packages/stream_video_noise_cancellation/example/ios/Runner/Info.plist +++ b/packages/stream_video_noise_cancellation/example/ios/Runner/Info.plist @@ -45,5 +45,26 @@ UIApplicationSupportsIndirectInputEvents + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + diff --git a/packages/stream_video_push_notification/example/ios/Runner/AppDelegate.swift b/packages/stream_video_push_notification/example/ios/Runner/AppDelegate.swift index 626664468..c30b367ec 100644 --- a/packages/stream_video_push_notification/example/ios/Runner/AppDelegate.swift +++ b/packages/stream_video_push_notification/example/ios/Runner/AppDelegate.swift @@ -2,12 +2,15 @@ import Flutter import UIKit @main -@objc class AppDelegate: FlutterAppDelegate { +@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { - GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } + + func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) { + GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry) + } } diff --git a/packages/stream_video_push_notification/example/ios/Runner/Info.plist b/packages/stream_video_push_notification/example/ios/Runner/Info.plist index 5458fc418..52cf36cf8 100644 --- a/packages/stream_video_push_notification/example/ios/Runner/Info.plist +++ b/packages/stream_video_push_notification/example/ios/Runner/Info.plist @@ -45,5 +45,26 @@ UIApplicationSupportsIndirectInputEvents + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + diff --git a/pubspec.lock b/pubspec.lock index c3b0caaf5..30167de7e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: app_links - sha256: "5f88447519add627fe1cbcab4fd1da3d4fed15b9baf29f28b22535c95ecee3e8" + sha256: f8db46d2ea9ff6f3a37191a7fd5b7813da1253ace8c32c1b9eadace41d1188ea url: "https://pub.dev" source: hosted - version: "6.4.1" + version: "7.2.1" app_links_linux: dependency: transitive description: @@ -61,10 +61,10 @@ packages: dependency: transitive description: name: app_links_platform_interface - sha256: "78a18580eecac98108d1eef52a7db668bc317714f5205e616973363326efe333" + sha256: "7546f09a6e93f4a2df2fe2bd40a5c6c64310ac461b036d82b43033be7a59f809" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "2.0.4" app_links_web: dependency: transitive description: From e79082407b62c82791bbb92bcb055f3c5607bfe0 Mon Sep 17 00:00:00 2001 From: Rene Floor Date: Wed, 22 Jul 2026 14:44:58 +0200 Subject: [PATCH 2/2] update app distribute xcode version --- .github/workflows/app-distribute.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/app-distribute.yml b/.github/workflows/app-distribute.yml index 5f0d43b86..8743920ab 100644 --- a/.github/workflows/app-distribute.yml +++ b/.github/workflows/app-distribute.yml @@ -51,7 +51,7 @@ permissions: jobs: build_and_deploy_ios: name: Build and Distribute Dogfooding Ios - runs-on: macos-15 + runs-on: xcode-27 timeout-minutes: 60 if: ${{ github.event_name == 'push' || github.event_name == 'release' || inputs.build_ios == true }} steps: @@ -66,7 +66,7 @@ jobs: - name: Select Xcode uses: maxim-lobanov/setup-xcode@v1.7.0 with: - xcode-version: "26.3" + xcode-version: "latest" - name: Setup Flutter uses: subosito/flutter-action@v2