diff --git a/.github/workflows/mobile-build.yml b/.github/workflows/mobile-build.yml index accc127c..e3616f8d 100644 --- a/.github/workflows/mobile-build.yml +++ b/.github/workflows/mobile-build.yml @@ -8,7 +8,7 @@ on: jobs: build-ios: - runs-on: macos-latest-xlarge + runs-on: macos-26-xlarge steps: - uses: actions/checkout@v4 @@ -35,10 +35,10 @@ jobs: - name: Cache Xcode DerivedData and SourcePackages uses: irgaly/xcode-cache@v1 with: - key: xcode-cache-ios-${{ github.workflow }}-${{ hashFiles('**/Cargo.lock') }} + key: xcode-cache-ios-xcode26.2-${{ github.workflow }}-${{ hashFiles('**/Cargo.lock') }} restore-keys: | - xcode-cache-ios-${{ github.workflow }}- - xcode-cache-ios- + xcode-cache-ios-xcode26.2-${{ github.workflow }}- + xcode-cache-ios-xcode26.2- - name: Cache Cargo bin (Tauri CLI) uses: actions/cache@v4 @@ -60,9 +60,9 @@ jobs: path: | frontend/src-tauri/onnxruntime-ios frontend/src-tauri/onnxruntime-build - key: onnxruntime-ios-built-1.22.2-v1 + key: onnxruntime-ios-built-1.22.2-xcode26.2-v1 restore-keys: | - onnxruntime-ios-built-1.22.2- + onnxruntime-ios-built-1.22.2-xcode26.2- - name: Build ONNX Runtime for iOS from source if: steps.cache-onnxruntime.outputs.cache-hit != 'true' @@ -96,11 +96,13 @@ jobs: [target.aarch64-apple-ios.onnxruntime] rustc-link-search = ["${WORKSPACE}/frontend/src-tauri/onnxruntime-ios/onnxruntime.xcframework/ios-arm64"] - rustc-link-lib = ["static=onnxruntime"] + # Also link libc++ since ONNX Runtime is C++; overriding ort-sys link metadata + # suppresses the build script's cargo:rustc-link-lib=c++ + rustc-link-lib = ["static=onnxruntime", "c++"] [target.aarch64-apple-ios-sim.onnxruntime] rustc-link-search = ["${WORKSPACE}/frontend/src-tauri/onnxruntime-ios/onnxruntime.xcframework/ios-arm64-simulator"] - rustc-link-lib = ["static=onnxruntime"] + rustc-link-lib = ["static=onnxruntime", "c++"] EOF echo "Generated cargo config:" @@ -109,7 +111,7 @@ jobs: - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '16.4' + xcode-version: '26.2' - name: Install Tauri CLI run: | @@ -144,6 +146,9 @@ jobs: VITE_CLIENT_ID: ba5a14b5-d915-47b1-b7b1-afda52bc5fc6 # ONNX Runtime location for ort-sys crate ORT_LIB_LOCATION: ${{ github.workspace }}/frontend/src-tauri/onnxruntime-ios/onnxruntime.xcframework/ios-arm64 + # Ensure Swift bridge code is compiled with iOS 16+ deployment target + # to avoid references to removed swiftCompatibility back-deployment libraries + IPHONEOS_DEPLOYMENT_TARGET: '16.0' - name: Upload iOS App uses: actions/upload-artifact@v4 @@ -163,4 +168,4 @@ jobs: xcrun altool --upload-app --type ios \ --file "$IPA_PATH" \ --apiKey ${{ secrets.APPLE_API_KEY }} \ - --apiIssuer ${{ secrets.APPLE_API_ISSUER }} \ No newline at end of file + --apiIssuer ${{ secrets.APPLE_API_ISSUER }} diff --git a/.github/workflows/testflight-on-comment.yml b/.github/workflows/testflight-on-comment.yml index 92f88191..e2123d86 100644 --- a/.github/workflows/testflight-on-comment.yml +++ b/.github/workflows/testflight-on-comment.yml @@ -64,7 +64,7 @@ jobs: deploy-testflight: needs: check-comment if: needs.check-comment.outputs.should-deploy == 'true' - runs-on: macos-latest-xlarge + runs-on: macos-26-xlarge steps: - uses: actions/checkout@v4 with: @@ -93,10 +93,10 @@ jobs: - name: Cache Xcode DerivedData and SourcePackages uses: irgaly/xcode-cache@v1 with: - key: xcode-cache-testflight-${{ github.workflow }}-${{ hashFiles('**/Cargo.lock') }} + key: xcode-cache-testflight-xcode26.2-${{ github.workflow }}-${{ hashFiles('**/Cargo.lock') }} restore-keys: | - xcode-cache-testflight-${{ github.workflow }}- - xcode-cache-testflight- + xcode-cache-testflight-xcode26.2-${{ github.workflow }}- + xcode-cache-testflight-xcode26.2- - name: Cache Cargo bin (Tauri CLI) uses: actions/cache@v4 @@ -118,9 +118,9 @@ jobs: path: | frontend/src-tauri/onnxruntime-ios frontend/src-tauri/onnxruntime-build - key: onnxruntime-ios-built-1.22.2-v1 + key: onnxruntime-ios-built-1.22.2-xcode26.2-v1 restore-keys: | - onnxruntime-ios-built-1.22.2- + onnxruntime-ios-built-1.22.2-xcode26.2- - name: Build ONNX Runtime for iOS from source if: steps.cache-onnxruntime.outputs.cache-hit != 'true' @@ -154,11 +154,13 @@ jobs: [target.aarch64-apple-ios.onnxruntime] rustc-link-search = ["${WORKSPACE}/frontend/src-tauri/onnxruntime-ios/onnxruntime.xcframework/ios-arm64"] - rustc-link-lib = ["static=onnxruntime"] + # Also link libc++ since ONNX Runtime is C++; overriding ort-sys link metadata + # suppresses the build script's cargo:rustc-link-lib=c++ + rustc-link-lib = ["static=onnxruntime", "c++"] [target.aarch64-apple-ios-sim.onnxruntime] rustc-link-search = ["${WORKSPACE}/frontend/src-tauri/onnxruntime-ios/onnxruntime.xcframework/ios-arm64-simulator"] - rustc-link-lib = ["static=onnxruntime"] + rustc-link-lib = ["static=onnxruntime", "c++"] EOF echo "Generated cargo config:" @@ -167,7 +169,7 @@ jobs: - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '16.4' + xcode-version: '26.2' - name: Install Tauri CLI run: | @@ -202,6 +204,9 @@ jobs: VITE_CLIENT_ID: ba5a14b5-d915-47b1-b7b1-afda52bc5fc6 # ONNX Runtime location for ort-sys crate ORT_LIB_LOCATION: ${{ github.workspace }}/frontend/src-tauri/onnxruntime-ios/onnxruntime.xcframework/ios-arm64 + # Ensure Swift bridge code is compiled with iOS 16+ deployment target + # to avoid references to removed swiftCompatibility back-deployment libraries + IPHONEOS_DEPLOYMENT_TARGET: '16.0' - name: Submit to TestFlight run: | diff --git a/frontend/src-tauri/gen/apple/Podfile b/frontend/src-tauri/gen/apple/Podfile index 98ee0f28..2eab2243 100644 --- a/frontend/src-tauri/gen/apple/Podfile +++ b/frontend/src-tauri/gen/apple/Podfile @@ -1,7 +1,7 @@ # Uncomment the next line to define a global platform for your project target 'maple_iOS' do -platform :ios, '13.0' +platform :ios, '16.0' # Pods for maple_iOS end diff --git a/frontend/src-tauri/gen/apple/maple.xcodeproj/project.pbxproj b/frontend/src-tauri/gen/apple/maple.xcodeproj/project.pbxproj index b26d4c6e..8760c276 100644 --- a/frontend/src-tauri/gen/apple/maple.xcodeproj/project.pbxproj +++ b/frontend/src-tauri/gen/apple/maple.xcodeproj/project.pbxproj @@ -350,7 +350,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -407,7 +407,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -521,7 +521,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; diff --git a/frontend/src-tauri/gen/apple/project.yml b/frontend/src-tauri/gen/apple/project.yml index 8c624f46..e8a0737c 100644 --- a/frontend/src-tauri/gen/apple/project.yml +++ b/frontend/src-tauri/gen/apple/project.yml @@ -2,7 +2,7 @@ name: maple options: bundleIdPrefix: cloud.opensecret.maple deploymentTarget: - iOS: 13.0 + iOS: 16.0 fileGroups: [../../src] configs: debug: debug @@ -86,4 +86,4 @@ targets: basedOnDependencyAnalysis: false outputFiles: - $(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapp.a - - $(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a \ No newline at end of file + - $(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a diff --git a/frontend/src-tauri/tauri.conf.json b/frontend/src-tauri/tauri.conf.json index 3fce226d..ca9b20d3 100644 --- a/frontend/src-tauri/tauri.conf.json +++ b/frontend/src-tauri/tauri.conf.json @@ -85,7 +85,8 @@ "entitlements": "./Entitlements.plist" }, "iOS": { - "developmentTeam": "X773Y823TN" + "developmentTeam": "X773Y823TN", + "minimumSystemVersion": "16.0" }, "android": { "versionCode": 2000018000