Files
xtremobile/.github/workflows/build-ios.yml
T
Claude 9ce707a702 ci(ios): n'exécute pas le build macOS pour les commits de documentation
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
2026-09-09 17:14:11 +00:00

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