@the-bearded-bear/claude-craft 8.8.1 → 8.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dev/i18n/de/Angular/commands/check-compliance.md +218 -168
- package/Dev/i18n/de/Common/agents/refactoring-specialist.md +146 -69
- package/Dev/i18n/de/Common/commands/add-technology.md +166 -68
- package/Dev/i18n/de/Common/commands/setup-ci.md +216 -33
- package/Dev/i18n/de/Laravel/commands/check-compliance.md +223 -115
- package/Dev/i18n/de/Python/checklists/new-feature.md +319 -44
- package/Dev/i18n/de/React/rules/02-architecture.md +483 -322
- package/Dev/i18n/de/React/rules/03-coding-standards.md +584 -368
- package/Dev/i18n/de/Symfony/commands/check-compliance.md +186 -114
- package/Dev/i18n/de/Symfony/rules/07-testing-symfony.md +679 -10
- package/Dev/i18n/de/UIUX/commands/a11y-component.md +284 -26
- package/Dev/i18n/de/UIUX/commands/design-tokens.md +199 -35
- package/Dev/i18n/de/UIUX/commands/user-flow.md +179 -16
- package/Dev/i18n/de/VueJS/commands/check-compliance.md +227 -102
- package/Dev/i18n/es/Angular/commands/check-compliance.md +217 -167
- package/Dev/i18n/es/Common/commands/add-technology.md +158 -60
- package/Dev/i18n/es/Laravel/commands/check-compliance.md +223 -115
- package/Dev/i18n/es/React/commands/check-testing.md +263 -169
- package/Dev/i18n/es/ReactNative/commands/check-testing.md +256 -198
- package/Dev/i18n/es/Symfony/commands/check-compliance.md +189 -117
- package/Dev/i18n/es/Symfony/commands/check-testing.md +301 -102
- package/Dev/i18n/es/Symfony/commands/migration-plan.md +267 -34
- package/Dev/i18n/es/UIUX/commands/a11y-component.md +274 -16
- package/Dev/i18n/es/UIUX/commands/design-tokens.md +186 -22
- package/Dev/i18n/es/UIUX/commands/user-flow.md +173 -10
- package/Dev/i18n/es/VueJS/commands/check-compliance.md +227 -102
- package/Dev/i18n/fr/Angular/commands/check-compliance.md +217 -167
- package/Dev/i18n/fr/Common/commands/ralph-run.md +138 -60
- package/Dev/i18n/fr/Laravel/commands/check-compliance.md +223 -115
- package/Dev/i18n/fr/React/commands/check-architecture.md +370 -53
- package/Dev/i18n/fr/React/commands/check-code-quality.md +454 -64
- package/Dev/i18n/fr/React/commands/check-testing.md +476 -102
- package/Dev/i18n/fr/Symfony/commands/check-compliance.md +188 -116
- package/Dev/i18n/fr/VueJS/commands/check-compliance.md +227 -102
- package/Dev/i18n/pt/Angular/commands/check-compliance.md +225 -175
- package/Dev/i18n/pt/Common/agents/ralph-conductor.md +211 -30
- package/Dev/i18n/pt/Common/commands/add-technology.md +149 -51
- package/Dev/i18n/pt/Common/commands/ralph-run.md +239 -35
- package/Dev/i18n/pt/Flutter/commands/analyze-performance.md +331 -46
- package/Dev/i18n/pt/Flutter/commands/check-compliance.md +234 -29
- package/Dev/i18n/pt/Flutter/commands/generate-feature.md +526 -51
- package/Dev/i18n/pt/Flutter/commands/generate-widget.md +515 -27
- package/Dev/i18n/pt/Flutter/commands/golden-update.md +322 -46
- package/Dev/i18n/pt/Flutter/commands/localization-check.md +278 -37
- package/Dev/i18n/pt/Laravel/commands/check-compliance.md +212 -104
- package/Dev/i18n/pt/React/commands/accessibility-check.md +151 -42
- package/Dev/i18n/pt/React/commands/bundle-analyze.md +300 -25
- package/Dev/i18n/pt/React/commands/check-architecture.md +369 -34
- package/Dev/i18n/pt/React/commands/check-code-quality.md +440 -34
- package/Dev/i18n/pt/React/commands/check-compliance.md +232 -62
- package/Dev/i18n/pt/React/commands/check-security.md +370 -31
- package/Dev/i18n/pt/React/commands/check-testing.md +473 -43
- package/Dev/i18n/pt/React/commands/generate-component.md +454 -19
- package/Dev/i18n/pt/React/commands/generate-hook.md +425 -24
- package/Dev/i18n/pt/React/commands/storybook-story.md +520 -35
- package/Dev/i18n/pt/ReactNative/commands/app-size.md +358 -387
- package/Dev/i18n/pt/ReactNative/commands/check-code-quality.md +246 -75
- package/Dev/i18n/pt/ReactNative/commands/check-compliance.md +191 -85
- package/Dev/i18n/pt/ReactNative/commands/check-security.md +363 -115
- package/Dev/i18n/pt/ReactNative/commands/check-testing.md +269 -79
- package/Dev/i18n/pt/ReactNative/commands/generate-screen.md +491 -324
- package/Dev/i18n/pt/ReactNative/commands/native-module.md +539 -82
- package/Dev/i18n/pt/ReactNative/commands/store-prepare.md +429 -185
- package/Dev/i18n/pt/ReactNative/rules/02-architecture.md +1084 -31
- package/Dev/i18n/pt/Symfony/commands/check-compliance.md +195 -123
- package/Dev/i18n/pt/UIUX/commands/a11y-audit.md +208 -24
- package/Dev/i18n/pt/UIUX/commands/a11y-component.md +281 -23
- package/Dev/i18n/pt/UIUX/commands/design-tokens.md +197 -33
- package/Dev/i18n/pt/UIUX/commands/user-flow.md +183 -20
- package/Dev/i18n/pt/VueJS/commands/check-compliance.md +228 -103
- package/Dev/i18n/pt/Workflow/commands/analyze.md +147 -146
- package/Dev/i18n/pt/Workflow/commands/design.md +205 -204
- package/Dev/i18n/pt/Workflow/commands/implement.md +184 -184
- package/Project/i18n/de/Sprint/commands/dev.md +339 -86
- package/Project/i18n/es/Sprint/commands/dev.md +342 -91
- package/Project/i18n/pt/Sprint/commands/dev.md +343 -92
- package/bundles/cursor/.cursorrules +1 -1
- package/bundles/windsurf/.windsurfrules +1 -1
- package/package.json +1 -1
|
@@ -1,243 +1,487 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Lista de Verificação para Publicação React Native nas Lojas
|
|
3
|
+
argument-hint: [arguments]
|
|
3
4
|
---
|
|
4
5
|
|
|
5
|
-
#
|
|
6
|
+
# Lista de Verificação para Publicação React Native nas Lojas
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
Você é um especialista em publicação mobile. Você deve preparar a aplicação para submissão à App Store (iOS) e ao Google Play Store (Android).
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
## Objetivo
|
|
12
|
-
|
|
13
|
-
Este comando guia através do processo completo de preparação para publicação nas lojas de aplicativos.
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## Modo Plano
|
|
18
|
-
|
|
19
|
-
> O modo plano é ativado automaticamente quando o escopo abrange vários módulos ou requer investigação transversal.
|
|
10
|
+
## Argumentos
|
|
11
|
+
$ARGUMENTS
|
|
20
12
|
|
|
21
|
-
|
|
13
|
+
Argumentos:
|
|
14
|
+
- (Opcional) Loja: ios, android, both
|
|
15
|
+
- (Opcional) Tipo: new, update
|
|
22
16
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
- [ ] Versão incrementada (semver)
|
|
26
|
-
- [ ] Build number incrementado
|
|
27
|
-
- [ ] Changelog preparado
|
|
28
|
-
- [ ] Release mode configurado
|
|
29
|
-
- [ ] Hermes habilitado
|
|
30
|
-
- [ ] ProGuard/R8 habilitado (Android)
|
|
31
|
-
- [ ] Secrets em variáveis de ambiente
|
|
32
|
-
|
|
33
|
-
### iOS
|
|
34
|
-
|
|
35
|
-
- [ ] CFBundleShortVersionString atualizado
|
|
36
|
-
- [ ] CFBundleVersion incrementado
|
|
37
|
-
- [ ] Provisioning profile válido
|
|
38
|
-
- [ ] Certificados de distribuição configurados
|
|
39
|
-
- [ ] Info.plist atualizado com descrições de permissões
|
|
40
|
-
- [ ] App icons configurados (todos os tamanhos)
|
|
41
|
-
- [ ] Launch screen configurada
|
|
42
|
-
|
|
43
|
-
### Android
|
|
44
|
-
|
|
45
|
-
- [ ] versionName atualizado
|
|
46
|
-
- [ ] versionCode incrementado
|
|
47
|
-
- [ ] Keystore configurado
|
|
48
|
-
- [ ] Assinatura de release configurada
|
|
49
|
-
- [ ] ProGuard rules configuradas
|
|
50
|
-
- [ ] Permissões no AndroidManifest.xml justificadas
|
|
51
|
-
- [ ] App icons configurados (todos os tamanhos)
|
|
52
|
-
- [ ] Splash screen configurada
|
|
53
|
-
|
|
54
|
-
---
|
|
17
|
+
Exemplo: `/reactnative:store-prepare both new`
|
|
55
18
|
|
|
56
|
-
##
|
|
19
|
+
## Modo de Planejamento
|
|
57
20
|
|
|
58
|
-
|
|
21
|
+
> O modo de planejamento é ativado automaticamente quando o escopo abrange múltiplos módulos ou requer investigação transversal.
|
|
59
22
|
|
|
60
|
-
|
|
61
|
-
- 1024x1024 (App Store)
|
|
62
|
-
- 180x180 (iPhone @3x)
|
|
63
|
-
- 120x120 (iPhone @2x)
|
|
64
|
-
- 167x167 (iPad Pro @2x)
|
|
23
|
+
## MISSÃO
|
|
65
24
|
|
|
66
|
-
|
|
67
|
-
- 512x512 (Google Play)
|
|
68
|
-
- xxxhdpi: 192x192
|
|
69
|
-
- xxhdpi: 144x144
|
|
70
|
-
- xhdpi: 96x96
|
|
71
|
-
- hdpi: 72x72
|
|
72
|
-
- mdpi: 48x48
|
|
25
|
+
### Etapa 1: Lista de Verificação Pré-Submissão
|
|
73
26
|
|
|
74
|
-
|
|
27
|
+
```
|
|
28
|
+
══════════════════════════════════════════════════════════════
|
|
29
|
+
📱 LISTA DE VERIFICAÇÃO PARA PUBLICAÇÃO NAS LOJAS
|
|
30
|
+
══════════════════════════════════════════════════════════════
|
|
75
31
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
- 5.5": 1242x2208
|
|
32
|
+
──────────────────────────────────────────────────────────────
|
|
33
|
+
🔧 CONFIGURAÇÃO TÉCNICA
|
|
34
|
+
──────────────────────────────────────────────────────────────
|
|
80
35
|
|
|
81
|
-
|
|
82
|
-
- Telefone: 1080x1920
|
|
83
|
-
- Tablet 7": 1920x1200
|
|
84
|
-
- Tablet 10": 2560x1600
|
|
36
|
+
### Versão e Build
|
|
85
37
|
|
|
86
|
-
|
|
38
|
+
[ ] Versão incrementada (semver)
|
|
39
|
+
- iOS: CFBundleShortVersionString
|
|
40
|
+
- Android: versionName
|
|
87
41
|
|
|
88
|
-
|
|
42
|
+
[ ] Número de build incrementado
|
|
43
|
+
- iOS: CFBundleVersion (inteiro)
|
|
44
|
+
- Android: versionCode (inteiro)
|
|
89
45
|
|
|
90
|
-
|
|
46
|
+
[ ] Changelog preparado para esta versão
|
|
91
47
|
|
|
92
|
-
|
|
93
|
-
# Limpar build anterior
|
|
94
|
-
cd ios && rm -rf build && cd ..
|
|
48
|
+
### Build de Release
|
|
95
49
|
|
|
96
|
-
|
|
97
|
-
|
|
50
|
+
[ ] Modo release configurado (sem modo dev)
|
|
51
|
+
[ ] Bundle JS otimizado
|
|
52
|
+
[ ] ProGuard/R8 habilitado (Android)
|
|
53
|
+
[ ] Bitcode desabilitado se necessário (iOS)
|
|
54
|
+
[ ] Hermes habilitado (recomendado)
|
|
98
55
|
|
|
99
|
-
|
|
100
|
-
cd ios
|
|
101
|
-
xcodebuild -workspace YourApp.xcworkspace \
|
|
102
|
-
-scheme YourApp \
|
|
103
|
-
-configuration Release \
|
|
104
|
-
-archivePath build/YourApp.xcarchive \
|
|
105
|
-
archive
|
|
56
|
+
### Segurança
|
|
106
57
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
58
|
+
[ ] Chaves de API em variáveis de ambiente
|
|
59
|
+
[ ] Nenhum segredo no código
|
|
60
|
+
[ ] Certificate pinning se necessário
|
|
61
|
+
[ ] Keystore assinada corretamente (Android)
|
|
62
|
+
[ ] Perfil de provisioning válido (iOS)
|
|
112
63
|
```
|
|
113
64
|
|
|
114
|
-
###
|
|
115
|
-
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
|
|
65
|
+
### Etapa 2: Configuração iOS
|
|
66
|
+
|
|
67
|
+
```xml
|
|
68
|
+
<!-- ios/{App}/Info.plist -->
|
|
69
|
+
|
|
70
|
+
<!-- Versão -->
|
|
71
|
+
<key>CFBundleShortVersionString</key>
|
|
72
|
+
<string>1.2.0</string>
|
|
73
|
+
<key>CFBundleVersion</key>
|
|
74
|
+
<string>45</string>
|
|
75
|
+
|
|
76
|
+
<!-- Permissões (com descrições para o usuário) -->
|
|
77
|
+
<key>NSCameraUsageDescription</key>
|
|
78
|
+
<string>Este app usa a câmera para escanear QR codes.</string>
|
|
79
|
+
|
|
80
|
+
<key>NSPhotoLibraryUsageDescription</key>
|
|
81
|
+
<string>Este app acessa suas fotos para permitir que você envie imagens.</string>
|
|
82
|
+
|
|
83
|
+
<key>NSLocationWhenInUseUsageDescription</key>
|
|
84
|
+
<string>Este app usa sua localização para exibir lojas próximas.</string>
|
|
85
|
+
|
|
86
|
+
<key>NSFaceIDUsageDescription</key>
|
|
87
|
+
<string>Este app usa o Face ID para proteger o acesso à sua conta.</string>
|
|
88
|
+
|
|
89
|
+
<key>NSMicrophoneUsageDescription</key>
|
|
90
|
+
<string>Este app usa o microfone para mensagens de voz.</string>
|
|
91
|
+
|
|
92
|
+
<!-- App Transport Security -->
|
|
93
|
+
<key>NSAppTransportSecurity</key>
|
|
94
|
+
<dict>
|
|
95
|
+
<key>NSAllowsArbitraryLoads</key>
|
|
96
|
+
<false/>
|
|
97
|
+
<!-- Exceções se necessário -->
|
|
98
|
+
</dict>
|
|
99
|
+
|
|
100
|
+
<!-- Capacidades exigidas -->
|
|
101
|
+
<key>UIRequiredDeviceCapabilities</key>
|
|
102
|
+
<array>
|
|
103
|
+
<string>armv7</string>
|
|
104
|
+
</array>
|
|
105
|
+
|
|
106
|
+
<!-- Orientações suportadas -->
|
|
107
|
+
<key>UISupportedInterfaceOrientations</key>
|
|
108
|
+
<array>
|
|
109
|
+
<string>UIInterfaceOrientationPortrait</string>
|
|
110
|
+
</array>
|
|
111
|
+
<key>UISupportedInterfaceOrientations~ipad</key>
|
|
112
|
+
<array>
|
|
113
|
+
<string>UIInterfaceOrientationPortrait</string>
|
|
114
|
+
<string>UIInterfaceOrientationLandscapeLeft</string>
|
|
115
|
+
<string>UIInterfaceOrientationLandscapeRight</string>
|
|
116
|
+
</array>
|
|
117
|
+
```
|
|
119
118
|
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
```ruby
|
|
120
|
+
# ios/Podfile - Configuração de release
|
|
121
|
+
post_install do |installer|
|
|
122
|
+
installer.pods_project.targets.each do |target|
|
|
123
|
+
target.build_configurations.each do |config|
|
|
124
|
+
# iOS mínimo
|
|
125
|
+
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
|
|
126
|
+
|
|
127
|
+
# Bitcode
|
|
128
|
+
config.build_settings['ENABLE_BITCODE'] = 'NO'
|
|
129
|
+
|
|
130
|
+
# Arquitetura
|
|
131
|
+
config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
```
|
|
122
136
|
|
|
123
|
-
|
|
124
|
-
|
|
137
|
+
### Etapa 3: Configuração Android
|
|
138
|
+
|
|
139
|
+
```groovy
|
|
140
|
+
// android/app/build.gradle
|
|
141
|
+
|
|
142
|
+
android {
|
|
143
|
+
compileSdkVersion 34
|
|
144
|
+
buildToolsVersion "34.0.0"
|
|
145
|
+
|
|
146
|
+
defaultConfig {
|
|
147
|
+
applicationId "com.example.myapp"
|
|
148
|
+
minSdkVersion 24
|
|
149
|
+
targetSdkVersion 34
|
|
150
|
+
versionCode 45
|
|
151
|
+
versionName "1.2.0"
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
signingConfigs {
|
|
155
|
+
release {
|
|
156
|
+
storeFile file(MYAPP_UPLOAD_STORE_FILE)
|
|
157
|
+
storePassword MYAPP_UPLOAD_STORE_PASSWORD
|
|
158
|
+
keyAlias MYAPP_UPLOAD_KEY_ALIAS
|
|
159
|
+
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
buildTypes {
|
|
164
|
+
release {
|
|
165
|
+
minifyEnabled true
|
|
166
|
+
shrinkResources true
|
|
167
|
+
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
|
168
|
+
signingConfig signingConfigs.release
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// App Bundle (recomendado)
|
|
173
|
+
bundle {
|
|
174
|
+
language {
|
|
175
|
+
enableSplit = false // Manter todos os idiomas
|
|
176
|
+
}
|
|
177
|
+
density {
|
|
178
|
+
enableSplit = true
|
|
179
|
+
}
|
|
180
|
+
abi {
|
|
181
|
+
enableSplit = true
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
```
|
|
125
186
|
|
|
126
|
-
|
|
127
|
-
#
|
|
128
|
-
|
|
187
|
+
```properties
|
|
188
|
+
# android/gradle.properties
|
|
189
|
+
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
|
|
190
|
+
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
|
|
191
|
+
MYAPP_UPLOAD_STORE_PASSWORD=***
|
|
192
|
+
MYAPP_UPLOAD_KEY_PASSWORD=***
|
|
193
|
+
|
|
194
|
+
# Otimização de build
|
|
195
|
+
org.gradle.jvmargs=-Xmx4g
|
|
196
|
+
org.gradle.daemon=true
|
|
197
|
+
org.gradle.parallel=true
|
|
129
198
|
```
|
|
130
199
|
|
|
131
|
-
|
|
200
|
+
### Etapa 4: Recursos de Marketing
|
|
132
201
|
|
|
133
|
-
|
|
202
|
+
```
|
|
203
|
+
══════════════════════════════════════════════════════════════
|
|
204
|
+
🎨 RECURSOS NECESSÁRIOS
|
|
205
|
+
══════════════════════════════════════════════════════════════
|
|
206
|
+
|
|
207
|
+
──────────────────────────────────────────────────────────────
|
|
208
|
+
🍎 APP STORE (iOS)
|
|
209
|
+
──────────────────────────────────────────────────────────────
|
|
210
|
+
|
|
211
|
+
### Ícone do App
|
|
212
|
+
- 1024x1024 px (PNG, sem transparência, sem cantos arredondados)
|
|
213
|
+
|
|
214
|
+
### Screenshots do iPhone
|
|
215
|
+
Tamanhos obrigatórios (pelo menos um):
|
|
216
|
+
- iPhone 6.7" (1290 × 2796 px) - iPhone 15 Pro Max
|
|
217
|
+
- iPhone 6.5" (1242 × 2688 px) - iPhone 11 Pro Max
|
|
218
|
+
- iPhone 5.5" (1242 × 2208 px) - iPhone 8 Plus
|
|
219
|
+
|
|
220
|
+
### Screenshots do iPad
|
|
221
|
+
Tamanhos obrigatórios (se iPad suportado):
|
|
222
|
+
- iPad Pro 12.9" (2048 × 2732 px)
|
|
223
|
+
- iPad Pro 11" (1668 × 2388 px)
|
|
224
|
+
|
|
225
|
+
### Prévia do App (vídeo opcional)
|
|
226
|
+
- 15-30 segundos
|
|
227
|
+
- Formato .mov ou .mp4
|
|
228
|
+
- Mesmas resoluções que os screenshots
|
|
229
|
+
|
|
230
|
+
### Textos
|
|
231
|
+
- Nome do app (máximo 30 caracteres)
|
|
232
|
+
- Subtítulo (máximo 30 caracteres)
|
|
233
|
+
- Descrição (máximo 4000 caracteres)
|
|
234
|
+
- Palavras-chave (máximo 100 caracteres, separadas por vírgula)
|
|
235
|
+
- URL de suporte
|
|
236
|
+
- URL de política de privacidade
|
|
237
|
+
- Notas de versão (máximo 4000 caracteres)
|
|
238
|
+
|
|
239
|
+
──────────────────────────────────────────────────────────────
|
|
240
|
+
🤖 GOOGLE PLAY (Android)
|
|
241
|
+
──────────────────────────────────────────────────────────────
|
|
242
|
+
|
|
243
|
+
### Ícone do App
|
|
244
|
+
- 512x512 px (PNG 32-bit com alpha)
|
|
245
|
+
|
|
246
|
+
### Imagem de Destaque (Feature Graphic)
|
|
247
|
+
- 1024x500 px (PNG ou JPG)
|
|
248
|
+
|
|
249
|
+
### Screenshots do Celular
|
|
250
|
+
- Mínimo 2, máximo 8
|
|
251
|
+
- 16:9 ou 9:16
|
|
252
|
+
- Mínimo 320px, máximo 3840px
|
|
253
|
+
- PNG ou JPG
|
|
254
|
+
|
|
255
|
+
### Screenshots de Tablet 7"
|
|
256
|
+
- Opcional, mas recomendado
|
|
257
|
+
- Mesmas especificações que celular
|
|
258
|
+
|
|
259
|
+
### Screenshots de Tablet 10"
|
|
260
|
+
- Opcional, mas recomendado
|
|
261
|
+
|
|
262
|
+
### Vídeo promocional (opcional)
|
|
263
|
+
- URL do YouTube
|
|
264
|
+
- Não listado ou público
|
|
265
|
+
|
|
266
|
+
### Textos
|
|
267
|
+
- Título (máximo 50 caracteres)
|
|
268
|
+
- Descrição curta (máximo 80 caracteres)
|
|
269
|
+
- Descrição completa (máximo 4000 caracteres)
|
|
270
|
+
- Notas de versão (máximo 500 caracteres)
|
|
271
|
+
- URL de política de privacidade
|
|
272
|
+
- E-mail do desenvolvedor
|
|
273
|
+
```
|
|
134
274
|
|
|
135
|
-
###
|
|
275
|
+
### Etapa 5: Build e Assinatura
|
|
136
276
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
- [ ] Descrição completa
|
|
141
|
-
- [ ] Keywords / Tags
|
|
142
|
-
- [ ] Categoria principal
|
|
143
|
-
- [ ] Classificação etária
|
|
144
|
-
- [ ] Política de privacidade URL
|
|
145
|
-
- [ ] Termos de serviço URL
|
|
146
|
-
- [ ] Website URL
|
|
147
|
-
- [ ] Email de suporte
|
|
277
|
+
```bash
|
|
278
|
+
#!/bin/bash
|
|
279
|
+
# scripts/build-release.sh
|
|
148
280
|
|
|
149
|
-
|
|
281
|
+
set -e
|
|
150
282
|
|
|
151
|
-
|
|
152
|
-
- [ ] Screenshots localizados
|
|
153
|
-
- [ ] Descrições localizadas
|
|
283
|
+
echo "📱 Construindo Release..."
|
|
154
284
|
|
|
155
|
-
|
|
285
|
+
# Variáveis
|
|
286
|
+
VERSION=$(node -p "require('./package.json').version")
|
|
287
|
+
BUILD_NUMBER=$(date +%Y%m%d%H%M)
|
|
156
288
|
|
|
157
|
-
|
|
289
|
+
echo "Versão: $VERSION"
|
|
290
|
+
echo "Build: $BUILD_NUMBER"
|
|
158
291
|
|
|
159
|
-
|
|
292
|
+
# iOS
|
|
293
|
+
echo "🍎 Construindo iOS..."
|
|
294
|
+
cd ios
|
|
160
295
|
|
|
161
|
-
|
|
162
|
-
-
|
|
163
|
-
- [ ] Notificações push testadas
|
|
164
|
-
- [ ] Deep links testados
|
|
165
|
-
- [ ] Compartilhamento testado
|
|
166
|
-
- [ ] Permissões testadas
|
|
296
|
+
# Atualizar número de build
|
|
297
|
+
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" {App}/Info.plist
|
|
167
298
|
|
|
168
|
-
|
|
299
|
+
# Arquivar
|
|
300
|
+
xcodebuild -workspace {App}.xcworkspace \
|
|
301
|
+
-scheme {App} \
|
|
302
|
+
-configuration Release \
|
|
303
|
+
-archivePath build/{App}.xcarchive \
|
|
304
|
+
archive
|
|
169
305
|
|
|
170
|
-
|
|
171
|
-
-
|
|
172
|
-
-
|
|
173
|
-
-
|
|
174
|
-
-
|
|
306
|
+
# Exportar IPA
|
|
307
|
+
xcodebuild -exportArchive \
|
|
308
|
+
-archivePath build/{App}.xcarchive \
|
|
309
|
+
-exportPath build \
|
|
310
|
+
-exportOptionsPlist ExportOptions.plist
|
|
175
311
|
|
|
176
|
-
|
|
312
|
+
cd ..
|
|
177
313
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
- [ ] Guidelines da loja seguidas
|
|
314
|
+
# Android
|
|
315
|
+
echo "🤖 Construindo Android..."
|
|
316
|
+
cd android
|
|
182
317
|
|
|
183
|
-
|
|
318
|
+
# Atualizar versionCode no build.gradle ou via variável
|
|
319
|
+
./gradlew bundleRelease
|
|
184
320
|
|
|
185
|
-
|
|
321
|
+
# Opcional: também gerar APK
|
|
322
|
+
./gradlew assembleRelease
|
|
186
323
|
|
|
187
|
-
|
|
324
|
+
cd ..
|
|
188
325
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
5. Selecionar build para revisão
|
|
194
|
-
6. Responder questões de compliance
|
|
195
|
-
7. Submeter para revisão
|
|
326
|
+
echo "✅ Build concluído!"
|
|
327
|
+
echo "iOS: ios/build/{App}.ipa"
|
|
328
|
+
echo "Android: android/app/build/outputs/bundle/release/app-release.aab"
|
|
329
|
+
```
|
|
196
330
|
|
|
197
|
-
|
|
331
|
+
```plist
|
|
332
|
+
<!-- ios/ExportOptions.plist -->
|
|
333
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
334
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
335
|
+
<plist version="1.0">
|
|
336
|
+
<dict>
|
|
337
|
+
<key>method</key>
|
|
338
|
+
<string>app-store</string>
|
|
339
|
+
<key>teamID</key>
|
|
340
|
+
<string>XXXXXXXXXX</string>
|
|
341
|
+
<key>uploadBitcode</key>
|
|
342
|
+
<false/>
|
|
343
|
+
<key>uploadSymbols</key>
|
|
344
|
+
<true/>
|
|
345
|
+
</dict>
|
|
346
|
+
</plist>
|
|
347
|
+
```
|
|
198
348
|
|
|
199
|
-
|
|
200
|
-
2. Preencher metadados
|
|
201
|
-
3. Upload de screenshots
|
|
202
|
-
4. Upload do AAB/APK
|
|
203
|
-
5. Configurar países e preço
|
|
204
|
-
6. Responder questões de compliance
|
|
205
|
-
7. Submeter para revisão
|
|
349
|
+
### Etapa 6: Submissão
|
|
206
350
|
|
|
207
|
-
|
|
351
|
+
#### iOS - App Store Connect
|
|
208
352
|
|
|
209
|
-
|
|
353
|
+
```bash
|
|
354
|
+
# Via Xcode
|
|
355
|
+
# Xcode > Product > Archive > Distribute App
|
|
356
|
+
|
|
357
|
+
# Via linha de comando (Transporter)
|
|
358
|
+
xcrun altool --upload-app \
|
|
359
|
+
-f build/{App}.ipa \
|
|
360
|
+
-t ios \
|
|
361
|
+
-u "apple-id@example.com" \
|
|
362
|
+
-p "@keychain:AC_PASSWORD"
|
|
363
|
+
|
|
364
|
+
# Ou via Fastlane
|
|
365
|
+
fastlane ios release
|
|
366
|
+
```
|
|
210
367
|
|
|
211
|
-
|
|
212
|
-
- [ ] Responder a solicitações do review team
|
|
213
|
-
- [ ] Preparar release notes
|
|
214
|
-
- [ ] Configurar staged rollout (Google Play)
|
|
215
|
-
- [ ] Monitorar crashes pós-lançamento
|
|
216
|
-
- [ ] Monitorar reviews e feedback
|
|
217
|
-
- [ ] Preparar hotfix se necessário
|
|
368
|
+
#### Android - Google Play Console
|
|
218
369
|
|
|
219
|
-
|
|
370
|
+
```bash
|
|
371
|
+
# Via Play Console web
|
|
372
|
+
# https://play.google.com/console
|
|
220
373
|
|
|
221
|
-
|
|
374
|
+
# Ou via Fastlane
|
|
375
|
+
fastlane android release
|
|
222
376
|
|
|
223
|
-
|
|
224
|
-
-
|
|
225
|
-
- **TestFlight**: Beta testing (iOS)
|
|
226
|
-
- **Google Play Beta**: Beta testing (Android)
|
|
377
|
+
# Ou via bundletool
|
|
378
|
+
bundletool build-apks --bundle=app-release.aab --output=app.apks
|
|
227
379
|
|
|
228
|
-
|
|
380
|
+
# Via Google Play Developer API
|
|
381
|
+
# (requer conta de serviço)
|
|
382
|
+
```
|
|
229
383
|
|
|
230
|
-
|
|
384
|
+
### Etapa 7: Lista de Verificação Final
|
|
231
385
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
386
|
+
```
|
|
387
|
+
══════════════════════════════════════════════════════════════
|
|
388
|
+
✅ LISTA DE VERIFICAÇÃO FINAL PRÉ-SUBMISSÃO
|
|
389
|
+
══════════════════════════════════════════════════════════════
|
|
390
|
+
|
|
391
|
+
──────────────────────────────────────────────────────────────
|
|
392
|
+
📱 TESTES
|
|
393
|
+
──────────────────────────────────────────────────────────────
|
|
394
|
+
|
|
395
|
+
[ ] App testado em dispositivo físico iOS
|
|
396
|
+
[ ] App testado em dispositivo físico Android
|
|
397
|
+
[ ] Testes em versões mais antigas do SO (iOS 13, Android 7)
|
|
398
|
+
[ ] Testes em diferentes tamanhos de tela
|
|
399
|
+
[ ] Testes no modo escuro
|
|
400
|
+
[ ] Testes offline
|
|
401
|
+
[ ] Testes com dados reais
|
|
402
|
+
[ ] Testes de performance
|
|
403
|
+
[ ] Testes de Crash/ANR
|
|
404
|
+
[ ] Testes de acessibilidade (VoiceOver, TalkBack)
|
|
405
|
+
|
|
406
|
+
──────────────────────────────────────────────────────────────
|
|
407
|
+
🔒 CONFORMIDADE
|
|
408
|
+
──────────────────────────────────────────────────────────────
|
|
409
|
+
|
|
410
|
+
[ ] Política de privacidade acessível
|
|
411
|
+
[ ] Termos de serviço
|
|
412
|
+
[ ] Conformidade com LGPD/GDPR (se aplicável)
|
|
413
|
+
- Consentimento de cookies
|
|
414
|
+
- Direito à exclusão
|
|
415
|
+
- Exportação de dados
|
|
416
|
+
[ ] Conformidade com COPPA (se destinado a crianças)
|
|
417
|
+
[ ] Declarações de permissões
|
|
418
|
+
[ ] Nenhum conteúdo proibido
|
|
419
|
+
|
|
420
|
+
──────────────────────────────────────────────────────────────
|
|
421
|
+
🍎 ESPECÍFICO iOS
|
|
422
|
+
──────────────────────────────────────────────────────────────
|
|
423
|
+
|
|
424
|
+
[ ] Diretrizes de revisão do App cumpridas
|
|
425
|
+
[ ] Sem links para lojas externas
|
|
426
|
+
[ ] In-App Purchase se conteúdo digital
|
|
427
|
+
[ ] Sign in with Apple se outras autenticações sociais
|
|
428
|
+
[ ] App Tracking Transparency se rastreamento
|
|
429
|
+
[ ] Perfil de provisioning válido
|
|
430
|
+
[ ] Notificações push configuradas (se aplicável)
|
|
431
|
+
[ ] Testado no TestFlight
|
|
432
|
+
|
|
433
|
+
──────────────────────────────────────────────────────────────
|
|
434
|
+
🤖 ESPECÍFICO ANDROID
|
|
435
|
+
──────────────────────────────────────────────────────────────
|
|
436
|
+
|
|
437
|
+
[ ] Nível de API alvo recente (34+)
|
|
438
|
+
[ ] Políticas do Play Store cumpridas
|
|
439
|
+
[ ] Formulário de segurança de dados preenchido
|
|
440
|
+
[ ] Questionário de classificação de conteúdo
|
|
441
|
+
[ ] Assinatura do app pelo Google Play
|
|
442
|
+
[ ] Testes interno/fechado realizados
|
|
443
|
+
[ ] Lançamento gradual planejado
|
|
444
|
+
|
|
445
|
+
──────────────────────────────────────────────────────────────
|
|
446
|
+
📄 DOCUMENTOS PRONTOS
|
|
447
|
+
──────────────────────────────────────────────────────────────
|
|
448
|
+
|
|
449
|
+
[ ] Screenshots em todos os idiomas suportados
|
|
450
|
+
[ ] Imagem de destaque (Android)
|
|
451
|
+
[ ] Ícone do app em alta resolução
|
|
452
|
+
[ ] Descrições em todos os idiomas
|
|
453
|
+
[ ] Notas de versão
|
|
454
|
+
[ ] Vídeo promocional (opcional)
|
|
455
|
+
|
|
456
|
+
──────────────────────────────────────────────────────────────
|
|
457
|
+
🚀 SUBMISSÃO
|
|
458
|
+
──────────────────────────────────────────────────────────────
|
|
459
|
+
|
|
460
|
+
[ ] Build enviado ao App Store Connect
|
|
461
|
+
[ ] Build enviado ao Play Console
|
|
462
|
+
[ ] Metadados completos
|
|
463
|
+
[ ] Preço e disponibilidade configurados
|
|
464
|
+
[ ] Data de lançamento escolhida (imediata ou agendada)
|
|
465
|
+
[ ] Perguntas de revisão preparadas
|
|
466
|
+
```
|
|
240
467
|
|
|
241
|
-
|
|
468
|
+
### Etapa 8: Pós-Publicação
|
|
242
469
|
|
|
243
|
-
|
|
470
|
+
```
|
|
471
|
+
══════════════════════════════════════════════════════════════
|
|
472
|
+
📊 APÓS A PUBLICAÇÃO
|
|
473
|
+
══════════════════════════════════════════════════════════════
|
|
474
|
+
|
|
475
|
+
[ ] Monitoramento de crashes (Sentry, Crashlytics)
|
|
476
|
+
[ ] Analytics configurado
|
|
477
|
+
[ ] Alertas para avaliações negativas
|
|
478
|
+
[ ] Plano de resposta a avaliações
|
|
479
|
+
[ ] Acompanhar KPIs:
|
|
480
|
+
- Downloads
|
|
481
|
+
- Retenção D1, D7, D30
|
|
482
|
+
- Taxa livre de crashes (> 99%)
|
|
483
|
+
- Taxa de ANR (< 0,47%)
|
|
484
|
+
- Avaliação média
|
|
485
|
+
[ ] Preparação de hotfix se necessário
|
|
486
|
+
[ ] Comunicação com usuários (in-app, e-mail)
|
|
487
|
+
```
|