From ae854e0426b540d9bd9e7860efbb00470143fe84 Mon Sep 17 00:00:00 2001 From: AX995 <114857503+AX995@users.noreply.github.com> Date: Wed, 28 Oct 2026 23:08:51 +0800 Subject: [PATCH 01/12] ci(ios): allow building the iOS IPA from forks --- .github/workflows/ios-ipa.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ios-ipa.yml b/.github/workflows/ios-ipa.yml index 23cd6997f..1e82aa4d6 100644 --- a/.github/workflows/ios-ipa.yml +++ b/.github/workflows/ios-ipa.yml @@ -1,3 +1,4 @@ + # SPDX-License-Identifier: AGPL-3.0-or-later # Copyright (C) 2026 FunnyCups (https://github.com/funnycups) @@ -42,7 +43,6 @@ env: jobs: build-debug-ipa: if: > - github.repository == 'funnycups/Luker' && ((github.event_name == 'push' && !startsWith(github.ref, 'refs/tags/')) || (github.event_name == 'workflow_dispatch' && github.event.inputs.build_type == 'debug')) runs-on: macos-15 steps: @@ -75,7 +75,6 @@ jobs: build-release-ipa: if: > - github.repository == 'funnycups/Luker' && ((github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')) || (github.event_name == 'workflow_dispatch' && github.event.inputs.build_type == 'release')) runs-on: macos-15 steps: From 475c7f3a5f040b65a6d4b2e5ade0480e4b092917 Mon Sep 17 00:00:00 2001 From: AX995 <114857503+AX995@users.noreply.github.com> Date: Wed, 28 Oct 2026 23:09:47 +0800 Subject: [PATCH 02/12] fix(ios): keep the web view inside the safe area --- ios-app/Luker/ViewController.swift | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/ios-app/Luker/ViewController.swift b/ios-app/Luker/ViewController.swift index c9c19c0a2..42d08274d 100644 --- a/ios-app/Luker/ViewController.swift +++ b/ios-app/Luker/ViewController.swift @@ -1,3 +1,4 @@ + // SPDX-License-Identifier: AGPL-3.0-or-later // Copyright (C) 2026 FunnyCups (https://github.com/funnycups) @@ -240,11 +241,15 @@ final class ViewController: UIViewController { webView.uiDelegate = self webView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(webView) + // Keep the web layer inside the safe area: the page uses viewport-fit=cover + // but never applies env(safe-area-inset-*), so a full-bleed web view puts the + // top bar under the Dynamic Island and the input under the home indicator. + view.backgroundColor = .systemBackground NSLayoutConstraint.activate([ - webView.leadingAnchor.constraint(equalTo: view.leadingAnchor), - webView.trailingAnchor.constraint(equalTo: view.trailingAnchor), - webView.topAnchor.constraint(equalTo: view.topAnchor), - webView.bottomAnchor.constraint(equalTo: view.bottomAnchor), + webView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor), + webView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor), + webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), + webView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), ]) self.webView = webView webView.load(URLRequest(url: runtime.serverURL)) From 926742a6106b68c4f7228464925beab8ae6d7084 Mon Sep 17 00:00:00 2001 From: AX995 <114857503+AX995@users.noreply.github.com> Date: Wed, 28 Oct 2026 23:48:58 +0800 Subject: [PATCH 03/12] ci(ios): build on macos-26 runners (macos-15 arm64 pool is saturated) --- .github/workflows/ios-ipa.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ios-ipa.yml b/.github/workflows/ios-ipa.yml index 1e82aa4d6..f314fa65a 100644 --- a/.github/workflows/ios-ipa.yml +++ b/.github/workflows/ios-ipa.yml @@ -1,4 +1,5 @@ + # SPDX-License-Identifier: AGPL-3.0-or-later # Copyright (C) 2026 FunnyCups (https://github.com/funnycups) @@ -44,7 +45,7 @@ jobs: build-debug-ipa: if: > ((github.event_name == 'push' && !startsWith(github.ref, 'refs/tags/')) || (github.event_name == 'workflow_dispatch' && github.event.inputs.build_type == 'debug')) - runs-on: macos-15 + runs-on: macos-26 steps: - name: Checkout uses: actions/checkout@v4 @@ -76,7 +77,7 @@ jobs: build-release-ipa: if: > ((github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')) || (github.event_name == 'workflow_dispatch' && github.event.inputs.build_type == 'release')) - runs-on: macos-15 + runs-on: macos-26 steps: - name: Checkout uses: actions/checkout@v4 From 1454da3048856331d9f61b47341ef9531f13d144 Mon Sep 17 00:00:00 2001 From: AX995 <114857503+AX995@users.noreply.github.com> Date: Thu, 29 Oct 2026 00:31:30 +0800 Subject: [PATCH 04/12] ci: probe which macOS runner pools are available --- .github/workflows/probe-runners.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/workflows/probe-runners.yml diff --git a/.github/workflows/probe-runners.yml b/.github/workflows/probe-runners.yml new file mode 100644 index 000000000..9dd903a1e --- /dev/null +++ b/.github/workflows/probe-runners.yml @@ -0,0 +1,14 @@ +name: Probe Runners +on: workflow_dispatch +jobs: + probe: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-14, macos-15, macos-26, macos-15-intel] + runs-on: ${{ matrix.os }} + steps: + - name: Where am I + run: sw_vers 2>/dev/null || uname -a + - name: Xcode + run: xcodebuild -version 2>/dev/null || echo "no xcodebuild" From 99030eef2f559490320fe1eb74af230e5e0c99cf Mon Sep 17 00:00:00 2001 From: AX995 <114857503+AX995@users.noreply.github.com> Date: Thu, 29 Oct 2026 01:14:51 +0800 Subject: [PATCH 05/12] ci: add Codemagic workflow for unsigned iOS builds --- codemagic.yaml | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 codemagic.yaml diff --git a/codemagic.yaml b/codemagic.yaml new file mode 100644 index 000000000..3fddc02cd --- /dev/null +++ b/codemagic.yaml @@ -0,0 +1,39 @@ +# Codemagic CI — builds the unsigned Luker iOS IPA without a Mac. +# Mirrors .github/workflows/ios-ipa.yml; the IPA is unsigned on purpose and is +# signed on-device with your own Apple ID (SideStore / AltStore). +workflows: + ios-unsigned: + name: Luker iOS unsigned IPA + instance_type: mac_mini_m2 + max_build_duration: 120 + environment: + node: latest + xcode: latest + vars: + NODEJS_MOBILE_ASSET_URL: "https://github.com/funnycups/nodejs-mobile/releases/latest/download/nodejs-mobile-ios.zip" + NODEJS_MOBILE_MIN_MAJOR: "24" + NODEJS_MOBILE_ENFORCE_MIN_MAJOR: "1" + cache: + cache_paths: + - ~/Library/Caches/Homebrew + - $HOME/.npm + scripts: + - name: Toolchain versions + script: | + node -v + npm -v + xcodebuild -version + - name: Install xcodegen + script: | + brew install xcodegen || brew upgrade xcodegen + - name: Build unsigned IPA + script: | + bash ios-app/scripts/build-ios-ipa.sh debug + artifacts: + - ios-app/dist/*.ipa + publishing: + email: + recipients: [] + notify: + success: false + failure: false From cffa278a312244249adf77f423680948498ed23a Mon Sep 17 00:00:00 2001 From: AX995 <114857503+AX995@users.noreply.github.com> Date: Thu, 29 Oct 2026 01:20:42 +0800 Subject: [PATCH 06/12] ci: fix codemagic.yaml validation (drop empty email publishing) --- codemagic.yaml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/codemagic.yaml b/codemagic.yaml index 3fddc02cd..d464754cc 100644 --- a/codemagic.yaml +++ b/codemagic.yaml @@ -1,3 +1,4 @@ + # Codemagic CI — builds the unsigned Luker iOS IPA without a Mac. # Mirrors .github/workflows/ios-ipa.yml; the IPA is unsigned on purpose and is # signed on-device with your own Apple ID (SideStore / AltStore). @@ -31,9 +32,3 @@ workflows: bash ios-app/scripts/build-ios-ipa.sh debug artifacts: - ios-app/dist/*.ipa - publishing: - email: - recipients: [] - notify: - success: false - failure: false From cc2419987a72a42c374dd0ba48b991e11e944b26 Mon Sep 17 00:00:00 2001 From: AX995 <114857503+AX995@users.noreply.github.com> Date: Thu, 29 Oct 2026 01:59:27 +0800 Subject: [PATCH 07/12] chore: restore upstream ios-ipa.yml on the PR branch --- .github/workflows/ios-ipa.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ios-ipa.yml b/.github/workflows/ios-ipa.yml index f314fa65a..4bab7acf2 100644 --- a/.github/workflows/ios-ipa.yml +++ b/.github/workflows/ios-ipa.yml @@ -1,5 +1,4 @@ - # SPDX-License-Identifier: AGPL-3.0-or-later # Copyright (C) 2026 FunnyCups (https://github.com/funnycups) @@ -44,8 +43,9 @@ env: jobs: build-debug-ipa: if: > + github.repository == 'funnycups/Luker' && ((github.event_name == 'push' && !startsWith(github.ref, 'refs/tags/')) || (github.event_name == 'workflow_dispatch' && github.event.inputs.build_type == 'debug')) - runs-on: macos-26 + runs-on: macos-15 steps: - name: Checkout uses: actions/checkout@v4 @@ -76,8 +76,9 @@ jobs: build-release-ipa: if: > + github.repository == 'funnycups/Luker' && ((github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')) || (github.event_name == 'workflow_dispatch' && github.event.inputs.build_type == 'release')) - runs-on: macos-26 + runs-on: macos-15 steps: - name: Checkout uses: actions/checkout@v4 From b17090c8092ecbaf527b127686cbd738dcd896bd Mon Sep 17 00:00:00 2001 From: AX995 <114857503+AX995@users.noreply.github.com> Date: Thu, 29 Oct 2026 01:59:43 +0800 Subject: [PATCH 08/12] chore: drop fork-only codemagic.yaml from the PR branch --- codemagic.yaml | 34 ---------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 codemagic.yaml diff --git a/codemagic.yaml b/codemagic.yaml deleted file mode 100644 index d464754cc..000000000 --- a/codemagic.yaml +++ /dev/null @@ -1,34 +0,0 @@ - -# Codemagic CI — builds the unsigned Luker iOS IPA without a Mac. -# Mirrors .github/workflows/ios-ipa.yml; the IPA is unsigned on purpose and is -# signed on-device with your own Apple ID (SideStore / AltStore). -workflows: - ios-unsigned: - name: Luker iOS unsigned IPA - instance_type: mac_mini_m2 - max_build_duration: 120 - environment: - node: latest - xcode: latest - vars: - NODEJS_MOBILE_ASSET_URL: "https://github.com/funnycups/nodejs-mobile/releases/latest/download/nodejs-mobile-ios.zip" - NODEJS_MOBILE_MIN_MAJOR: "24" - NODEJS_MOBILE_ENFORCE_MIN_MAJOR: "1" - cache: - cache_paths: - - ~/Library/Caches/Homebrew - - $HOME/.npm - scripts: - - name: Toolchain versions - script: | - node -v - npm -v - xcodebuild -version - - name: Install xcodegen - script: | - brew install xcodegen || brew upgrade xcodegen - - name: Build unsigned IPA - script: | - bash ios-app/scripts/build-ios-ipa.sh debug - artifacts: - - ios-app/dist/*.ipa From 460f126e39bbe77084eb6bbe3f0ade6ad0dd843a Mon Sep 17 00:00:00 2001 From: AX995 <114857503+AX995@users.noreply.github.com> Date: Thu, 29 Oct 2026 01:59:57 +0800 Subject: [PATCH 09/12] chore: drop fork-only runner probe workflow from the PR branch --- .github/workflows/probe-runners.yml | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 .github/workflows/probe-runners.yml diff --git a/.github/workflows/probe-runners.yml b/.github/workflows/probe-runners.yml deleted file mode 100644 index 9dd903a1e..000000000 --- a/.github/workflows/probe-runners.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Probe Runners -on: workflow_dispatch -jobs: - probe: - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, macos-14, macos-15, macos-26, macos-15-intel] - runs-on: ${{ matrix.os }} - steps: - - name: Where am I - run: sw_vers 2>/dev/null || uname -a - - name: Xcode - run: xcodebuild -version 2>/dev/null || echo "no xcodebuild" From 4babfae520057a430d77426676a70e133b61d1ac Mon Sep 17 00:00:00 2001 From: AX995 <114857503+AX995@users.noreply.github.com> Date: Thu, 29 Oct 2026 02:03:12 +0800 Subject: [PATCH 10/12] chore: normalize ios-ipa.yml to upstream content From 4152947fc4366b57780e48ac1d483b2c0a0a6b71 Mon Sep 17 00:00:00 2001 From: AX995 <114857503+AX995@users.noreply.github.com> Date: Thu, 29 Oct 2026 02:04:44 +0800 Subject: [PATCH 11/12] chore: drop stray leading newline in ios-ipa.yml --- .github/workflows/ios-ipa.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ios-ipa.yml b/.github/workflows/ios-ipa.yml index 4bab7acf2..23cd6997f 100644 --- a/.github/workflows/ios-ipa.yml +++ b/.github/workflows/ios-ipa.yml @@ -1,4 +1,3 @@ - # SPDX-License-Identifier: AGPL-3.0-or-later # Copyright (C) 2026 FunnyCups (https://github.com/funnycups) From 32392b141006414bacd348dd0dbec259c84f10c1 Mon Sep 17 00:00:00 2001 From: funnycups <105932603+funnycups@users.noreply.github.com> Date: Thu, 29 Oct 2026 14:28:47 +0800 Subject: [PATCH 12/12] Update ViewController.swift --- ios-app/Luker/ViewController.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/ios-app/Luker/ViewController.swift b/ios-app/Luker/ViewController.swift index 42d08274d..f66c568b1 100644 --- a/ios-app/Luker/ViewController.swift +++ b/ios-app/Luker/ViewController.swift @@ -1,4 +1,3 @@ - // SPDX-License-Identifier: AGPL-3.0-or-later // Copyright (C) 2026 FunnyCups (https://github.com/funnycups)