-
Notifications
You must be signed in to change notification settings - Fork 227
[CI] Support Xcode 26 #3825
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
[CI] Support Xcode 26 #3825
Changes from all commits
1b54271
3e1405d
9bb78a0
267c095
c2cc43b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -21,33 +21,28 @@ jobs: | |
| strategy: | ||
| matrix: | ||
| include: | ||
| - ios: 18.5 | ||
| xcode: 16.4 | ||
| os: macos-15 | ||
| - ios: "26.0" | ||
| device: "iPhone 17 Pro" | ||
| setup_runtime: false | ||
| - ios: "18.5" | ||
| device: "iPhone 16 Pro" | ||
| setup_runtime: false | ||
| - ios: 17.5 | ||
| xcode: 15.4 | ||
| os: macos-14 | ||
| - ios: "17.5" | ||
| device: "iPhone 15 Pro" | ||
| setup_runtime: false | ||
| - ios: 16.4 | ||
| xcode: 15.3 # fails on 15.4 | ||
| os: macos-14 | ||
| setup_runtime: true | ||
| - ios: "16.4" | ||
| device: "iPhone 14 Pro" | ||
| setup_runtime: true | ||
| - ios: 15.5 | ||
| xcode: 15.3 # fails on 15.4 | ||
| os: macos-14 | ||
| - ios: "15.5" | ||
| device: "iPhone 13 Pro" | ||
| setup_runtime: true | ||
| fail-fast: false | ||
| runs-on: ${{ matrix.os }} | ||
| runs-on: macos-15 | ||
| env: | ||
| GITHUB_EVENT: ${{ toJson(github.event) }} | ||
| ALLURE_TOKEN: ${{ secrets.ALLURE_TOKEN }} | ||
| STREAM_DEMO_APP_SECRET: ${{ secrets.STREAM_DEMO_APP_SECRET }} | ||
| XCODE_VERSION: ${{ matrix.xcode }} | ||
| XCODE_VERSION: "26.0.1" | ||
| IOS_SIMULATOR_DEVICE: "${{ matrix.device }} (${{ matrix.ios }})" # For the Allure report | ||
| steps: | ||
| - uses: actions/[email protected] | ||
|
|
@@ -94,30 +89,25 @@ jobs: | |
| strategy: | ||
| matrix: | ||
| include: | ||
| - ios: 18.5 | ||
| xcode: 16.4 | ||
| os: macos-15 | ||
| - ios: "26.0" | ||
| device: "iPhone 17 Pro" | ||
| setup_runtime: false | ||
| - ios: "18.5" | ||
| device: "iPhone 16 Pro" | ||
| setup_runtime: false | ||
| - ios: 17.5 | ||
| xcode: 15.4 | ||
| os: macos-14 | ||
| - ios: "17.5" | ||
| device: "iPhone 15 Pro" | ||
| setup_runtime: false | ||
| - ios: 16.4 | ||
| xcode: 15.3 # fails on 15.4 | ||
| os: macos-14 | ||
| setup_runtime: true | ||
| - ios: "16.4" | ||
| device: "iPhone 14 Pro" | ||
| setup_runtime: true | ||
| - ios: 15.5 | ||
| xcode: 15.3 # fails on 15.4 | ||
| os: macos-14 | ||
| - ios: "15.5" | ||
| device: "iPhone 13 Pro" | ||
| setup_runtime: true | ||
| fail-fast: false | ||
| runs-on: ${{ matrix.os }} | ||
| runs-on: macos-15 | ||
| env: | ||
| XCODE_VERSION: ${{ matrix.xcode }} | ||
| XCODE_VERSION: "26.0.1" | ||
| steps: | ||
| - uses: actions/[email protected] | ||
| - uses: ./.github/actions/bootstrap | ||
|
|
@@ -147,24 +137,25 @@ jobs: | |
| fastlane/test_output/logs/*/Diagnostics/simctl_diagnostics/DiagnosticReports/* | ||
|
|
||
| build-old-xcode: | ||
| name: Build LLC + UI (Xcode 15) | ||
| name: Build LLC + UI (Old Xcode) | ||
| runs-on: macos-14 | ||
| env: | ||
| XCODE_VERSION: "15.4" | ||
| XCODE_VERSION: "16.1" | ||
| steps: | ||
| - name: Connect Bot | ||
| uses: webfactory/[email protected] | ||
| with: | ||
| ssh-private-key: ${{ secrets.BOT_SSH_PRIVATE_KEY }} | ||
| - uses: actions/[email protected] | ||
| - uses: ./.github/actions/xcode-cache | ||
| - uses: ./.github/actions/ruby-cache | ||
| - name: List Xcode versions | ||
| run: mdfind "kMDItemCFBundleIdentifier = 'com.apple.dt.Xcode'" | ||
| - name: Build LLC | ||
| run: bundle exec fastlane test device:"iPhone 8" build_for_testing:true | ||
| run: bundle exec fastlane test device:"iPhone 16" build_for_testing:true | ||
| timeout-minutes: 25 | ||
| - name: Build UI | ||
| run: bundle exec fastlane test_ui device:"iPhone 8" build_for_testing:true | ||
| run: bundle exec fastlane test_ui device:"iPhone 16" build_for_testing:true | ||
| timeout-minutes: 25 | ||
| - name: Build XCFrameworks | ||
| run: bundle exec fastlane build_xcframeworks | ||
|
|
@@ -177,7 +168,7 @@ jobs: | |
| name: Automated Code Review | ||
| runs-on: macos-14 | ||
| env: | ||
| XCODE_VERSION: "15.4" | ||
| XCODE_VERSION: "16.1" | ||
| steps: | ||
| - uses: actions/[email protected] | ||
| - uses: ./.github/actions/bootstrap | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -20,7 +20,7 @@ concurrency: | |
|
|
||
| env: | ||
| HOMEBREW_NO_INSTALL_CLEANUP: 1 # Disable cleanup for homebrew, we don't need it on CI | ||
| IOS_SIMULATOR_DEVICE: "iPhone 16 Pro (18.5)" | ||
| IOS_SIMULATOR_DEVICE: "iPhone 17 Pro (26.0)" | ||
testableapple marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| GITHUB_PR_NUM: ${{ github.event.pull_request.number }} | ||
|
|
||
|
|
@@ -48,7 +48,7 @@ jobs: | |
| name: Automated Code Review | ||
| runs-on: macos-14 | ||
| env: | ||
| XCODE_VERSION: "15.4" | ||
| XCODE_VERSION: "16.1" | ||
| if: ${{ github.event.inputs.record_snapshots != 'true' }} | ||
| steps: | ||
| - uses: actions/[email protected] | ||
|
|
@@ -63,21 +63,22 @@ jobs: | |
| if: startsWith(github.event.pull_request.head.ref, 'release/') | ||
|
|
||
| build-old-xcode: | ||
| name: Build LLC + UI (Xcode 15) | ||
| name: Build SDKs (Old Xcode) | ||
| runs-on: macos-14 | ||
| if: ${{ github.event.inputs.record_snapshots != 'true' }} | ||
| env: | ||
| XCODE_VERSION: "15.4" | ||
| XCODE_VERSION: "16.1" | ||
| steps: | ||
| - uses: actions/[email protected] | ||
| - uses: ./.github/actions/xcode-cache | ||
| - uses: ./.github/actions/ruby-cache | ||
| - name: List Xcode versions | ||
| run: mdfind "kMDItemCFBundleIdentifier = 'com.apple.dt.Xcode'" | ||
| - name: Build LLC | ||
| run: bundle exec fastlane test device:"iPhone 13" build_for_testing:true | ||
| run: bundle exec fastlane test device:"iPhone 16" build_for_testing:true | ||
| timeout-minutes: 25 | ||
| - name: Build UI | ||
| run: bundle exec fastlane test_ui device:"iPhone 13" build_for_testing:true | ||
| run: bundle exec fastlane test_ui device:"iPhone 16" build_for_testing:true | ||
| timeout-minutes: 25 | ||
|
|
||
| test-llc-debug: | ||
|
|
@@ -179,6 +180,8 @@ jobs: | |
| - build-test-app-and-frameworks | ||
| env: | ||
| LAUNCH_ID: ${{ needs.allure_testops_launch.outputs.launch_id }} | ||
| IOS_SIMULATOR_DEVICE: "iPhone 16 Pro (18.5)" # TODO: IOS-1181 | ||
| XCODE_VERSION: "16.4" # TODO: IOS-1181 | ||
| strategy: | ||
| matrix: | ||
| batch: [0, 1] | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -22,6 +22,9 @@ _October 07, 2025_ | |
| - Add `ChatChannelController.setPushPreference(level:)` | ||
| - Add `ChatChannelController.snoozePushNotifications(until:)` | ||
|
|
||
| ## ⚠️ Important | ||
| - From now on, our XCFrameworks will be built with Swift 5.9. In order to use them, you need Xcode 15 or above. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should we use we use 5.10 like Package.swift? |
||
|
|
||
| # [4.89.0](https://github.com/GetStream/stream-chat-swift/releases/tag/4.89.0) | ||
| _September 22, 2025_ | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -9,7 +9,7 @@ Pod::Spec.new do |spec| | |
| spec.author = { 'getstream.io' => '[email protected]' } | ||
| spec.social_media_url = 'https://getstream.io' | ||
|
|
||
| spec.swift_version = '5.7' | ||
| spec.swift_version = '5.9' | ||
| spec.ios.deployment_target = '13.0' | ||
| spec.requires_arc = true | ||
|
|
||
|
|
@@ -22,4 +22,12 @@ Pod::Spec.new do |spec| | |
| spec.preserve_paths = "#{spec.module_name}.xcframework/*" | ||
|
|
||
| spec.cocoapods_version = '>= 1.11.0' | ||
|
|
||
| spec.pod_target_xcconfig = { | ||
| 'SWIFT_OPTIMIZATION_LEVEL' => '-Osize' | ||
| } | ||
|
|
||
| spec.user_target_xcconfig = { | ||
| 'SWIFT_OPTIMIZATION_LEVEL' => '-Osize' | ||
| } | ||
| end | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -9,7 +9,7 @@ Pod::Spec.new do |spec| | |
| spec.author = { 'getstream.io' => '[email protected]' } | ||
| spec.social_media_url = 'https://getstream.io' | ||
|
|
||
| spec.swift_version = '5.7' | ||
| spec.swift_version = '5.9' | ||
| spec.ios.deployment_target = '13.0' | ||
| spec.osx.deployment_target = '11.0' | ||
| spec.requires_arc = true | ||
|
|
@@ -21,4 +21,12 @@ Pod::Spec.new do |spec| | |
| spec.source = { git: 'https://github.com/GetStream/stream-chat-swift.git', tag: "#{spec.version}" } | ||
| spec.source_files = ['Sources/StreamChat/**/*.swift'] | ||
| spec.resource_bundles = { 'StreamChat' => ['Sources/StreamChat/**/*.xcdatamodeld'] } | ||
|
|
||
| spec.pod_target_xcconfig = { | ||
| 'SWIFT_OPTIMIZATION_LEVEL' => '-Osize' | ||
| } | ||
|
|
||
| spec.user_target_xcconfig = { | ||
| 'SWIFT_OPTIMIZATION_LEVEL' => '-Osize' | ||
| } | ||
| end | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -14254,6 +14254,7 @@ | |
| "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; | ||
| SKIP_INSTALL = YES; | ||
| SUPPORTED_PLATFORMS = "iphonesimulator iphoneos macosx"; | ||
| SWIFT_OPTIMIZATION_LEVEL = "-Osize"; | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should we really change it since default is speed and most customers use default value. It just makes the size metric better for the report, but in reality customers get the speed optimized binary. Should we try to make some types to classes instead which bloat the binary size? |
||
| SWIFT_VERSION = 5.0; | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chainAlign Swift language version with the PR’s minimum Swift bump. This target still declares Apply this change here: - SWIFT_VERSION = 5.0;
+ SWIFT_VERSION = 5.9;Then audit the repo for any stragglers: 🏁 Script executed: #!/bin/bash
# Find all SWIFT_VERSION occurrences and show surrounding context
rg -n -C2 'SWIFT_VERSION\s*=\s*' \
StreamChat.xcodeproj/project.pbxproj \
-g '!*DerivedData*'
# Check Package.swift and podspecs declare the same minimum Swift
fd -t f -a --hidden 'Package.swift|*.podspec|*.xcconfig'
rg -n 'swift-tools-version|swift_version' -g 'Package.swift|**/*.podspec|**/*.xcconfig'Length of output: 12877 🏁 Script executed: #!/bin/bash
# Find Package.swift and podspec files properly
find . -name "Package.swift" -type f 2>/dev/null | head -20
find . -name "*.podspec" -type f 2>/dev/null | head -20Length of output: 127 🏁 Script executed: #!/bin/bash
# Check swift-tools-version in Package.swift
echo "=== Package.swift swift-tools-version ==="
rg -n 'swift-tools-version|swiftLanguageVersions' Package.swift
# Check s.swift_version in podspec files
echo -e "\n=== Podspec swift_version declarations ==="
rg -n 's\.swift_version' StreamChat.podspec StreamChatUI.podspec
# Also check for any version metadata
echo -e "\n=== StreamChat.podspec version lines ==="
head -20 StreamChat.podspec | rg -n 'version|swift'
echo -e "\n=== StreamChatUI.podspec version lines ==="
head -20 StreamChatUI.podspec | rg -n 'version|swift'Length of output: 651 Align Swift language version with SPM and CocoaPods minimums. The Xcode project declares Apply this change across all 60+ occurrences in - SWIFT_VERSION = 5.0;
+ SWIFT_VERSION = 5.9;Verify the update by running: #!/bin/bash
rg -n 'SWIFT_VERSION\s*=\s*' StreamChat.xcodeproj/project.pbxproj | grep -v 5.9🤖 Prompt for AI Agents |
||
| TARGETED_DEVICE_FAMILY = "1,2"; | ||
| }; | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -9,7 +9,7 @@ Pod::Spec.new do |spec| | |
| spec.author = { 'getstream.io' => '[email protected]' } | ||
| spec.social_media_url = 'https://getstream.io' | ||
|
|
||
| spec.swift_version = '5.7' | ||
| spec.swift_version = '5.9' | ||
| spec.platform = :ios, '13.0' | ||
| spec.requires_arc = true | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,24 +1,25 @@ | ||
| Pod::Spec.new do |spec| | ||
| spec.name = "StreamChatUI" | ||
| spec.version = "4.90.0" | ||
| spec.summary = "StreamChat UI Components" | ||
| spec.description = "StreamChatUI SDK offers flexible UI components able to display data provided by StreamChat SDK." | ||
| spec.name = 'StreamChatUI' | ||
| spec.version = '4.90.0' | ||
| spec.summary = 'StreamChat UI Components' | ||
| spec.description = 'StreamChatUI SDK offers flexible UI components able to display data provided by StreamChat SDK.' | ||
|
|
||
| spec.homepage = "https://getstream.io/chat/" | ||
| spec.license = { :type => "BSD-3", :file => "LICENSE" } | ||
| spec.author = { "getstream.io" => "[email protected]" } | ||
| spec.social_media_url = "https://getstream.io" | ||
| spec.homepage = 'https://getstream.io/chat/' | ||
| spec.license = { type: 'BSD-3', file: 'LICENSE' } | ||
| spec.author = { 'getstream.io' => '[email protected]' } | ||
| spec.social_media_url = 'https://getstream.io' | ||
|
|
||
| spec.swift_version = '5.7' | ||
| spec.platform = :ios, "13.0" | ||
| spec.swift_version = '5.9' | ||
| spec.platform = :ios, '13.0' | ||
| spec.requires_arc = true | ||
|
|
||
| spec.framework = "Foundation", "UIKit" | ||
| spec.framework = 'Foundation', 'UIKit' | ||
|
|
||
| spec.module_name = "StreamChatUI" | ||
| spec.source = { :git => "https://github.com/GetStream/stream-chat-swift.git", :tag => "#{spec.version}" } | ||
| spec.source_files = ["Sources/StreamChatUI/**/*.swift", "Sources/StreamNuke/**/*.swift", "Sources/StreamSwiftyGif/**/*.swift"] | ||
| spec.resource_bundles = { "StreamChatUIResources" => ["Sources/StreamChatUI/Resources/**/*"] } | ||
| spec.module_name = 'StreamChatUI' | ||
| spec.source = { git: 'https://github.com/GetStream/stream-chat-swift.git', tag: "#{spec.version}" } | ||
| spec.source_files = ['Sources/StreamChatUI/**/*.swift', 'Sources/StreamNuke/**/*.swift', | ||
| 'Sources/StreamSwiftyGif/**/*.swift'] | ||
| spec.resource_bundles = { 'StreamChatUIResources' => ['Sources/StreamChatUI/Resources/**/*'] } | ||
|
|
||
| spec.dependency "StreamChat", "#{spec.version}" | ||
| spec.dependency 'StreamChat', "#{spec.version}" | ||
| end |
Uh oh!
There was an error while loading. Please reload this page.