diff --git a/.github/workflows/flutter-ci.yml b/.github/workflows/flutter-ci.yml
index 642906630..d826aa3ca 100644
--- a/.github/workflows/flutter-ci.yml
+++ b/.github/workflows/flutter-ci.yml
@@ -75,13 +75,13 @@ jobs:
disable-animations: false
script: echo "Generated AVD snapshot for caching."
- - name: Setup Flutter 3.38.x
+ - name: Setup Flutter 3.41.x
uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
with:
- flutter-version: "3.38.x"
+ flutter-version: "3.41.x"
channel: "stable"
cache: true
- cache-key: flutter-3.38.x
+ cache-key: flutter-3.41.x
cache-path: ${{ runner.tool_cache }}/flutter
- name: Create .env file
diff --git a/.github/workflows/flutter-deploy.yml b/.github/workflows/flutter-deploy.yml
index ac43ae698..90899b7b4 100644
--- a/.github/workflows/flutter-deploy.yml
+++ b/.github/workflows/flutter-deploy.yml
@@ -69,13 +69,13 @@ jobs:
disable-animations: false
script: echo "Generated AVD snapshot for caching."
- - name: Setup Flutter 3.38.x
+ - name: Setup Flutter 3.41.x
uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
with:
- flutter-version: "3.38.x"
+ flutter-version: "3.41.x"
channel: "stable"
cache: true
- cache-key: flutter-3.38.x
+ cache-key: flutter-3.41.x
cache-path: ${{ runner.tool_cache }}/flutter
- name: Create .env file
diff --git a/.github/workflows/flutter-unit-tests.yml b/.github/workflows/flutter-unit-tests.yml
index 62fcc028d..e2a4e1c78 100644
--- a/.github/workflows/flutter-unit-tests.yml
+++ b/.github/workflows/flutter-unit-tests.yml
@@ -20,13 +20,13 @@ jobs:
- name: Checkout files
uses: actions/checkout@v4
- - name: Setup Flutter 3.38.x
+ - name: Setup Flutter 3.41.x
uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
with:
- flutter-version: "3.38.x"
+ flutter-version: "3.41.x"
channel: "stable"
cache: true
- cache-key: flutter-3.38.x
+ cache-key: flutter-3.41.x
cache-path: ${{ runner.tool_cache }}/flutter
- name: Create .env file
diff --git a/.github/workflows/mobile-curriculum-e2e.yml b/.github/workflows/mobile-curriculum-e2e.yml
index 0c85945f1..2f82c0792 100644
--- a/.github/workflows/mobile-curriculum-e2e.yml
+++ b/.github/workflows/mobile-curriculum-e2e.yml
@@ -27,7 +27,7 @@ jobs:
android-api-level: [35]
node-version: [24]
pnpm-version: [10]
- flutter-version: ["3.38.x"]
+ flutter-version: ["3.41.x"]
steps:
- name: Remove unused software
diff --git a/codemagic.yaml b/codemagic.yaml
index 076b14117..e63814e42 100644
--- a/codemagic.yaml
+++ b/codemagic.yaml
@@ -15,7 +15,7 @@ workflows:
cancel_previous_builds: true
environment:
- flutter: 3.38.5
+ flutter: 3.41.3
xcode: latest
cocoapods: default
groups:
@@ -87,7 +87,7 @@ workflows:
cancel_previous_builds: true
environment:
- flutter: 3.38.5
+ flutter: 3.41.3
xcode: latest
cocoapods: default
ios_signing:
diff --git a/mobile-app/ios/Runner/AppDelegate.swift b/mobile-app/ios/Runner/AppDelegate.swift
index 9e09de7b1..1e87aba32 100644
--- a/mobile-app/ios/Runner/AppDelegate.swift
+++ b/mobile-app/ios/Runner/AppDelegate.swift
@@ -1,17 +1,18 @@
import UIKit
import Flutter
+import flutter_local_notifications
@main
-@objc class AppDelegate: FlutterAppDelegate {
+@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
- if #available(iOS 10.0, *) {
- UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
- }
-
- GeneratedPluginRegistrant.register(with: self)
+ UNUserNotificationCenter.current().delegate = self as UNUserNotificationCenterDelegate
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
+
+ func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) {
+ GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry)
+ }
}
diff --git a/mobile-app/ios/Runner/Info-Debug.plist b/mobile-app/ios/Runner/Info-Debug.plist
index f57639a21..bea522cef 100644
--- a/mobile-app/ios/Runner/Info-Debug.plist
+++ b/mobile-app/ios/Runner/Info-Debug.plist
@@ -71,5 +71,26 @@
UIStatusBarHidden
+ UIApplicationSceneManifest
+
+ UIApplicationSupportsMultipleScenes
+
+ UISceneConfigurations
+
+ UIWindowSceneSessionRoleApplication
+
+
+ UISceneClassName
+ UIWindowScene
+ UISceneDelegateClassName
+ FlutterSceneDelegate
+ UISceneConfigurationName
+ flutter
+ UISceneStoryboardFile
+ Main
+
+
+
+
diff --git a/mobile-app/ios/Runner/Info-Profile.plist b/mobile-app/ios/Runner/Info-Profile.plist
index 2e2ce2a0b..dea4fb50f 100644
--- a/mobile-app/ios/Runner/Info-Profile.plist
+++ b/mobile-app/ios/Runner/Info-Profile.plist
@@ -1,77 +1,98 @@
-
- CADisableMinimumFrameDurationOnPhone
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- freeCodeCamp
- CFBundlePackageType
- APPL
- CFBundleShortVersionString
- $(FLUTTER_BUILD_NAME)
- CFBundleSignature
- ????
- CFBundleURLTypes
-
-
- CFBundleTypeRole
- None
- CFBundleURLName
- auth0
- CFBundleURLSchemes
-
- $(PRODUCT_BUNDLE_IDENTIFIER)
-
-
-
- CFBundleVersion
- $(FLUTTER_BUILD_NUMBER)
- ITSAppUsesNonExemptEncryption
-
- LSRequiresIPhoneOS
-
- NSAppTransportSecurity
-
- NSAllowsArbitraryLoads
-
-
- NSBonjourServices
-
- _dartobservatory._tcp
-
- UIBackgroundModes
-
- audio
-
- UILaunchStoryboardName
- LaunchScreen
- UIMainStoryboardFile
- Main
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UIViewControllerBasedStatusBarAppearance
-
- UIStatusBarHidden
-
-
+
+ CADisableMinimumFrameDurationOnPhone
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ freeCodeCamp
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleSignature
+ ????
+ CFBundleURLTypes
+
+
+ CFBundleTypeRole
+ None
+ CFBundleURLName
+ auth0
+ CFBundleURLSchemes
+
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+
+
+
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ ITSAppUsesNonExemptEncryption
+
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
+ NSBonjourServices
+
+ _dartobservatory._tcp
+
+ UIBackgroundModes
+
+ audio
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIViewControllerBasedStatusBarAppearance
+
+ UIStatusBarHidden
+
+ UIApplicationSceneManifest
+
+ UIApplicationSupportsMultipleScenes
+
+ UISceneConfigurations
+
+ UIWindowSceneSessionRoleApplication
+
+
+ UISceneClassName
+ UIWindowScene
+ UISceneDelegateClassName
+ FlutterSceneDelegate
+ UISceneConfigurationName
+ flutter
+ UISceneStoryboardFile
+ Main
+
+
+
+
+
diff --git a/mobile-app/ios/Runner/Info-Release.plist b/mobile-app/ios/Runner/Info-Release.plist
index 17aa594ae..082ee7123 100644
--- a/mobile-app/ios/Runner/Info-Release.plist
+++ b/mobile-app/ios/Runner/Info-Release.plist
@@ -69,5 +69,26 @@
UIStatusBarHidden
+ UIApplicationSceneManifest
+
+ UIApplicationSupportsMultipleScenes
+
+ UISceneConfigurations
+
+ UIWindowSceneSessionRoleApplication
+
+
+ UISceneClassName
+ UIWindowScene
+ UISceneDelegateClassName
+ FlutterSceneDelegate
+ UISceneConfigurationName
+ flutter
+ UISceneStoryboardFile
+ Main
+
+
+
+