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 initSwift 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/patchcliOu construa-o a partir da fonte (veja abaixo).
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 censoIsso 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.
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 --helpA 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çãoA ordem PATH importa. Compilar o CLI para seu Mac usa a toolchain do Apple; compilar patches usa a swift.org.
setupedoctorlidam com isso — se você estiver fazendo manualmente, coloque/usr/binprimeiro para builds de host e~/.swiftly/binprimeiro 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 fontee, 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.

