Comunidade

GitHub - patch-release/patch-swift · GitHub

O GitHub apresenta uma ferramenta chamada Patch que permite atualizações de código em aplicativos iOS nativos Swift sem necessidade de revisão da App Store, utilizando WebAssembly. A solução mantém o binário assinado inalterado e apenas a camada interpretada é atualizada, garantindo rollback instantâneo.

Compartilhar
Contribute to patch-release/patch-swift development by creating an account on GitHub.

Atualizações de código por ar em aplicativos nativos Swift iOS.

Escrava Swift comum. O Patch identifica quais partes podem ser executadas como WebAssembly, compila essas partes e as envia como um pequeno módulo que roda no dispositivo através do WasmKit. Seu binário App Store assinado nunca é alterado — apenas a camada interpretada é atualizada. Sem revisão da App Store, rollback instantâneo.

brew install patch-release/tap/patchcli
cd MyApp && patchcli init
Swift source ──▶ partition ──▶ WebAssembly ──▶ device (WasmKit)
                     │
                     └──▶ anything touching OS APIs stays in your signed binary

Não é React Native. Não é uma web view. Não é um runtime multiplataforma. CodePush e Expo/EAS Update atualizam um bundle JavaScript; Shorebird atualiza Dart. Este patch atualiza o Swift.

📖 docs.patchrelease.com · 🚀 patchrelease.com


Caminho O que é Licença
Sources/, Tests/ PatchSDK — o runtime no dispositivo: WasmKit, marshalling de valores, ciclo de vida de atualização, pontes do host, renderizador SwiftUI MIT
cli/ patchcli — o motor: particionamento, compilação Swift→WebAssembly, redução SwiftUI/UIKit, integração do projeto Apache-2.0
docs/ O site de documentação (Astro + Starlight) MIT
tools/ Mecanismo de medição de cobertura e ferramentas de desenvolvimento MIT

O SDK executa um intérprete WebAssembly dentro do aplicativo dos usuários, então é licenciado sob MIT — permissão máxima e audível. O motor está sob Apache-2.0 devido ao seu gratificação expressa de patentes.

O plano controlado hospedado — lançamentos, grupos, alvo, análises, auditoria, contas da equipe — é um serviço comercial e não está neste repositório. O protocolo de atualização que ele fala é documentado, então você pode servir patches do seu próprio infraestrutura: veja Executando-o por conta própria.

Requer iOS 16+ / macOS 14+ e Swift 6.

SDK — Swift Package Manager:

.package(url: "https://github.com/patch-release/patch-swift", from: "1.7.0")

CLI — Homebrew:

brew install patch-release/tap/patchcli

Ou construa-o a partir da fonte (veja abaixo).

O que pode e não pode atualizar

Este é o trecho que vale a pena ler antes de investir tempo.

Em 24 aplicativos reais, 74,6% dos corpos das views SwiftUI são baixados para WebAssembly e enviados por meio do ar. Por aplicativo, varia entre 45% a 98%.

Dezesseis desses são aplicativos de código aberto que você pode medir por conta própria, vinculados a commits exatos — 70,8% nessa subconjunto verificável. Os outros oito são nossos próprios aplicativos (89,1%), incluídos porque fazemos uso interno mas não publicamos. Ambos os números vêm de um censo comitado; citamos a combinação e mostramos a divisão em vez de apenas metade.

Três limites são permanentes:

  • A parede binária-símbolo. Um patch pode chamar apenas símbolos já vinculados em seu binário assinado. Novas frameworks, novos direitos e novos símbolos nativos precisam de uma nova versão no App Store.
  • Aproximadamente um quarto das views permanece nativo. Principalmente views filhas personalizadas que o motor não pode reconstruir e modificadores não suportados. Elas ainda renderizam — apenas fazem isso de forma nativa, do seu binário.
  • Mudar código nativo invalida patches pendentes. A camada nativa é impressa; edite-a e os patches construídos contra a antiga camada deixam de ser aplicados até que você se registre novamente. É o mecanismo de segurança, e é com o que as pessoas mais lidam.

Uma view que não pode baixar nunca fica silenciosamente quebrada, e se um patch falhar em rodar completamente, a SDK retorna ao código que você enviou para revisão. Uma atualização não pode levar o aplicativo abaixo.

Detalhes completos: o que Patch pode e não pode atualizar.

Eles são gerados de um censo comitado, não digitados à mão:

./corpus/fetch.sh                       # o corpus de código aberto, em commits fixos
./tools/swiftui-corpus-coverage/run.sh  # o censo

Isso imprime 70,8% — o subconjunto de código aberto, porque nossos próprios aplicativos não estão no clone. É o mesmo censo que produz a figura combinada de 74,6%; as linhas da primeira parte são simplesmente ignoradas como ausentes. Se você obter um número diferente para os aplicativos de código aberto, é um bug e gostaríamos de saber sobre isso.

Isso é permitido pela Apple?

Sim, sob a provisão do Contrato de Licença do Programa de Desenvolvedores que permite um aplicativo para baixar e executar código interpretado — a mesma provisão que Expo/EAS Update e CodePush têm utilizado por quase uma década em milhares de apps da App Store.

Seu binário assinado nunca é modificado, apenas atualizações de WebAssembly são interpretadas, e código corrigido pode alcançar o sistema somente através de funções host que seu binário já expõe. Leia os detalhes e as restrições: Conformidade com a Apple.

git clone https://github.com/patch-release/patch-swift
cd patch-swift

# SDK
swift build && swift test

# Engine
cd cli && swift build -c release
.build/release/patchcli --help

A compilação para WebAssembly também requer a ferramenta da swift.org mais o SDK de WebAssembly — a ferramentachain do Apple/Xcode não pode alvoar WebAssembly.

patchcli setup    # instala a versão fixada da toolchain + WASM SDK
patchcli doctor   # verifica sua configuração

A ordem PATH importa. Compilar o CLI para seu Mac usa a toolchain do Apple; compilar patches usa a swift.org. setup e doctor lidam com isso — se você estiver fazendo manualmente, coloque /usr/bin primeiro para builds de host e ~/.swiftly/bin primeiro para builds de WebAssembly.

Issues e pull requests são bem-vindos. Consulte CONTRIBUTING.md.

Dois itens tornam um relatório de bug imediatamente açãoável:

patchcli doctor --json   # versões, toolchain, estado do fingerprint — sem fonte

e, se uma visualização não foi patchada quando você esperava que fosse, o diagnóstico per-view demote que patchcli build já imprime.

Problemas de segurança: por favor, não abra um problema público — veja SECURITY.md.

SDK MIT · engine Apache-2.0 · consulte LICENSE, cli/LICENSE e NOTICE.

Fonte original

Conteúdo traduzido e adaptado pela redação do Notícias Mobile. Confira também a matéria na fonte original.

Leia a matéria completa