Skip to content

Suporte a macOS: plataforma, empacotamento e distribuição no CD - #4

Merged
wevertonj merged 8 commits into
mainfrom
dev
Aug 23, 2026
Merged

wevertonj merged 8 commits into
mainfrom
dev

Conversation

@wevertonj

Copy link
Copy Markdown
Owner

Resumo

Fecha as Etapas 16 e 16.1 do plano — o macOS deixa de existir só na máquina do dev e passa a sair em todo release.

  • Etapa 16 — Suporte a macOS: PlatformInfo.isMacOS, AppTitleBar com variante da plataforma (semáforo nativo preservado, logo + nome centralizados), hiddenWindowAtLaunch() no runner, ícone do Dock arredondado e PRODUCT_NAME = Decima
  • Etapa 16.1 — Distribuição no CD: tool/macos/build_zip.sh (verifica a assinatura ad-hoc → ditto → dist/*.zip + .sha256), job build-macos no CI e release-macos no release
  • Etapa 17 (iOS): removida do escopo — sem Apple Developer Program pago não há caminho de distribuição

Mudança de processo

O canal dev do Firebase App Distribution foi aposentado: o CI não distribui mais nada, os builds ficam como artefato do Actions e o release.yml mantém o grupo stable intacto.

Artefato novo no release

decima-<versão>-macos.zip + .sha256 — binário universal (Apple Silicon + Intel), assinatura ad-hoc, macOS 10.15+.

Validação

  • flutter test — 709 testes verdes | flutter analyze — zero warnings | dart format — 0 mudanças
  • CI verde no push da dev (run 32665377105): build-macos em 4m49s, Decima.app 49,0 MB → zip de 20 MB, Signature=adhoc conferida
  • Verificação manual no MacBook (janela fixa, semáforo nativo, ícone no Dock) — validada
  • build-macos adicionado como 7º check obrigatório do ruleset main-protegida

Sem uma assinatura do Apple Developer Program não existe caminho de
distribuição para iOS: não há TestFlight nem App Store, e um build
assinado com Apple ID gratuito expira em 7 dias até no próprio
dispositivo. A Etapa 17 entregaria apenas um `flutter build ios
--no-codesign` verde — uma pasta que quebra a cada bump de dependência
e que ninguém consegue instalar.

O macOS permanece no escopo: a assinatura ad-hoc (`CODE_SIGN_IDENTITY`
= "-", default do template) produz um `.app` distribuível, com atrito
de Gatekeeper mas instalável.

Removido:

- Pasta `ios/` (52 arquivos versionados)
- `ios` e `remove_alpha_ios` do `flutter_launcher_icons.yaml`
- `ios_content_mode` do `flutter_native_splash.yaml`
- `**/ios/Flutter/.last_build_id` do `.gitignore`

Os dois pacotes de assets têm defaults opostos para a chave `ios`:
`flutter_launcher_icons` assume `false` quando ausente, enquanto
`flutter_native_splash` assume `true`. Por isso o splash ficou com
`ios: false` explícito e um comentário — apagar a linha reativaria a
geração.

Nenhuma linha de Dart foi alterada: os `case TargetPlatform.iOS:` em
`PlatformInfo` e os testes que os cobrem permanecem, porque o enum é do
Flutter e o `switch` precisa continuar exaustivo.

`flutter create --platforms=ios .` regenera o runner caso a assinatura
paga seja adquirida.
Stage 16 left macOS building only on the developer machine — no release
shipped a macOS artifact. tool/macos/build_zip.sh now verifies the ad-hoc
signature, compresses the bundle with ditto and writes the zip plus its
SHA-256 to dist/, mirroring the .deb and Windows installer flows.

CI gains build-macos (macos-latest, same gating as build-windows and
build-linux) and the release pipeline gains release-macos, whose artifact
joins the GitHub Release. ditto is mandatory here: upload-artifact keeps
neither permissions nor symlinks, so a raw .app would arrive unusable.
Pushes on dev no longer distribute the APK to the Firebase dev tester
group: the same build is already available as an Actions artifact and the
group never had real users. The CI now distributes nothing at all —
publishing happens only in release.yml, which keeps the stable group.

Drops the two distribution steps and the HAS_FIREBASE env from ci.yml;
the FIREBASE_SERVICE_ACCOUNT secret stays in use by the release pipeline.
The build-macos job runs in 4m49s on macos-latest, verifies the ad-hoc
signature of the 49.0 MB Decima.app and uploads a 20 MB zip. The ruleset
main-protegida now requires it as the seventh check.
@wevertonj
wevertonj merged commit ac89f12 into main Aug 23, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant