Skip to content
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
6 changes: 2 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,10 @@ jobs:
fail-fast: false
matrix:
include:
- name: macOS 15, Xcode 26.2
slug: macos15
runner: macos-15
xcode: "26.2"
# The OS most users are on: build with its SDK and run the tests on
# it. GitHub names this image after its Xcode; it runs macOS 27.
# The app needs macOS 26 on Apple Silicon, so there is no older
# system or Intel Mac left to build for.
- name: macOS 27, Xcode 27
slug: macos27
runner: xcode-27
Expand Down
21 changes: 8 additions & 13 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,11 @@ jobs:
name: Tests must pass before a release is cut
uses: ./.github/workflows/ci.yml

# One DMG per architecture rather than a universal app: each download is
# half the size, and the Intel build says plainly that it cannot run the
# local MLX engines.
# Apple Silicon only: the app needs macOS 26 and the local engines need
# Apple Silicon, so an Intel build would be a download nobody can use well.
#
# Apple silicon is built with Xcode 27 on macOS 27, so the app is linked
# against the macOS 27 SDK and gets that system's behavior rather than a
# compatibility mode. macOS 27 does not run on Intel Macs, so the Intel
# build stays on the toolchain of the last system they run.
# Built with Xcode 27 on macOS 27, so the app is linked against the macOS 27
# SDK and gets that system's behavior rather than a compatibility mode.
build:
name: Build DMG (${{ matrix.arch }})
needs: [version, test]
Expand All @@ -58,9 +55,6 @@ jobs:
- arch: arm64
runner: xcode-27
xcode: "27"
- arch: x86_64
runner: macos-15
xcode: "26.2"
env:
VERSION: ${{ needs.version.outputs.version }}
steps:
Expand Down Expand Up @@ -95,8 +89,8 @@ jobs:
-project ClassNote.xcodeproj \
-scheme ClassNote

# The runner is Apple Silicon; x86_64 is cross-compiled. ARCHS pins the
# slice, since a Release build would otherwise make a universal binary.
# ARCHS pins the slice (project.yml does too), so the binary can never
# come out universal.
- name: Build Release (${{ matrix.arch }})
run: |
xcodebuild -project ClassNote.xcodeproj \
Expand Down Expand Up @@ -149,7 +143,8 @@ jobs:
name: ClassNote-dmg-${{ matrix.arch }}
path: ${{ env.DMG_NAME }}

# Once, after both builds: two matrix jobs creating the same release race.
# Its own job, after the build, so a release is only created once there is
# a DMG to attach.
release:
name: Publish GitHub Release
needs: build
Expand Down
13 changes: 2 additions & 11 deletions App/ClassNoteApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ struct ClassNoteApp: App {
MainWindowView()
.environmentObject(appState)
.frame(minWidth: 960, minHeight: 600)
.background(translationBridgeView)
.background(AppleTranslationBridgeView())
.captureWindowActions()
.id(appState.languageRefreshToken)
}
Expand All @@ -90,7 +90,7 @@ struct ClassNoteApp: App {
LiveSessionView(windowId: id)
.environmentObject(appState)
.frame(minWidth: 640, minHeight: 460)
.background(translationBridgeView)
.background(AppleTranslationBridgeView())
.captureWindowActions()
.id(appState.languageRefreshToken)
}
Expand Down Expand Up @@ -128,15 +128,6 @@ struct ClassNoteApp: App {
}
.menuBarExtraStyle(.window)
}

@ViewBuilder
private var translationBridgeView: some View {
if #available(macOS 15.0, *) {
AppleTranslationBridgeView()
} else {
EmptyView()
}
}
}

/// Observes `AppState` itself rather than taking a Bool from the scene body, so
Expand Down
Loading
Loading