-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproject.yml
More file actions
209 lines (198 loc) · 8.11 KB
/
Copy pathproject.yml
File metadata and controls
209 lines (198 loc) · 8.11 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
199
200
201
202
203
204
205
206
207
208
209
# XcodeGen spec for Track B (testing-smoke-e2e-strategy) + #23 hosted renderer tests.
#
# SwiftPM (Package.swift) stays the source of truth for the app build. This
# project exists ONLY to host tests that need a real .app bundle + a window-server
# context `swift test` cannot provide: the XCUITest target (black-box UI E2E) and
# the LogosHostedTests target (in-process unit tests that instantiate the SwiftTerm
# view, which segfaults without a window server). The generated Logos.xcodeproj is
# a build artifact (gitignored) — regenerate with `xcodegen generate`.
name: Logos
options:
bundleIdPrefix: app.getlogos
deploymentTarget:
macOS: "15.0"
createIntermediateGroups: true
settings:
base:
SWIFT_VERSION: "6.0"
# Apple Development signing (not ad-hoc): macOS 26 Gatekeeper rejects an
# ad-hoc-signed XCUITest runner as "damaged" and refuses to launch it, which
# blocks `xcodebuild test`. An Apple-Development-signed runner launches freely
# on the registered development machine. No entitlements file → no provisioning
# profile required for a local manual sign.
CODE_SIGN_STYLE: Manual
# Generic "Apple Development" resolves to whatever Apple Development cert is in
# the signing keychain — portable across contributors and CI (which imports its
# own). Not tied to one developer's cert. DEVELOPMENT_TEAM is the org team.
CODE_SIGN_IDENTITY: "Apple Development"
DEVELOPMENT_TEAM: "6W377FS7BS"
packages:
SwiftTerm:
url: https://github.com/PsychQuant/SwiftTerm.git
branch: logos-renderer-base
# #107: our fork (mirrors Package.swift) — upstream's Bundle.module access
# fatalErrors when the resource bundle is missing; logos-base fails soft.
Highlightr:
url: https://github.com/PsychQuant/Highlightr.git
branch: logos-base
Yams:
url: https://github.com/jpsim/Yams.git
from: "5.0.0"
# #26 — visual-regression snapshots for stable SwiftUI views. Test-only,
# consumed by LogosHostedTests (Xcode-only; not in Package.swift).
# #25 — exact-pinned: the Xcode workspace resolves this to 1.19.2, and the
# generated .xcodeproj (+ its Package.resolved) is gitignored, so `exactVersion`
# here is the only in-repo pin point — it makes a fresh `xcodegen generate`
# reproducible instead of drifting to whatever newest 1.x resolves.
SnapshotTesting:
url: https://github.com/pointfreeco/swift-snapshot-testing.git
exactVersion: "1.19.2"
targets:
# #60: LogosAccounts + LogosUsage are Package.swift library targets (extracted
# during the merge-multistats-into-logos work) that LogoSwitch and the Logos app
# depend on. SwiftPM resolves them via Package.swift; the generated xcodeproj
# needs them as explicit module targets too, or `import LogosAccounts` fails
# inside LogoSwitch and Track B won't compile. Same drift as #39's LogoSwitch
# wiring — a new module was extracted and project.yml didn't follow, silently
# breaking Track B. Mirrors the LogoSwitch framework recipe.
#
# LogosAccounts — Foundation-only credential-free account/registry layer. No
# module deps; must NOT link Security (the #34 red line, RedLineAuditTests).
LogosAccounts:
type: framework
platform: macOS
sources:
- path: Sources/LogosAccounts
settings:
base:
PRODUCT_NAME: LogosAccounts
PRODUCT_BUNDLE_IDENTIFIER: app.getlogos.logosAccounts
GENERATE_INFOPLIST_FILE: "YES"
# LogosGateway — per-account inference gateway pool (spec 2026-07-31).
# Foundation + os only; depends on LogosAccounts for the Account model, and it
# must NOT link Security (it handles no credentials). Mirrors the LogosAccounts
# framework recipe.
LogosGateway:
type: framework
platform: macOS
sources:
- path: Sources/LogosGateway
dependencies:
- target: LogosAccounts
settings:
base:
PRODUCT_NAME: LogosGateway
PRODUCT_BUNDLE_IDENTIFIER: app.getlogos.logosGateway
GENERATE_INFOPLIST_FILE: "YES"
# LogosUsage — the ONE target allowed to import Security (read-only keychain +
# usage API). Depends on LogosAccounts.
LogosUsage:
type: framework
platform: macOS
sources:
- path: Sources/LogosUsage
dependencies:
- target: LogosAccounts
settings:
base:
PRODUCT_NAME: LogosUsage
PRODUCT_BUNDLE_IDENTIFIER: app.getlogos.logosUsage
GENERATE_INFOPLIST_FILE: "YES"
# #39: LogoSwitch is a Package.swift library (Sources/LogoSwitch) that 8 files in
# the Logos target import. SwiftPM resolves it via Package.swift; the generated
# xcodeproj needs it as an explicit module target so `import LogoSwitch` resolves
# under xcodebuild too (it didn't — Track B was silently broken since #34).
# A framework gives a clean Swift module; it links Foundation + os only and
# deliberately does NOT link Security (the #34 red line, enforced by RedLineAuditTests).
# #60: it also imports LogosAccounts, so that module target must be a dependency.
LogoSwitch:
type: framework
platform: macOS
sources:
- path: Sources/LogoSwitch
dependencies:
- target: LogosAccounts
settings:
base:
PRODUCT_NAME: LogoSwitch
PRODUCT_BUNDLE_IDENTIFIER: app.getlogos.logoSwitch
# A framework bundle needs an Info.plist or codesign rejects it
# ("bundle format unrecognized"). Generate one (no custom plist needed).
GENERATE_INFOPLIST_FILE: "YES"
Logos:
type: application
platform: macOS
sources:
- path: Sources/Logos
dependencies:
- target: LogoSwitch
- target: LogosAccounts
- target: LogosGateway
- target: LogosUsage
- package: SwiftTerm
product: SwiftTerm
- package: Highlightr
- package: Yams
settings:
base:
PRODUCT_NAME: Logos
# #104: the Track B test host runs under its OWN bundle id so it can
# launch while a production Logos (app.getlogos.logos) is running — the
# dogfooding case. LaunchServices + LSMultipleInstancesProhibited treat
# same-id launches as one app, so with the shared id a live Logos
# absorbed the TEST_HOST launch and every hosted/UI test died with
# "Could not launch". The PRODUCTION id must never change here or
# anywhere (keychain + TCC grants anchor to it, #101); it lives in
# Info.plist, copied verbatim by the Makefile. TrackB-Info.plist reads
# $(PRODUCT_BUNDLE_IDENTIFIER) so this setting is the single id source
# for the test host. Companion: AccountBootstrap makes the hosted host
# bind a volatile registry, so concurrent test runs can't touch (or
# reap) the real ~/.logos/accounts of the live instance (#80 race).
PRODUCT_BUNDLE_IDENTIFIER: app.getlogos.logos.testhost
GENERATE_INFOPLIST_FILE: "NO"
INFOPLIST_FILE: TrackB-Info.plist
MARKETING_VERSION: "0.1.0"
CURRENT_PROJECT_VERSION: "1"
LogosUITests:
type: bundle.ui-testing
platform: macOS
sources:
- path: LogosUITests
dependencies:
- target: Logos
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: app.getlogos.logosUITests
GENERATE_INFOPLIST_FILE: "YES"
# In-process unit tests hosted by the app (#23). The app dependency makes
# XcodeGen wire TEST_HOST = Logos.app, so these run with an NSApplication +
# window server — required to instantiate TeedLocalProcessTerminalView (it
# segfaults in the bare `swift test` runner). SwiftTerm is a direct dependency
# so the tests can `import SwiftTerm` for the renderer types.
LogosHostedTests:
type: bundle.unit-test
platform: macOS
sources:
- path: LogosHostedTests
dependencies:
- target: Logos
- target: LogoSwitch
- package: SwiftTerm
product: SwiftTerm
- package: SnapshotTesting
product: SnapshotTesting
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: app.getlogos.logosHostedTests
GENERATE_INFOPLIST_FILE: "YES"
schemes:
Logos:
build:
targets:
Logos: all
LogosUITests: [test]
LogosHostedTests: [test]
test:
targets:
- LogosHostedTests
- LogosUITests