mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-11-13 07:40:59 +00:00
8963180006
- iOS: microphone usage text for "Take Video", no-export-compliance flag, ExportOptions.plist for App Store Connect uploads, the unused push forwarders gone; CI builds with Xcode 26 and lints the property lists. - Android: version and signing from Gradle properties (unsigned without them), R8 with keep rules for TREK's and Capacitor's reflective classes, no Auto Backup of the session cookie, no external file provider path, template and Firebase leftovers removed, keystores and service accounts ignored, full-size adaptive icon layers with a monochrome layer; CI also builds the release APK. - native-release.yml: signed bundle to a Play testing track and archive to TestFlight, by hand or on a v* tag, behind the store environment. - Version handshake: the server reports nativeApi 1, the app refuses a server below its minimum and tolerates an app older than the offline copy. - Address screen: privacy policy link, "Try the demo" and "What is a TREK server?"; the privacy link also in the app's server settings. Three new native strings in all 27 locales. - Donation links and the notices asking for one are hidden in the app. - Store listings for "TREK Travel Planner" in client/fastlane: texts, review notes with placeholders, privacy and account deletion page drafts, the feature graphic and icon, a length and image check in CI, and a Playwright store project with the scripts that turn its captures into screenshots. - Docs: wiki/Native-Apps.md, README no longer says there is no store app.
133 lines
3.9 KiB
YAML
133 lines
3.9 KiB
YAML
name: Native apps
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
# Builds the iOS and Android shells whenever they, their address screen or the
|
|
# Capacitor plugins change. Nobody on the team has to own a Mac for the Swift
|
|
# side to be compiled on every change, and every run leaves a debug APK to
|
|
# install on a phone.
|
|
#
|
|
# Unsigned on purpose: signing and store uploads need secrets that fork PRs do
|
|
# not get, and belong in a release workflow of their own.
|
|
on:
|
|
pull_request:
|
|
paths:
|
|
- 'client/android/**'
|
|
- 'client/ios/**'
|
|
- 'client/native-shell/**'
|
|
- 'client/src/native/trekShell.ts'
|
|
- 'client/src/native/serverAddress.ts'
|
|
- 'client/capacitor.config.ts'
|
|
- 'client/vite.native.config.js'
|
|
- 'client/scripts/check-store-metadata.mjs'
|
|
- 'client/fastlane/**'
|
|
- 'client/package.json'
|
|
- 'package-lock.json'
|
|
- 'shared/src/i18n/*/native.ts'
|
|
- '.github/workflows/native.yml'
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: native-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
# The store texts fit their limits and every listing image has its size and
|
|
# no alpha channel (client/fastlane/README.md). Plain Node, no install.
|
|
metadata:
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 5
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version-file: .nvmrc
|
|
|
|
- name: Check the store listings
|
|
run: node client/scripts/check-store-metadata.mjs
|
|
|
|
android:
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 30
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version-file: .nvmrc
|
|
cache: npm
|
|
|
|
- uses: actions/setup-java@v5
|
|
with:
|
|
distribution: temurin
|
|
java-version: 21
|
|
cache: gradle
|
|
|
|
- name: Install
|
|
run: npm ci --workspace=shared --workspace=client
|
|
|
|
- name: Build shared
|
|
run: npm run build --workspace=shared
|
|
|
|
- name: Build the address screen and sync it into the shells
|
|
working-directory: client
|
|
run: npm run cap:sync -- android
|
|
|
|
# The release build runs R8 with the keep rules in proguard-rules.pro, so a
|
|
# rule that goes missing fails here rather than in the store build. It is
|
|
# unsigned: the upload key only exists in native-release.yml.
|
|
- name: Assemble debug and release APKs
|
|
working-directory: client/android
|
|
run: ./gradlew assembleDebug assembleRelease lintDebug --no-daemon
|
|
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: trek-android-debug
|
|
path: client/android/app/build/outputs/apk/debug/app-debug.apk
|
|
retention-days: 14
|
|
|
|
ios:
|
|
runs-on: macos-15
|
|
timeout-minutes: 40
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
# App Store uploads must be built with Xcode 26; the image's default is older.
|
|
- name: Select Xcode 26
|
|
run: |
|
|
XCODE=$(ls -d /Applications/Xcode_26*.app | sort -V | tail -1)
|
|
test -n "$XCODE"
|
|
sudo xcode-select -s "$XCODE"
|
|
xcodebuild -version
|
|
|
|
- name: Check the property lists
|
|
run: plutil -lint client/ios/App/App/Info.plist client/ios/ExportOptions.plist
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version-file: .nvmrc
|
|
cache: npm
|
|
|
|
- name: Install
|
|
run: npm ci --workspace=shared --workspace=client
|
|
|
|
- name: Build shared
|
|
run: npm run build --workspace=shared
|
|
|
|
- name: Build the address screen and sync it into the shells
|
|
working-directory: client
|
|
run: npm run cap:sync -- ios
|
|
|
|
- name: Build for the simulator
|
|
working-directory: client/ios/App
|
|
run: |
|
|
xcodebuild build \
|
|
-project App.xcodeproj \
|
|
-scheme App \
|
|
-configuration Debug \
|
|
-sdk iphonesimulator \
|
|
-destination 'generic/platform=iOS Simulator' \
|
|
CODE_SIGNING_ALLOWED=NO
|