Skip to content

[Infra] Build binaries with Xcode 16.2 x macos-14 #14606

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

Merged
merged 8 commits into from
Apr 2, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions .github/workflows/zip.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ jobs:
- uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126
Copy link
Contributor

@mikehardy mikehardy Apr 21, 2025

Choose a reason for hiding this comment

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

@ncooke3 just noticed this - wasn't expecting to see my name in your yaml 😆
Just a note that I've deprecated that action because I consider ccache to be superior due to more widespread adoption vs buildcache. Used to be ccache couldn't handle caching Xcode mobile builds so buildcache was the only option, but there is now a well-known set of options to use for ccache to achieve good caching behavior

Here is my ccache.conf if that helps:

max_size = 60G
sloppiness = clang_index_store,file_stat_matches,include_file_ctime,include_file_mtime,ivfsoverlay,pch_defines,modules,system_headers,time_macros
file_clone = true
depend_mode = true
inode_cache = true

alternatively you may specify all these things in environment like so:

https://github.com/invertase/react-native-firebase/blob/c26253c82f0a13f62608941d266a63071667cc16/.github/workflows/tests_e2e_ios.yml#L155-L159

in combo with ccache-action:

https://github.com/invertase/react-native-firebase/blob/c26253c82f0a13f62608941d266a63071667cc16/.github/workflows/tests_e2e_ios.yml#L83-L88

then the only other trick is to use relative paths for CC/CPLUSPLUS/LD/LDPLUSPLUS so that the ccache compiler/linker symlinks will be used instead of the real underlying compiler/linker

Example of that but it's environment too so lots of ways to achieve it:
https://github.com/invertase/react-native-firebase/blob/c26253c82f0a13f62608941d266a63071667cc16/package.json#L57

Hopefully that helps

Copy link
Member Author

Choose a reason for hiding this comment

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

Thanks, Mike! I will take a look at migrating the usage.

with:
cache_key: package-release
- name: Xcode 15.2
run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer
- name: Xcode 16.2
run: sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer
- uses: ruby/setup-ruby@354a1ad156761f5ee2b7b13fa8e09943a5e8d252 # v1
- name: Setup Bundler
run: ./scripts/setup_bundler.sh
Expand All @@ -61,8 +61,8 @@ jobs:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- name: Xcode 15.2
run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer
- name: Xcode 16.2
run: sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer
- name: Build
run: |
cd ReleaseTooling
Expand All @@ -81,8 +81,8 @@ jobs:
- uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126
with:
cache_key: package-head
- name: Xcode 15.2
run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer
- name: Xcode 16.2
run: sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer
- uses: ruby/setup-ruby@354a1ad156761f5ee2b7b13fa8e09943a5e8d252 # v1
- name: Setup Bundler
run: ./scripts/setup_bundler.sh
Expand Down Expand Up @@ -113,10 +113,10 @@ jobs:
matrix:
artifact: [Firebase-actions-dir, Firebase-actions-dir-dynamic]
build-env:
- os: macos-14
xcode: Xcode_15.2
- os: macos-15
xcode: Xcode_16.2
# - os: macos-15
# xcode: Xcode_16.3
runs-on: ${{ matrix.build-env.os }}
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -226,10 +226,10 @@ jobs:
matrix:
artifact: [Firebase-actions-dir, Firebase-actions-dir-dynamic]
build-env:
- os: macos-14
xcode: Xcode_15.2
- os: macos-15
xcode: Xcode_16.2
# - os: macos-15
# xcode: Xcode_16.3
runs-on: ${{ matrix.build-env.os }}
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -277,10 +277,10 @@ jobs:
matrix:
artifact: [Firebase-actions-dir, Firebase-actions-dir-dynamic]
build-env:
- os: macos-14
xcode: Xcode_15.2
- os: macos-15
xcode: Xcode_16.2
# - os: macos-15
# xcode: Xcode_16.3
runs-on: ${{ matrix.build-env.os }}
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -350,7 +350,7 @@ jobs:
strategy:
matrix:
os: [macos-14]
xcode: [Xcode_15.2]
xcode: [Xcode_16.2]
artifact: [Firebase-actions-dir, Firebase-actions-dir-dynamic]
runs-on: ${{ matrix.os }}
steps:
Expand Down Expand Up @@ -403,10 +403,10 @@ jobs:
matrix:
artifact: [Firebase-actions-dir, Firebase-actions-dir-dynamic]
build-env:
- os: macos-14
xcode: Xcode_15.2
- os: macos-15
xcode: Xcode_16.2
# - os: macos-15
# xcode: Xcode_16.3
runs-on: ${{ matrix.build-env.os }}
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -462,10 +462,10 @@ jobs:
matrix:
artifact: [Firebase-actions-dir, Firebase-actions-dir-dynamic]
build-env:
- os: macos-14
xcode: Xcode_15.2
- os: macos-15
xcode: Xcode_16.2
# - os: macos-15
# xcode: Xcode_16.3
runs-on: ${{ matrix.build-env.os }}
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -511,8 +511,8 @@ jobs:
FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1
runs-on: macos-14
steps:
- name: Xcode 15.2
run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer
- name: Xcode 16.2
run: sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer
- uses: actions/checkout@v4
- name: Get framework dir
uses: actions/[email protected]
Expand Down Expand Up @@ -546,10 +546,10 @@ jobs:
matrix:
artifact: [Firebase-actions-dir, Firebase-actions-dir-dynamic]
build-env:
- os: macos-14
xcode: Xcode_15.2
- os: macos-15
xcode: Xcode_16.2
# - os: macos-15
# xcode: Xcode_16.3
runs-on: ${{ matrix.build-env.os }}
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -602,10 +602,10 @@ jobs:
matrix:
artifact: [Firebase-actions-dir, Firebase-actions-dir-dynamic]
build-env:
- os: macos-14
xcode: Xcode_15.2
- os: macos-15
xcode: Xcode_16.2
# - os: macos-15
# xcode: Xcode_16.3
runs-on: ${{ matrix.build-env.os }}
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -657,10 +657,10 @@ jobs:
matrix:
artifact: [Firebase-actions-dir, Firebase-actions-dir-dynamic]
build-env:
- os: macos-14
xcode: Xcode_15.2
- os: macos-15
xcode: Xcode_16.2
# - os: macos-15
# xcode: Xcode_16.3
runs-on: ${{ matrix.build-env.os }}
steps:
- uses: actions/checkout@v4
Expand Down
4 changes: 4 additions & 0 deletions FirebaseCore/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# Unreleased
- [changed] Firebase now requires at least Xcode 16.2. See
https://developer.apple.com/news/?id=9s0rgdy9 for more info.

Comment on lines +1 to +4
Copy link
Member Author

Choose a reason for hiding this comment

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

Hi @mikehardy, heads up that firebase-ios-sdk's 10.12 release will require Xcode 16.2. This is in preparation for Apple's April 24 deadline to start releasing apps with Xcode 16: https://developer.apple.com/news/?id=9s0rgdy9

Copy link
Contributor

Choose a reason for hiding this comment

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

Ah - thanks for the heads up - we've got another similarly-tiny but nevertheless breaking change queued up over in react-native-firebase and I was looking for something/anything to bundle with it, this fits the bill.

# Firebase 11.8.0
- [deprecated] The zip and Carthage distributions of the Google Mobile Ads SDK
with Firebase are deprecated and will be removed in the next major release.
Expand Down
Loading