@appaflytech/zeyrek-ai-mcp 0.0.36 → 0.0.40
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/.env.example +15 -0
- package/README.md +5 -5
- package/dist/config.js +37 -0
- package/dist/index.js +2 -0
- package/dist/knowledge/access.js +802 -0
- package/dist/knowledge/backendConstraints.js +18 -1
- package/dist/knowledge/case.js +41 -0
- package/dist/knowledge/componentCatalog.js +524 -53
- package/dist/knowledge/componentEvents.js +132 -7
- package/dist/knowledge/connectDataBind.js +851 -0
- package/dist/knowledge/connectDataDefinition.js +344 -0
- package/dist/knowledge/connectDataExecute.js +93 -0
- package/dist/knowledge/connectDataRules.js +128 -0
- package/dist/knowledge/decision.js +121 -0
- package/dist/knowledge/expressionPrelude.js +60 -0
- package/dist/knowledge/layoutSummary.js +140 -2
- package/dist/knowledge/microserviceParameters.js +58 -0
- package/dist/knowledge/mining.js +94 -0
- package/dist/knowledge/mobileComponentCatalog.js +876 -0
- package/dist/knowledge/mobileComponentEvents.js +259 -0
- package/dist/knowledge/mobileStore.js +396 -0
- package/dist/knowledge/normalize.js +240 -72
- package/dist/knowledge/outlines.js +36 -0
- package/dist/knowledge/platform/lint.js +385 -0
- package/dist/knowledge/platform/mobile.js +142 -0
- package/dist/knowledge/platform/mobileLayoutLint.js +324 -0
- package/dist/knowledge/platform/mobileRules.js +231 -0
- package/dist/knowledge/platform/mobileSpacing.js +82 -0
- package/dist/knowledge/platform/mobileTabs.js +108 -0
- package/dist/knowledge/platform/nativeBoxModel.js +44 -0
- package/dist/knowledge/platform/profile.js +25 -0
- package/dist/knowledge/platform/resolve.js +122 -0
- package/dist/knowledge/platform/web.js +39 -0
- package/dist/knowledge/policy.js +18 -4
- package/dist/knowledge/process.js +510 -0
- package/dist/knowledge/reservedTables.js +79 -0
- package/dist/knowledge/rowFilter.js +43 -0
- package/dist/knowledge/rules.js +485 -22
- package/dist/knowledge/schemaGuard.js +11 -0
- package/dist/knowledge/styleResolve.js +64 -10
- package/dist/knowledge/styleResolveNative.js +529 -0
- package/dist/knowledge/themeResolve.js +3 -3
- package/dist/observability/trace.js +13 -5
- package/dist/platform/argumentAliases.js +128 -0
- package/dist/platform/bodyFile.js +103 -0
- package/dist/platform/capture/actions.js +398 -0
- package/dist/platform/capture/browser.js +1 -0
- package/dist/platform/capture/capture.js +683 -0
- package/dist/platform/capture/console-log.js +122 -0
- package/dist/platform/capture/index.js +11 -0
- package/dist/platform/capture/readiness.js +103 -0
- package/dist/platform/capture/summary.js +77 -0
- package/dist/platform/capture/target.js +5 -0
- package/dist/platform/capture/targets/studio-mobile.js +15 -0
- package/dist/platform/capture/targets/studio-web.js +5 -0
- package/dist/platform/diagnostics.js +10 -4
- package/dist/platform/domSummary.js +1 -1
- package/dist/platform/errors.js +163 -10
- package/dist/platform/http.js +29 -8
- package/dist/platform/impersonation.js +45 -0
- package/dist/platform/jsonArray.js +24 -0
- package/dist/platform/responses.js +39 -5
- package/dist/platform/schemaReadMemory.js +60 -0
- package/dist/platform/secrets.js +68 -2
- package/dist/platform/strictArguments.js +68 -12
- package/dist/platform/tokenVault.js +187 -4
- package/dist/resources/examples/bpm-gorev-kontrol.json +294 -0
- package/dist/resources/examples/bpm-iso-dokuman.json +228 -0
- package/dist/resources/examples/bpm-satinalma.json +376 -0
- package/dist/resources/examples/connect-data-convert-verify.json +107 -0
- package/dist/resources/examples/connect-data-dropdown-roles.json +66 -0
- package/dist/resources/examples/connect-data-edit-m2m.json +73 -0
- package/dist/resources/examples/connect-data-query-params.json +50 -0
- package/dist/resources/examples/connect-data-table-entity.json +147 -0
- package/dist/resources/examples/connect-data-workflow-microservice.json +65 -0
- package/dist/resources/examples/middleware-authenticate.json +1 -1
- package/dist/resources/examples/mobile-app-shell-drawer.json +244 -0
- package/dist/resources/examples/mobile-app-shell-stack.json +157 -0
- package/dist/resources/examples/mobile-app-shell-tab.json +208 -0
- package/dist/resources/examples/mobile-form-screen.json +365 -0
- package/dist/resources/examples/mobile-list-detail-form.json +703 -0
- package/dist/resources/examples/page-detail-profile.json +2 -1
- package/dist/resources/examples/page-dynamic-form.json +3 -2
- package/dist/resources/examples/page-flex-sections.json +1 -1
- package/dist/resources/examples/page-html-embed.json +1 -1
- package/dist/resources/examples/workflow-basic.json +8 -2
- package/dist/resources/guides/access.md +810 -0
- package/dist/resources/guides/bpm.md +691 -0
- package/dist/resources/guides/case.md +153 -0
- package/dist/resources/guides/component.md +92 -5
- package/dist/resources/guides/decision.md +185 -0
- package/dist/resources/guides/entity.md +50 -8
- package/dist/resources/guides/expressions.md +14 -5
- package/dist/resources/guides/functions.md +1 -1
- package/dist/resources/guides/getting-started.md +38 -1
- package/dist/resources/guides/layout.md +11 -7
- package/dist/resources/guides/merge.md +42 -7
- package/dist/resources/guides/microservice.md +88 -3
- package/dist/resources/guides/middleware.md +69 -5
- package/dist/resources/guides/mobile-layout.md +193 -0
- package/dist/resources/guides/mobile-publish.md +148 -0
- package/dist/resources/guides/mobile.md +565 -0
- package/dist/resources/guides/page.md +469 -82
- package/dist/resources/guides/theme.md +8 -2
- package/dist/resources/guides/translation.md +1 -1
- package/dist/resources/guides/workflow.md +58 -1
- package/dist/resources/read.js +41 -0
- package/dist/resources/rules.js +11 -5
- package/dist/resources/schema-fingerprint.json +7 -5
- package/dist/resources/schemas/AccessExplanationDto.json +144 -0
- package/dist/resources/schemas/AccessMatrixDto.json +170 -0
- package/dist/resources/schemas/AccessPermissionDto.json +57 -0
- package/dist/resources/schemas/AccessPolicyDto.json +223 -0
- package/dist/resources/schemas/AccessResourceDto.json +86 -0
- package/dist/resources/schemas/AppSessionDto.json +53 -0
- package/dist/resources/schemas/ConnectDataDescribeDto.json +344 -0
- package/dist/resources/schemas/ConnectDataRequestModel.json +202 -0
- package/dist/resources/schemas/ConnectDataResultDto.json +421 -0
- package/dist/resources/schemas/ConnectorCredentialDto.json +70 -0
- package/dist/resources/schemas/ConvertConnectDataToMicroserviceCommand.json +37 -0
- package/dist/resources/schemas/CreateAccessPolicyCommand.json +209 -0
- package/dist/resources/schemas/CreateDecisionCommand.json +221 -0
- package/dist/resources/schemas/CreateEntityCommand.json +118 -0
- package/dist/resources/schemas/CreateMicroserviceCommand.json +13 -1
- package/dist/resources/schemas/CreateProcessDefinitionCommand.json +1337 -0
- package/dist/resources/schemas/CreateQueryCommand.json +4 -0
- package/dist/resources/schemas/CreateWorkflowCommand.json +146 -1
- package/dist/resources/schemas/DataJobDto.json +6 -1
- package/dist/resources/schemas/DecisionDto.json +302 -0
- package/dist/resources/schemas/DetachConnectDataMicroserviceCommand.json +28 -0
- package/dist/resources/schemas/ExplainAccessQuery.json +33 -0
- package/dist/resources/schemas/GenerateProcessDocumentCommand.json +116 -0
- package/dist/resources/schemas/GlobalFunctionUpdateResultDto.json +24 -0
- package/dist/resources/schemas/MicroserviceDto.json +15 -3
- package/dist/resources/schemas/OrganizationProjectDto.json +343 -0
- package/dist/resources/schemas/OrganizationSchemaDto.json +196 -0
- package/dist/resources/schemas/OrganizationSchemaVersionDto.json +207 -0
- package/dist/resources/schemas/PatchProcessDefinitionCommand.json +76 -0
- package/dist/resources/schemas/PreviewMicroserviceCommand.json +10 -1
- package/dist/resources/schemas/PreviewWorkflowCommand.json +25 -1
- package/dist/resources/schemas/ProcessDefinitionDto.json +1480 -0
- package/dist/resources/schemas/ProcessSimulationDto.json +96 -0
- package/dist/resources/schemas/SaveConnectorCredentialCommand.json +90 -0
- package/dist/resources/schemas/SaveProcessEventSourceCommand.json +61 -0
- package/dist/resources/schemas/SaveProcessMailSourceCommand.json +89 -0
- package/dist/resources/schemas/SignProcessTaskCommand.json +73 -0
- package/dist/resources/schemas/SimulateProcessDefinitionQuery.json +92 -0
- package/dist/resources/schemas/StartMobileBuildCommand.json +54 -0
- package/dist/resources/schemas/StepDto.json +25 -1
- package/dist/resources/schemas/UpdateAccessPolicyCommand.json +209 -0
- package/dist/resources/schemas/UpdateDecisionCommand.json +216 -0
- package/dist/resources/schemas/UpdateEntityCommand.json +118 -0
- package/dist/resources/schemas/UpdateMicroserviceCommand.json +13 -1
- package/dist/resources/schemas/UpdateProcessDefinitionCommand.json +1357 -0
- package/dist/resources/schemas/UpdateQueryCommand.json +4 -0
- package/dist/resources/schemas/UpdateViewCommand.json +0 -2
- package/dist/resources/schemas/UpdateWorkflowCommand.json +146 -1
- package/dist/resources/schemas/UpsertMobileStoreSettingsCommand.json +333 -0
- package/dist/resources/schemas/ValidateProcessDefinitionQuery.json +1339 -0
- package/dist/server.js +31 -1
- package/dist/tools/access.js +369 -2
- package/dist/tools/accessOperations.js +135 -0
- package/dist/tools/accessPolicies.js +170 -0
- package/dist/tools/accessRuntime.js +203 -0
- package/dist/tools/applications.js +63 -3
- package/dist/tools/bpm.js +343 -0
- package/dist/tools/bpmGovernance.js +266 -0
- package/dist/tools/bpmOperations.js +230 -0
- package/dist/tools/bpmReporting.js +154 -0
- package/dist/tools/bpmRouting.js +150 -0
- package/dist/tools/bpmRuntime.js +396 -0
- package/dist/tools/case.js +178 -0
- package/dist/tools/caseRuntime.js +89 -0
- package/dist/tools/common.js +19 -6
- package/dist/tools/components.js +118 -14
- package/dist/tools/connectData.js +450 -0
- package/dist/tools/connectors.js +193 -0
- package/dist/tools/datasources.js +3 -3
- package/dist/tools/decisions.js +206 -0
- package/dist/tools/dependencies.js +1 -1
- package/dist/tools/deployments.js +38 -3
- package/dist/tools/designSchemaPatch.js +34 -9
- package/dist/tools/dtos.js +36 -5
- package/dist/tools/entities.js +79 -12
- package/dist/tools/environments.js +1 -1
- package/dist/tools/externalComponents.js +26 -5
- package/dist/tools/flows.js +119 -13
- package/dist/tools/folders.js +1 -1
- package/dist/tools/imports.js +5 -2
- package/dist/tools/layouts.js +50 -17
- package/dist/tools/merges.js +2 -2
- package/dist/tools/microservices.js +77 -25
- package/dist/tools/mobile.js +280 -0
- package/dist/tools/mobileStore.js +572 -0
- package/dist/tools/modules.js +48 -0
- package/dist/tools/organizationStructure.js +137 -0
- package/dist/tools/pages.js +467 -100
- package/dist/tools/platformInfo.js +28 -8
- package/dist/tools/profileWrite.js +92 -0
- package/dist/tools/projects.js +71 -9
- package/dist/tools/rows.js +69 -13
- package/dist/tools/schemaOps.js +61 -1
- package/dist/tools/screenWrite.js +36 -7
- package/dist/tools/screens.js +95 -5
- package/dist/tools/templates.js +26 -1
- package/dist/tools/translations.js +1 -1
- package/dist/tools/variables.js +11 -5
- package/dist/tools/workflows.js +10 -5
- package/package.json +2 -2
- package/dist/platform/screenshot.js +0 -1162
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Mobil mizanpaj — uygulamanın her yeri tek dil
|
|
2
|
+
|
|
3
|
+
Bir mobil ekran kurmadan önce bunu okuyun. Buradaki kurallar zevk meselesi değildir, **ölçülür**:
|
|
4
|
+
|
|
5
|
+
- **Doğru varsayılan.** Gateway iskeleti kendisi doğru kurar (`mobile_app_create`, `page_create`, yeni
|
|
6
|
+
düğümlerin boşluğu).
|
|
7
|
+
- **Yazımda uyarı.** Yazım yanıtında sözleşme dışı durum `MOB-015…021` olarak gelir (`layoutWarnings`).
|
|
8
|
+
- **Çizimde ölçüm.** `page_screenshot({ layoutReport: true })` sonucu sayıyla ölçer (`layoutSummary.alignment`).
|
|
9
|
+
|
|
10
|
+
Temel mobil bilgi (flex-only yerleşim, tipli stil, gezinme, adımlar) için `platform_guide('mobile')`.
|
|
11
|
+
Altın örnek: `ngapps://examples/mobile-form-screen`.
|
|
12
|
+
|
|
13
|
+
## Sözleşme
|
|
14
|
+
|
|
15
|
+
Birim dp. Ölçek **4 · 8 · 16 · 24 · 32**. `gap` jetonları `small` 8, `medium` 16, `large` 24.
|
|
16
|
+
|
|
17
|
+
| # | Konu | Kural | Bulgu |
|
|
18
|
+
|---|---|---|---|
|
|
19
|
+
| S1 | Üst güvenli alan | Tek yerde. Kabuklu uygulamada kabukta (`safe-area` `edges: 'top'` içinde app-bar). Kabuksuz sayfada ilk öğe `safe-area` `top`. Sayfa kabuğun payını ikinci kez vermez | MOB-015 |
|
|
20
|
+
| S2 | Alt güvenli alan | Formun gönder düğmesi akışta, formun sonunda durur. Ekrana sabit alt eylem gerekiyorsa `floating-container` (`respectSafeArea`) kullanılır, ayrıntısı §Bileşen dizgisi'nde. Akışın sonunda pay gerekiyorsa `safe-area` `bottom` (`all` değil) | — |
|
|
21
|
+
| S3 | Kaydırma | Sayfa kökü kaydırır, `size: 'shrink'`. `scroll-view` yalnız gerekçeyle; iç içe dikey kaydırıcı yok | MOB-016 |
|
|
22
|
+
| S4 | Ekran kenarı | Yatayda ve üstte **16**, tek yerde. Kabuklu sayfada slot'un margin'i verir. Kabuksuz sayfada yatayı kökün padding'i verir; üstteki 16, tepedeki `safe-area`'dan sonraki `gap`tir. Bileşenlere yazılmaz | ölçüm `gutter` |
|
|
23
|
+
| S5 | Aralık | Kardeşler arası boşluk yalnız ebeveynin `gap`'i; çocuklar `marginType: 'none'`. Bölümler arası `large`, bölüm içi alanlar `medium`, satır içi öğeler `small` | MOB-019, MOB-021 |
|
|
24
|
+
| S6 | Saydam sarmalayıcı | Yalnız davranış ekleyen kap (`tooltip`, zeminsiz grup kabı) içeriği içeri itmez: `paddingType: 'none'`, `marginType: 'none'`, `widthType: 'fill'` | MOB-019 |
|
|
25
|
+
| S7 | Yüzey | Görünen grup (kart) iç boşluğu 16, yarıçap `lg`, 1 dp kenarlık ya da zemin (ikisi birden değil). Yüzeyin içeriği bilerek içeride durur | MOB-021 |
|
|
26
|
+
| S8 | Genişlik | Tam genişlik öğesi (alan, birincil düğme, yüzey) `widthType: 'fill'`. Aynı sütundaki kardeşlerin sol ve sağ kenarı eşittir | MOB-019, MOB-020 |
|
|
27
|
+
| S9 | Kap yönü | Dikey grup `direction: 'column'` + `horizontalAlign: 'stretch'`. **Yönü yazılmamış container/form satırdır.** Satır yalnız gerçekten yan yana dizilen öğeler için | MOB-020 |
|
|
28
|
+
| S10 | Bileşen içi | Alan yüksekliği, iç boşluk, etiket aralığı ve yarıçap temadan (`--ng-form-*`) gelir; alanlara padding ya da yarıçap yazılmaz | — |
|
|
29
|
+
| S11 | Yarıçap, renk, yazı | Yarıçap ölçek adıyla (`sm`, `md`, `lg`, `pill`), renk tanımlı jetonla, yazı boyu `text`'in `type` seviyesiyle (`h1`…`h4`, `p`, `small`, `label`). Ham px yok | MOB-021 |
|
|
30
|
+
| S12 | App-bar | Ekranda tek app-bar, ilk çizilen öğe. Kabuk veriyorsa sayfa eklemez; başlık kabuğun app-bar'ına bağlanır | MOB-017 |
|
|
31
|
+
| S13 | Boş kap | Çalışma anında boş kalan kap bırakılmaz (tepedeki `safe-area` payı hariç) | MOB-018 |
|
|
32
|
+
|
|
33
|
+
## İskelet ağaçları
|
|
34
|
+
|
|
35
|
+
Aşağıdaki iskeleti `mobile_app_create` ile mobil `page_create` kendisi kurar. Elle kuruyorsanız bu biçimi
|
|
36
|
+
kullanın.
|
|
37
|
+
|
|
38
|
+
**Kabuk (layout).** `shell_root` düz bir `container`'dır. Padding tipi yazılmazsa runtime ona 10 dp verir ve
|
|
39
|
+
app-bar kenardan kopar.
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
container shell_root direction:column gap:none size:shrink appearance.paddingType:none heightType:fill
|
|
43
|
+
├─ safe-area edges:top
|
|
44
|
+
│ └─ app-bar (başlık, leading, menuTarget)
|
|
45
|
+
├─ slot appearance.marginType:custom marginValues:{ top:16, right:16, bottom:0, left:16 } heightType:fill
|
|
46
|
+
└─ drawer (çekmeceli kabukta)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Kabuklu sayfa.** Pay ve kenar boşluğu kabuktan gelir.
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
container page_container direction:column horizontalAlign:stretch size:shrink gap:medium paddingType:none
|
|
53
|
+
└─ … içerik
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Kabuksuz sayfa** (giriş, karşılama, izin). `isWrapper` yalnız margin'i sıfırlar, kökün padding'i çizilir.
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
container page_container direction:column horizontalAlign:stretch size:shrink gap:medium
|
|
60
|
+
appearance.paddingType:custom paddingValues:{ top:0, right:16, bottom:0, left:16 }
|
|
61
|
+
├─ safe-area edges:top (boş: durum çubuğu payı + gap kadar üst boşluk)
|
|
62
|
+
└─ … içerik
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Form ekranı.** Gönder düğmesi formun içinde, akışın sonundadır. Form doğrulaması yalnız bu yolda koşar.
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
page_container
|
|
69
|
+
├─ text type:h2 (başlık)
|
|
70
|
+
└─ form direction:column horizontalAlign:stretch gap:large paddingType:none marginType:none widthType:fill
|
|
71
|
+
├─ … bölümler
|
|
72
|
+
└─ button type:submit widthType:fill
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Bileşen dizgisi
|
|
76
|
+
|
|
77
|
+
Bir ekran yukarıdan aşağıya şu sırayla kurulur: **başlık → bölümler → eylem.**
|
|
78
|
+
|
|
79
|
+
- **Başlık:** `text` `type: 'h2'`, bölüm başlığı `type: 'h4'`. `typographyStyle.fontSize` yazılmaz.
|
|
80
|
+
- **Bölüm iki türlüdür:**
|
|
81
|
+
- *Görünen grup (yüzey kabı):* `container` + `surfaceStyle` (zemin ya da kenarlık, `radius: 'lg'`) +
|
|
82
|
+
`paddingType: 'custom'` ve `paddingValue: 16`. İçeriği bilerek 16 içeride durur; kabın kendisi kardeşleriyle
|
|
83
|
+
hizalıdır.
|
|
84
|
+
- *Görünmeyen grup (saydam kap):* `container` `direction: 'column'`, `paddingType: 'none'`,
|
|
85
|
+
`marginType: 'none'`. İçerik kardeşleriyle aynı kenarda başlar.
|
|
86
|
+
|
|
87
|
+
Başlığı (`title`) olan ama zemini olmayan kap saydam kap gibi davranmalıdır. Varsayılan 10 dp padding'i
|
|
88
|
+
içeriği kaydırır (MOB-019). Ya yüzey verin ya da padding'i `none` yapın.
|
|
89
|
+
- **`card` çocuk almaz.** Kart görünümlü alan grubu `container` + `surfaceStyle` ile kurulur.
|
|
90
|
+
- **`tooltip`** dokunulan içeriği sarar ve saydamdır. Runtime ona varsayılan boşluk vermez; gateway yine de yeni
|
|
91
|
+
tooltip'e `paddingType: 'none'` ve `widthType: 'fill'` yazar. 2026-09-29'dan önce derlenmiş uygulamada
|
|
92
|
+
boşluksuz tooltip'in içeriği 14 dp içeri kayar ve 28 dp daralır; açık değer onu da korur.
|
|
93
|
+
- **Satır (`direction: 'row'`)** yan yana dizilen öğeler içindir: arama kutusu + düğme, ikon + metin,
|
|
94
|
+
"Ekle / Sil" düğmeleri. Form alanlarını alt alta dizmek için satır kullanılmaz.
|
|
95
|
+
- **Eylem:** birincil düğme tam genişlik (`widthType: 'fill'`). İkincil eylem `variant: 'text'` ya da
|
|
96
|
+
`'outline'`; metin görünümlü düğme içerik genişliğinde durabilir.
|
|
97
|
+
- **Ekrana sabit eylem** (`floating-container`, `anchor: 'bottom-center'`, `fullWidth`, `respectSafeArea`) iki
|
|
98
|
+
şeye dikkat ister:
|
|
99
|
+
- *Yerleşim.* `fullWidth` ekran kenarına dayanır; S4 kenarı için içine `paddingType: 'custom'` +
|
|
100
|
+
`paddingValues` yatay 16 olan bir kap koyun, `floating-container`'ın kendisine `paddingType: 'none'`
|
|
101
|
+
yazın (yoksa akışta 20 dp boş şerit kalır). Sabit düğme uzun formun son alanını örter; akışın sonuna
|
|
102
|
+
düğme boyu kadar boşluk bırakın.
|
|
103
|
+
- *Gönderim.* Formun dışındaki `type: 'submit'` + `formId` düğmesi formun olayını tetikler ama **form
|
|
104
|
+
doğrulamasını koşmaz** (bilinen açık). Doğrulanan form için gönder düğmesi formun içinde kalmalı.
|
|
105
|
+
|
|
106
|
+
## Boşluk
|
|
107
|
+
|
|
108
|
+
Aralığın tek kaynağı ebeveynin `gap`'idir. Runtime'ın varsayılanları katmanlarda birikir: margin tipi
|
|
109
|
+
yazılmamış her düğüm 4 dp, bırakılabilir düğüm ayrıca 10 dp padding alır. İki kat iç içe zeminsiz kap, içeriği
|
|
110
|
+
28 dp kaydırır.
|
|
111
|
+
|
|
112
|
+
- **Gateway yeni düğüme `marginType: 'none'` yazar** (`page_create`, `page_schema_patch`,
|
|
113
|
+
`page_schema_validate`) ve bunu `gatewayNormalized`'da söyler.
|
|
114
|
+
- Kardeşleri varsayılan margin'le duran eski bir kaba eklenen düğüme dokunulmaz; yeni düğüm eskilerden
|
|
115
|
+
4 dp kayardı. Kabı sözleşmeye taşımak için bütün çocuklarına `marginType: 'none'` yazın.
|
|
116
|
+
- `layout_schema_patch` ve `component_schema_patch` bu varsayılanı yazmaz. Kabukta ya da widget'ta eklenen
|
|
117
|
+
düğüme boşluğu siz yazın.
|
|
118
|
+
- **Ritim:**
|
|
119
|
+
- bölümler arası `gap: 'large'` (24);
|
|
120
|
+
- bölüm içi alanlar `gap: 'medium'` (16);
|
|
121
|
+
- satır içi öğeler `gap: 'small'` (8).
|
|
122
|
+
|
|
123
|
+
- **Özel değer** (`custom`) ve sayısal `gap` yalnız ölçekten seçilir: 0, 4, 8, 16, 24, 32 (MOB-021).
|
|
124
|
+
|
|
125
|
+
## Genişlik ve hiza
|
|
126
|
+
|
|
127
|
+
- **`horizontalAlign: 'stretch'`** olan sütun, çocuklarını `widthType` yazılmasa da tam genişlik gerer. Öteki
|
|
128
|
+
hizalarda tam genişlik öğesine `widthType: 'fill'` yazın. Aynı sütunda bir kısmı `fill`, bir kısmı değilse
|
|
129
|
+
sağ kenar hizadan kopar (MOB-020).
|
|
130
|
+
- **Yönü yazılmamış `container` ve `form` satırdır.** Alanlar yan yana sıkışır; `direction: 'column'` yazın.
|
|
131
|
+
`safe-area` ve `scroll-view` sütun doğar.
|
|
132
|
+
- **Ortalanmış ekran** (giriş, boş durum) için sütuna `horizontalAlign: 'center'` verin. Bu kapsamda kenar
|
|
133
|
+
eşitliği aranmaz.
|
|
134
|
+
|
|
135
|
+
## Kenarlık, yarıçap, yazı
|
|
136
|
+
|
|
137
|
+
- **Yüzey:** `surfaceStyle` ile verilir.
|
|
138
|
+
- zemin `background: 'var(--ng-…)'` (temada tanımlı jeton);
|
|
139
|
+
- kenarlık `borderTop…borderLeft` 1 dp, renk `border` jetonu;
|
|
140
|
+
- yarıçap `radius: 'lg'`.
|
|
141
|
+
|
|
142
|
+
Zemin ve kenarlığı birlikte kullanmayın; biri yeter.
|
|
143
|
+
- **Yarıçap ölçeği:** kartlar `lg`, çip ve rozetler `pill`, alan ve düğmeler temadan. Ham `'10px'` yazılmaz.
|
|
144
|
+
- **Yazı:** `text` `type` seviyesi.
|
|
145
|
+
- **Tasarım sistemi çapında görünüm** (bütün kartlar, bütün düğmeler) temadan yönetilir. Ölçekler, adlı ön
|
|
146
|
+
ayarlar ve yeni düğümlerin başlangıç değerleri `platform_guide('theme')`'dadır. Aynı değer tek tek düğümlere
|
|
147
|
+
kopyalanmaz. Temanın eski `componentStyles` alanı emeklidir.
|
|
148
|
+
|
|
149
|
+
## Kaydırma
|
|
150
|
+
|
|
151
|
+
Sayfa kökü her zaman kaydırır: barındırıcı sayfayı bir kaydırıcı içinde çizer.
|
|
152
|
+
|
|
153
|
+
`scroll-view` yalnız şu gerekçelerle eklenir:
|
|
154
|
+
|
|
155
|
+
- `refreshable` (çekerek yenile);
|
|
156
|
+
- `stickyHeader` ya da `states.isSticky` çocuk (yapışkan başlık);
|
|
157
|
+
- `horizontal` (yatay şerit);
|
|
158
|
+
- `heightType: 'fixed'` (sabit boylu iç liste).
|
|
159
|
+
|
|
160
|
+
Gerekçesiz ya da iç içe dikey kaydırıcı jestleri çakıştırır (MOB-016). Kökün `size: 'grow'`'u çocukları ekran
|
|
161
|
+
boyunca eşit böler ve kısa içerik üst üste biner. Yapışkan başlık ve ekrana sabit içerik için
|
|
162
|
+
`platform_guide('mobile')` §Ekrana sabit içerik.
|
|
163
|
+
|
|
164
|
+
## Doğrulama
|
|
165
|
+
|
|
166
|
+
Bir ekranı bitirince iki çağrı yapın:
|
|
167
|
+
|
|
168
|
+
1. **`page_schema_validate`** (kuru koşu): `layoutWarnings`'te MOB-015…021 bulgusu olmamalı.
|
|
169
|
+
- Yazım araçları (`page_schema_patch`, `layout_schema_patch`) yalnız o yazımın **getirdiği** bulguyu söyler.
|
|
170
|
+
- Sayfanın bütün durumunu kuru koşu verir.
|
|
171
|
+
2. **`page_screenshot({ layoutReport: true })`:** `layoutSummary.alignment` şu değerleri vermeli.
|
|
172
|
+
|
|
173
|
+
| Alan | Temiz değer | Anlamı |
|
|
174
|
+
|---|---|---|
|
|
175
|
+
| `gutter` | 16 | ekran kenarı boşluğu (sol = sağ) |
|
|
176
|
+
| `leftEdges` | tek küme | aynı kapsamdaki geniş içeriğin sol kenarları |
|
|
177
|
+
| `surfaces` | `[]` | iç hizası bozuk yüzey kabı yok |
|
|
178
|
+
| `widthOutliers` | `[]` | sağ kenarı sapan geniş öğe yok (`insetLeft`/`insetRight` dp) |
|
|
179
|
+
| `offScaleGaps` | `[]` | ardışık öğeler arası boşluk ölçekte |
|
|
180
|
+
|
|
181
|
+
İki kaynak aynı şeyi söyler. MOB-019'un şemadan öngördüğü dp farkı, `leftEdges` kümeleri arasındaki farktır.
|
|
182
|
+
|
|
183
|
+
## Bulgu → reçete
|
|
184
|
+
|
|
185
|
+
| Kod | Ne diyor | Ne yapılır |
|
|
186
|
+
|---|---|---|
|
|
187
|
+
| MOB-015 | Üst pay eksik ya da çift | Kabuksuz sayfaya `safe-area` `top`. Kabuğu payı vermiyorsa kabukta app-bar'ı `safe-area` `top` içine alın. Kabuk veriyorsa sayfadaki `top`/`all` güvenli alanı kaldırın |
|
|
188
|
+
| MOB-016 | Kaydırma tek yerde değil | Kök `size: 'shrink'`. Gerekçesiz `scroll-view`'ı kaldırın ya da gerekçesini verin. İç içe olanda içtekine `fixed` boy verin |
|
|
189
|
+
| MOB-017 | İkinci ya da yanlış yerde app-bar | Kabuk veriyorsa sayfadakini silin, başlığı kabuğa bağlayın. Kabuksuzda app-bar'ı ilk sıraya (ya da tepedeki `safe-area`'nın içine) taşıyın |
|
|
190
|
+
| MOB-018 | Boş kap | İçeriğini ekleyin ya da silin |
|
|
191
|
+
| MOB-019 | Kenar kayması (dp) | Bulgunun hedefi içeriği iten kaptır. Görünen grup olacaksa yüzey verin, olmayacaksa `paddingType: 'none'` + `marginType: 'none'`. Hedef öğenin kendisiyse margin'ini kardeşleriyle aynı yapın |
|
|
192
|
+
| MOB-020 | Genişlik tutarsız | Öğeye `widthType: 'fill'`. Yönü yazılmamış kaba `direction: 'column'` + `horizontalAlign: 'stretch'` |
|
|
193
|
+
| MOB-021 | Ölçek dışı değer | Boşluğu ve sayısal gap'i 0/4/8/16/24/32'den, yarıçapı `sm`/`md`/`lg`/`pill`'den, yazı boyunu `text` `type`'tan seçin |
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Mobil mağaza yayını rehberi
|
|
2
|
+
|
|
3
|
+
Mobil uygulamanın (`type:'mobile'`) App Store / Google Play'e gidişi: mağaza ayarı, derleme işi, ön kontrol ve
|
|
4
|
+
hata kodları. Uygulamanın kendisi (ekranlar, akışlar, uzak push gönderimi) `platform_guide('mobile')`'dedir.
|
|
5
|
+
|
|
6
|
+
## Genel
|
|
7
|
+
|
|
8
|
+
Mağaza derlemesi bir Mac runner'da koşar; uygulama **production ortamını** okur (yükleme için açılış sayfası
|
|
9
|
+
production'a dağıtılmış olmalı; yalın `build` onsuz da derlenir, uygulama "yayımlanmamış" ekranını gösterir). Mağaza bilgisi ortam değil uygulama düzeyindedir (Core DB), dağıtımla kopyalanmaz.
|
|
10
|
+
|
|
11
|
+
## Kim ne yapar
|
|
12
|
+
|
|
13
|
+
**Ajanın yaptığı:** `mobile_store_get` (ayar, kilitli alanlar, görsel sayısı, beyanlar; `manifest: true`;
|
|
14
|
+
`detail: ['assets','signing','runners','audit']` id'li görseller, maskeli kimlik bilgisi/hesap, runner, denetim) ·
|
|
15
|
+
`mobile_store_update` (`settings` yaması · `declarations` · `registerAppleBundleId`) · `mobile_asset_create` /
|
|
16
|
+
`_update` (sıra) / `_delete` · `mobile_build_start` (`dryRun`, `runnerScope`) · `mobile_build_status` ·
|
|
17
|
+
`mobile_build_log` · `mobile_build_cancel`.
|
|
18
|
+
|
|
19
|
+
**Beyan kullanıcınındır:** `declarations` (App Privacy, Data safety, içerik derecelendirme, hedef kitle,
|
|
20
|
+
uygulama erişimi) yalnız kullanıcı formu mağazada doldurduğunu onaylayınca `true` yazılır.
|
|
21
|
+
|
|
22
|
+
**İnsanın Studio › Yayın › Hesaplar'da yaptığı (MCP'de araç yok):** Apple/Google hesabı, sertifika, profil,
|
|
23
|
+
keystore, harita anahtarı, demo parolası, push kimlikleri — APNs anahtarı, Firebase hesabı,
|
|
24
|
+
`google-services.json` (gizli bilgi) ve runner kaydı. `review.demoPassword` şemada reddedilir.
|
|
25
|
+
|
|
26
|
+
**Ekran görüntüsü:** `page_screenshot { environment: 'production', device, format: 'jpeg', quality: 92,
|
|
27
|
+
language, colorScheme: 'light', outPath }` → `mobile_asset_create { path, kind: 'screenshot', deviceClass, locale }`.
|
|
28
|
+
`device`: iphone69 `{440,956,3}` · ipad13 `{1032,1376,2}` · phone `{360,720,3}` · tablet7 `{600,960,2}` ·
|
|
29
|
+
tablet10 `{800,1280,2}`. JPEG şart (iOS alfa kabul etmez); giriş/splash sayfası çekilmez (App Review 2.3.3).
|
|
30
|
+
ikon/splash/öne çıkan görsel tekli yuvadır: yeni yükleme eskisinin yerine geçer.
|
|
31
|
+
|
|
32
|
+
## Akış
|
|
33
|
+
|
|
34
|
+
1. `mobile_store_get` → kimlik varsayılandır (`app.zeyrek.o<org>.a<uygulama>`); değiştirilecekse **ilk
|
|
35
|
+
derlemeden önce** `mobile_store_update { settings: { bundleIdentifier, androidPackage, scheme } }`. İlk
|
|
36
|
+
derleme bu üçünü ve sayaçları kilitler (`lockedFields`); değişim 422.
|
|
37
|
+
2. Mağaza metni: `settings.listing.<dil>` (`title` ≤ 30, `description` ≤ 4000, `keywords` virgülle ≤ 100…),
|
|
38
|
+
`urls.privacyPolicy`, iOS `apple.categories.primary` + `apple.copyright`, Android `play.contactEmail`.
|
|
39
|
+
Biçimsiz alan **MOB-022** ile yazılmadan durur; yükleme için eksik alan uyarıdır (taslak kaydedilir).
|
|
40
|
+
3. `mobile_build_start { platform, target, dryRun: true }` → `fail` satırlarını düzelt (aşağıdaki tablo).
|
|
41
|
+
4. `mobile_build_start { platform, target }` → `mobile_build_status { buildId }` ile `completed`/`failed`
|
|
42
|
+
bekle. Her başlatma derleme numarası ayırır; iptal/hata numarayı geri vermez.
|
|
43
|
+
|
|
44
|
+
## Hedefler
|
|
45
|
+
|
|
46
|
+
`build` (iki platform, yalnız derler) · `testflight` (yalnız iOS) · `internal` (yalnız Android, Play
|
|
47
|
+
iç test). TestFlight'ta runner yükledikten sonra iş `running` + `store_processing` kalır (`awaitingStore`),
|
|
48
|
+
Apple işleyince `completed` (en çok 60 dk); bu durumda iptal 409. İptal 409'unun mesajı nedeni söyler (iş zaten
|
|
49
|
+
tamamlandı / başarısız / iptal edildi, mağaza yüklemeyi işliyor).
|
|
50
|
+
TestFlight'ta derleme yüklenip mağaza metni/ekran görüntüleri reddedilirse iş yine tamamlanır;
|
|
51
|
+
`storeResult.listingError` (hata kodu, ör. `store_rejected`) + `listingMessage` (ne yapılacağı) gelir. Derleme
|
|
52
|
+
TestFlight'tadır, numara harcanmıştır: metni düzeltip yeni sürüm yüklemek gerekir, işi yeniden başlatmak aynı
|
|
53
|
+
metni yeni numarayla yeniden dener.
|
|
54
|
+
|
|
55
|
+
## Ön kontrol
|
|
56
|
+
|
|
57
|
+
`mobile_build_start { dryRun: true }` yalnız `ok` OLMAYAN satırları döner (`okCount` gerisini sayar).
|
|
58
|
+
|
|
59
|
+
| id | Kod (`fail`) | Nerede düzelir |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| P-01 | `settings_incomplete`; Android `internal`'da `release_notes_too_long` (bir dilde `releaseNotes` > 500 — Play sınırı; ayar 4000'e izin verir çünkü App Store'a da gider; ikisi birlikteyse tek satırda iki cümle) | `mobile_store_update` |
|
|
62
|
+
| P-02 | `assets_missing` | `mobile_asset_create` |
|
|
63
|
+
| P-03 | `secrets_missing`, `secrets_unreadable`, `signing_expired` (`warn signing_expiring`) | Studio › Yayın › Hesaplar |
|
|
64
|
+
| P-04 | `apple_account_missing`, `asc_bundle_id_missing`, `asc_app_missing`, `asc_unauthorized`, `asc_forbidden`, `asc_unreachable` | `asc_bundle_id_missing`: `mobile_store_update { registerAppleBundleId: true }`. `asc_app_missing`: App Store Connect'te uygulama kaydı (API açamaz, insan açar). Diğerleri: Studio hesabı |
|
|
65
|
+
| P-05 | `google_account_missing`, `play_app_missing`, `play_unauthorized`, `play_forbidden`, `play_unreachable` | Play Console'da uygulama + servis hesabı yetkisi |
|
|
66
|
+
| P-06 | `production_missing`, `production_page_missing` (yalın `build`'de `warn`, başlatmayı engellemez) | production ortamı ve dağıtım — insan onaylı, ajan yapmaz |
|
|
67
|
+
| P-07 | `https_required` | platform ayarı (destek) |
|
|
68
|
+
| P-08 | `build_active` | etkin işi bekle ya da `mobile_build_cancel` |
|
|
69
|
+
| P-09 | `runner_offline` | runner Mac'te `zeyrek-mobile-runner run` |
|
|
70
|
+
| P-10 | `manual declarations_pending` | kullanıcı onayıyla `mobile_store_update { declarations }` (engellemez) |
|
|
71
|
+
| P-11 | push (yalnız `testflight` / `internal`): `warn push_incomplete` (kimlik eksik — derleme push'suz çıkar); `push_unreadable` (kimliğin şifresi çözülemiyor), `push_profile_stale` (profil APNs anahtarından önce üretilmiş), `push_firebase_mismatch` (`google-services.json` başka Firebase projesinin), `push_package_mismatch` (dosya yüklendikten sonra Android paket adı değişmiş), `push_shell_outdated` (kabuk paketi push taşımıyor) | Studio › Yayın › Hesaplar ve kimlik bilgileri (insan yükler); `push_profile_stale`: profili yeniden üret; `push_shell_outdated`: platform ayarı (destek). Push kapalı ya da hazırsa satır `ok`'tur ve dryRun'da görünmez — hazır olduğunu `mobile_store_get { manifest: true }` → `manifest.push` söyler |
|
|
72
|
+
| P-12 | izinler: `warn permissions_shell_outdated` (yayındaki kabuk izin kümesini taşımıyor: sabit izinler bildirilir, kamera çalışmaz, kipler uygulanmaz — başka P-12 satırı çıkmaz); kabuk taşıyorsa `fail permission_off_in_use` (kip `off` ama production o izni yazılı olarak kullanıyor) ya da `warn launch_permissions_shell_outdated` (açılışta sorulan izin var, kabuk açılışta sormuyor; kabuk kümeyi de taşımıyorsa bu cümle ilk uyarının iletisine eklenir) | `mobile_store_update { settings: { permissionModes } }` ya da kullanımı kaldırıp dağıtım; açılış uyarısında daha yeni kabuk ya da izni akış adımından isteme |
|
|
73
|
+
| P-13 | reklam (yalnız `ads.enabled`): `warn ads_app_id_missing` (bu platformun AdMob App ID'si yok — derleme reklamsız çıkar), `warn ads_shell_outdated` (yayındaki kabuk reklam taşımıyor), yükleme hedefinde `manual ads_test_mode` (test kipi açık: mağazada test reklamı görünür), değilse `ok ads_ready` (yerleşim sayısıyla) | `mobile_store_update { settings: { ads } }`; test kipini yayından önce `testMode: false` |
|
|
74
|
+
|
|
75
|
+
Satırın `message` ve `fixHint`'i backend'den, istek dilinde gelir.
|
|
76
|
+
|
|
77
|
+
## İzinler
|
|
78
|
+
|
|
79
|
+
Derleme, **production'ın kullandığı** izinleri taşır: kullanılmayan iznin amaç metni Info.plist'e, Android izni
|
|
80
|
+
manifeste girmez (`MOB-023`). `mobile_store_get { detail: ['permissions'] }` izin başına `usage` (çağrının ortamı:
|
|
81
|
+
sayfa · bileşen ya da akış adımı), `build` (production: `carried`, `reason` = `used` · `unused` · `forced_on` ·
|
|
82
|
+
`forced_off` · `not_prunable` · `scan_failed`) ve `devices` (aktif cihazların izin durumu) döner.
|
|
83
|
+
|
|
84
|
+
- Kip `settings.permissionModes.<key>`: `auto` (varsayılan) · `on` (kullanılmasa da taşı) · `off` (taşıma).
|
|
85
|
+
Amaç metni `settings.permissions.<key>`; boşsa katalog varsayılanı gider.
|
|
86
|
+
- **Açılışta sor:** `settings.launchPermissions` (izin anahtarı dizisi; liste bütün olarak yazılır, `[]` kaldırır).
|
|
87
|
+
Mağaza sürümü açılınca listedeki izinleri katalog sırasıyla ve yalnız hiç sorulmamışsa sorar; oynatıcı sormaz. Bir
|
|
88
|
+
kullanım sayılır (`usage` içinde `source: launch`, satırda `askOnLaunch`): izin derlemeye girer. Kipi `off` olan
|
|
89
|
+
izin listeye yazılamaz (422, `launchPermissions.<key>`) — önce kipi `auto` ya da `on` yapın. Bir sonraki mağaza
|
|
90
|
+
derlemesiyle etkili olur. Açılışta sorma kabuğun ayrı bir yeteneğidir: görünümde `shell.carriesLaunchPermissions:
|
|
91
|
+
false` ise ayar saklanır ama derleme sormaz (`permissionWarnings` ve P-12 söyler) — o zamana kadar akış adımından
|
|
92
|
+
isteyin. İzin bir eylemin sonucuysa (harita, fotoğraf) açılışta değil o anda sorun — `permission` adımı
|
|
93
|
+
(`MOB-025`).
|
|
94
|
+
- Taşınmayan izin çalışma zamanında hiç istenmez: `permission` adımı `unavailable` döner, `map` kullanıcı
|
|
95
|
+
noktasını, dosya alanı o kaynağı sunmaz (`MOB-024`).
|
|
96
|
+
- Küme derleme anında donar. İzin kullanan yeni bir sayfa production'a dağıtılmadan derlenirse — ya da derlemeden
|
|
97
|
+
SONRA dağıtılırsa — kurulu ikili o izni taşımaz (`unavailable`): önce dağıtım (insan onaylı), sonra derleme; izin
|
|
98
|
+
ileride kullanılacaksa kipi `on` yapın. Görünüm bunu söyler: izin satırının `missingFromStoreBuilds`'i o izni
|
|
99
|
+
taşımayan son mağaza derlemelerini (TestFlight / Play iç test) listeler; izin kullanılıyorsa yanıt
|
|
100
|
+
`permissionWarnings` taşır — production kullanıyorsa yeni derleme şimdi, yalnız okunan ortam kullanıyorsa
|
|
101
|
+
dağıtımdan sonra gerekir.
|
|
102
|
+
- **İzleme izni (`tracking`, iOS ATT, kök ADR 0011):** derleme taşıyorsa App Store Connect App Privacy'de "Device
|
|
103
|
+
ID — Used to Track You", Play Console Data safety'de "Advertising ID" beyanı insanın işidir; izin penceresinden önce
|
|
104
|
+
teşvik ya da kendi ön pencerenizi göstermeyin (App Store 5.1.2). Görünüm bunu `permissionWarnings`'te söyler
|
|
105
|
+
(`MOB-027`). Taşınmayan ikiliye `expo-tracking-transparency` hiç bağlanmaz. Reklam açıksa izin, App ID'si olan platformun derlemesinde taşınır (yalnız Android'de reklam varsa iOS ikilisi ATT taşımaz).
|
|
106
|
+
- Tarama `setter` ile yazılan tetikleyici prop'u da sayar; `code` adımı, fonksiyon gövdesi, `webview` / `html`
|
|
107
|
+
içeriği ve dış bileşen görünmez — onlar için kip `on`.
|
|
108
|
+
|
|
109
|
+
## Reklamlar
|
|
110
|
+
|
|
111
|
+
Google Mobile Ads (kök ADR 0012) mağaza ayarıdır: `settings.ads = { enabled, iosAppId, androidAppId, testMode,
|
|
112
|
+
consentForm, appOpenUnit, units: [{ name, format, ios, android }] }`. App ID `ca-app-pub-…~…`, birim kimliği
|
|
113
|
+
`ca-app-pub-…/…`; `name` `^[a-z][A-Za-z0-9]{0,39}$` ve tekil (bileşen `adBanner.unit` ve adım `ad-show.value` bu adla
|
|
114
|
+
anar); `format` `banner` · `interstitial` · `rewarded` · `rewardedInterstitial` · `appOpen`; bir platformun kimliği boşsa
|
|
115
|
+
yerleşim o platformda yoktur. Biçim hatası `MOB-022` ile yazılmadan durur.
|
|
116
|
+
|
|
117
|
+
- SDK ikiliye yalnız `enabled` iken ve o platformun App ID'si varken bağlanır; o platformun derlemesine `tracking`'i de taşıtır (kip
|
|
118
|
+
`off` olamaz, 422).
|
|
119
|
+
- `testMode: true` (varsayılan) gerçek birim yerine Google test birimini gösterir — geliştirirken gerçek birime
|
|
120
|
+
tıklamak AdMob hesabını kapattırabilir. Yayından önce `false` (P-13 `manual`).
|
|
121
|
+
- `consentForm: true` (varsayılan) açılışta AdMob UMP rıza formunu gerekiyorsa gösterir; rıza mesajının kendisi AdMob
|
|
122
|
+
konsolunda kurulur (insan). Sıra: rıza → açılış izinleri (ATT) → SDK başlatma; rıza reklama izin vermezse uygulama
|
|
123
|
+
reklamsız sürer.
|
|
124
|
+
- `appOpenUnit` `appOpen` biçimli bir yerleşimin adı; soğuk açılışta bir kez gösterilir.
|
|
125
|
+
- `mobile_store_get` reklam açıkken `adsWarnings` döner (`MOB-026`): test kipi, App ID'si olan platformda birimi olmayan
|
|
126
|
+
yerleşim, konsol beyanları (App Privacy, Data safety, AdMob rıza mesajı — insanın işi).
|
|
127
|
+
|
|
128
|
+
## Hata kodları
|
|
129
|
+
|
|
130
|
+
`mobile_build_status` → `error.code`.
|
|
131
|
+
|
|
132
|
+
| Kod | Ne oldu → ne yapılır |
|
|
133
|
+
|---|---|
|
|
134
|
+
| `toolchain_missing` | Runner'da bir derleme aracı eksik → Mac'te runner'ın doctor komutunu çalıştırın ve listelediklerini kurun (Xcode, CocoaPods, JDK ya da Android SDK). |
|
|
135
|
+
| `manifest_invalid` | Derleme ayarları geçersiz → Uygulamanın mağaza ayarlarını — ad, kimlik ve sürüm — kontrol edip derlemeyi yeniden başlatın. |
|
|
136
|
+
| `secrets_missing` | İmzalama bilgileri eksik → İmzalama sertifikasını ve mağaza hesabını Hesaplar ve kimlik bilgileri altında ekleyin. |
|
|
137
|
+
| `prebuild_failed` | Native proje hazırlanamadı → İlk hatayı günlükte bulun. Bir modülün adını veriyorsa Zeyrek desteğine bildirin. |
|
|
138
|
+
| `pod_install_failed` | iOS bağımlılıkları kurulamadı → Runner Mac'te pod repo update çalıştırın ya da ağ erişimini kontrol edip yeniden deneyin. |
|
|
139
|
+
| `xcodebuild_failed` | iOS derlemesi başarısız → Günlükte ilk hata satırını bulun. Runner'daki Xcode sürümünün desteklendiğini kontrol edin. |
|
|
140
|
+
| `gradle_failed` | Android derlemesi başarısız → Günlükte ilk hata satırını bulun. Runner'daki JDK ve Android SDK sürümlerini kontrol edin. |
|
|
141
|
+
| `signing_failed` | Uygulama imzalanamadı → Sertifika ve profilin paket kimliğiyle eşleştiğini ve süresinin dolmadığını kontrol edin. |
|
|
142
|
+
| `upload_failed` | Derleme yüklenemedi → Mağaza hesabı bilgilerini ve runner'ın ağını kontrol edip yeniden deneyin. |
|
|
143
|
+
| `store_rejected` | Mağaza derlemeyi reddetti → Mağazanın gerekçesini günlükte okuyun, kaydı ya da derlemeyi düzeltin ve yeni bir derleme numarasıyla yayımlayın. |
|
|
144
|
+
| `timeout` | Derleme çok uzun sürdü → Yeniden deneyin. Zaman aşımı sürerse runner Mac'in yükünü ve disk hızını kontrol edin. |
|
|
145
|
+
| `cancelled` | Derleme iptal edildi → Hazır olduğunuzda yeni bir derleme başlatın. |
|
|
146
|
+
| `runner_lost` | Runner yanıt vermeyi bıraktı → Runner Mac'in uyanık ve çevrim içi olduğunu kontrol edip derlemeyi yeniden başlatın. İpucu `runner_offline`: 24 saat içinde hiçbir runner işi almadı. |
|
|
147
|
+
| `disk_full` | Runner Mac'in diski doldu → Runner Mac'te yer açın (eski derlemeler, DerivedData) ve yeniden deneyin. |
|
|
148
|
+
| `unknown` | Derleme başarısız → Ayrıntı için günlüğü açın. Neden belirsizse derlemeyi Zeyrek desteğine bildirin. |
|