mirror of
https://github.com/R0m1k3/xtremobile.git
synced 2026-10-11 17:29:26 +02:00
Le workflow iOS tourne sur un runner macOS, facturé 10x en minutes Actions. Deux ajustements après les premiers runs : - paths-ignore sur les fichiers Markdown : un commit de documentation déclenchait un build complet pour rien. - generate_release_notes passe à false : les notes sont déjà produites par le workflow APK, et softprops/action-gh-release les ajoute au corps de la release à chaque publication — le corps de v1.7.1 porte ainsi plusieurs copies du lien de changelog. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WoXgHivbAphDk9ArgKDg8Q
84 lines
2.9 KiB
YAML
84 lines
2.9 KiB
YAML
# Construit un IPA *non signé* pour iPhone / iPad et le publie sur la GitHub
|
|
# Release de la version courante, à côté de l'APK Android.
|
|
#
|
|
# L'IPA n'est volontairement pas signé : la signature est faite au moment de
|
|
# l'installation par AltStore / SideStore / Sideloadly avec l'Apple ID de
|
|
# l'utilisateur (voir IOS_GUIDE.md). Aucun compte développeur n'est donc
|
|
# nécessaire pour produire ce fichier.
|
|
#
|
|
# Le job tourne sur un runner macOS (Xcode obligatoire) et consomme 10x plus
|
|
# de minutes GitHub Actions qu'un runner Linux : il n'est donc pas déclenché
|
|
# sur les pull requests.
|
|
name: Build iOS
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
# Un run macOS coûte 10x en minutes : inutile d'en lancer un pour une
|
|
# modification qui ne touche que de la documentation.
|
|
paths-ignore:
|
|
- '**.md'
|
|
- 'docs/**'
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: macos-15
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: subosito/flutter-action@v2
|
|
with:
|
|
channel: stable
|
|
flutter-version: 3.35.3
|
|
cache: true
|
|
|
|
- name: Read app version from pubspec.yaml
|
|
id: version
|
|
run: echo "version=$(grep '^version:' pubspec.yaml | awk '{print $2}' | cut -d+ -f1)" >> "$GITHUB_OUTPUT"
|
|
|
|
- run: flutter pub get
|
|
|
|
# Régénère ios/ (absent du dépôt) et applique les réglages IPTV :
|
|
# ATS, audio en arrière-plan, orientations iPad, bundle id.
|
|
- name: Prepare iOS project
|
|
run: ./scripts/prepare_ios.sh
|
|
|
|
- name: Generate iOS app icon
|
|
run: dart run flutter_launcher_icons -f flutter_launcher_icons-ios.yaml
|
|
|
|
- name: Build release app (unsigned)
|
|
run: flutter build ios --release --no-codesign
|
|
|
|
# Un IPA n'est qu'une archive zip contenant Payload/<App>.app.
|
|
- name: Package unsigned IPA
|
|
env:
|
|
VERSION: ${{ steps.version.outputs.version }}
|
|
run: |
|
|
cd build/ios/iphoneos
|
|
rm -rf Payload
|
|
mkdir Payload
|
|
cp -R Runner.app Payload/
|
|
zip -qry "$GITHUB_WORKSPACE/xtremobile-v${VERSION}-unsigned.ipa" Payload
|
|
|
|
- name: Upload IPA artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: xtremobile-v${{ steps.version.outputs.version }}-ipa
|
|
path: xtremobile-v${{ steps.version.outputs.version }}-unsigned.ipa
|
|
|
|
# Même tag que le workflow APK : l'IPA est ajouté à la release existante.
|
|
- name: Publish GitHub Release
|
|
if: github.ref == 'refs/heads/main'
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
tag_name: v${{ steps.version.outputs.version }}
|
|
name: XtremMobile v${{ steps.version.outputs.version }}
|
|
files: xtremobile-v${{ steps.version.outputs.version }}-unsigned.ipa
|
|
# Les notes sont déjà produites par le workflow APK ; les régénérer
|
|
# ici les ajouterait une seconde fois au corps de la release.
|
|
generate_release_notes: false
|