-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathproject.yml
More file actions
198 lines (193 loc) · 8.3 KB
/
Copy pathproject.yml
File metadata and controls
198 lines (193 loc) · 8.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
name: Aperture
options:
bundleIdPrefix: com.aperture
deploymentTarget:
iOS: "26.0"
developmentLanguage: en
createIntermediateGroups: true
generateEmptyDirectories: true
xcodeVersion: "26.5"
settings:
base:
SWIFT_VERSION: "6.0"
SWIFT_STRICT_CONCURRENCY: complete
ENABLE_USER_SCRIPT_SANDBOXING: YES
DEVELOPMENT_TEAM: C5T44SZNQX
CODE_SIGN_STYLE: Automatic
# Rule #3 §B exceptions — each logged in SHIPPED.md with the
# justification at the time the dependency was added. The default
# answer to "add an SPM dep?" remains NO.
#
# Trust Wallet Core (2026-06-06) — battle-tested open-source
# cryptography library used by Trust Wallet, Coinbase Wallet, Binance
# Wallet. The canonical Swift package for multi-chain key derivation.
# Lives in the domain layer only; the UI never imports it directly
# (Rule #3 §A.3 — no third-party SDK in the UI layer).
#
packages:
WalletCore:
url: https://github.com/trustwallet/wallet-core
from: "4.2.0"
GRDB:
url: https://github.com/groue/GRDB.swift.git
from: "7.11.1"
Lottie:
url: https://github.com/airbnb/lottie-ios.git
from: "4.6.0"
targets:
Aperture:
type: application
platform: iOS
deploymentTarget: "26.0"
sources:
- path: Aperture/Sources
excludes:
- Private/**
- path: Aperture/Sources/Private
optional: true
- path: Aperture/Resources
dependencies:
- package: WalletCore
product: WalletCore
- package: WalletCore
product: WalletCoreSwiftProtobuf
- package: GRDB
product: GRDB
- package: Lottie
product: Lottie
# API keys come from the local, gitignored Secrets.xcconfig. Keep
# Secrets.xcconfig.template committed as the value-free setup guide.
configFiles:
Debug: Secrets.xcconfig
Release: Secrets.xcconfig
# Explicit Info.plist instead of GENERATE_INFOPLIST_FILE: Xcode only
# injects a fixed allow-list of INFOPLIST_KEY_* settings, so arbitrary
# custom keys (our API keys) need a real plist carrying `$(KEY)` tokens
# substituted at build time. The source plist holds only the tokens,
# never the secret values — safe to commit. (Replicates exactly what
# GENERATE_INFOPLIST_FILE produced: launch screen, single-scene
# manifest, portrait-only, display name, Face ID + camera usage.)
info:
path: Aperture/Info.plist
properties:
CFBundleDisplayName: Aperture
CFBundleShortVersionString: "$(MARKETING_VERSION)"
CFBundleVersion: "$(CURRENT_PROJECT_VERSION)"
UILaunchScreen: {}
UIApplicationSceneManifest:
UIApplicationSupportsMultipleScenes: false
# iPhone stays portrait-only; iPad (and the Mac "Designed for iPad"
# window) allows all orientations so it's a real iPad app, not a
# portrait-locked letterbox.
UISupportedInterfaceOrientations:
- UIInterfaceOrientationPortrait
"UISupportedInterfaceOrientations~ipad":
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
# Required for LocalAuthentication biometric prompt (without it the
# app crashes on the first Face ID call) + AVCaptureSession QR scan.
NSFaceIDUsageDescription: "Aperture uses Face ID to unlock the app and confirm transactions, so you don't have to type your PIN every time."
NSCameraUsageDescription: "Aperture uses the camera to scan wallet addresses and payment QR codes."
# Required to save a key / recovery-phrase QR image to the photo
# library (the Add-only entitlement) — without it the first save
# call crashes. We only ever ADD an image; we never read the library.
NSPhotoLibraryAddUsageDescription: "Aperture saves a QR image to your Photos only when you tap Save — so you can move a key or recovery phrase to another device. It never reads your photo library."
# Secret API keys — `$(KEY)` substituted from the xcconfig at
# build time; the source plist never contains the real values.
ONERPC_API_KEY: "$(ONERPC_API_KEY)"
INFURA_API_KEY: "$(INFURA_API_KEY)"
ETHERSCAN_API_KEY: "$(ETHERSCAN_API_KEY)"
TRONSCAN_API_KEY: "$(TRONSCAN_API_KEY)"
# iCloud → CloudKit, for the encrypted wallet-backup feature (the blob
# store in CloudKitBackupStore). Container auto-creates under the team's
# account when the capability is enabled in signing; record types
# auto-create in the Development environment on first save. Deploy the
# schema to Production before App Store release.
entitlements:
path: Aperture/Aperture.entitlements
properties:
com.apple.developer.icloud-container-identifiers:
- iCloud.com.aperture.wallet
com.apple.developer.icloud-services:
- CloudKit
settings:
base:
PRODUCT_NAME: Aperture
PRODUCT_BUNDLE_IDENTIFIER: com.aperture.wallet
CURRENT_PROJECT_VERSION: "7"
MARKETING_VERSION: "2.40.02"
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor
TARGETED_DEVICE_FAMILY: "1,2" # iPhone + iPad (native iPad app)
IPHONEOS_DEPLOYMENT_TARGET: "26.0"
# Mac Catalyst is BLOCKED: WalletCore/SwiftProtobuf/yttrium ship no
# ios-arm64-maccatalyst slice (verified — a Catalyst build fails to
# link). "Designed for iPad" runs the iPad arm64 app NATIVELY on Apple
# Silicon (needs only the ios-arm64 slice all deps have) — the only
# 100%-native macOS path the current binaries permit.
SUPPORTS_MACCATALYST: NO
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD: YES
ENABLE_PREVIEWS: YES
DEVELOPMENT_TEAM: C5T44SZNQX
CODE_SIGN_STYLE: Automatic
LOCALIZATION_PREFERS_STRING_CATALOGS: YES
SWIFT_EMIT_LOC_STRINGS: YES
KNOWN_REGIONS: "en af ar bg bn ca cs da de el es et fa fi fil fr he hi hr hu id is it ja ko lt lv ml mr ms nb nl pa pl pt-BR ro ru sk sl sr sv sw ta te th tr uk ur vi zh-Hans zh-Hant"
# Swift Testing target — pure unit tests, no network. The first test
# target in Aperture per `TODO.md` T-043; lands 2026-06-12 with the
# EVM + Solana token coverage requested as part of the fetching-stack
# audit (per-token validation of contract checksum / decimals /
# symbol / program-id routing). Tests link against the app target so
# they can call into `EVMTokenRegistry`, `SolanaTokenRegistry`,
# `Keccak256`, `Base58`, etc.
ApertureTests:
type: bundle.unit-test
platform: iOS
deploymentTarget: "26.0"
sources:
- path: Aperture/Tests
dependencies:
- target: Aperture
- package: GRDB
product: GRDB
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: com.aperture.wallet.tests
IPHONEOS_DEPLOYMENT_TARGET: "26.0"
TARGETED_DEVICE_FAMILY: "1,2"
SUPPORTS_MACCATALYST: NO
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD: NO
DEVELOPMENT_TEAM: C5T44SZNQX
CODE_SIGN_STYLE: Automatic
# Match the recommended baseline. No run-script phases here, so
# sandboxing is a no-op for build speed, but YES keeps this target
# off Xcode's "update to recommended settings" prompt.
ENABLE_USER_SCRIPT_SANDBOXING: YES
# The host app's PRODUCT_NAME is Aperture (set in the
# Aperture target above), so the test-host bundle path
# follows that — not the project / target name "Aperture".
# Without these two settings xcodebuild stalls with
# "Could not find test host for ApertureTests:
# TEST_HOST evaluates to .../Aperture.app/Aperture" before
# any test runs.
TEST_HOST: "$(BUILT_PRODUCTS_DIR)/Aperture.app/Aperture"
BUNDLE_LOADER: "$(TEST_HOST)"
# Auto-generate the test bundle's Info.plist (same pattern
# the host app target uses — see `GENERATE_INFOPLIST_FILE:
# YES` on Aperture above). Without this xcodebuild refuses
# to code-sign the test bundle.
GENERATE_INFOPLIST_FILE: YES
schemes:
Aperture:
build:
targets:
Aperture: all
ApertureTests: [test]
test:
targets:
- ApertureTests
gatherCoverageData: true
coverageTargets:
- Aperture