Skip to content

Release 9.0#488

Merged
RodrigoSMarques merged 3 commits intomasterfrom
dev
Jan 24, 2026
Merged

Release 9.0#488
RodrigoSMarques merged 3 commits intomasterfrom
dev

Conversation

@RodrigoSMarques
Copy link
Owner

⚠️ BREAKING CHANGES

  • Minimum Flutter version: 3.38.0 (was 3.19.0)
  • Minimum Dart SDK: 3.10.0 (was 3.3.0)
  • **Minimum iOS version : 13

🎉 Features

iOS UISceneDelegate Support (iOS 13+) Fluuter UISceneDelegate adoption

  • Added full support for iOS 13+ UISceneDelegate lifecycle
  • Maintains full backward compatibility with UIApplicationDelegate for apps not using scenes

Copilot AI review requested due to automatic review settings January 24, 2026 02:43
@RodrigoSMarques RodrigoSMarques merged commit 7dcb217 into master Jan 24, 2026
8 checks passed
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Release 9.0.0 updating SDK constraints and adding iOS UISceneDelegate lifecycle support (iOS 13+) for Branch initialization and deep link handling.

Changes:

  • Bumped package version to 9.0.0 and raised minimum Flutter/Dart SDK constraints.
  • Added iOS 13+ UISceneDelegate lifecycle integration in the iOS plugin implementation.
  • Updated iOS platform minimums and release documentation (README/CHANGELOG), plus minor repo ignore changes.

Reviewed changes

Copilot reviewed 5 out of 7 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
pubspec.yaml Bumps plugin version to 9.0.0 and raises Flutter/Dart minimum constraints.
pubspec.lock Updates locked SDK constraints to match the new minimums.
ios/flutter_branch_sdk/sources/flutter_branch_sdk/FlutterBranchSdkPlugin.swift Adds UISceneDelegate support and refactors shared Branch config/session initialization logic.
ios/flutter_branch_sdk/Package.swift Raises Swift Package iOS minimum from 12.0 to 13.0.
README.md Documents UISceneDelegate support and lifecycle behavior.
CHANGELOG.md Adds 9.0.0 release notes describing breaking changes and UISceneDelegate support.
.gitignore Adds new ignore entries (including test/).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

// Handle user activities from connectionOptions
if let userActivity = connectionOptions?.userActivities.first {
launchOptions[.userActivityType] = userActivity.activityType
LogUtils.debug(message: "Scene connectionOptions UserActivity: \(userActivity.activityType ?? "unknown")")
Copy link

Copilot AI Jan 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NSUserActivity.activityType is non-optional, so userActivity.activityType ?? "unknown" is a compile-time error. Log userActivity.activityType directly (or make the optionality explicit if you intended a different field).

Suggested change
LogUtils.debug(message: "Scene connectionOptions UserActivity: \(userActivity.activityType ?? "unknown")")
LogUtils.debug(message: "Scene connectionOptions UserActivity: \(userActivity.activityType)")

Copilot uses AI. Check for mistakes.
Comment on lines +162 to +167
// Perform Branch configuration (shared logic)
configureBranchSDK()

// Initialize Branch session
initializeBranchSession(launchOptions: launchOptions)

Copy link

Copilot AI Jan 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

initSession is triggered from both application(_:didFinishLaunchingWithOptions:) and scene(_:willConnectTo:options:). For scene-based apps (iOS 13+ with a Scene manifest), both callbacks occur, so Branch session initialization may run twice and emit duplicate deep-link callbacks. Consider guarding so session init runs only once (e.g., detect UIApplicationSceneManifest and defer init to the Scene lifecycle, or add an internal hasInitializedSession flag).

Suggested change
// Perform Branch configuration (shared logic)
configureBranchSDK()
// Initialize Branch session
initializeBranchSession(launchOptions: launchOptions)
// For apps using scenes on iOS 13+, defer Branch initialization to the Scene lifecycle
if #available(iOS 13.0, *),
Bundle.main.object(forInfoDictionaryKey: "UIApplicationSceneManifest") != nil {
// Scene-based app: Branch will be configured/initialized in SceneDelegate callbacks
} else {
// Non-scene-based app or iOS < 13: perform Branch configuration and initialization here
configureBranchSDK()
// Initialize Branch session
initializeBranchSession(launchOptions: launchOptions)
}

Copilot uses AI. Check for mistakes.
### ⚠️ BREAKING CHANGES
- **Minimum Flutter version**: 3.38.0 (was 3.19.0)
- **Minimum Dart SDK**: 3.10.0 (was 3.3.0)
- **Minimum iOS version : 13
Copy link

Copilot AI Jan 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The bullet for iOS minimum version is missing the closing **, which breaks the Markdown formatting. Consider updating it to match the other bullets (e.g., - **Minimum iOS version**: 13).

Suggested change
- **Minimum iOS version : 13
- **Minimum iOS version**: 13

Copilot uses AI. Check for mistakes.
- **Minimum iOS version : 13

### 🎉 Features
**iOS UISceneDelegate Support (iOS 13+)** [Fluuter UISceneDelegate adoption](https://docs.flutter.dev/release/breaking-changes/uiscenedelegate)
Copy link

Copilot AI Jan 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo in link text: "Fluuter" should be "Flutter".

Suggested change
**iOS UISceneDelegate Support (iOS 13+)** [Fluuter UISceneDelegate adoption](https://docs.flutter.dev/release/breaking-changes/uiscenedelegate)
**iOS UISceneDelegate Support (iOS 13+)** [Flutter UISceneDelegate adoption](https://docs.flutter.dev/release/breaking-changes/uiscenedelegate)

Copilot uses AI. Check for mistakes.
}

// Initialize Branch session
initializeBranchSession(launchOptions: launchOptions)
Copy link

Copilot AI Jan 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

scene(_:willConnectTo:options:) builds launchOptions as [UIApplication.LaunchOptionsKey: Any], but initializeBranchSession expects [AnyHashable: Any]?. This won’t type-check in Swift; either change initializeBranchSession to accept [UIApplication.LaunchOptionsKey: Any]? (and update callers), or build/cast the dictionary to [AnyHashable: Any] before passing it.

Suggested change
initializeBranchSession(launchOptions: launchOptions)
let branchLaunchOptions: [AnyHashable: Any] = Dictionary(uniqueKeysWithValues: launchOptions.map { (key, value) in (key as AnyHashable, value) })
initializeBranchSession(launchOptions: branchLaunchOptions)

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants