zitare-native/project.yml
Till 03e2f041e5 ζ-1 Polish: robuster Header-Selektor + zitare.mana.how als 2. UL-Domain
- WebShellScripts.hideWebHeader: drei Selektor-Strategien gestapelt
  (data-app-nav-Marker / strukturell via :has(a.brand) / positionell
  via :first-of-type), damit Klassen-Renames in zitare-web das Hide
  nicht still brechen
- project.yml entitlements: applinks:zitare.mana.how als zweite
  Universal-Link-Domain, solange zitare.com-DNS-Zone fehlt. Beide
  Hosts liefern dasselbe AASA-File. Nach Cloudflare-Cut kann der
  Eintrag bleiben — schadet nicht
- Live-E2E verifiziert: simctl openurl https://zitare.mana.how/q/...
  → App empfängt Deep-Link, WebShell lädt die Quote-Page, native
  TabBar bleibt, Web-Header bleibt versteckt

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 20:51:03 +02:00

220 lines
7 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
- target: ZitareShareExtension
embed: true
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: "1"
CFBundleDevelopmentRegion: de
CFBundleDisplayName: Zitare
LSApplicationCategoryType: "public.app-category.reference"
UILaunchScreen: {}
UISupportedInterfaceOrientations:
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
UISupportedInterfaceOrientations~ipad:
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
CFBundleURLTypes:
- CFBundleURLName: ev.mana.zitare
CFBundleURLSchemes:
- zitare
NSUserActivityTypes:
- NSUserActivityTypeBrowsingWeb
# WKWebView lädt zitare.com + zitare.mana.how. 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.zitare
# Universal-Link-Domains:
# - zitare.com ist die kanonische Production-Domain (steht
# auch im Manifest und im AASA-File auf zitare-com).
# - zitare.mana.how als Staging-Domain, solange die zitare.com-
# Cloudflare-Zone noch nicht aufgelöst wird (DNS-Setup
# blockiert auf separatem cloudflared-Login). Nach Cloudflare-
# Cut kann der Eintrag bleiben — schadet nicht, deckt einfach
# beide Hosts ab.
# Beide Hosts liefern identische AASA-Files (siehe nginx-app.conf
# bzw. nginx-com.conf im zitare-Repo).
com.apple.developer.associated-domains:
- applinks:zitare.com
- applinks:zitare.mana.how
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:
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:
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:
CFBundleDisplayName: Zitare Widget
CFBundleShortVersionString: "0.1.0"
CFBundleVersion: "1"
NSExtension:
NSExtensionPointIdentifier: com.apple.widgetkit-extension
entitlements:
path: Widgets/ZitareWidget/Resources/ZitareWidgetExtension.entitlements
properties:
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