design(app-creator): S15 — ios-app pack v0.2.0 (Spor B MCP-toolchain)
Materialiserer læringen fra Akashic S15 (første reelle iOS-bootstrap via app-creator-pipelinen) tilbake i ios-app domain pack. Spor B = MCP-stack-mønster for iOS-utvikling: - XcodeBuildMCP (Sentry, github.com/getsentry/XcodeBuildMCP) — headless via xcodebuild CLI, ~82 verktøy med strukturerte JSON-responser - Apple mcpbridge (innebygd i Xcode 26.3+, /Applications/Xcode.app/Contents/ Developer/usr/bin/mcpbridge) — krever kjørende Xcode, gir tilgang til levende editor-context Komplementære, ikke overlappende. Begge registreres samtidig i .mcp.json. Endringer: - pack.json: v0.1.0 → v0.2.0, lagt til changelog-array, registrert 3 nye components - patterns/xcode-mcp-toolchain.md (NY): full pattern-dokumentasjon — hvorfor, komponenter, setup, gotchas (CoreSimulator-mismatch, iOS-platform-runtime, DEVELOPMENT_TEAM-tomt, npx vs global), forhold til Spor A - scaffold/project.yml (NY): XcodeGen-template med iOS 17-baseline, Swift 6, App Group-pattern, App Privacy Details-default - scaffold/mcp.json (NY): MCP-stack-registrerings-template Verifisert 2026-05-14 mot Xcode 26.5, XcodeBuildMCP v2.3.x-tier, xcrun mcpbridge --help. Apple Xcode-integrasjon dokumentert via WebSearch (blakecrosley.com sammenligningsartikkel + getsentry/XcodeBuildMCP). Avledet fra Akashic-instans-commit dd7d876 (bootstrap S15). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
eba584515a
commit
9c3c85bd47
4 changed files with 251 additions and 5 deletions
|
|
@ -1,15 +1,27 @@
|
||||||
{
|
{
|
||||||
"schema": "domain-pack/v1",
|
"schema": "domain-pack/v1",
|
||||||
"name": "ios-app",
|
"name": "ios-app",
|
||||||
"version": "0.1.0",
|
"version": "0.2.0",
|
||||||
"domain": "iOS-app-utvikling (Swift/SwiftUI, App Store-distribusjon)",
|
"domain": "iOS-app-utvikling (Swift/SwiftUI, App Store-distribusjon)",
|
||||||
"description": "Domene-kunnskap for iOS-app-utvikling: HIG/Liquid Glass, Swift/SwiftUI-konvensjoner, offline-first-mønstre, App Store-submission, MASVS 2.1, WCAG 2.2 AA, privacy manifest.",
|
"description": "Domene-kunnskap for iOS-app-utvikling: HIG/Liquid Glass, Swift/SwiftUI-konvensjoner, offline-first-mønstre, App Store-submission, MASVS 2.1, WCAG 2.2 AA, privacy manifest, XcodeGen + MCP-toolchain (Spor B).",
|
||||||
"phases": [1, 3, 4, 5, 6, 7],
|
"phases": [1, 3, 4, 5, 6, 7],
|
||||||
"verified": {
|
"verified": {
|
||||||
"date": "2026-05-12",
|
"date": "2026-05-14",
|
||||||
"against": "iOS 26 (gjeldende SDK; build-krav siden 2026-04-28), HIG / Liquid Glass (WWDC 2025), deployment-target-baseline iOS 17–18, OWASP MASVS 2.1.0 (2024-01-18), WCAG 2.2 AA (W3C Rec 2023-10-05)",
|
"against": "iOS 26 (gjeldende SDK; build-krav siden 2026-04-28), HIG / Liquid Glass (WWDC 2025), deployment-target-baseline iOS 17–18, OWASP MASVS 2.1.0 (2024-01-18), WCAG 2.2 AA (W3C Rec 2023-10-05), XcodeGen 2.44.x, XcodeBuildMCP v2.3.x-tier, Apple mcpbridge (Xcode 26.3+).",
|
||||||
"note": "Kildebelegg: Apple Developer (developer.apple.com), W3C WAI (w3.org/WAI), OWASP MAS (mas.owasp.org). Se conventions.md / checklist*.md for per-påstand-referanser. iOS 19–25 finnes ikke — Apple gikk fra iOS 18 til iOS 26 (år-basert navn) på WWDC 2025."
|
"note": "Kildebelegg: Apple Developer (developer.apple.com), W3C WAI (w3.org/WAI), OWASP MAS (mas.owasp.org), getsentry/XcodeBuildMCP. Se conventions.md / checklist*.md / patterns/xcode-mcp-toolchain.md for per-påstand-referanser. iOS 19–25 finnes ikke — Apple gikk fra iOS 18 til iOS 26 (år-basert navn) på WWDC 2025."
|
||||||
},
|
},
|
||||||
|
"changelog": [
|
||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"date": "2026-05-14",
|
||||||
|
"notes": "Materialiserer Spor B (MCP-toolchain) som anbefalt mønster. Ny pattern patterns/xcode-mcp-toolchain.md. Ny scaffold scaffold/project.yml (XcodeGen-template). Ny scaffold scaffold/mcp.json (XcodeBuildMCP + Apple mcpbridge-registrering). Avledet fra S15 av Akashic-prototype: første reelle Xcode-prosjekt-init kjørt etter app-creator-pipelinen."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.1.0",
|
||||||
|
"date": "2026-05-12",
|
||||||
|
"notes": "Initial pack. Conventions + gotchas + 3 checklists + 4 patterns + 3 scaffold-items + glossary. Verifisert mot iOS 26-SDK, MASVS 2.1, WCAG 2.2 AA."
|
||||||
|
}
|
||||||
|
],
|
||||||
"components": {
|
"components": {
|
||||||
"conventions.md": "core",
|
"conventions.md": "core",
|
||||||
"gotchas.md": "core",
|
"gotchas.md": "core",
|
||||||
|
|
@ -21,9 +33,12 @@
|
||||||
"patterns/local-notifications.md": "supplementary",
|
"patterns/local-notifications.md": "supplementary",
|
||||||
"patterns/widget-live-activities-shared-model.md": "supplementary",
|
"patterns/widget-live-activities-shared-model.md": "supplementary",
|
||||||
"patterns/current-location-regeneration.md": "supplementary",
|
"patterns/current-location-regeneration.md": "supplementary",
|
||||||
|
"patterns/xcode-mcp-toolchain.md": "supplementary",
|
||||||
"scaffold/PrivacyInfo.xcprivacy": "supplementary",
|
"scaffold/PrivacyInfo.xcprivacy": "supplementary",
|
||||||
"scaffold/NSUsageDescription-inventory.md": "supplementary",
|
"scaffold/NSUsageDescription-inventory.md": "supplementary",
|
||||||
"scaffold/app-store-connect-metadata.md": "supplementary",
|
"scaffold/app-store-connect-metadata.md": "supplementary",
|
||||||
|
"scaffold/project.yml": "supplementary",
|
||||||
|
"scaffold/mcp.json": "supplementary",
|
||||||
"examples/feature-brief-local-notification-window.md": "supplementary"
|
"examples/feature-brief-local-notification-window.md": "supplementary"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
110
domain-packs/ios-app/patterns/xcode-mcp-toolchain.md
Normal file
110
domain-packs/ios-app/patterns/xcode-mcp-toolchain.md
Normal file
|
|
@ -0,0 +1,110 @@
|
||||||
|
# Pattern: Xcode MCP-toolchain (Spor B)
|
||||||
|
|
||||||
|
**Status:** Anbefalt for nye iOS-prosjekter fra mai 2026. Erstatter Spor A (rent Bash `xcodebuild`-wrapper-mønster fra pre-2026 — fortsatt gyldig hvis MCP-avhengighet er uønsket).
|
||||||
|
|
||||||
|
**Verifisert:** 2026-05-14 mot installert Xcode 26.5, XcodeBuildMCP v2.3.2-tier, Apple mcpbridge (universal binary) i Xcode.app.
|
||||||
|
|
||||||
|
## Hvorfor
|
||||||
|
|
||||||
|
iOS-utvikling med en AI-agent på CLI har historisk hatt to friksjons-punkter:
|
||||||
|
|
||||||
|
1. **Tekst-parsing av `xcodebuild`-output.** Build-feil drukner i loggene; agenten må regex-trekke feilkoder. Stort kontekstforbruk per feil.
|
||||||
|
2. **Ingen tilgang til levende Xcode-state.** Agenten kan ikke se hva som er åpent, hva som er diagnosert i editor, hva SwiftUI Preview viser, hva LLDB sier.
|
||||||
|
|
||||||
|
To MCP-servere løser dette komplementært — den ene headless, den andre med Xcode-runtime-tilgang. Begge registreres samtidig.
|
||||||
|
|
||||||
|
## Komponenter
|
||||||
|
|
||||||
|
### XcodeBuildMCP (headless, anbefalt for harness-loops)
|
||||||
|
|
||||||
|
- **Hva:** Sentrys MCP-server som wrapper `xcodebuild` CLI.
|
||||||
|
- **Hva den gir:** ~82 verktøy: build, test, run, simulator-kontroll, LLDB-debugging — alt med **strukturerte JSON-responser** i stedet for raw build-logs.
|
||||||
|
- **Hva den koster:** Ingen Xcode-prosess kreves; standalone Node.js-server. Første start trekker pakken via `npx`.
|
||||||
|
- **Når brukes:** Headless build/test (CI-aktige flyter), harness-loops der Xcode ikke kjører, simulator-kontroll uten Xcode-UI.
|
||||||
|
- **URL:** [github.com/getsentry/XcodeBuildMCP](https://github.com/getsentry/XcodeBuildMCP)
|
||||||
|
|
||||||
|
### Apple mcpbridge (krever kjørende Xcode)
|
||||||
|
|
||||||
|
- **Hva:** Apples native MCP-server som ble shipped med Xcode 26.3+. Universal binary i `/Applications/Xcode.app/Contents/Developer/usr/bin/mcpbridge`. Kjøres via `xcrun mcpbridge`.
|
||||||
|
- **Hva den gir:** ~20 verktøy: filoperasjoner i åpent prosjekt, diagnostics i editor, SwiftUI Preview-tilstand, build-status fra live Xcode.
|
||||||
|
- **Hva den koster:** Xcode må kjøre med prosjektet åpent. Bridge auto-detekterer Xcode-PID; eller sett `MCP_XCODE_PID` eksplisitt.
|
||||||
|
- **Når brukes:** Interaktiv utvikling der editor er åpen, Preview brukes, diagnostics inspiseres mens kode skrives.
|
||||||
|
- **Apple-integrert agent-launch:** `xcrun mcpbridge run-agent claude` starter Claude med Xcode-tools pre-konfigurert.
|
||||||
|
|
||||||
|
### Komplementær, ikke overlappende
|
||||||
|
|
||||||
|
| Behov | Verktøy |
|
||||||
|
|-------|---------|
|
||||||
|
| Bygge fra CLI uten Xcode | XcodeBuildMCP |
|
||||||
|
| Kjøre tester i simulator uten Xcode-UI | XcodeBuildMCP |
|
||||||
|
| Inspisere live editor-diagnostics | Apple mcpbridge |
|
||||||
|
| Hente filsti i åpent prosjekt | Apple mcpbridge |
|
||||||
|
| LLDB-debug-session i CLI | XcodeBuildMCP |
|
||||||
|
| SwiftUI Preview-state | Apple mcpbridge |
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
### Per-prosjekt `.mcp.json`
|
||||||
|
|
||||||
|
Se `scaffold/mcp.json` for komplett template. Minimum:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"xcodebuildmcp": {
|
||||||
|
"command": "npx",
|
||||||
|
"args": ["-y", "xcodebuildmcp@latest"]
|
||||||
|
},
|
||||||
|
"apple-xcode": {
|
||||||
|
"command": "xcrun",
|
||||||
|
"args": ["mcpbridge"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Forutsetninger
|
||||||
|
|
||||||
|
- macOS med Xcode 26.3 eller nyere (`xcrun mcpbridge --help` bekrefter installasjon).
|
||||||
|
- Node.js installert (sjekk `node --version` — XcodeBuildMCP krever v18+).
|
||||||
|
- iOS-platform-runtime + Simulator-runtime installert via Xcode > Settings > Platforms (det ene blokkerer `xcodebuild` med "iOS X.X is not installed", det andre med "CoreSimulator is out of date").
|
||||||
|
- Apple Developer Team registrert + DEVELOPMENT_TEAM-ID i `project.yml`.
|
||||||
|
|
||||||
|
### Verifiser etter setup
|
||||||
|
|
||||||
|
1. `xcrun mcpbridge --help` viser bridge-hjelp (Apple-side OK).
|
||||||
|
2. `npx -y xcodebuildmcp@latest --version` lar `npx` hente pakken (XcodeBuildMCP-side OK).
|
||||||
|
3. Restart Claude Code i prosjektmappa — MCP-servere lastes ved oppstart.
|
||||||
|
4. Verifiser at `mcp__xcodebuildmcp__*` og `mcp__apple-xcode__*` verktøy er tilgjengelige i agent-konteksten.
|
||||||
|
|
||||||
|
## Gotchas
|
||||||
|
|
||||||
|
- **Apple mcpbridge må ha Xcode åpent.** Ellers feiler den med "no Xcode processes found". Sett `MCP_XCODE_PID` hvis du har flere Xcode-instanser.
|
||||||
|
- **XcodeBuildMCP er npx-hentet hver gang ved `@latest`.** Pin versjon (`xcodebuildmcp@2.3.2`) i `.mcp.json` for repeterbarhet hvis det er kritisk.
|
||||||
|
- **CoreSimulator-mismatch.** Hvis macOS-systemets CoreSimulator-framework er eldre enn Xcode's forventede versjon (`1051.49.0 < 1051.54.0`-mønsteret), feiler simulator-baserte kommandoer. Fix: åpne Xcode én gang for å fullføre komponent-installasjon, eller kjør `softwareupdate --install-rosetta` / oppgrader macOS.
|
||||||
|
- **iOS-platform ikke installert.** Selv om SDK-en finnes, kan Xcode kreve at iOS-runtime også er lastet ned (Xcode > Settings > Platforms > iOS X.X). Symptomet er `xcodebuild: error: iOS X.X is not installed`.
|
||||||
|
- **DEVELOPMENT_TEAM tom.** Build feiler ved code-signing. Ikke en MCP-feil — kommer av `project.yml`. Sett `CODE_SIGNING_ALLOWED=NO` for første bygg-test, ellers fyll inn 10-tegn-ID fra Apple Developer Portal.
|
||||||
|
- **`npm install -g` vs `npx`.** Global installasjon er raskere kaldstart, men du må manuelt `npm update -g`. `npx -y @latest` henter hver gang men er alltid oppdatert. Velg per prosjekt-stabilitet.
|
||||||
|
|
||||||
|
## Forhold til Spor A (rent Bash xcodebuild)
|
||||||
|
|
||||||
|
Spor A er fortsatt gyldig — `xcodebuild` CLI-wrappere fungerer fortsatt og er det `XcodeBuildMCP` selv kaller under panseret. Velg Spor A hvis:
|
||||||
|
|
||||||
|
- Du vil ikke ha MCP-server-avhengighet i `.mcp.json`.
|
||||||
|
- Du vil ha eksplisitt shell-skript-kontroll over build/test-flyt.
|
||||||
|
- Du har eksisterende `ios-smoke-test.sh`/`simulator-lifecycle.sh`-investering du vil beholde.
|
||||||
|
|
||||||
|
Spor B vinner når:
|
||||||
|
|
||||||
|
- Build-feil parses ofte (XcodeBuildMCP's JSON-struktur sparer mye kontekst per feil).
|
||||||
|
- Du jobber interaktivt i Xcode parallelt med Claude (Apple mcpbridge gir levende editor-state).
|
||||||
|
- Du vil ha simulator-kontroll uten å skrive egne `xcrun simctl`-wrappere.
|
||||||
|
|
||||||
|
Ingen av dem utelukker den andre. Du kan kjøre Bash `xcodebuild` for én oppgave og XcodeBuildMCP for en annen i samme sesjon.
|
||||||
|
|
||||||
|
## Referanser
|
||||||
|
|
||||||
|
- XcodeBuildMCP — [github.com/getsentry/XcodeBuildMCP](https://github.com/getsentry/XcodeBuildMCP)
|
||||||
|
- Apple `mcpbridge` — innebygd i Xcode 26.3+. Dokumentert via `xcrun mcpbridge --help`.
|
||||||
|
- Sammenligningsartikkel — [Two MCP Servers Made Claude Code an iOS Build System (blakecrosley.com)](https://blakecrosley.com/blog/xcode-mcp-claude-code)
|
||||||
|
- Komplementære alternativer: [ios-simulator-mcp (joshuayoes)](https://github.com/joshuayoes/ios-simulator-mcp), [ios-simulator-skill (conorluddy)](https://github.com/conorluddy/ios-simulator-skill).
|
||||||
13
domain-packs/ios-app/scaffold/mcp.json
Normal file
13
domain-packs/ios-app/scaffold/mcp.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"_comment": "Template: .mcp.json — MCP-stack for iOS-utvikling (Spor B). domain-pack: ios-app · component: scaffold. Plasseres i prosjekt-rota. Registrerer XcodeBuildMCP (headless build/test/simulator via xcodebuild CLI) og Apple mcpbridge (krever at Xcode kjører; gir tilgang til levende Xcode-context, diagnostics, SwiftUI previews). Begge er komplementære. Se patterns/xcode-mcp-toolchain.md for fullt design.",
|
||||||
|
"mcpServers": {
|
||||||
|
"xcodebuildmcp": {
|
||||||
|
"command": "npx",
|
||||||
|
"args": ["-y", "xcodebuildmcp@latest"]
|
||||||
|
},
|
||||||
|
"apple-xcode": {
|
||||||
|
"command": "xcrun",
|
||||||
|
"args": ["mcpbridge"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
108
domain-packs/ios-app/scaffold/project.yml
Normal file
108
domain-packs/ios-app/scaffold/project.yml
Normal file
|
|
@ -0,0 +1,108 @@
|
||||||
|
# Template: project.yml — XcodeGen source of truth
|
||||||
|
# domain-pack: ios-app · component: scaffold
|
||||||
|
#
|
||||||
|
# XcodeGen genererer .xcodeproj fra denne fila. Aldri rediger project.pbxproj
|
||||||
|
# direkte — det fører til merge-konflikter og inkonsistens. project.yml
|
||||||
|
# committeres til git; .xcodeproj genereres lokalt (i .gitignore).
|
||||||
|
#
|
||||||
|
# Bruk: `xcodegen generate` etter endringer i project.yml eller filer
|
||||||
|
# i target-mapper.
|
||||||
|
#
|
||||||
|
# Installer: `brew install xcodegen`
|
||||||
|
# Docs: https://github.com/yonaskolb/XcodeGen
|
||||||
|
#
|
||||||
|
# Tilpass per app:
|
||||||
|
# - bundleIdPrefix + PRODUCT_BUNDLE_IDENTIFIER
|
||||||
|
# - DEVELOPMENT_TEAM (10-tegn fra Apple Developer Portal)
|
||||||
|
# - INFOPLIST_KEY_* etter app-spesifikke permissions/features
|
||||||
|
# - application-groups-identifier hvis widget/Live Activity-extension finnes
|
||||||
|
|
||||||
|
name: MyApp # bytt til app-navn
|
||||||
|
options:
|
||||||
|
bundleIdPrefix: com.example # bytt til ditt reverse-domain
|
||||||
|
deploymentTarget:
|
||||||
|
iOS: "17.0" # se ADR-001-mønster — iOS 17 dekker >95 % aktive enheter
|
||||||
|
xcodeVersion: "26.0" # iOS 26-SDK krav siden 2026-04-28
|
||||||
|
developmentLanguage: en # primær lokalisering
|
||||||
|
|
||||||
|
settings:
|
||||||
|
base:
|
||||||
|
SWIFT_VERSION: "6.0" # Swift 6 strict concurrency anbefalt
|
||||||
|
SUPPORTED_PLATFORMS: "iphoneos iphonesimulator"
|
||||||
|
SUPPORTS_MACCATALYST: false
|
||||||
|
TARGETED_DEVICE_FAMILY: "1" # iPhone-only; bytt til "1,2" for universal
|
||||||
|
SWIFT_STRICT_CONCURRENCY: complete
|
||||||
|
|
||||||
|
targets:
|
||||||
|
MyApp:
|
||||||
|
type: application
|
||||||
|
platform: iOS
|
||||||
|
sources:
|
||||||
|
- path: MyApp
|
||||||
|
excludes:
|
||||||
|
- "**/*.template"
|
||||||
|
resources:
|
||||||
|
- path: MyApp/Resources/Assets.xcassets
|
||||||
|
- path: MyApp/Resources/PrivacyInfo.xcprivacy # se scaffold/PrivacyInfo.xcprivacy
|
||||||
|
entitlements: # fjern hvis ingen App Group eller annet entitlement
|
||||||
|
path: MyApp/MyApp.entitlements
|
||||||
|
properties:
|
||||||
|
com.apple.security.application-groups:
|
||||||
|
- group.com.example.myapp
|
||||||
|
settings:
|
||||||
|
base:
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER: com.example.myapp
|
||||||
|
CURRENT_PROJECT_VERSION: 1
|
||||||
|
MARKETING_VERSION: "0.1.0"
|
||||||
|
CODE_SIGN_STYLE: Automatic
|
||||||
|
DEVELOPMENT_TEAM: "" # 10-tegn fra Apple Developer Portal
|
||||||
|
ENABLE_PREVIEWS: true
|
||||||
|
GENERATE_INFOPLIST_FILE: true
|
||||||
|
INFOPLIST_KEY_CFBundleDisplayName: "My App"
|
||||||
|
# Per-permission usage descriptions:
|
||||||
|
# INFOPLIST_KEY_NSLocationWhenInUseUsageDescription: "..."
|
||||||
|
# INFOPLIST_KEY_NSCameraUsageDescription: "..."
|
||||||
|
# INFOPLIST_KEY_NSMicrophoneUsageDescription: "..."
|
||||||
|
# Live Activities (hoved-appens Info.plist, IKKE extension):
|
||||||
|
# INFOPLIST_KEY_NSSupportsLiveActivities: true
|
||||||
|
INFOPLIST_KEY_UIApplicationSceneManifest_Generation: true
|
||||||
|
INFOPLIST_KEY_UILaunchScreen_Generation: true
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations: UIInterfaceOrientationPortrait
|
||||||
|
INFOPLIST_KEY_ITSAppUsesNonExemptEncryption: false # standard-HTTPS unntatt; sett true ved tilpasset krypto
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor
|
||||||
|
SWIFT_EMIT_LOC_STRINGS: true
|
||||||
|
configs:
|
||||||
|
Debug:
|
||||||
|
ENABLE_TESTABILITY: true
|
||||||
|
|
||||||
|
MyAppTests:
|
||||||
|
type: bundle.unit-test
|
||||||
|
platform: iOS
|
||||||
|
sources:
|
||||||
|
- path: MyAppTests
|
||||||
|
dependencies:
|
||||||
|
- target: MyApp
|
||||||
|
settings:
|
||||||
|
base:
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER: com.example.myapp.tests
|
||||||
|
GENERATE_INFOPLIST_FILE: true
|
||||||
|
|
||||||
|
schemes:
|
||||||
|
MyApp:
|
||||||
|
build:
|
||||||
|
targets:
|
||||||
|
MyApp: all
|
||||||
|
MyAppTests: [test]
|
||||||
|
run:
|
||||||
|
config: Debug
|
||||||
|
test:
|
||||||
|
config: Debug
|
||||||
|
targets:
|
||||||
|
- MyAppTests
|
||||||
|
profile:
|
||||||
|
config: Release
|
||||||
|
analyze:
|
||||||
|
config: Debug
|
||||||
|
archive:
|
||||||
|
config: Release
|
||||||
Loading…
Add table
Add a link
Reference in a new issue