Lift von Hybrid (WKWebView für Lesen/Erkunden) auf fully-native ist beschlossen. Diese Phase entfernt die WebShell-Infrastruktur; das volle native Read-Surface folgt in η-2..η-5 nach docs/NATIVE_LIFT_PLAN.md. - ManaWebShell-Dep raus aus project.yml - Sources/Core/WebShell/CookieBridge.swift gelöscht - RootView auf vier native Tabs (Lesen + Erkunden = Platzhalter, Submit + Konto unverändert nativ) - DocComments in DeepLinkRouter / AppConfig / Account / Settings von WebView-Verweisen befreit - CLAUDE.md Invarianten von Hybrid auf η umgestellt (13 Invarianten, pure SwiftUI + Offline-first + SafariView-Ausnahme für Legal) - PLAN.md auf η-0 + Phasenübersicht η-0..η-10 - AppConfigTests.test_keychainService_matchesSharedGroup auf ManaSharedKeychainGroup aktualisiert (war drift seit Cross-App-SSO) Verifikation: - xcodebuild iOS-Simulator iPhone 16e: BUILD SUCCEEDED - nm ZitareNative | grep WKWebView: 0 Referenzen - otool -L: kein WebKit-Framework-Link - 20/20 Tests grün Cross-Repo-Follow-up (η-1 Blocker): - zitare/apps/zitare/ muss index-full.json + 7 Stammdaten-JSONs liefern - zitare/apps/api/ Volltext-Search-Endpoint bestätigen/ergänzen Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
233 lines
7.5 KiB
YAML
233 lines
7.5 KiB
YAML
name: ZitareNative
|
|
|
|
options:
|
|
bundleIdPrefix: ev.mana
|
|
createIntermediateGroups: true
|
|
xcodeVersion: "16.0"
|
|
deploymentTarget:
|
|
iOS: "18.0"
|
|
macOS: "15.0"
|
|
developmentLanguage: de
|
|
groupSortPosition: top
|
|
generateEmptyDirectories: true
|
|
|
|
packages:
|
|
ManaSwiftCore:
|
|
path: ../mana-swift-core
|
|
ManaSwiftUI:
|
|
path: ../mana-swift-ui
|
|
|
|
settings:
|
|
base:
|
|
SWIFT_VERSION: "6.0"
|
|
SWIFT_STRICT_CONCURRENCY: complete
|
|
CURRENT_PROJECT_VERSION: "1"
|
|
MARKETING_VERSION: "0.1.0"
|
|
GENERATE_INFOPLIST_FILE: "NO"
|
|
ENABLE_USER_SCRIPT_SANDBOXING: "YES"
|
|
DEAD_CODE_STRIPPING: "YES"
|
|
CLANG_ENABLE_MODULES: "YES"
|
|
# mana e.V. Apple-Developer-Team-ID. Muss matchen mit dem AASA-
|
|
# Eintrag auf https://zitare.com/.well-known/apple-app-site-association.
|
|
DEVELOPMENT_TEAM: QP3GLU8PH3
|
|
|
|
targets:
|
|
ZitareNative:
|
|
type: application
|
|
supportedDestinations: [iOS, macOS]
|
|
dependencies:
|
|
- package: ManaSwiftCore
|
|
product: ManaCore
|
|
- package: ManaSwiftCore
|
|
product: ManaTokens
|
|
- package: ManaSwiftUI
|
|
product: ManaAuthUI
|
|
- target: ZitareWidgetExtension
|
|
embed: true
|
|
platformFilter: iOS
|
|
- target: ZitareShareExtension
|
|
embed: true
|
|
platformFilter: iOS
|
|
sources:
|
|
- path: Sources/App
|
|
- path: Sources/Features
|
|
- path: Sources/Core
|
|
- path: Sources/Resources
|
|
excludes:
|
|
- "Info.plist"
|
|
- "ZitareNative.entitlements"
|
|
info:
|
|
path: Sources/Resources/Info.plist
|
|
properties:
|
|
CFBundleShortVersionString: "0.1.0"
|
|
CFBundleVersion: "3"
|
|
CFBundleDevelopmentRegion: de
|
|
CFBundleDisplayName: Zitare
|
|
# Pflicht-Key für iOS 11+ mit Asset-Catalog-Icons. Xcode setzt
|
|
# ihn nur automatisch wenn GENERATE_INFOPLIST_FILE=YES; bei uns
|
|
# ist die Info.plist XcodeGen-getrieben, also explizit hier.
|
|
CFBundleIconName: AppIcon
|
|
LSApplicationCategoryType: "public.app-category.reference"
|
|
# Paper-Theme-Background als Launch-Screen statt System-Weiß,
|
|
# damit zwischen Tap und first SwiftUI-paint kein weißer Flash
|
|
# mehr sichtbar ist. Asset hat Light + Dark Variante, matcht
|
|
# `--color-background` aus mana/packages/themes/paper.css und
|
|
# `ZitareTheme.background` im Native-Code.
|
|
UILaunchScreen:
|
|
UIColorName: LaunchBackground
|
|
UISupportedInterfaceOrientations:
|
|
- UIInterfaceOrientationPortrait
|
|
- UIInterfaceOrientationLandscapeLeft
|
|
- UIInterfaceOrientationLandscapeRight
|
|
UISupportedInterfaceOrientations~ipad:
|
|
- UIInterfaceOrientationPortrait
|
|
- UIInterfaceOrientationPortraitUpsideDown
|
|
- UIInterfaceOrientationLandscapeLeft
|
|
- UIInterfaceOrientationLandscapeRight
|
|
CFBundleURLTypes:
|
|
- CFBundleURLName: ev.mana.zitare
|
|
CFBundleURLSchemes:
|
|
- zitare
|
|
NSUserActivityTypes:
|
|
- NSUserActivityTypeBrowsingWeb
|
|
# WKWebView lädt zitare.com + app.zitare.com. Beide sind
|
|
# https, kein App-Transport-Security-Override nötig.
|
|
ITSAppUsesNonExemptEncryption: false
|
|
entitlements:
|
|
path: Sources/Resources/ZitareNative.entitlements
|
|
properties:
|
|
com.apple.security.app-sandbox: true
|
|
com.apple.security.network.client: true
|
|
com.apple.security.files.user-selected.read-write: true
|
|
keychain-access-groups:
|
|
- $(AppIdentifierPrefix)ev.mana.session
|
|
# Universal-Link-Domains:
|
|
# - zitare.com ist die kanonische öffentliche Domain (statisch,
|
|
# liefert AASA).
|
|
# - app.zitare.com ist das eingeloggte App-Surface (SPA,
|
|
# liefert AASA-File analog).
|
|
com.apple.developer.associated-domains:
|
|
- applinks:zitare.com
|
|
- applinks:app.zitare.com
|
|
com.apple.security.application-groups:
|
|
- group.ev.mana.zitare
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: ev.mana.zitare
|
|
CODE_SIGN_STYLE: Automatic
|
|
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
|
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor
|
|
ENABLE_PREVIEWS: "YES"
|
|
|
|
ZitareShareExtension:
|
|
type: app-extension
|
|
supportedDestinations: [iOS]
|
|
sources:
|
|
- path: ShareExtension
|
|
excludes:
|
|
- "Resources/Info.plist"
|
|
- "Resources/ZitareShareExtension.entitlements"
|
|
info:
|
|
path: ShareExtension/Resources/Info.plist
|
|
properties:
|
|
ITSAppUsesNonExemptEncryption: false
|
|
CFBundleDisplayName: An Zitare schicken
|
|
CFBundleShortVersionString: "0.1.0"
|
|
CFBundleVersion: "1"
|
|
NSExtension:
|
|
NSExtensionPointIdentifier: com.apple.share-services
|
|
NSExtensionPrincipalClass: $(PRODUCT_MODULE_NAME).ShareViewController
|
|
NSExtensionAttributes:
|
|
NSExtensionActivationRule:
|
|
NSExtensionActivationSupportsText: true
|
|
NSExtensionActivationSupportsWebURLWithMaxCount: 1
|
|
entitlements:
|
|
path: ShareExtension/Resources/ZitareShareExtension.entitlements
|
|
properties:
|
|
keychain-access-groups:
|
|
- $(AppIdentifierPrefix)ev.mana.session
|
|
com.apple.security.application-groups:
|
|
- group.ev.mana.zitare
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: ev.mana.zitare.share
|
|
CODE_SIGN_STYLE: Automatic
|
|
SKIP_INSTALL: "YES"
|
|
|
|
ZitareWidgetExtension:
|
|
type: app-extension
|
|
supportedDestinations: [iOS]
|
|
sources:
|
|
- path: Widgets/ZitareWidget
|
|
excludes:
|
|
- "Resources/Info.plist"
|
|
- "Resources/ZitareWidgetExtension.entitlements"
|
|
# Geteilter Snapshot-Code (SwiftData-Models + Container).
|
|
# Widget liest aus dem App-Group-Store, den die App befüllt.
|
|
- path: Sources/Core/Snapshot/SnapshotModels.swift
|
|
info:
|
|
path: Widgets/ZitareWidget/Resources/Info.plist
|
|
properties:
|
|
ITSAppUsesNonExemptEncryption: false
|
|
CFBundleDisplayName: Zitare Widget
|
|
CFBundleShortVersionString: "0.1.0"
|
|
CFBundleVersion: "1"
|
|
NSExtension:
|
|
NSExtensionPointIdentifier: com.apple.widgetkit-extension
|
|
entitlements:
|
|
path: Widgets/ZitareWidget/Resources/ZitareWidgetExtension.entitlements
|
|
properties:
|
|
keychain-access-groups:
|
|
- $(AppIdentifierPrefix)ev.mana.session
|
|
com.apple.security.application-groups:
|
|
- group.ev.mana.zitare
|
|
dependencies:
|
|
- sdk: WidgetKit.framework
|
|
- sdk: SwiftUI.framework
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: ev.mana.zitare.widget
|
|
CODE_SIGN_STYLE: Automatic
|
|
SKIP_INSTALL: "YES"
|
|
INFOPLIST_KEY_CFBundleDisplayName: Zitare Widget
|
|
|
|
ZitareNativeTests:
|
|
type: bundle.unit-test
|
|
supportedDestinations: [iOS, macOS]
|
|
sources:
|
|
- Tests/UnitTests
|
|
dependencies:
|
|
- target: ZitareNative
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: ev.mana.zitare.tests
|
|
GENERATE_INFOPLIST_FILE: "YES"
|
|
|
|
ZitareNativeUITests:
|
|
type: bundle.ui-testing
|
|
supportedDestinations: [iOS, macOS]
|
|
sources:
|
|
- Tests/UITests
|
|
dependencies:
|
|
- target: ZitareNative
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: ev.mana.zitare.uitests
|
|
GENERATE_INFOPLIST_FILE: "YES"
|
|
|
|
schemes:
|
|
ZitareNative:
|
|
build:
|
|
targets:
|
|
ZitareNative: all
|
|
ZitareNativeTests: [test]
|
|
ZitareNativeUITests: [test]
|
|
test:
|
|
targets:
|
|
- ZitareNativeTests
|
|
- ZitareNativeUITests
|
|
gatherCoverageData: false
|
|
run:
|
|
config: Debug
|
|
archive:
|
|
config: Release
|