Este tutorial documenta o processo completo para pegar um app Canvas (.msapp) do Power Apps, descompactar, editar no Kiro IDE, e reempacotar para reimportar no Power Apps Studio.
O Power Platform CLI (pac) roda sobre .NET. Instale via winget:
winget install Microsoft.DotNet.SDK.8 --accept-source-agreements --accept-package-agreementsVerifique:
dotnet --version
# Esperado: 8.x.xdotnet tool install --global Microsoft.PowerApps.CLI.Tool --version 1.32.6Nota: Versões mais recentes (2.x) podem ter incompatibilidades com .NET 8. A versão 1.32.6 é estável.
Adicione ao PATH (se necessário):
$env:PATH = "$env:USERPROFILE\.dotnet\tools;C:\Program Files\dotnet;" + $env:PATHVerifique:
pac canvas helpDeve mostrar os comandos: download, list, pack, unpack, create.
- Abra o Power Apps Studio (make.powerapps.com)
- Abra seu app no modo de edição
- Vá em Arquivo > Salvar como > Este computador
- Salve o arquivo
.msapp
pac canvas unpack --msapp "MeuApp.msapp" --sources "MeuApp_src"Isso cria a seguinte estrutura:
MeuApp_src/
├── Assets/ # Imagens e mídia
├── Connections/ # Conexões de dados
├── DataSources/ # Definições de data sources
├── Entropy/ # Metadados internos (não editar)
├── Other/ # Referências, componentes compilados
├── pkgs/ # Templates de controles PCF
├── Src/ # ⭐ CÓDIGO FONTE DAS TELAS
│ ├── App.fx.yaml # Configuração do App (OnStart, Theme)
│ ├── scr_Tela1.fx.yaml # Cada tela é um arquivo
│ ├── scr_Tela2.fx.yaml
│ ├── Components/ # Componentes reutilizáveis
│ ├── EditorState/ # Estado do editor (metadados)
│ └── Themes.json # Definição de temas
Importante: Erros
PA3013/PA3015durante o unpack são warnings de validação de roundtrip. Os arquivos são gerados mesmo assim.
NomeDaTela As screen:
Fill: =RGBA(255, 255, 255, 1)
OnVisible: =Set(varAtiva, true)
MeuBotao As modernButton:
Text: ="Clique aqui"
OnSelect: =Navigate(OutraTela, ScreenTransition.Fade)
X: =100
Y: =200
Width: =200
Height: =44
ZIndex: =1
MeuLabel As label:
Text: ="Olá mundo"
Color: =RGBA(0, 0, 0, 1)
Font: =Font.'Open Sans'
Size: =14
X: =100
Y: =300
ZIndex: =2| Controle | Sintaxe fx.yaml |
|---|---|
| Tela | NomeTela As screen: |
| Label | Nome As label: |
| Botão moderno | Nome As modernButton: |
| Retângulo | Nome As rectangle: |
| Ícone | Nome As icon: |
| Galeria vertical | Nome As gallery.galleryVertical: |
| Galeria horizontal | Nome As gallery.galleryHorizontal: |
| Seta | Nome As arrow: |
| Seta voltar | Nome As arrow.backArrow: |
| Texto moderno | Nome As modernText: |
| Input de texto | Nome As textInput: |
| Formulário | Nome As form: |
| Container auto-layout | Nome As groupContainer.verticalAutoLayoutContainer: |
| Container horizontal | Nome As groupContainer.horizontalAutoLayoutContainer: |
| Container grid | Nome As groupContainer.gridLayoutContainer: |
| Grupo | Nome As group: |
- Indentação: 4 espaços para propriedades, 8 para controles filhos
- Valores: Sempre começam com
=(são fórmulas Power Fx) - Strings: Use
="texto"com aspas dentro do= - Multi-linha: Use
|-para fórmulas longas - ZIndex: Obrigatório em cada controle (ordem de renderização)
- Hierarquia: Controles filhos ficam indentados dentro do pai
MinhaGaleria As gallery.galleryVertical:
Items: =Filter(Lead, Stage.Value = "Novo")
TemplateSize: =120
Height: =500
Width: =300
X: =0
Y: =100
ZIndex: =1
CardTitulo As label:
Text: =ThisItem.Title
Color: =RGBA(0, 0, 0, 1)
Height: =24
Width: =Parent.TemplateWidth - 20
X: =10
Y: =10
ZIndex: =1
CardValor As label:
Text: =ThisItem.Value
Height: =20
X: =10
Y: =36
ZIndex: =2App As appinfo:
BackEnabled: =true
OnStart: |-
=Set(varCor1, RGBA(15, 23, 42, 1));
Set(varCor2, RGBA(99, 102, 241, 1))
Theme: =TeamsTheme
Host As hostControl.DefaultHostControlVariant:
OnCancel: =false
OnEdit: =false
OnNew: =false
OnSave: =false
OnView: =falseAbra a pasta MeuApp_src/Src/ no Kiro e edite os arquivos .fx.yaml.
-
Criar nova tela: Crie um novo arquivo
scr_NovaTela.fx.yaml+ umEditorState/scr_NovaTela.editorstate.jsonmínimo:{ "ControlStates": {}, "TopParentName": "scr_NovaTela", "ScreenIndex": 0 } -
Referenciar data sources: Use os mesmos nomes que aparecem nos arquivos
DataSources/ -
Navegação entre telas:
=Navigate(NomeDaTela, ScreenTransition.Fade) -
Variáveis globais: Defina no
App.OnStarte use em qualquer tela
pac canvas pack --sources "MeuApp_src" --msapp "MeuApp_Editado.msapp"| Mensagem | Significado |
|---|---|
Warning PA2001: Checksum mismatch |
Normal — indica que você editou os fontes. Ignore. |
Error PA3003: Parse error |
Erro de sintaxe no .fx.yaml. Verifique indentação e formato. |
| Sem erros | Sucesso! |
- Abra make.powerapps.com
- Clique em Aplicativos > Importar aplicativo de tela
- Selecione o
.msappgerado - Reconecte as fontes de dados (SharePoint, Dataverse, etc.)
- Salve e publique
- Verifique se não há tabs (use apenas espaços)
- Verifique se todos os controles têm
ZIndex - Verifique se strings com caracteres especiais estão entre aspas
- Galeria deve usar o tipo correto:
gallery.galleryVertical(não apenasgallery)
- Confirme que criou o
.editorstate.jsoncorrespondente - Confirme que o nome da tela no YAML bate com o nome do arquivo
- São warnings de validação. O unpack funciona mesmo com esses erros.
- É um bug conhecido do pac CLI com apps criados em versões mais recentes do Power Apps.
# Adicione ao PATH da sessão:
$env:PATH = "$env:USERPROFILE\.dotnet\tools;C:\Program Files\dotnet;" + $env:PATH
# Ou para persistir, adicione ao perfil do PowerShell:
Add-Content $PROFILE '$env:PATH = "$env:USERPROFILE\.dotnet\tools;C:\Program Files\dotnet;" + $env:PATH'# 1. Instalar dependências (uma vez)
winget install Microsoft.DotNet.SDK.8 --accept-source-agreements --accept-package-agreements
dotnet tool install --global Microsoft.PowerApps.CLI.Tool --version 1.32.6
# 2. Configurar PATH
$env:PATH = "$env:USERPROFILE\.dotnet\tools;C:\Program Files\dotnet;" + $env:PATH
# 3. Descompactar
pac canvas unpack --msapp "MeuApp.msapp" --sources "MeuApp_src"
# 4. Editar arquivos em MeuApp_src/Src/*.fx.yaml
# 5. Reempacotar
pac canvas pack --sources "MeuApp_src" --msapp "MeuApp_Editado.msapp"
# 6. Importar no Power Apps Studio- O
pac canvas pack/unpackestá em Preview — pode ter bugs com apps complexos - Controles PCF customizados podem não descompactar corretamente
- Formulários com DataCards são complexos — prefira editar no Studio
- Conexões de dados precisam ser reconectadas após importação
- O formato
.fx.yamlé diferente do.pa.yaml(que aparece dentro do .msapp bruto)