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>
108 lines
3.7 KiB
YAML
108 lines
3.7 KiB
YAML
# 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
|