-
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
ad4dc6b
cfb2bc9
de01b67
8833230
37bd7a6
7f18e75
14a4b62
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,34 +21,29 @@ jobs: | |
| strategy: | ||
| matrix: | ||
| include: | ||
| - ios: 18.5 | ||
| xcode: 16.4 | ||
| os: macos-15 | ||
| - ios: "26.1" | ||
| 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 }} | ||
| IOS_SIMULATOR_DEVICE: "${{ matrix.device }} (${{ matrix.ios }})" # For the Allure report | ||
| XCODE_VERSION: "26.1" | ||
| IOS_SIMULATOR_DEVICE: "${{ matrix.device }} (${{ matrix.ios }})" | ||
| steps: | ||
| - uses: actions/[email protected] | ||
| - uses: ./.github/actions/bootstrap | ||
|
|
@@ -66,7 +61,7 @@ jobs: | |
| - name: Launch Allure TestOps | ||
| run: bundle exec fastlane allure_launch cron:true | ||
| - name: Run UI Tests (Debug) | ||
| run: bundle exec fastlane test_e2e_mock device:"${{ matrix.device }} (${{ matrix.ios }})" | ||
| run: bundle exec fastlane test_e2e_mock device:"${{ env.IOS_SIMULATOR_DEVICE }}" | ||
| timeout-minutes: 120 | ||
| - name: Allure TestOps Upload | ||
| if: success() || failure() | ||
|
|
@@ -94,30 +89,26 @@ jobs: | |
| strategy: | ||
| matrix: | ||
| include: | ||
| - ios: 18.5 | ||
| xcode: 16.4 | ||
| os: macos-15 | ||
| - ios: "26.1" | ||
| 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.1" | ||
| IOS_SIMULATOR_DEVICE: "${{ matrix.device }} (${{ matrix.ios }})" | ||
| steps: | ||
| - uses: actions/[email protected] | ||
| - uses: ./.github/actions/bootstrap | ||
|
|
@@ -131,7 +122,7 @@ jobs: | |
| version: ${{ matrix.ios }} | ||
| device: ${{ matrix.device }} | ||
| - name: Run LLC Tests (Debug) | ||
| run: bundle exec fastlane test device:"${{ matrix.device }} (${{ matrix.ios }})" cron:true | ||
| run: bundle exec fastlane test device:"${{ env.IOS_SIMULATOR_DEVICE }}" cron:true | ||
| timeout-minutes: 100 | ||
| - name: Parse xcresult | ||
| if: failure() | ||
|
|
@@ -147,24 +138,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 +169,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.1)" | ||
| 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: | ||
|
|
||
| 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 |
|---|---|---|
|
|
@@ -14346,6 +14346,7 @@ | |
| "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; | ||
| SKIP_INSTALL = YES; | ||
| SUPPORTED_PLATFORMS = "iphonesimulator iphoneos macosx"; | ||
| SWIFT_OPTIMIZATION_LEVEL = "-Osize"; | ||
|
Contributor
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.92.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.92.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}" | ||
|
Comment on lines
+12
to
+24
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 chainVerify whether SWIFT_OPTIMIZATION_LEVEL config is needed. According to the PR objectives, "SWIFT_OPTIMIZATION_LEVEL set to "-Osize" in project and podspecs." The AI summary notes that other podspecs in this PR add Swift optimization config. However, this podspec doesn't contain a If size optimization should apply to StreamChatUI (the PR shows −49 KB size reduction), consider adding: spec.pod_target_xcconfig = { 'SWIFT_OPTIMIZATION_LEVEL' => '-Osize' }Please verify whether this configuration was intentionally omitted or should be added to align with other podspecs in the PR. 🏁 Script executed: #!/bin/bash
# Description: Check if other podspecs in the PR have SWIFT_OPTIMIZATION_LEVEL set
echo "=== Checking SWIFT_OPTIMIZATION_LEVEL in all podspecs ==="
fd -e podspec --exec sh -c 'echo "File: {}" && rg -n "SWIFT_OPTIMIZATION_LEVEL|pod_target_xcconfig" {} || echo " (no optimization config found)"'
echo -e "\n=== Checking project build settings for SWIFT_OPTIMIZATION_LEVEL ==="
fd -e pbxproj --exec rg -n "SWIFT_OPTIMIZATION_LEVEL" {}Length of output: 1066 I need to check the git diff to determine whether the SWIFT_OPTIMIZATION_LEVEL config was intentionally omitted from StreamChatUI.podspec or if it's an oversight: Add SWIFT_OPTIMIZATION_LEVEL config to align with PR objectives and other podspecs. The verification confirms that StreamChat.podspec has spec.pod_target_xcconfig = { 'SWIFT_OPTIMIZATION_LEVEL' => '-Osize' }🤖 Prompt for AI Agents |
||
| end | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we use we use 5.10 like Package.swift?