From 578341d03c5bc7e33ba21e7189576256986f60bb Mon Sep 17 00:00:00 2001 From: Rene Floor Date: Thu, 21 May 2026 13:27:32 +0200 Subject: [PATCH 1/5] chore(sample): Set appversion to main sdk version (#2678) * Set appversion to main sdk version * formatting --- sample_app/pubspec.yaml | 2 +- tools/generate_version.dart | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/sample_app/pubspec.yaml b/sample_app/pubspec.yaml index bf15d0110e..dd27948107 100644 --- a/sample_app/pubspec.yaml +++ b/sample_app/pubspec.yaml @@ -1,7 +1,7 @@ name: sample_app description: A new Flutter project. publish_to: "none" -version: 2.2.0 +version: 10.0.0 # Note: The environment configuration and dependency versions are managed by Melos. # diff --git a/tools/generate_version.dart b/tools/generate_version.dart index 9d5a33e32f..17c54d72d9 100755 --- a/tools/generate_version.dart +++ b/tools/generate_version.dart @@ -40,4 +40,23 @@ Future main() async { await versionFile.writeAsString(updatedContent); print('✓ Successfully updated version to $version in $versionFilePath'); + + var cleanedVersion = version; + if (cleanedVersion.contains('-')) { + cleanedVersion = cleanedVersion.split('-').first; + + print('Cleaned version for app: $cleanedVersion'); + } + + // Update the version in the sample_app pubspec.yaml + final sampleAppPubspecPath = p.join(rootDir, 'sample_app', 'pubspec.yaml'); + final sampleAppPubspec = File(sampleAppPubspecPath).readAsStringSync(); + final updatedSampleAppPubspec = sampleAppPubspec.replaceFirst( + RegExp('version: .+'), + 'version: $cleanedVersion', + ); + + await File(sampleAppPubspecPath).writeAsString(updatedSampleAppPubspec); + + print('✓ Successfully updated version to $cleanedVersion in $sampleAppPubspecPath'); } From 5ead40e2f4c4bf7059974a3d47278a10a62ae096 Mon Sep 17 00:00:00 2001 From: Rene Floor Date: Fri, 6 Feb 2026 12:52:22 +0100 Subject: [PATCH 2/5] add internal testflight builds (#2508) --- .github/workflows/distribute_internal.yml | 49 +++++++++++++++++++++++ sample_app/ios/fastlane/Fastfile | 24 +++++++++++ 2 files changed, 73 insertions(+) diff --git a/.github/workflows/distribute_internal.yml b/.github/workflows/distribute_internal.yml index e8ee4f0fe1..bffa747a35 100644 --- a/.github/workflows/distribute_internal.yml +++ b/.github/workflows/distribute_internal.yml @@ -149,3 +149,52 @@ jobs: MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} APPSTORE_API_KEY: ${{ secrets.APPSTORE_API_KEY }} run: bundle exec fastlane distribute_to_firebase + + ios_testflight: + needs: determine_platforms + if: ${{ needs.determine_platforms.outputs.run_ios == 'true' }} + runs-on: macos-15 # Requires xcode 15 or later + timeout-minutes: 30 + steps: + - name: Connect Bot + uses: webfactory/ssh-agent@v0.9.1 + with: + ssh-private-key: ${{ secrets.BOT_SSH_PRIVATE_KEY }} + + - name: "Git Checkout" + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '26.3' + + - name: "Install Flutter" + uses: subosito/flutter-action@v2 + with: + flutter-version: ${{ env.FLUTTER_VERSION }} + channel: stable + cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }} + + - name: "Disable Swift Package Manager" + run: flutter config --no-enable-swift-package-manager + + - name: "Install Tools" + run: flutter pub global activate melos + + - name: "Bootstrap Workspace" + run: melos bootstrap + + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + bundler-cache: true + working-directory: sample_app/ios + + - name: Distribute to TestFlight Internal + working-directory: sample_app/ios + env: + MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} + APPSTORE_API_KEY: ${{ secrets.APPSTORE_API_KEY }} + run: bundle exec fastlane distribute_to_testflight_internal diff --git a/sample_app/ios/fastlane/Fastfile b/sample_app/ios/fastlane/Fastfile index 2f4fcaefc1..ab7592fdbb 100644 --- a/sample_app/ios/fastlane/Fastfile +++ b/sample_app/ios/fastlane/Fastfile @@ -120,6 +120,30 @@ platform :ios do ) end + desc "Build and distribute app to TestFlight Internal Testers with auto-incrementing build number" + # Usage: bundle exec fastlane ios distribute_to_testflight_internal + lane :distribute_to_testflight_internal do + match_me + + current_build_number = latest_testflight_build_number( + api_key: appstore_api_key, + app_identifier: app_identifier + ) + + build_number = (current_build_number || 0).to_i + 1 + build_ipa(export_method: "app-store", build_number: build_number) + + upload_to_testflight( + api_key: appstore_api_key, + distribute_external: false, + notify_external_testers: false, + ipa: "#{root_path}/build/ios/ipa/ChatSample.ipa", + groups: ['Internal Testers'], + changelog: 'Lots of amazing new features to test out!', + skip_waiting_for_build_processing: true, + ) + end + desc "Upload iOS dSYMs from the most recent `flutter build ipa` to Firebase Crashlytics" private_lane :upload_dsyms_to_crashlytics do dsym_zip = zip( From e2a1c331564e12eece6769239ae021cdbf6ec712 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Tue, 2 Jun 2026 07:46:22 +0200 Subject: [PATCH 3/5] chore(sample): sync sample_app version to current SDK (9.24.0) The cherry-picked commit set the sample_app version to 10.0.0; on master, the stream_chat SDK is 9.24.0. Running tools/generate_version.dart syncs sample_app/pubspec.yaml accordingly. Co-Authored-By: Claude Opus 4.7 (1M context) --- sample_app/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sample_app/pubspec.yaml b/sample_app/pubspec.yaml index dd27948107..48a3d7b105 100644 --- a/sample_app/pubspec.yaml +++ b/sample_app/pubspec.yaml @@ -1,7 +1,7 @@ name: sample_app description: A new Flutter project. publish_to: "none" -version: 10.0.0 +version: 9.24.0 # Note: The environment configuration and dependency versions are managed by Melos. # From e8bd639648e4a2e42c35202e53202ec2d8ff31ae Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Tue, 2 Jun 2026 07:51:35 +0200 Subject: [PATCH 4/5] chore(sample): upload dSYMs to Crashlytics from internal TestFlight lane MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Match the v10 branch — the internal TestFlight lane should upload dSYMs to Firebase Crashlytics like distribute_to_testflight does, so symbolicated crash reports are available for internal-tester builds. Co-Authored-By: Claude Opus 4.7 (1M context) --- sample_app/ios/fastlane/Fastfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sample_app/ios/fastlane/Fastfile b/sample_app/ios/fastlane/Fastfile index ab7592fdbb..88687c7aa8 100644 --- a/sample_app/ios/fastlane/Fastfile +++ b/sample_app/ios/fastlane/Fastfile @@ -133,6 +133,8 @@ platform :ios do build_number = (current_build_number || 0).to_i + 1 build_ipa(export_method: "app-store", build_number: build_number) + upload_dsyms_to_crashlytics + upload_to_testflight( api_key: appstore_api_key, distribute_external: false, From f40268b1904854e9d3178b45b53411632917ebe1 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Tue, 2 Jun 2026 07:56:02 +0200 Subject: [PATCH 5/5] chore: apply dart format to generate_version.dart Wrap the long print() call to satisfy the 80-col formatter the cherry-pick inherited (line was over the limit in the master format target). Co-Authored-By: Claude Opus 4.7 (1M context) --- tools/generate_version.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/generate_version.dart b/tools/generate_version.dart index 17c54d72d9..2427bf385e 100755 --- a/tools/generate_version.dart +++ b/tools/generate_version.dart @@ -58,5 +58,6 @@ Future main() async { await File(sampleAppPubspecPath).writeAsString(updatedSampleAppPubspec); - print('✓ Successfully updated version to $cleanedVersion in $sampleAppPubspecPath'); + print( + '✓ Successfully updated version to $cleanedVersion in $sampleAppPubspecPath'); }