|
1
|
## User (checkpoint) |
|
2
|
|
|
3
|
[@tauri: Adding tvOS Target to Tauri Xcode Project](file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/docs/debugging/tauri:%20Adding%20tvOS%20Target%20to%20Tauri%20Xcode%20Project) this is our previous conversation. You're Tauri, Tuist.dev, rust, and swift expert. You've been working with Xcode project for years. [@Project.swift](file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Project.swift) handle the fact that src-tauri/gen/apple is regenerated by tauri command. You're git expert, play around with the ignore files, especialy the one here [@.gitignore](file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/examples/tauri-app/src-tauri/.gitignore) |
|
4
|
Since you're dev experience expert in cross-platform development, make the best trade-off between Tauri versatilility and Xcode native project for tvOS target. |
|
5
|
|
|
6
|
## Assistant |
|
7
|
|
|
8
|
Let me explore the project structure to understand the full picture before making recommendations. |
|
9
|
|
|
10
|
**Tool Call: List the `tauri-plugin-ios-window/examples/tauri-app` directory's contents** |
|
11
|
Status: Completed |
|
12
|
|
|
13
|
# Folders: |
|
14
|
tauri-plugin-ios-window/examples/tauri-app/.vscode |
|
15
|
tauri-plugin-ios-window/examples/tauri-app/dist |
|
16
|
tauri-plugin-ios-window/examples/tauri-app/node_modules |
|
17
|
tauri-plugin-ios-window/examples/tauri-app/public |
|
18
|
tauri-plugin-ios-window/examples/tauri-app/src |
|
19
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri |
|
20
|
|
|
21
|
# Files: |
|
22
|
tauri-plugin-ios-window/examples/tauri-app/.gitignore |
|
23
|
tauri-plugin-ios-window/examples/tauri-app/.nvmrc |
|
24
|
tauri-plugin-ios-window/examples/tauri-app/README.md |
|
25
|
tauri-plugin-ios-window/examples/tauri-app/index.html |
|
26
|
tauri-plugin-ios-window/examples/tauri-app/jsconfig.json |
|
27
|
tauri-plugin-ios-window/examples/tauri-app/package.json |
|
28
|
tauri-plugin-ios-window/examples/tauri-app/pnpm-lock.yaml |
|
29
|
tauri-plugin-ios-window/examples/tauri-app/pnpm-workspace.yaml |
|
30
|
tauri-plugin-ios-window/examples/tauri-app/vite.config.js |
|
31
|
|
|
32
|
|
|
33
|
**Tool Call: List the `tauri-plugin-ios-window` directory's contents** |
|
34
|
Status: Completed |
|
35
|
|
|
36
|
# Folders: |
|
37
|
tauri-plugin-ios-window/dist-js |
|
38
|
tauri-plugin-ios-window/docs |
|
39
|
tauri-plugin-ios-window/examples |
|
40
|
tauri-plugin-ios-window/guest-js |
|
41
|
tauri-plugin-ios-window/ios |
|
42
|
tauri-plugin-ios-window/node_modules |
|
43
|
tauri-plugin-ios-window/permissions |
|
44
|
tauri-plugin-ios-window/src |
|
45
|
tauri-plugin-ios-window/target |
|
46
|
|
|
47
|
# Files: |
|
48
|
tauri-plugin-ios-window/.gitignore |
|
49
|
tauri-plugin-ios-window/CONTRIBUTING.md |
|
50
|
tauri-plugin-ios-window/Cargo.lock |
|
51
|
tauri-plugin-ios-window/Cargo.toml |
|
52
|
tauri-plugin-ios-window/LICENSE |
|
53
|
tauri-plugin-ios-window/README.md |
|
54
|
tauri-plugin-ios-window/build.rs |
|
55
|
tauri-plugin-ios-window/package.json |
|
56
|
tauri-plugin-ios-window/pnpm-lock.yaml |
|
57
|
tauri-plugin-ios-window/rollup.config.js |
|
58
|
tauri-plugin-ios-window/tsconfig.json |
|
59
|
|
|
60
|
|
|
61
|
**Tool Call: List the `tauri-plugin-ios-window/examples/tauri-app/src-tauri` directory's contents** |
|
62
|
Status: Completed |
|
63
|
|
|
64
|
# Folders: |
|
65
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/capabilities |
|
66
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen |
|
67
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/icons |
|
68
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/src |
|
69
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/target |
|
70
|
|
|
71
|
# Files: |
|
72
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/.gitignore |
|
73
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/Cargo.toml |
|
74
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/build.rs |
|
75
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/tauri.conf.json |
|
76
|
|
|
77
|
|
|
78
|
**Tool Call: List the `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple` directory's contents** |
|
79
|
Status: Completed |
|
80
|
|
|
81
|
# Folders: |
|
82
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets |
|
83
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Derived |
|
84
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Externals |
|
85
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources |
|
86
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/assets |
|
87
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/build |
|
88
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj |
|
89
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace |
|
90
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS |
|
91
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_tvOS |
|
92
|
|
|
93
|
# Files: |
|
94
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/.gitignore |
|
95
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/.keep |
|
96
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/ExportOptions.plist |
|
97
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/LaunchScreen.storyboard |
|
98
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Podfile |
|
99
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Project.swift |
|
100
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/mise.toml |
|
101
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/project.yml |
|
102
|
|
|
103
|
|
|
104
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/.gitignore`** |
|
105
|
Status: Completed |
|
106
|
|
|
107
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/.gitignore |
|
108
|
xcuserdata/ |
|
109
|
build/ |
|
110
|
Externals/ |
|
111
|
|
|
112
|
``` |
|
113
|
|
|
114
|
|
|
115
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/.gitignore`** |
|
116
|
Status: Completed |
|
117
|
|
|
118
|
```tauri-plugin-ios-window/examples/tauri-app/.gitignore |
|
119
|
# Logs |
|
120
|
logs |
|
121
|
*.log |
|
122
|
npm-debug.log* |
|
123
|
yarn-debug.log* |
|
124
|
yarn-error.log* |
|
125
|
pnpm-debug.log* |
|
126
|
lerna-debug.log* |
|
127
|
|
|
128
|
node_modules |
|
129
|
dist |
|
130
|
dist-ssr |
|
131
|
*.local |
|
132
|
|
|
133
|
# Editor directories and files |
|
134
|
.vscode/* |
|
135
|
!.vscode/extensions.json |
|
136
|
.idea |
|
137
|
.DS_Store |
|
138
|
*.suo |
|
139
|
*.ntvs* |
|
140
|
*.njsproj |
|
141
|
*.sln |
|
142
|
*.sw? |
|
143
|
|
|
144
|
``` |
|
145
|
|
|
146
|
|
|
147
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/project.yml`** |
|
148
|
Status: Completed |
|
149
|
|
|
150
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/project.yml |
|
151
|
name: tauri-app |
|
152
|
options: |
|
153
|
bundleIdPrefix: com.tauri.dev |
|
154
|
deploymentTarget: |
|
155
|
iOS: 14.0 |
|
156
|
fileGroups: [../../src] |
|
157
|
configs: |
|
158
|
debug: debug |
|
159
|
release: release |
|
160
|
settingGroups: |
|
161
|
app: |
|
162
|
base: |
|
163
|
PRODUCT_NAME: tauri-app |
|
164
|
PRODUCT_BUNDLE_IDENTIFIER: com.tauri.dev |
|
165
|
DEVELOPMENT_TEAM: NADBSNEZWH |
|
166
|
targetTemplates: |
|
167
|
app: |
|
168
|
type: application |
|
169
|
sources: |
|
170
|
- path: Sources |
|
171
|
scheme: |
|
172
|
environmentVariables: |
|
173
|
RUST_BACKTRACE: full |
|
174
|
RUST_LOG: info |
|
175
|
settings: |
|
176
|
groups: [app] |
|
177
|
targets: |
|
178
|
tauri-app_iOS: |
|
179
|
type: application |
|
180
|
platform: iOS |
|
181
|
sources: |
|
182
|
- path: Sources |
|
183
|
- path: Assets.xcassets |
|
184
|
- path: Externals |
|
185
|
- path: tauri-app_iOS |
|
186
|
- path: assets |
|
187
|
buildPhase: resources |
|
188
|
type: folder |
|
189
|
- path: LaunchScreen.storyboard |
|
190
|
info: |
|
191
|
path: tauri-app_iOS/Info.plist |
|
192
|
properties: |
|
193
|
LSRequiresIPhoneOS: true |
|
194
|
UILaunchStoryboardName: LaunchScreen |
|
195
|
UIRequiredDeviceCapabilities: [arm64, metal] |
|
196
|
UISupportedInterfaceOrientations: |
|
197
|
- UIInterfaceOrientationPortrait |
|
198
|
- UIInterfaceOrientationLandscapeLeft |
|
199
|
- UIInterfaceOrientationLandscapeRight |
|
200
|
UISupportedInterfaceOrientations~ipad: |
|
201
|
- UIInterfaceOrientationPortrait |
|
202
|
- UIInterfaceOrientationPortraitUpsideDown |
|
203
|
- UIInterfaceOrientationLandscapeLeft |
|
204
|
- UIInterfaceOrientationLandscapeRight |
|
205
|
CFBundleShortVersionString: 0.1.0 |
|
206
|
CFBundleVersion: "0.1.0" |
|
207
|
entitlements: |
|
208
|
path: tauri-app_iOS/tauri-app_iOS.entitlements |
|
209
|
scheme: |
|
210
|
environmentVariables: |
|
211
|
RUST_BACKTRACE: full |
|
212
|
RUST_LOG: info |
|
213
|
settings: |
|
214
|
base: |
|
215
|
ENABLE_BITCODE: false |
|
216
|
ARCHS: [arm64] |
|
217
|
VALID_ARCHS: arm64 |
|
218
|
LIBRARY_SEARCH_PATHS[arch=x86_64]: $(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME) |
|
219
|
LIBRARY_SEARCH_PATHS[arch=arm64]: $(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME) |
|
220
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES: true |
|
221
|
EXCLUDED_ARCHS[sdk=iphoneos*]: x86_64 |
|
222
|
groups: [app] |
|
223
|
dependencies: |
|
224
|
- framework: libapp.a |
|
225
|
embed: false |
|
226
|
- sdk: CoreGraphics.framework |
|
227
|
- sdk: Metal.framework |
|
228
|
- sdk: MetalKit.framework |
|
229
|
- sdk: QuartzCore.framework |
|
230
|
- sdk: Security.framework |
|
231
|
- sdk: UIKit.framework |
|
232
|
- sdk: WebKit.framework |
|
233
|
preBuildScripts: |
|
234
|
- script: cargo tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths "${FRAMEWORK_SEARCH_PATHS:?}" --header-search-paths "${HEADER_SEARCH_PATHS:?}" --gcc-preprocessor-definitions "${GCC_PREPROCESSOR_DEFINITIONS:-}" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?} |
|
235
|
name: Build Rust Code |
|
236
|
basedOnDependencyAnalysis: false |
|
237
|
outputFiles: |
|
238
|
- $(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapp.a |
|
239
|
- $(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a |
|
240
|
``` |
|
241
|
|
|
242
|
|
|
243
|
**Tool Call: List the `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS` directory's contents** |
|
244
|
Status: Completed |
|
245
|
|
|
246
|
|
|
247
|
# Files: |
|
248
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/Info.plist |
|
249
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/tauri-app_iOS.entitlements |
|
250
|
|
|
251
|
|
|
252
|
**Tool Call: Read file `tauri-plugin-ios-window/.gitignore`** |
|
253
|
Status: Completed |
|
254
|
|
|
255
|
```tauri-plugin-ios-window/.gitignore |
|
256
|
/.vs |
|
257
|
.DS_Store |
|
258
|
.Thumbs.db |
|
259
|
*.sublime* |
|
260
|
.idea/ |
|
261
|
debug.log |
|
262
|
package-lock.json |
|
263
|
.vscode/settings.json |
|
264
|
yarn.lock |
|
265
|
|
|
266
|
/.tauri |
|
267
|
/target |
|
268
|
Cargo.lock |
|
269
|
node_modules/ |
|
270
|
|
|
271
|
dist-js |
|
272
|
dist |
|
273
|
|
|
274
|
``` |
|
275
|
|
|
276
|
|
|
277
|
**Tool Call: List the `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_tvOS` directory's contents** |
|
278
|
Status: Completed |
|
279
|
|
|
280
|
|
|
281
|
# Files: |
|
282
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_tvOS/App.swift |
|
283
|
|
|
284
|
|
|
285
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_tvOS/App.swift`** |
|
286
|
Status: Completed |
|
287
|
|
|
288
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_tvOS/App.swift |
|
289
|
import SwiftUI |
|
290
|
|
|
291
|
@main |
|
292
|
struct TauriTvOSApp: App { |
|
293
|
var body: some Scene { |
|
294
|
WindowGroup { |
|
295
|
ContentView() |
|
296
|
} |
|
297
|
} |
|
298
|
} |
|
299
|
|
|
300
|
struct ContentView: View { |
|
301
|
var body: some View { |
|
302
|
VStack(spacing: 24) { |
|
303
|
Image(systemName: "tv") |
|
304
|
.font(.system(size: 80)) |
|
305
|
.foregroundColor(.accentColor) |
|
306
|
Text("tauri-app") |
|
307
|
.font(.headline) |
|
308
|
Text("tvOS target placeholder — no WebView available on this platform.") |
|
309
|
.font(.subheadline) |
|
310
|
.foregroundColor(.secondary) |
|
311
|
.multilineTextAlignment(.center) |
|
312
|
} |
|
313
|
.padding(48) |
|
314
|
} |
|
315
|
} |
|
316
|
|
|
317
|
``` |
|
318
|
|
|
319
|
|
|
320
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/tauri-app_iOS.entitlements`** |
|
321
|
Status: Completed |
|
322
|
|
|
323
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/tauri-app_iOS.entitlements |
|
324
|
<?xml version="1.0" encoding="UTF-8"?> |
|
325
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
326
|
<plist version="1.0"> |
|
327
|
<dict/> |
|
328
|
</plist> |
|
329
|
|
|
330
|
``` |
|
331
|
|
|
332
|
|
|
333
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/Info.plist`** |
|
334
|
Status: Completed |
|
335
|
|
|
336
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/Info.plist |
|
337
|
<?xml version="1.0" encoding="UTF-8"?> |
|
338
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
339
|
<plist version="1.0"> |
|
340
|
<dict> |
|
341
|
<key>CFBundleDevelopmentRegion</key> |
|
342
|
<string>$(DEVELOPMENT_LANGUAGE)</string> |
|
343
|
<key>CFBundleExecutable</key> |
|
344
|
<string>$(EXECUTABLE_NAME)</string> |
|
345
|
<key>CFBundleIdentifier</key> |
|
346
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> |
|
347
|
<key>CFBundleInfoDictionaryVersion</key> |
|
348
|
<string>6.0</string> |
|
349
|
<key>CFBundleName</key> |
|
350
|
<string>$(PRODUCT_NAME)</string> |
|
351
|
<key>CFBundlePackageType</key> |
|
352
|
<string>APPL</string> |
|
353
|
<key>CFBundleShortVersionString</key> |
|
354
|
<string>0.1.0</string> |
|
355
|
<key>CFBundleVersion</key> |
|
356
|
<string>0.1.0</string> |
|
357
|
<key>LSRequiresIPhoneOS</key> |
|
358
|
<true/> |
|
359
|
<key>UILaunchStoryboardName</key> |
|
360
|
<string>LaunchScreen</string> |
|
361
|
<key>UIRequiredDeviceCapabilities</key> |
|
362
|
<array> |
|
363
|
<string>arm64</string> |
|
364
|
<string>metal</string> |
|
365
|
</array> |
|
366
|
<key>UISupportedInterfaceOrientations</key> |
|
367
|
<array> |
|
368
|
<string>UIInterfaceOrientationPortrait</string> |
|
369
|
<string>UIInterfaceOrientationLandscapeLeft</string> |
|
370
|
<string>UIInterfaceOrientationLandscapeRight</string> |
|
371
|
</array> |
|
372
|
<key>UISupportedInterfaceOrientations~ipad</key> |
|
373
|
<array> |
|
374
|
<string>UIInterfaceOrientationPortrait</string> |
|
375
|
<string>UIInterfaceOrientationPortraitUpsideDown</string> |
|
376
|
<string>UIInterfaceOrientationLandscapeLeft</string> |
|
377
|
<string>UIInterfaceOrientationLandscapeRight</string> |
|
378
|
</array> |
|
379
|
</dict> |
|
380
|
</plist> |
|
381
|
``` |
|
382
|
|
|
383
|
|
|
384
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources`** |
|
385
|
Status: Failed |
|
386
|
|
|
387
|
```json |
|
388
|
{ |
|
389
|
"Text": "reading bytes of the file \"/Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources\"" |
|
390
|
} |
|
391
|
``` |
|
392
|
|
|
393
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/tauri.conf.json`** |
|
394
|
Status: Completed |
|
395
|
|
|
396
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/tauri.conf.json |
|
397
|
{ |
|
398
|
"productName": "tauri-app", |
|
399
|
"version": "0.1.0", |
|
400
|
"identifier": "com.tauri.dev", |
|
401
|
"build": { |
|
402
|
"beforeDevCommand": "pnpm dev", |
|
403
|
"beforeBuildCommand": "pnpm build", |
|
404
|
"devUrl": "http://localhost:1420", |
|
405
|
"frontendDist": "../dist" |
|
406
|
}, |
|
407
|
"app": { |
|
408
|
"withGlobalTauri": false, |
|
409
|
"security": { |
|
410
|
"csp": null |
|
411
|
}, |
|
412
|
"windows": [ |
|
413
|
{ |
|
414
|
"fullscreen": false, |
|
415
|
"height": 600, |
|
416
|
"resizable": true, |
|
417
|
"title": "tauri-app", |
|
418
|
"width": 800 |
|
419
|
} |
|
420
|
] |
|
421
|
}, |
|
422
|
"bundle": { |
|
423
|
"active": true, |
|
424
|
"targets": "all", |
|
425
|
"icon": [ |
|
426
|
"icons/32x32.png", |
|
427
|
"icons/128x128.png", |
|
428
|
"icons/128x128@2x.png", |
|
429
|
"icons/icon.icns", |
|
430
|
"icons/icon.ico" |
|
431
|
], |
|
432
|
"iOS": { |
|
433
|
"developmentTeam": "NADBSNEZWH" |
|
434
|
} |
|
435
|
} |
|
436
|
} |
|
437
|
|
|
438
|
``` |
|
439
|
|
|
440
|
|
|
441
|
**Tool Call: List the `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources` directory's contents** |
|
442
|
Status: Completed |
|
443
|
|
|
444
|
# Folders: |
|
445
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app |
|
446
|
|
|
447
|
|
|
448
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/mise.toml`** |
|
449
|
Status: Completed |
|
450
|
|
|
451
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/mise.toml |
|
452
|
[tools] |
|
453
|
tuist = "4.150.0" |
|
454
|
|
|
455
|
``` |
|
456
|
|
|
457
|
|
|
458
|
**Tool Call: List the `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app` directory's contents** |
|
459
|
Status: Completed |
|
460
|
|
|
461
|
# Folders: |
|
462
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/bindings |
|
463
|
|
|
464
|
# Files: |
|
465
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/main.mm |
|
466
|
|
|
467
|
|
|
468
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/main.mm`** |
|
469
|
Status: Completed |
|
470
|
|
|
471
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/main.mm |
|
472
|
#include "bindings/bindings.h" |
|
473
|
|
|
474
|
int main(int argc, char * argv[]) { |
|
475
|
ffi::start_app(); |
|
476
|
return 0; |
|
477
|
} |
|
478
|
|
|
479
|
``` |
|
480
|
|
|
481
|
|
|
482
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Podfile`** |
|
483
|
Status: Completed |
|
484
|
|
|
485
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Podfile |
|
486
|
# Uncomment the next line to define a global platform for your project |
|
487
|
|
|
488
|
target 'tauri-app_iOS' do |
|
489
|
platform :ios, '14.0' |
|
490
|
# Pods for tauri-app_iOS |
|
491
|
end |
|
492
|
|
|
493
|
target 'tauri-app_macOS' do |
|
494
|
platform :osx, '11.0' |
|
495
|
# Pods for tauri-app_macOS |
|
496
|
end |
|
497
|
|
|
498
|
# Delete the deployment target for iOS and macOS, causing it to be inherited from the Podfile |
|
499
|
post_install do |installer| |
|
500
|
installer.pods_project.targets.each do |target| |
|
501
|
target.build_configurations.each do |config| |
|
502
|
config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET' |
|
503
|
config.build_settings.delete 'MACOSX_DEPLOYMENT_TARGET' |
|
504
|
end |
|
505
|
end |
|
506
|
end |
|
507
|
|
|
508
|
``` |
|
509
|
|
|
510
|
|
|
511
|
**Tool Call: List the `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/bindings` directory's contents** |
|
512
|
Status: Completed |
|
513
|
|
|
514
|
|
|
515
|
# Files: |
|
516
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/bindings/bindings.h |
|
517
|
|
|
518
|
|
|
519
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/ExportOptions.plist`** |
|
520
|
Status: Completed |
|
521
|
|
|
522
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/ExportOptions.plist |
|
523
|
<?xml version="1.0" encoding="UTF-8"?> |
|
524
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
525
|
<plist version="1.0"> |
|
526
|
<dict> |
|
527
|
<key>method</key> |
|
528
|
<string>debugging</string> |
|
529
|
</dict> |
|
530
|
</plist> |
|
531
|
|
|
532
|
``` |
|
533
|
|
|
534
|
|
|
535
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/bindings/bindings.h`** |
|
536
|
Status: Completed |
|
537
|
|
|
538
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/bindings/bindings.h |
|
539
|
#pragma once |
|
540
|
|
|
541
|
namespace ffi { |
|
542
|
extern "C" { |
|
543
|
void start_app(); |
|
544
|
} |
|
545
|
} |
|
546
|
|
|
547
|
|
|
548
|
``` |
|
549
|
|
|
550
|
|
|
551
|
## Assistant |
|
552
|
|
|
553
|
Now I have a complete picture. Let me analyze the situation and implement the best solution: |
|
554
|
|
|
555
|
**The core problem:** |
|
556
|
- `cargo tauri ios build` regenerates `gen/apple/` — specifically `project.yml` (XcodeGen) — and would obliterate any hand-edits there |
|
557
|
- `Project.swift` (Tuist) lives alongside but is **not** used by Tauri's toolchain — Tuist is a separate layer we added on top |
|
558
|
- The tvOS target (`tauri-app_tvOS/` dir, `Project.swift`) needs to survive regeneration |
|
559
|
|
|
560
|
**The strategy:** |
|
561
|
- Keep `Project.swift` (Tuist-managed) as the source of truth for the Xcode project — Tauri only touches `project.yml` (XcodeGen), not `Project.swift` |
|
562
|
- Git-track all the hand-crafted tvOS pieces (`tauri-app_tvOS/`, `Project.swift`) and **un-ignore** them explicitly |
|
563
|
- Git-ignore `project.yml` (Tauri regenerates it, we don't need it when using Tuist) |
|
564
|
- Git-ignore the generated `.xcodeproj`/`.xcworkspace` (Tuist regenerates those) |
|
565
|
- Provide a `Makefile` or `mise` hook so `tuist generate` runs after `cargo tauri ios init` |
|
566
|
|
|
567
|
**Tool Call: cd /Users/seto.elkahfi/Repositories/tauri-plugin-ios-window && git status --short examples/tauri-app/src-tauri/gen/apple/ 2>&1 | head -40** |
|
568
|
Status: Completed |
|
569
|
|
|
570
|
Terminal: |
|
571
|
``` |
|
572
|
|
|
573
|
|
|
574
|
|
|
575
|
|
|
576
|
|
|
577
|
``` |
|
578
|
|
|
579
|
|
|
580
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj`** |
|
581
|
Status: Failed |
|
582
|
|
|
583
|
```json |
|
584
|
{ |
|
585
|
"Text": "reading bytes of the file \"/Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj\"" |
|
586
|
} |
|
587
|
``` |
|
588
|
|
|
589
|
**Tool Call: git ls-files --others --exclude-standard examples/tauri-app/src-tauri/gen/apple/ 2>&1 | head -40 && echo "---tracked---" && git ls-files examples/tauri-app/src-tauri/gen/apple/ 2>&1 | head -40** |
|
590
|
Status: Completed |
|
591
|
|
|
592
|
Terminal: |
|
593
|
``` |
|
594
|
---tracked--- |
|
595
|
examples/tauri-app/src-tauri/gen/apple/.gitignore |
|
596
|
examples/tauri-app/src-tauri/gen/apple/.keep |
|
597
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png |
|
598
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png |
|
599
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x.png |
|
600
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@3x.png |
|
601
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png |
|
602
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png |
|
603
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png |
|
604
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png |
|
605
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png |
|
606
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x-1.png |
|
607
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png |
|
608
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png |
|
609
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png |
|
610
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@2x.png |
|
611
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png |
|
612
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png |
|
613
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png |
|
614
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png |
|
615
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/Contents.json |
|
616
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/Contents.json |
|
617
|
examples/tauri-app/src-tauri/gen/apple/Derived/InfoPlists/tauri-app_tvOS-Info.plist |
|
618
|
examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistAssets+TauriAppIOS.swift |
|
619
|
examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistAssets+TauriAppTvOS.swift |
|
620
|
examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistBundle+TauriAppIOS.swift |
|
621
|
examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistBundle+TauriAppTvOS.swift |
|
622
|
examples/tauri-app/src-tauri/gen/apple/ExportOptions.plist |
|
623
|
examples/tauri-app/src-tauri/gen/apple/LaunchScreen.storyboard |
|
624
|
examples/tauri-app/src-tauri/gen/apple/Podfile |
|
625
|
examples/tauri-app/src-tauri/gen/apple/Project.swift |
|
626
|
examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/bindings/bindings.h |
|
627
|
examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/main.mm |
|
628
|
examples/tauri-app/src-tauri/gen/apple/mise.toml |
|
629
|
examples/tauri-app/src-tauri/gen/apple/project.yml |
|
630
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/project.pbxproj |
|
631
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/project.xcworkspace/contents.xcworkspacedata |
|
632
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings |
|
633
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/xcshareddata/xcschemes/tauri-app_iOS.xcscheme |
|
634
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/xcshareddata/xcschemes/tauri-app_tvOS.xcscheme |
|
635
|
|
|
636
|
|
|
637
|
|
|
638
|
|
|
639
|
``` |
|
640
|
|
|
641
|
|
|
642
|
**Tool Call: git ls-files examples/tauri-app/src-tauri/gen/apple/ 2>&1 | grep -v "Assets.xcassets\|AppIcon\|Derived\|xcodeproj\|xcworkspace"** |
|
643
|
Status: Completed |
|
644
|
|
|
645
|
Terminal: |
|
646
|
``` |
|
647
|
examples/tauri-app/src-tauri/gen/apple/.gitignore |
|
648
|
examples/tauri-app/src-tauri/gen/apple/.keep |
|
649
|
examples/tauri-app/src-tauri/gen/apple/ExportOptions.plist |
|
650
|
examples/tauri-app/src-tauri/gen/apple/LaunchScreen.storyboard |
|
651
|
examples/tauri-app/src-tauri/gen/apple/Podfile |
|
652
|
examples/tauri-app/src-tauri/gen/apple/Project.swift |
|
653
|
examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/bindings/bindings.h |
|
654
|
examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/main.mm |
|
655
|
examples/tauri-app/src-tauri/gen/apple/mise.toml |
|
656
|
examples/tauri-app/src-tauri/gen/apple/project.yml |
|
657
|
examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/Info.plist |
|
658
|
examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/tauri-app_iOS.entitlements |
|
659
|
examples/tauri-app/src-tauri/gen/apple/tauri-app_tvOS/App.swift |
|
660
|
|
|
661
|
``` |
|
662
|
|
|
663
|
|
|
664
|
## Assistant |
|
665
|
|
|
666
|
Now I have the full picture. Let me check what `Derived/` contains and whether the `.xcodeproj` should really be tracked: |
|
667
|
|
|
668
|
**Tool Call: git ls-files examples/tauri-app/src-tauri/gen/apple/Derived/ 2>&1** |
|
669
|
Status: Completed |
|
670
|
|
|
671
|
Terminal: |
|
672
|
``` |
|
673
|
examples/tauri-app/src-tauri/gen/apple/Derived/InfoPlists/tauri-app_tvOS-Info.plist |
|
674
|
examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistAssets+TauriAppIOS.swift |
|
675
|
examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistAssets+TauriAppTvOS.swift |
|
676
|
examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistBundle+TauriAppIOS.swift |
|
677
|
examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistBundle+TauriAppTvOS.swift |
|
678
|
|
|
679
|
``` |
|
680
|
|
|
681
|
|
|
682
|
**Tool Call: git ls-files examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/ 2>&1** |
|
683
|
Status: Completed |
|
684
|
|
|
685
|
Terminal: |
|
686
|
``` |
|
687
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/project.pbxproj |
|
688
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/project.xcworkspace/contents.xcworkspacedata |
|
689
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings |
|
690
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/xcshareddata/xcschemes/tauri-app_iOS.xcscheme |
|
691
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/xcshareddata/xcschemes/tauri-app_tvOS.xcscheme |
|
692
|
|
|
693
|
|
|
694
|
|
|
695
|
|
|
696
|
|
|
697
|
``` |
|
698
|
|
|
699
|
|
|
700
|
## Assistant |
|
701
|
|
|
702
|
Now I have everything I need. Here's the complete plan: |
|
703
|
|
|
704
|
**What to track (source of truth, never regenerated by Tauri):** |
|
705
|
- `Project.swift` ✅ — Tuist manifest, our custom additions |
|
706
|
- `tauri-app_tvOS/App.swift` ✅ — hand-written tvOS native code |
|
707
|
- `tauri-app_iOS/Info.plist`, `*.entitlements` ✅ — needed for Tauri too |
|
708
|
- `mise.toml`, `LaunchScreen.storyboard`, `ExportOptions.plist`, `Assets.xcassets`, `Sources/` ✅ |
|
709
|
|
|
710
|
**What to un-track (Tuist regenerates these from `Project.swift`):** |
|
711
|
- `tauri-app.xcodeproj/` — fully regenerated by `tuist generate` |
|
712
|
- `Derived/` — fully regenerated by `tuist generate` |
|
713
|
- `tauri-app.xcworkspace/` — regenerated |
|
714
|
|
|
715
|
**What to un-track (Tauri regenerates this from `tauri.conf.json`):** |
|
716
|
- `project.yml` — XcodeGen manifest regenerated by `cargo tauri ios init` |
|
717
|
|
|
718
|
Let me now implement all the changes: |
|
719
|
|
|
720
|
**Tool Call: tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/.gitignore** |
|
721
|
Status: Completed |
|
722
|
|
|
723
|
Diff: examples/tauri-app/src-tauri/gen/apple/.gitignore |
|
724
|
``` |
|
725
|
# ============================================================ |
|
726
|
# gen/apple/.gitignore |
|
727
|
# |
|
728
|
# Strategy: |
|
729
|
# - `cargo tauri ios init` regenerates project.yml (XcodeGen) |
|
730
|
# - `tuist generate` regenerates *.xcodeproj, *.xcworkspace, Derived/ |
|
731
|
# - Everything else is hand-authored source of truth → tracked |
|
732
|
# ============================================================ |
|
733
|
|
|
734
|
# ------------------------------------------------------------------ |
|
735
|
# Tauri-regenerated: XcodeGen manifest |
|
736
|
# Re-created by `cargo tauri ios init` from tauri.conf.json. |
|
737
|
# We use Project.swift (Tuist) as the Xcode project source of truth, |
|
738
|
# so project.yml is a Tauri implementation detail we don't need. |
|
739
|
# ------------------------------------------------------------------ |
|
740
|
project.yml |
|
741
|
|
|
742
|
# ------------------------------------------------------------------ |
|
743
|
# Tuist-regenerated: Xcode project & workspace |
|
744
|
# Fully described by Project.swift → always regenerate, never edit. |
|
745
|
# ------------------------------------------------------------------ |
|
746
|
*.xcodeproj/ |
|
747
|
*.xcworkspace/ |
|
748
|
|
|
749
|
# ------------------------------------------------------------------ |
|
750
|
# Tuist-regenerated: derived sources & info plists |
|
751
|
# Auto-synthesised from Project.swift (asset accessors, bundle IDs…). |
|
752
|
# ------------------------------------------------------------------ |
|
753
|
Derived/ |
|
754
|
|
|
755
|
# ------------------------------------------------------------------ |
|
756
|
# Xcode runtime noise |
|
757
|
# ------------------------------------------------------------------ |
|
758
|
xcuserdata/ |
|
759
|
|
|
760
|
# ------------------------------------------------------------------ |
|
761
|
# Rust / Cargo build output |
|
762
|
# (also covered by src-tauri/.gitignore, belt-and-suspenders here) |
|
763
|
# ------------------------------------------------------------------ |
|
764
|
build/ |
|
765
|
|
|
766
|
# ------------------------------------------------------------------ |
|
767
|
# Compiled Rust static libraries injected by xcode-script |
|
768
|
# ------------------------------------------------------------------ |
|
769
|
Externals/ |
|
770
|
|
|
771
|
``` |
|
772
|
|
|
773
|
|
|
774
|
## Assistant |
|
775
|
|
|
776
|
Now update `src-tauri/.gitignore` to explicitly protect the files that survive `cargo tauri ios init`: |
|
777
|
|
|
778
|
**Tool Call: tauri-plugin-ios-window/examples/tauri-app/src-tauri/.gitignore** |
|
779
|
Status: Completed |
|
780
|
|
|
781
|
Diff: examples/tauri-app/src-tauri/.gitignore |
|
782
|
``` |
|
783
|
# Generated by Cargo |
|
784
|
# will have compiled files and executables |
|
785
|
/target/ |
|
786
|
|
|
787
|
# ============================================================ |
|
788
|
# gen/apple — Tauri scaffolds this directory on `cargo tauri ios init`. |
|
789
|
# A nested .gitignore at gen/apple/.gitignore handles the fine-grained |
|
790
|
# rules for that subtree. The entries below are a belt-and-suspenders |
|
791
|
# safety net at this level. |
|
792
|
# ============================================================ |
|
793
|
|
|
794
|
# Rust static libraries produced by the Xcode build phase script |
|
795
|
gen/apple/Externals/ |
|
796
|
|
|
797
|
# Xcode project & workspace — regenerated by `tuist generate` |
|
798
|
# (Project.swift is the source of truth, not these files) |
|
799
|
gen/apple/*.xcodeproj/ |
|
800
|
gen/apple/*.xcworkspace/ |
|
801
|
|
|
802
|
# Tuist derived sources / plists — regenerated by `tuist generate` |
|
803
|
gen/apple/Derived/ |
|
804
|
|
|
805
|
# Xcode per-user settings |
|
806
|
gen/apple/xcuserdata/ |
|
807
|
|
|
808
|
# Xcode build artefacts |
|
809
|
gen/apple/build/ |
|
810
|
|
|
811
|
# XcodeGen manifest — regenerated by `cargo tauri ios init`. |
|
812
|
# We use Project.swift (Tuist) as the Xcode project source of truth. |
|
813
|
gen/apple/project.yml |
|
814
|
|
|
815
|
# ============================================================ |
|
816
|
# The following gen/apple files ARE intentionally tracked because |
|
817
|
# they are either hand-authored or not regenerated by Tauri/Tuist: |
|
818
|
# |
|
819
|
# Project.swift — Tuist project manifest (our source of truth) |
|
820
|
# mise.toml — Tuist version pin |
|
821
|
# project.yml — excluded above (Tauri-generated, not needed) |
|
822
|
# tauri-app_iOS/Info.plist — iOS app Info.plist (Tauri reads this) |
|
823
|
# tauri-app_iOS/*.entitlements — iOS entitlements |
|
824
|
# tauri-app_tvOS/App.swift — hand-authored native tvOS app entry point |
|
825
|
# Sources/ — Obj-C/C++ glue generated once by Tauri |
|
826
|
# Assets.xcassets/ — app icons & asset catalog |
|
827
|
# LaunchScreen.storyboard — iOS launch screen |
|
828
|
# ExportOptions.plist — archive export options |
|
829
|
# Podfile — CocoaPods manifest |
|
830
|
# ============================================================ |
|
831
|
|
|
832
|
``` |
|
833
|
|
|
834
|
|
|
835
|
## Assistant |
|
836
|
|
|
837
|
Now un-track the files that should be gitignored (Tuist-generated artifacts that are currently tracked): |
|
838
|
|
|
839
|
**Tool Call: git rm -r --cached \ |
|
840
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/ \ |
|
841
|
examples/tauri-app/src-tauri/gen/apple/Derived/ \ |
|
842
|
examples/tauri-app/src-tauri/gen/apple/project.yml \ |
|
843
|
2>&1** |
|
844
|
Status: Completed |
|
845
|
|
|
846
|
Terminal: |
|
847
|
``` |
|
848
|
rm 'examples/tauri-app/src-tauri/gen/apple/Derived/InfoPlists/tauri-app_tvOS-Info.plist' |
|
849
|
rm 'examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistAssets+TauriAppIOS.swift' |
|
850
|
rm 'examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistAssets+TauriAppTvOS.swift' |
|
851
|
rm 'examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistBundle+TauriAppIOS.swift' |
|
852
|
rm 'examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistBundle+TauriAppTvOS.swift' |
|
853
|
rm 'examples/tauri-app/src-tauri/gen/apple/project.yml' |
|
854
|
rm 'examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/project.pbxproj' |
|
855
|
rm 'examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/project.xcworkspace/contents.xcworkspacedata' |
|
856
|
rm 'examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings' |
|
857
|
rm 'examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/xcshareddata/xcschemes/tauri-app_iOS.xcscheme' |
|
858
|
rm 'examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/xcshareddata/xcschemes/tauri-app_tvOS.xcscheme' |
|
859
|
|
|
860
|
|
|
861
|
|
|
862
|
|
|
863
|
``` |
|
864
|
|
|
865
|
|
|
866
|
## Assistant |
|
867
|
|
|
868
|
Good. Now verify the xcworkspace is also handled (it should already be ignored since xcodeproj/ is gone, but let's check if the workspace dir is tracked separately): |
|
869
|
|
|
870
|
**Tool Call: git ls-files examples/tauri-app/src-tauri/gen/apple/ 2>&1 | grep -E "xcworkspace|xcodeproj|Derived|project\.yml"** |
|
871
|
Status: Completed |
|
872
|
|
|
873
|
Terminal: |
|
874
|
``` |
|
875
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace/.tuist-generated |
|
876
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace/contents.xcworkspacedata |
|
877
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings |
|
878
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace/xcshareddata/xcschemes/tauri-app-Workspace.xcscheme |
|
879
|
|
|
880
|
``` |
|
881
|
|
|
882
|
|
|
883
|
**Tool Call: git rm -r --cached examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace/ 2>&1** |
|
884
|
Status: Completed |
|
885
|
|
|
886
|
Terminal: |
|
887
|
``` |
|
888
|
rm 'examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace/.tuist-generated' |
|
889
|
rm 'examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace/contents.xcworkspacedata' |
|
890
|
rm 'examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings' |
|
891
|
rm 'examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace/xcshareddata/xcschemes/tauri-app-Workspace.xcscheme' |
|
892
|
|
|
893
|
``` |
|
894
|
|
|
895
|
|
|
896
|
## Assistant |
|
897
|
|
|
898
|
Now verify the remaining tracked files are exactly what we want: |
|
899
|
|
|
900
|
**Tool Call: git ls-files examples/tauri-app/src-tauri/gen/apple/ 2>&1** |
|
901
|
Status: Completed |
|
902
|
|
|
903
|
Terminal: |
|
904
|
``` |
|
905
|
examples/tauri-app/src-tauri/gen/apple/.gitignore |
|
906
|
examples/tauri-app/src-tauri/gen/apple/.keep |
|
907
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png |
|
908
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png |
|
909
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x.png |
|
910
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@3x.png |
|
911
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png |
|
912
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png |
|
913
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png |
|
914
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png |
|
915
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png |
|
916
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x-1.png |
|
917
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png |
|
918
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png |
|
919
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png |
|
920
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@2x.png |
|
921
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png |
|
922
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png |
|
923
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png |
|
924
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png |
|
925
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/Contents.json |
|
926
|
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/Contents.json |
|
927
|
examples/tauri-app/src-tauri/gen/apple/ExportOptions.plist |
|
928
|
examples/tauri-app/src-tauri/gen/apple/LaunchScreen.storyboard |
|
929
|
examples/tauri-app/src-tauri/gen/apple/Podfile |
|
930
|
examples/tauri-app/src-tauri/gen/apple/Project.swift |
|
931
|
examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/bindings/bindings.h |
|
932
|
examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/main.mm |
|
933
|
examples/tauri-app/src-tauri/gen/apple/mise.toml |
|
934
|
examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/Info.plist |
|
935
|
examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/tauri-app_iOS.entitlements |
|
936
|
examples/tauri-app/src-tauri/gen/apple/tauri-app_tvOS/App.swift |
|
937
|
|
|
938
|
``` |
|
939
|
|
|
940
|
|
|
941
|
## Assistant |
|
942
|
|
|
943
|
That's exactly the right set. Now add a `Makefile` that documents the two-step workflow so any developer (or CI) knows exactly what to run after a Tauri regeneration: |
|
944
|
|
|
945
|
**Tool Call: No matches** |
|
946
|
Status: Completed |
|
947
|
|
|
948
|
```json |
|
949
|
{ |
|
950
|
"offset": 0, |
|
951
|
"current_matches_page": [], |
|
952
|
"all_matches_len": 0 |
|
953
|
} |
|
954
|
``` |
|
955
|
|
|
956
|
**Tool Call: tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Makefile** |
|
957
|
Status: Completed |
|
958
|
|
|
959
|
Diff: examples/tauri-app/src-tauri/gen/apple/Makefile |
|
960
|
``` |
|
961
|
# ============================================================================= |
|
962
|
# gen/apple/Makefile |
|
963
|
# |
|
964
|
# Bridges the Tauri code-generation lifecycle with Tuist project generation. |
|
965
|
# |
|
966
|
# WHY THIS FILE EXISTS |
|
967
|
# -------------------- |
|
968
|
# `cargo tauri ios init` regenerates project.yml (XcodeGen format) but does |
|
969
|
# NOT touch Project.swift (our Tuist manifest). We use Tuist as the single |
|
970
|
# source of truth for the Xcode project, so every time Tauri regenerates the |
|
971
|
# scaffold we must follow up with `tuist generate`. |
|
972
|
# |
|
973
|
# WORKFLOW |
|
974
|
# -------- |
|
975
|
# First-time setup or after pulling fresh: |
|
976
|
# make setup |
|
977
|
# |
|
978
|
# After `cargo tauri ios init` (Tauri regenerated the scaffold): |
|
979
|
# make generate |
|
980
|
# |
|
981
|
# Open Xcode to work on iOS or tvOS: |
|
982
|
# make open |
|
983
|
# |
|
984
|
# Full reset (nuclear option — re-scaffolds Tauri then regenerates Tuist): |
|
985
|
# make reset |
|
986
|
# ============================================================================= |
|
987
|
|
|
988
|
# Resolve the src-tauri root regardless of where make is invoked from. |
|
989
|
# This file lives at src-tauri/gen/apple/Makefile. |
|
990
|
SRC_TAURI := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))../..) |
|
991
|
|
|
992
|
# Workspace root (two levels above src-tauri) |
|
993
|
APP_ROOT := $(abspath $(SRC_TAURI)/../..) |
|
994
|
|
|
995
|
.DEFAULT_GOAL := help |
|
996
|
|
|
997
|
# ----------------------------------------------------------------------------- |
|
998
|
# help — print usage |
|
999
|
# ----------------------------------------------------------------------------- |
|
1000
|
.PHONY: help |
|
1001
|
help: |
|
1002
|
@echo "" |
|
1003
|
@echo " Tauri + Tuist iOS/tvOS project targets" |
|
1004
|
@echo " =======================================" |
|
1005
|
@echo "" |
|
1006
|
@echo " make setup — first-time: install tuist (via mise) then generate" |
|
1007
|
@echo " make generate — run 'tuist generate' to rebuild the Xcode project" |
|
1008
|
@echo " make open — generate then open the workspace in Xcode" |
|
1009
|
@echo " make ios — generate then build the iOS target (simulator)" |
|
1010
|
@echo " make tvos — generate then build the tvOS target (simulator)" |
|
1011
|
@echo " make clean — remove Xcode-derived data for this project" |
|
1012
|
@echo " make reset — re-scaffold via Tauri then re-generate via Tuist" |
|
1013
|
@echo " make lint — run tuist lint on Project.swift" |
|
1014
|
@echo "" |
|
1015
|
@echo " Advanced:" |
|
1016
|
@echo " make tauri-init — run 'cargo tauri ios init' (re-generates project.yml)" |
|
1017
|
@echo " NOTE: follow up with 'make generate'" |
|
1018
|
@echo "" |
|
1019
|
|
|
1020
|
# ----------------------------------------------------------------------------- |
|
1021
|
# setup — install tooling (mise activates tuist) then generate the project |
|
1022
|
# ----------------------------------------------------------------------------- |
|
1023
|
.PHONY: setup |
|
1024
|
setup: _require_mise _tuist_install generate |
|
1025
|
@echo "✅ Setup complete. Run 'make open' to launch Xcode." |
|
1026
|
|
|
1027
|
# ----------------------------------------------------------------------------- |
|
1028
|
# generate — the core step: (re)build *.xcodeproj from Project.swift |
|
1029
|
# |
|
1030
|
# Called after: |
|
1031
|
# • first checkout |
|
1032
|
# • `cargo tauri ios init` (which only regenerates project.yml, not Project.swift) |
|
1033
|
# • any edit to Project.swift |
|
1034
|
# ----------------------------------------------------------------------------- |
|
1035
|
.PHONY: generate |
|
1036
|
generate: _require_tuist |
|
1037
|
@echo "▶ tuist generate …" |
|
1038
|
cd "$(dir $(abspath $(lastword $(MAKEFILE_LIST))))" && tuist generate --no-open |
|
1039
|
@echo "✅ Xcode project regenerated from Project.swift" |
|
1040
|
|
|
1041
|
# ----------------------------------------------------------------------------- |
|
1042
|
# open — generate the project then open the workspace in Xcode |
|
1043
|
# ----------------------------------------------------------------------------- |
|
1044
|
.PHONY: open |
|
1045
|
open: _require_tuist |
|
1046
|
@echo "▶ tuist generate + open …" |
|
1047
|
cd "$(dir $(abspath $(lastword $(MAKEFILE_LIST))))" && tuist generate |
|
1048
|
|
|
1049
|
# ----------------------------------------------------------------------------- |
|
1050
|
# ios — build the iOS target against the default simulator |
|
1051
|
# ----------------------------------------------------------------------------- |
|
1052
|
.PHONY: ios |
|
1053
|
ios: generate |
|
1054
|
@echo "▶ Building tauri-app_iOS (simulator) …" |
|
1055
|
xcodebuild \ |
|
1056
|
-workspace "$(dir $(abspath $(lastword $(MAKEFILE_LIST))))tauri-app.xcworkspace" \ |
|
1057
|
-scheme tauri-app_iOS \ |
|
1058
|
-destination "generic/platform=iOS Simulator" \ |
|
1059
|
-configuration Debug \ |
|
1060
|
build \ |
|
1061
|
| xcbeautify || xcodebuild \ |
|
1062
|
-workspace "$(dir $(abspath $(lastword $(MAKEFILE_LIST))))tauri-app.xcworkspace" \ |
|
1063
|
-scheme tauri-app_iOS \ |
|
1064
|
-destination "generic/platform=iOS Simulator" \ |
|
1065
|
-configuration Debug \ |
|
1066
|
build |
|
1067
|
|
|
1068
|
# ----------------------------------------------------------------------------- |
|
1069
|
# tvos — build the tvOS target against the default simulator |
|
1070
|
# ----------------------------------------------------------------------------- |
|
1071
|
.PHONY: tvos |
|
1072
|
tvos: generate |
|
1073
|
@echo "▶ Building tauri-app_tvOS (simulator) …" |
|
1074
|
xcodebuild \ |
|
1075
|
-workspace "$(dir $(abspath $(lastword $(MAKEFILE_LIST))))tauri-app.xcworkspace" \ |
|
1076
|
-scheme tauri-app_tvOS \ |
|
1077
|
-destination "generic/platform=tvOS Simulator" \ |
|
1078
|
-configuration Debug \ |
|
1079
|
build \ |
|
1080
|
| xcbeautify || xcodebuild \ |
|
1081
|
-workspace "$(dir $(abspath $(lastword $(MAKEFILE_LIST))))tauri-app.xcworkspace" \ |
|
1082
|
-scheme tauri-app_tvOS \ |
|
1083
|
-destination "generic/platform=tvOS Simulator" \ |
|
1084
|
-configuration Debug \ |
|
1085
|
build |
|
1086
|
|
|
1087
|
# ----------------------------------------------------------------------------- |
|
1088
|
# clean — wipe derived data for this workspace |
|
1089
|
# ----------------------------------------------------------------------------- |
|
1090
|
.PHONY: clean |
|
1091
|
clean: |
|
1092
|
@echo "▶ Cleaning Xcode derived data …" |
|
1093
|
xcodebuild \ |
|
1094
|
-workspace "$(dir $(abspath $(lastword $(MAKEFILE_LIST))))tauri-app.xcworkspace" \ |
|
1095
|
-scheme tauri-app_iOS \ |
|
1096
|
clean 2>/dev/null || true |
|
1097
|
xcodebuild \ |
|
1098
|
-workspace "$(dir $(abspath $(lastword $(MAKEFILE_LIST))))tauri-app.xcworkspace" \ |
|
1099
|
-scheme tauri-app_tvOS \ |
|
1100
|
clean 2>/dev/null || true |
|
1101
|
@echo "✅ Clean complete." |
|
1102
|
|
|
1103
|
# ----------------------------------------------------------------------------- |
|
1104
|
# lint — validate Project.swift with tuist |
|
1105
|
# ----------------------------------------------------------------------------- |
|
1106
|
.PHONY: lint |
|
1107
|
lint: _require_tuist |
|
1108
|
@echo "▶ tuist lint …" |
|
1109
|
cd "$(dir $(abspath $(lastword $(MAKEFILE_LIST))))" && tuist lint project |
|
1110
|
|
|
1111
|
# ----------------------------------------------------------------------------- |
|
1112
|
# tauri-init — re-run Tauri's iOS scaffold (regenerates project.yml only) |
|
1113
|
# |
|
1114
|
# This intentionally does NOT call `make generate` automatically because |
|
1115
|
# you may want to inspect what Tauri changed in project.yml before letting |
|
1116
|
# Tuist regenerate the Xcode project. Run `make generate` when ready. |
|
1117
|
# ----------------------------------------------------------------------------- |
|
1118
|
.PHONY: tauri-init |
|
1119
|
tauri-init: |
|
1120
|
@echo "▶ cargo tauri ios init …" |
|
1121
|
cd "$(SRC_TAURI)" && cargo tauri ios init |
|
1122
|
@echo "" |
|
1123
|
@echo "⚠️ project.yml has been regenerated by Tauri." |
|
1124
|
@echo " project.yml is intentionally git-ignored — Project.swift is the" |
|
1125
|
@echo " Xcode project source of truth. Run 'make generate' to rebuild" |
|
1126
|
@echo " the Xcode project from Project.swift." |
|
1127
|
@echo "" |
|
1128
|
|
|
1129
|
# ----------------------------------------------------------------------------- |
|
1130
|
# reset — full nuclear reset: re-scaffold via Tauri, then regenerate via Tuist |
|
1131
|
# ----------------------------------------------------------------------------- |
|
1132
|
.PHONY: reset |
|
1133
|
reset: tauri-init generate |
|
1134
|
@echo "✅ Full reset complete." |
|
1135
|
|
|
1136
|
# ============================================================================= |
|
1137
|
# Private helpers |
|
1138
|
# ============================================================================= |
|
1139
|
|
|
1140
|
# Check mise is available (used to activate the pinned tuist version) |
|
1141
|
.PHONY: _require_mise |
|
1142
|
_require_mise: |
|
1143
|
@command -v mise >/dev/null 2>&1 || { \ |
|
1144
|
echo "❌ mise not found. Install it from https://mise.jdx.dev/"; \ |
|
1145
|
exit 1; \ |
|
1146
|
} |
|
1147
|
|
|
1148
|
# Install the pinned tuist version via mise (reads mise.toml) |
|
1149
|
.PHONY: _tuist_install |
|
1150
|
_tuist_install: _require_mise |
|
1151
|
@echo "▶ Installing tuist (via mise) …" |
|
1152
|
cd "$(dir $(abspath $(lastword $(MAKEFILE_LIST))))" && mise install |
|
1153
|
|
|
1154
|
# Check tuist is available after mise activation |
|
1155
|
.PHONY: _require_tuist |
|
1156
|
_require_tuist: |
|
1157
|
@command -v tuist >/dev/null 2>&1 || { \ |
|
1158
|
echo "❌ tuist not found."; \ |
|
1159
|
echo " Run 'make setup' to install it, or activate mise in your shell:"; \ |
|
1160
|
echo " eval \"\$$(mise activate \$$SHELL)\""; \ |
|
1161
|
echo " then re-run this target."; \ |
|
1162
|
exit 1; \ |
|
1163
|
} |
|
1164
|
|
|
1165
|
``` |
|
1166
|
|
|
1167
|
|
|
1168
|
## Assistant |
|
1169
|
|
|
1170
|
Now also add a `tvOS` Info.plist file — Tuist uses `.default` currently but a hand-authored one gives us proper tvOS keys and survives regeneration. Let me also add a tvOS entitlements file for completeness: |
|
1171
|
|
|
1172
|
**Tool Call: tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_tvOS/Info.plist** |
|
1173
|
Status: Completed |
|
1174
|
|
|
1175
|
Diff: examples/tauri-app/src-tauri/gen/apple/tauri-app_tvOS/Info.plist |
|
1176
|
``` |
|
1177
|
<?xml version="1.0" encoding="UTF-8"?> |
|
1178
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
1179
|
<plist version="1.0"> |
|
1180
|
<dict> |
|
1181
|
<key>CFBundleDevelopmentRegion</key> |
|
1182
|
<string>$(DEVELOPMENT_LANGUAGE)</string> |
|
1183
|
<key>CFBundleExecutable</key> |
|
1184
|
<string>$(EXECUTABLE_NAME)</string> |
|
1185
|
<key>CFBundleIdentifier</key> |
|
1186
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> |
|
1187
|
<key>CFBundleInfoDictionaryVersion</key> |
|
1188
|
<string>6.0</string> |
|
1189
|
<key>CFBundleName</key> |
|
1190
|
<string>$(PRODUCT_NAME)</string> |
|
1191
|
<key>CFBundlePackageType</key> |
|
1192
|
<string>APPL</string> |
|
1193
|
<key>CFBundleShortVersionString</key> |
|
1194
|
<string>0.1.0</string> |
|
1195
|
<key>CFBundleVersion</key> |
|
1196
|
<string>0.1.0</string> |
|
1197
|
<key>UIRequiredDeviceCapabilities</key> |
|
1198
|
<array> |
|
1199
|
<string>arm64</string> |
|
1200
|
</array> |
|
1201
|
<key>UIUserInterfaceStyle</key> |
|
1202
|
<string>Automatic</string> |
|
1203
|
<key>UIApplicationSupportsIndirectInputEvents</key> |
|
1204
|
<true/> |
|
1205
|
</dict> |
|
1206
|
</plist> |
|
1207
|
|
|
1208
|
``` |
|
1209
|
|
|
1210
|
|
|
1211
|
## Assistant |
|
1212
|
|
|
1213
|
Now update `Project.swift` to reference the proper `Info.plist` instead of `.default`: |
|
1214
|
|
|
1215
|
**Tool Call: tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Project.swift** |
|
1216
|
Status: Completed |
|
1217
|
|
|
1218
|
Diff: examples/tauri-app/src-tauri/gen/apple/Project.swift |
|
1219
|
``` |
|
1220
|
import ProjectDescription |
|
1221
|
|
|
1222
|
let project = Project( |
|
1223
|
name: "tauri-app", |
|
1224
|
settings: .settings( |
|
1225
|
base: [ |
|
1226
|
"DEVELOPMENT_TEAM": "NADBSNEZWH", |
|
1227
|
"PRODUCT_NAME": "tauri-app", |
|
1228
|
"PRODUCT_BUNDLE_IDENTIFIER": "com.tauri.dev", |
|
1229
|
] |
|
1230
|
), |
|
1231
|
targets: [ |
|
1232
|
// MARK: - iOS target (mirrors Tauri-generated project.yml) |
|
1233
|
.target( |
|
1234
|
name: "tauri-app_iOS", |
|
1235
|
destinations: .iOS, |
|
1236
|
product: .app, |
|
1237
|
bundleId: "com.tauri.dev", |
|
1238
|
deploymentTargets: .iOS("14.0"), |
|
1239
|
infoPlist: .file(path: "tauri-app_iOS/Info.plist"), |
|
1240
|
sources: [ |
|
1241
|
"Sources/**", |
|
1242
|
"tauri-app_iOS/**", |
|
1243
|
], |
|
1244
|
resources: [ |
|
1245
|
"Assets.xcassets", |
|
1246
|
"LaunchScreen.storyboard", |
|
1247
|
.folderReference(path: "assets"), |
|
1248
|
], |
|
1249
|
entitlements: .file(path: "tauri-app_iOS/tauri-app_iOS.entitlements"), |
|
1250
|
scripts: [ |
|
1251
|
.pre( |
|
1252
|
script: """ |
|
1253
|
cargo tauri ios xcode-script -v \ |
|
1254
|
--platform ${PLATFORM_DISPLAY_NAME:?} \ |
|
1255
|
--sdk-root ${SDKROOT:?} \ |
|
1256
|
--framework-search-paths "${FRAMEWORK_SEARCH_PATHS:?}" \ |
|
1257
|
--header-search-paths "${HEADER_SEARCH_PATHS:?}" \ |
|
1258
|
--gcc-preprocessor-definitions "${GCC_PREPROCESSOR_DEFINITIONS:-}" \ |
|
1259
|
--configuration ${CONFIGURATION:?} \ |
|
1260
|
${FORCE_COLOR} ${ARCHS:?} |
|
1261
|
""", |
|
1262
|
name: "Build Rust Code", |
|
1263
|
outputPaths: [ |
|
1264
|
"$(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapp.a", |
|
1265
|
"$(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a", |
|
1266
|
], |
|
1267
|
basedOnDependencyAnalysis: false |
|
1268
|
) |
|
1269
|
], |
|
1270
|
dependencies: [ |
|
1271
|
.sdk(name: "CoreGraphics", type: .framework), |
|
1272
|
.sdk(name: "Metal", type: .framework), |
|
1273
|
.sdk(name: "MetalKit", type: .framework), |
|
1274
|
.sdk(name: "QuartzCore", type: .framework), |
|
1275
|
.sdk(name: "Security", type: .framework), |
|
1276
|
.sdk(name: "UIKit", type: .framework), |
|
1277
|
.sdk(name: "WebKit", type: .framework), |
|
1278
|
], |
|
1279
|
settings: .settings( |
|
1280
|
base: [ |
|
1281
|
"ENABLE_BITCODE": "NO", |
|
1282
|
"ARCHS": "arm64", |
|
1283
|
"VALID_ARCHS": "arm64", |
|
1284
|
"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES": "YES", |
|
1285
|
"LIBRARY_SEARCH_PATHS[arch=arm64]": [ |
|
1286
|
"$(inherited)", |
|
1287
|
"$(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION)", |
|
1288
|
"$(SDKROOT)/usr/lib/swift", |
|
1289
|
"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", |
|
1290
|
"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", |
|
1291
|
], |
|
1292
|
"LIBRARY_SEARCH_PATHS[arch=x86_64]": [ |
|
1293
|
"$(inherited)", |
|
1294
|
"$(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION)", |
|
1295
|
"$(SDKROOT)/usr/lib/swift", |
|
1296
|
"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", |
|
1297
|
"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", |
|
1298
|
], |
|
1299
|
"EXCLUDED_ARCHS[sdk=iphoneos*]": "x86_64", |
|
1300
|
"OTHER_LDFLAGS": [ |
|
1301
|
"$(inherited)", |
|
1302
|
"-lapp", |
|
1303
|
], |
|
1304
|
] |
|
1305
|
) |
|
1306
|
), |
|
1307
|
|
|
1308
|
// MARK: - tvOS placeholder target (no WebView on tvOS — native UI only) |
|
1309
|
.target( |
|
1310
|
name: "tauri-app_tvOS", |
|
1311
|
destinations: [.appleTv], |
|
1312
|
product: .app, |
|
1313
|
bundleId: "com.tauri.dev.tvos", |
|
1314
|
deploymentTargets: .tvOS("14.0"), |
|
1315
|
infoPlist: .file(path: "tauri-app_tvOS/Info.plist"), |
|
1316
|
sources: [ |
|
1317
|
"tauri-app_tvOS/**" |
|
1318
|
], |
|
1319
|
resources: [ |
|
1320
|
"Assets.xcassets" |
|
1321
|
], |
|
1322
|
dependencies: [ |
|
1323
|
.sdk(name: "UIKit", type: .framework) |
|
1324
|
], |
|
1325
|
settings: .settings( |
|
1326
|
base: [ |
|
1327
|
"ENABLE_BITCODE": "NO", |
|
1328
|
"ARCHS": "arm64", |
|
1329
|
] |
|
1330
|
) |
|
1331
|
), |
|
1332
|
], |
|
1333
|
schemes: [ |
|
1334
|
.scheme( |
|
1335
|
name: "tauri-app_iOS", |
|
1336
|
buildAction: .buildAction(targets: ["tauri-app_iOS"]), |
|
1337
|
runAction: .runAction(configuration: .debug), |
|
1338
|
archiveAction: .archiveAction(configuration: .release), |
|
1339
|
profileAction: .profileAction(configuration: .release), |
|
1340
|
analyzeAction: .analyzeAction(configuration: .debug) |
|
1341
|
), |
|
1342
|
.scheme( |
|
1343
|
name: "tauri-app_tvOS", |
|
1344
|
buildAction: .buildAction(targets: ["tauri-app_tvOS"]), |
|
1345
|
runAction: .runAction(configuration: .debug), |
|
1346
|
archiveAction: .archiveAction(configuration: .release), |
|
1347
|
profileAction: .profileAction(configuration: .release), |
|
1348
|
analyzeAction: .analyzeAction(configuration: .debug) |
|
1349
|
), |
|
1350
|
] |
|
1351
|
) |
|
1352
|
|
|
1353
|
``` |
|
1354
|
|
|
1355
|
|
|
1356
|
## Assistant |
|
1357
|
|
|
1358
|
Now verify the final state of everything: |
|
1359
|
|
|
1360
|
**Tool Call: git status --short examples/tauri-app/src-tauri/ 2>&1** |
|
1361
|
Status: Completed |
|
1362
|
|
|
1363
|
Terminal: |
|
1364
|
``` |
|
1365
|
M examples/tauri-app/src-tauri/.gitignore |
|
1366
|
M examples/tauri-app/src-tauri/gen/apple/.gitignore |
|
1367
|
D examples/tauri-app/src-tauri/gen/apple/Derived/InfoPlists/tauri-app_tvOS-Info.plist |
|
1368
|
D examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistAssets+TauriAppIOS.swift |
|
1369
|
D examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistAssets+TauriAppTvOS.swift |
|
1370
|
D examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistBundle+TauriAppIOS.swift |
|
1371
|
D examples/tauri-app/src-tauri/gen/apple/Derived/Sources/TuistBundle+TauriAppTvOS.swift |
|
1372
|
M examples/tauri-app/src-tauri/gen/apple/Project.swift |
|
1373
|
D examples/tauri-app/src-tauri/gen/apple/project.yml |
|
1374
|
D examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/project.pbxproj |
|
1375
|
D examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/project.xcworkspace/contents.xcworkspacedata |
|
1376
|
D examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings |
|
1377
|
D examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/xcshareddata/xcschemes/tauri-app_iOS.xcscheme |
|
1378
|
D examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/xcshareddata/xcschemes/tauri-app_tvOS.xcscheme |
|
1379
|
D examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace/.tuist-generated |
|
1380
|
D examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace/contents.xcworkspacedata |
|
1381
|
D examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings |
|
1382
|
D examples/tauri-app/src-tauri/gen/apple/tauri-app.xcworkspace/xcshareddata/xcschemes/tauri-app-Workspace.xcscheme |
|
1383
|
?? examples/tauri-app/src-tauri/gen/apple/Makefile |
|
1384
|
?? examples/tauri-app/src-tauri/gen/apple/tauri-app_tvOS/Info.plist |
|
1385
|
|
|
1386
|
|
|
1387
|
|
|
1388
|
|
|
1389
|
|
|
1390
|
``` |
|
1391
|
|
|
1392
|
|
|
1393
|
## Assistant |
|
1394
|
|
|
1395
|
Everything looks exactly right. Let me do a final sanity check — verify the new files are not accidentally ignored: |
|
1396
|
|
|
1397
|
**Tool Call: git check-ignore -v \ |
|
1398
|
examples/tauri-app/src-tauri/gen/apple/Makefile \ |
|
1399
|
examples/tauri-app/src-tauri/gen/apple/tauri-app_tvOS/Info.plist \ |
|
1400
|
examples/tauri-app/src-tauri/gen/apple/Project.swift \ |
|
1401
|
examples/tauri-app/src-tauri/gen/apple/tauri-app_tvOS/App.swift \ |
|
1402
|
examples/tauri-app/src-tauri/gen/apple/project.yml \ |
|
1403
|
examples/tauri-app/src-tauri/gen/apple/Derived/ \ |
|
1404
|
examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/ \ |
|
1405
|
2>&1** |
|
1406
|
Status: Completed |
|
1407
|
|
|
1408
|
Terminal: |
|
1409
|
``` |
|
1410
|
examples/tauri-app/src-tauri/gen/apple/.gitignore:16:project.yml examples/tauri-app/src-tauri/gen/apple/project.yml |
|
1411
|
examples/tauri-app/src-tauri/gen/apple/.gitignore:29:Derived/ examples/tauri-app/src-tauri/gen/apple/Derived/ |
|
1412
|
examples/tauri-app/src-tauri/gen/apple/.gitignore:22:*.xcodeproj/ examples/tauri-app/src-tauri/gen/apple/tauri-app.xcodeproj/ |
|
1413
|
|
|
1414
|
|
|
1415
|
|
|
1416
|
|
|
1417
|
``` |
|
1418
|
|
|
1419
|
|
|
1420
|
## Assistant |
|
1421
|
|
|
1422
|
`Makefile`, `tauri-app_tvOS/Info.plist`, `Project.swift`, and `App.swift` produce no output — meaning they are **not** ignored and will be tracked. The three generated files (`project.yml`, `Derived/`, `*.xcodeproj/`) are correctly ignored. Let's read the final state of each changed file: |
|
1423
|
|
|
1424
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/.gitignore`** |
|
1425
|
Status: Completed |
|
1426
|
|
|
1427
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/.gitignore |
|
1428
|
# Generated by Cargo |
|
1429
|
# will have compiled files and executables |
|
1430
|
/target/ |
|
1431
|
|
|
1432
|
# ============================================================ |
|
1433
|
# gen/apple — Tauri scaffolds this directory on `cargo tauri ios init`. |
|
1434
|
# A nested .gitignore at gen/apple/.gitignore handles the fine-grained |
|
1435
|
# rules for that subtree. The entries below are a belt-and-suspenders |
|
1436
|
# safety net at this level. |
|
1437
|
# ============================================================ |
|
1438
|
|
|
1439
|
# Rust static libraries produced by the Xcode build phase script |
|
1440
|
gen/apple/Externals/ |
|
1441
|
|
|
1442
|
# Xcode project & workspace — regenerated by `tuist generate` |
|
1443
|
# (Project.swift is the source of truth, not these files) |
|
1444
|
gen/apple/*.xcodeproj/ |
|
1445
|
gen/apple/*.xcworkspace/ |
|
1446
|
|
|
1447
|
# Tuist derived sources / plists — regenerated by `tuist generate` |
|
1448
|
gen/apple/Derived/ |
|
1449
|
|
|
1450
|
# Xcode per-user settings |
|
1451
|
gen/apple/xcuserdata/ |
|
1452
|
|
|
1453
|
# Xcode build artefacts |
|
1454
|
gen/apple/build/ |
|
1455
|
|
|
1456
|
# XcodeGen manifest — regenerated by `cargo tauri ios init`. |
|
1457
|
# We use Project.swift (Tuist) as the Xcode project source of truth. |
|
1458
|
gen/apple/project.yml |
|
1459
|
|
|
1460
|
# ============================================================ |
|
1461
|
# The following gen/apple files ARE intentionally tracked because |
|
1462
|
# they are either hand-authored or not regenerated by Tauri/Tuist: |
|
1463
|
# |
|
1464
|
# Project.swift — Tuist project manifest (our source of truth) |
|
1465
|
# mise.toml — Tuist version pin |
|
1466
|
# project.yml — excluded above (Tauri-generated, not needed) |
|
1467
|
# tauri-app_iOS/Info.plist — iOS app Info.plist (Tauri reads this) |
|
1468
|
# tauri-app_iOS/*.entitlements — iOS entitlements |
|
1469
|
# tauri-app_tvOS/App.swift — hand-authored native tvOS app entry point |
|
1470
|
# Sources/ — Obj-C/C++ glue generated once by Tauri |
|
1471
|
# Assets.xcassets/ — app icons & asset catalog |
|
1472
|
# LaunchScreen.storyboard — iOS launch screen |
|
1473
|
# ExportOptions.plist — archive export options |
|
1474
|
# Podfile — CocoaPods manifest |
|
1475
|
# ============================================================ |
|
1476
|
|
|
1477
|
``` |
|
1478
|
|
|
1479
|
|
|
1480
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/.gitignore`** |
|
1481
|
Status: Completed |
|
1482
|
|
|
1483
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/.gitignore |
|
1484
|
# ============================================================ |
|
1485
|
# gen/apple/.gitignore |
|
1486
|
# |
|
1487
|
# Strategy: |
|
1488
|
# - `cargo tauri ios init` regenerates project.yml (XcodeGen) |
|
1489
|
# - `tuist generate` regenerates *.xcodeproj, *.xcworkspace, Derived/ |
|
1490
|
# - Everything else is hand-authored source of truth → tracked |
|
1491
|
# ============================================================ |
|
1492
|
|
|
1493
|
# ------------------------------------------------------------------ |
|
1494
|
# Tauri-regenerated: XcodeGen manifest |
|
1495
|
# Re-created by `cargo tauri ios init` from tauri.conf.json. |
|
1496
|
# We use Project.swift (Tuist) as the Xcode project source of truth, |
|
1497
|
# so project.yml is a Tauri implementation detail we don't need. |
|
1498
|
# ------------------------------------------------------------------ |
|
1499
|
project.yml |
|
1500
|
|
|
1501
|
# ------------------------------------------------------------------ |
|
1502
|
# Tuist-regenerated: Xcode project & workspace |
|
1503
|
# Fully described by Project.swift → always regenerate, never edit. |
|
1504
|
# ------------------------------------------------------------------ |
|
1505
|
*.xcodeproj/ |
|
1506
|
*.xcworkspace/ |
|
1507
|
|
|
1508
|
# ------------------------------------------------------------------ |
|
1509
|
# Tuist-regenerated: derived sources & info plists |
|
1510
|
# Auto-synthesised from Project.swift (asset accessors, bundle IDs…). |
|
1511
|
# ------------------------------------------------------------------ |
|
1512
|
Derived/ |
|
1513
|
|
|
1514
|
# ------------------------------------------------------------------ |
|
1515
|
# Xcode runtime noise |
|
1516
|
# ------------------------------------------------------------------ |
|
1517
|
xcuserdata/ |
|
1518
|
|
|
1519
|
# ------------------------------------------------------------------ |
|
1520
|
# Rust / Cargo build output |
|
1521
|
# (also covered by src-tauri/.gitignore, belt-and-suspenders here) |
|
1522
|
# ------------------------------------------------------------------ |
|
1523
|
build/ |
|
1524
|
|
|
1525
|
# ------------------------------------------------------------------ |
|
1526
|
# Compiled Rust static libraries injected by xcode-script |
|
1527
|
# ------------------------------------------------------------------ |
|
1528
|
Externals/ |
|
1529
|
|
|
1530
|
``` |
|
1531
|
|
|
1532
|
|
|
1533
|
## Assistant |
|
1534
|
|
|
1535
|
Everything is clean. Here's a summary of what was done and why each decision was made: |
|
1536
|
|
|
1537
|
--- |
|
1538
|
|
|
1539
|
## What was changed and why |
|
1540
|
|
|
1541
|
### The core tension |
|
1542
|
|
|
1543
|
`cargo tauri ios init` owns `project.yml` (XcodeGen format) and will overwrite it on every re-run. We want a **tvOS target that survives regeneration** without forking Tauri's toolchain. The solution: use **Tuist as a separate layer above Tauri** — Tauri never touches `Project.swift`. |
|
1544
|
|
|
1545
|
--- |
|
1546
|
|
|
1547
|
### `gen/apple/.gitignore` — rewritten |
|
1548
|
|
|
1549
|
Three categories of generated output are now ignored: |
|
1550
|
|
|
1551
|
| Ignored | Regenerated by | Why ignore | |
|
1552
|
|---|---|---| |
|
1553
|
| `project.yml` | `cargo tauri ios init` | We use `Project.swift` instead | |
|
1554
|
| `*.xcodeproj/`, `*.xcworkspace/` | `tuist generate` | Derived from `Project.swift` | |
|
1555
|
| `Derived/` | `tuist generate` | Auto-synthesised asset/bundle accessors | |
|
1556
|
| `Externals/`, `build/`, `xcuserdata/` | Xcode/Cargo | Runtime noise | |
|
1557
|
|
|
1558
|
### `src-tauri/.gitignore` — expanded |
|
1559
|
|
|
1560
|
Added belt-and-suspenders entries at the `src-tauri` level so the rules hold even if someone deletes or edits the nested `gen/apple/.gitignore`. |
|
1561
|
|
|
1562
|
### `git rm --cached` — un-tracked generated files |
|
1563
|
|
|
1564
|
Removed from Git's index (but not disk): `tauri-app.xcodeproj/`, `tauri-app.xcworkspace/`, `Derived/`, `project.yml`. These are now truly ignored going forward. |
|
1565
|
|
|
1566
|
### `tauri-app_tvOS/Info.plist` — new file |
|
1567
|
|
|
1568
|
Replaced the `infoPlist: .default` in `Project.swift` with a hand-authored plist that has the correct tvOS-specific keys (`UIApplicationSupportsIndirectInputEvents`, no `LSRequiresIPhoneOS`, etc.). |
|
1569
|
|
|
1570
|
### `Project.swift` — updated |
|
1571
|
|
|
1572
|
Changed `infoPlist: .default` → `infoPlist: .file(path: "tauri-app_tvOS/Info.plist")` so the plist is explicit and tracked. |
|
1573
|
|
|
1574
|
### `Makefile` — new file |
|
1575
|
|
|
1576
|
Documents the two-step workflow clearly: |
|
1577
|
|
|
1578
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Makefile#L1-30 |
|
1579
|
# WORKFLOW |
|
1580
|
# -------- |
|
1581
|
# First-time setup or after pulling fresh: |
|
1582
|
# make setup |
|
1583
|
# |
|
1584
|
# After `cargo tauri ios init` (Tauri regenerated the scaffold): |
|
1585
|
# make generate |
|
1586
|
# |
|
1587
|
# Open Xcode to work on iOS or tvOS: |
|
1588
|
# make open |
|
1589
|
# |
|
1590
|
# Full reset (nuclear option — re-scaffolds Tauri then regenerates Tuist): |
|
1591
|
# make reset |
|
1592
|
``` |
|
1593
|
|
|
1594
|
The key insight baked into `make tauri-init` is that it does **not** automatically call `make generate` — you can inspect what Tauri changed before letting Tuist regenerate, making the boundary explicit and safe. |
|
1595
|
|
|
1596
|
--- |
|
1597
|
|
|
1598
|
### Mental model going forward |
|
1599
|
|
|
1600
|
```/dev/null/workflow.txt#L1-8 |
|
1601
|
Developer workflow: |
|
1602
|
1. cargo tauri ios init → regenerates project.yml (ignored by git) |
|
1603
|
2. make generate → tuist reads Project.swift, writes .xcodeproj |
|
1604
|
3. open tauri-app.xcworkspace in Xcode |
|
1605
|
|
|
1606
|
To add tvOS features: edit tauri-app_tvOS/App.swift and/or Project.swift |
|
1607
|
To change iOS build settings: edit Project.swift |
|
1608
|
Never edit .xcodeproj directly — it's regenerated on every `make generate` |
|
1609
|
``` |
|
1610
|
|
|
1611
|
## User |
|
1612
|
|
|
1613
|
tauri-app_iOS/Info.plist`, `*.entitlements` ✅ — needed for Tauri too do you really need this? |
|
1614
|
|
|
1615
|
## Assistant |
|
1616
|
|
|
1617
|
Good question. Let me check what Tauri actually does with those files. |
|
1618
|
|
|
1619
|
**Tool Call: Search files for regex `Info\.plist|entitlements`** |
|
1620
|
Status: Completed |
|
1621
|
|
|
1622
|
No matches found |
|
1623
|
|
|
1624
|
**Tool Call: Search files for regex `Info\.plist|entitlements`** |
|
1625
|
Status: Completed |
|
1626
|
|
|
1627
|
No matches found |
|
1628
|
|
|
1629
|
**Tool Call: Search files for regex `Info\.plist|entitlements", `** |
|
1630
|
Status: Completed |
|
1631
|
|
|
1632
|
Found 8 matches: |
|
1633
|
|
|
1634
|
## Matches in tauri-plugin-ios-window/docs/debugging/tauri: Adding tvOS Target to Tauri Xcode Project |
|
1635
|
|
|
1636
|
### # Files: › L101-102 |
|
1637
|
``` |
|
1638
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/Info.plist |
|
1639
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/tauri-app_iOS.entitlements |
|
1640
|
``` |
|
1641
|
|
|
1642
|
### # `Project` › L160-164 |
|
1643
|
``` |
|
1644
|
product: .app, |
|
1645
|
bundleId: "dev.tuist.App", |
|
1646
|
infoPlist: "Config/App-Info.plist", |
|
1647
|
sources: ["Sources/**"], |
|
1648
|
resources: [ |
|
1649
|
``` |
|
1650
|
|
|
1651
|
### # `Target` › ## Properties › ### `infoPlist` › L493-494 |
|
1652
|
``` |
|
1653
|
The Info.plist representation. |
|
1654
|
|
|
1655
|
``` |
|
1656
|
|
|
1657
|
### # `Target` › ## Properties › ### `entitlements` › L567-572 |
|
1658
|
``` |
|
1659
|
targets: [target], |
|
1660
|
additionalFiles: [ |
|
1661
|
"Debug.entitlements", |
|
1662
|
"Release.entitlements" |
|
1663
|
] |
|
1664
|
) |
|
1665
|
``` |
|
1666
|
|
|
1667
|
### # `Target` › ## Methods › ### `target(name:destinations:product:productName:bundleId:deploymentTargets:infoPlist:sources:resources:buildableFolders:copyFiles:headers:entitlements:scripts:dependencies:settings:coreDataModels:environmentVariables:launchArguments:additionalFiles:buildRules:mergedBinaryType:mergeable:onDemandResourcesTags:metadata:)` › L816-817 |
|
1668
|
``` |
|
1669
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/Info.plist`** |
|
1670
|
Status: Completed |
|
1671
|
``` |
|
1672
|
|
|
1673
|
## Matches in tauri-plugin-ios-window/examples/tauri-app/src-tauri/.gitignore |
|
1674
|
|
|
1675
|
### L38-42 |
|
1676
|
``` |
|
1677
|
# mise.toml — Tuist version pin |
|
1678
|
# project.yml — excluded above (Tauri-generated, not needed) |
|
1679
|
# tauri-app_iOS/Info.plist — iOS app Info.plist (Tauri reads this) |
|
1680
|
# tauri-app_iOS/*.entitlements — iOS entitlements |
|
1681
|
# tauri-app_tvOS/App.swift — hand-authored native tvOS app entry point |
|
1682
|
``` |
|
1683
|
|
|
1684
|
## Matches in tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Project.swift |
|
1685
|
|
|
1686
|
### L14-24 |
|
1687
|
``` |
|
1688
|
.target( |
|
1689
|
name: "tauri-app_iOS", |
|
1690
|
destinations: .iOS, |
|
1691
|
product: .app, |
|
1692
|
bundleId: "com.tauri.dev", |
|
1693
|
deploymentTargets: .iOS("14.0"), |
|
1694
|
infoPlist: .file(path: "tauri-app_iOS/Info.plist"), |
|
1695
|
sources: [ |
|
1696
|
"Sources/**", |
|
1697
|
"tauri-app_iOS/**", |
|
1698
|
], |
|
1699
|
``` |
|
1700
|
|
|
1701
|
63 lines remaining in ancestor node. Read the file to see all. |
|
1702
|
|
|
1703
|
### L90-100 |
|
1704
|
``` |
|
1705
|
.target( |
|
1706
|
name: "tauri-app_tvOS", |
|
1707
|
destinations: [.appleTv], |
|
1708
|
product: .app, |
|
1709
|
bundleId: "com.tauri.dev.tvos", |
|
1710
|
deploymentTargets: .tvOS("14.0"), |
|
1711
|
infoPlist: .file(path: "tauri-app_tvOS/Info.plist"), |
|
1712
|
sources: [ |
|
1713
|
"tauri-app_tvOS/**" |
|
1714
|
], |
|
1715
|
resources: [ |
|
1716
|
``` |
|
1717
|
|
|
1718
|
12 lines remaining in ancestor node. Read the file to see all. |
|
1719
|
|
|
1720
|
|
|
1721
|
**Tool Call: Search files for regex `tauri-app_iOS/Info|tauri-app_iOS.*entitlements`** |
|
1722
|
Status: Completed |
|
1723
|
|
|
1724
|
Found 6 matches: |
|
1725
|
|
|
1726
|
## Matches in tauri-plugin-ios-window/docs/debugging/tauri: Adding tvOS Target to Tauri Xcode Project |
|
1727
|
|
|
1728
|
### # Files: › L101-102 |
|
1729
|
``` |
|
1730
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/Info.plist |
|
1731
|
tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/tauri-app_iOS.entitlements |
|
1732
|
``` |
|
1733
|
|
|
1734
|
### # `Target` › ## Methods › ### `target(name:destinations:product:productName:bundleId:deploymentTargets:infoPlist:sources:resources:buildableFolders:copyFiles:headers:entitlements:scripts:dependencies:settings:coreDataModels:environmentVariables:launchArguments:additionalFiles:buildRules:mergedBinaryType:mergeable:onDemandResourcesTags:metadata:)` › L816-817 |
|
1735
|
``` |
|
1736
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/Info.plist`** |
|
1737
|
Status: Completed |
|
1738
|
``` |
|
1739
|
|
|
1740
|
### # `Target` › ## Methods › ### `target(name:destinations:product:productName:bundleId:deploymentTargets:infoPlist:sources:resources:buildableFolders:copyFiles:headers:entitlements:scripts:dependencies:settings:coreDataModels:environmentVariables:launchArguments:additionalFiles:buildRules:mergedBinaryType:mergeable:onDemandResourcesTags:metadata:)` › L825-826 |
|
1741
|
``` |
|
1742
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/tauri-app_iOS.entitlements`** |
|
1743
|
Status: Completed |
|
1744
|
``` |
|
1745
|
|
|
1746
|
## Matches in tauri-plugin-ios-window/examples/tauri-app/src-tauri/.gitignore |
|
1747
|
|
|
1748
|
### L38-43 |
|
1749
|
``` |
|
1750
|
# mise.toml — Tuist version pin |
|
1751
|
# project.yml — excluded above (Tauri-generated, not needed) |
|
1752
|
# tauri-app_iOS/Info.plist — iOS app Info.plist (Tauri reads this) |
|
1753
|
# tauri-app_iOS/*.entitlements — iOS entitlements |
|
1754
|
# tauri-app_tvOS/App.swift — hand-authored native tvOS app entry point |
|
1755
|
# Sources/ — Obj-C/C++ glue generated once by Tauri |
|
1756
|
``` |
|
1757
|
|
|
1758
|
## Matches in tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/Project.swift |
|
1759
|
|
|
1760
|
### L14-24 |
|
1761
|
``` |
|
1762
|
.target( |
|
1763
|
name: "tauri-app_iOS", |
|
1764
|
destinations: .iOS, |
|
1765
|
product: .app, |
|
1766
|
bundleId: "com.tauri.dev", |
|
1767
|
deploymentTargets: .iOS("14.0"), |
|
1768
|
infoPlist: .file(path: "tauri-app_iOS/Info.plist"), |
|
1769
|
sources: [ |
|
1770
|
"Sources/**", |
|
1771
|
"tauri-app_iOS/**", |
|
1772
|
], |
|
1773
|
``` |
|
1774
|
|
|
1775
|
63 lines remaining in ancestor node. Read the file to see all. |
|
1776
|
|
|
1777
|
### L28-32 |
|
1778
|
``` |
|
1779
|
.folderReference(path: "assets"), |
|
1780
|
], |
|
1781
|
entitlements: .file(path: "tauri-app_iOS/tauri-app_iOS.entitlements"), |
|
1782
|
scripts: [ |
|
1783
|
.pre( |
|
1784
|
``` |
|
1785
|
|
|
1786
|
|
|
1787
|
## Assistant |
|
1788
|
|
|
1789
|
That confirms these files are only referenced from `Project.swift` (our Tuist manifest) — not from Tauri. Now let me check whether `cargo tauri ios init` regenerates them: |
|
1790
|
|
|
1791
|
**Tool Call: Fetch https://github.com/tauri\-apps/tauri/blob/dev/tooling/cli/src/mobile/ios/project.rs** |
|
1792
|
Status: Failed |
|
1793
|
|
|
1794
|
status error 404, response: "\n\n\n\n\n\n<!DOCTYPE html>\n<html\n lang=\"en\"\n \n data-color-mode=\"auto\" data-light-theme=\"light\" data-dark-theme=\"dark\"\n data-a11y-animated-images=\"system\" data-a11y-link-underlines=\"true\"\n \n >\n\n\n\n\n <head>\n <meta charset=\"utf-8\">\n <link rel=\"dns-prefetch\" href=\"https://github.githubassets.com\">\n <link rel=\"dns-prefetch\" href=\"https://avatars.githubusercontent.com\">\n <link rel=\"dns-prefetch\" href=\"https://github-cloud.s3.amazonaws.com\">\n <link rel=\"dns-prefetch\" href=\"https://user-images.githubusercontent.com/\">\n <link rel=\"preconnect\" href=\"https://github.githubassets.com\" crossorigin>\n <link rel=\"preconnect\" href=\"https://avatars.githubusercontent.com\">\n\n \n\n\n <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light-8f714f203754d3e3.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/light_high_contrast-852c22d357937740.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark-b5a0f9dbeed37e9c.css\" /><link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/dark_high_contrast-b1b5000c4cba6bc9.css\" /><link data-color-theme=\"light\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light-8f714f203754d3e3.css\" /><link data-color-theme=\"light_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_high_contrast-852c22d357937740.css\" /><link data-color-theme=\"light_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind-cd9e31fed96ffe09.css\" /><link data-color-theme=\"light_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_colorblind_high_contrast-d8387aac10e96d7c.css\" /><link data-color-theme=\"light_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia-de5a42a9379cb835.css\" /><link data-color-theme=\"light_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/light_tritanopia_high_contrast-b80844282a9e6620.css\" /><link data-color-theme=\"dark\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark-b5a0f9dbeed37e9c.css\" /><link data-color-theme=\"dark_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_high_contrast-b1b5000c4cba6bc9.css\" /><link data-color-theme=\"dark_colorblind\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind-85d7bc4072a238f0.css\" /><link data-color-theme=\"dark_colorblind_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_colorblind_high_contrast-f4838f9524519a33.css\" /><link data-color-theme=\"dark_tritanopia\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia-23bce8ff4d024f04.css\" /><link data-color-theme=\"dark_tritanopia_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_tritanopia_high_contrast-e088d4bc2d56f7d6.css\" /><link data-color-theme=\"dark_dimmed\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_dimmed-6b102382a27a656f.css\" /><link data-color-theme=\"dark_dimmed_high_contrast\" crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" data-href=\"https://github.githubassets.com/assets/dark_dimmed_high_contrast-1d3e6d98532ab032.css\" />\n\n <style type=\"text/css\">\n :root {\n --tab-size-preference: 4;\n }\n\n pre, code {\n tab-size: var(--tab-size-preference);\n }\n </style>\n\n <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/primer-primitives-26e89bb5a0c37ae9.css\" />\n <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/primer-bcf0a93b19072a86.css\" />\n <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/global-95af332f763e4560.css\" />\n <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/github-8ecc5798f0584cac.css\" />\n <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/repository-dd7b55261c401703.css\" />\n<link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/code-bedb41adf21fe337.css\" />\n\n \n\n <script type=\"application/json\" id=\"client-env\">{\"locale\":\"en\",\"featureFlags\":[\"a11y_status_checks_ruleset\",\"actions_custom_images_public_preview_visibility\",\"actions_custom_images_storage_billing_ui_visibility\",\"actions_image_version_event\",\"alternate_user_config_repo\",\"arianotify_comprehensive_migration\",\"batch_suggested_changes\",\"codespaces_prebuild_region_target_update\",\"coding_agent_model_selection\",\"coding_agent_model_selection_all_skus\",\"copilot_3p_agent_hovercards\",\"copilot_agent_sessions_alive_updates\",\"copilot_agent_snippy\",\"copilot_agent_task_list_v2\",\"copilot_agent_task_submit_with_modifier\",\"copilot_agent_tasks_btn_code_nav\",\"copilot_agent_tasks_btn_code_view\",\"copilot_agent_tasks_btn_code_view_lines\",\"copilot_agent_tasks_btn_repo\",\"copilot_api_agentic_issue_marshal_yaml\",\"copilot_ask_mode_dropdown\",\"copilot_chat_attach_multiple_images\",\"copilot_chat_clear_model_selection_for_default_change\",\"copilot_chat_deprecate_relay\",\"copilot_chat_enable_tool_call_logs\",\"copilot_chat_file_redirect\",\"copilot_chat_input_commands\",\"copilot_chat_opening_thread_switch\",\"copilot_chat_reduce_quota_checks\",\"copilot_chat_repository_picker\",\"copilot_chat_search_bar_redirect\",\"copilot_chat_selection_attachments\",\"copilot_chat_vision_in_claude\",\"copilot_chat_vision_preview_gate\",\"copilot_cli_install_cta\",\"copilot_coding_agent_task_response\",\"copilot_custom_copilots\",\"copilot_custom_copilots_feature_preview\",\"copilot_duplicate_thread\",\"copilot_extensions_hide_in_dotcom_chat\",\"copilot_extensions_removal_on_marketplace\",\"copilot_features_sql_server_logo\",\"copilot_features_zed_logo\",\"copilot_file_block_ref_matching\",\"copilot_ftp_hyperspace_upgrade_prompt\",\"copilot_icebreakers_experiment_dashboard\",\"copilot_icebreakers_experiment_hyperspace\",\"copilot_immersive_embedded\",\"copilot_immersive_job_result_preview\",\"copilot_immersive_layout_routes\",\"copilot_immersive_structured_model_picker\",\"copilot_immersive_task_hyperlinking\",\"copilot_immersive_task_within_chat_thread\",\"copilot_mc_cli_resume_any_users_task\",\"copilot_mission_control_always_send_integration_id\",\"copilot_mission_control_use_task_name\",\"copilot_org_policy_page_focus_mode\",\"copilot_redirect_header_button_to_agents\",\"copilot_share_active_subthread\",\"copilot_spaces_ga\",\"copilot_spaces_individual_policies_ga\",\"copilot_spaces_pagination\",\"copilot_spark_empty_state\",\"copilot_spark_handle_nil_friendly_name\",\"copilot_stable_conversation_view\",\"copilot_swe_agent_hide_model_picker_if_only_auto\",\"copilot_swe_agent_pr_comment_model_picker\",\"copilot_swe_agent_use_subagents\",\"copilot_unconfigured_is_inherited\",\"copilot_usage_metrics_ga\",\"custom_instructions_file_references\",\"custom_properties_consolidate_default_value_input\",\"dashboard_lists_max_age_filter\",\"dashboard_universe_2025_feedback_dialog\",\"flex_cta_groups_mvp\",\"global_nav_menu_lazy_load\",\"global_nav_react\",\"global_user_menu_lazy_load\",\"hyperspace_2025_logged_out_batch_1\",\"hyperspace_2025_logged_out_batch_2\",\"initial_per_page_pagination_updates\",\"issue_fields_global_search\",\"issue_fields_report_usage\",\"issue_fields_timeline_events\",\"issues_cca_assign_actor_with_agent\",\"issues_dashboard_inp_optimization\",\"issues_diff_based_label_updates\",\"issues_expanded_file_types\",\"issues_index_semantic_search\",\"issues_lazy_load_comment_box_suggestions\",\"issues_react_auto_retry_on_error\",\"issues_react_bots_timeline_pagination\",\"issues_react_chrome_container_query_fix\",\"issues_react_hot_cache\",\"issues_react_low_quality_comment_warning\",\"issues_react_prohibit_title_fallback\",\"issues_react_safari_scroll_preservation\",\"issues_react_use_turbo_for_cross_repo_navigation\",\"landing_pages_ninetailed\",\"landing_pages_web_vitals_tracking\",\"lifecycle_label_name_updates\",\"marketing_pages_search_explore_provider\",\"memex_default_issue_create_repository\",\"memex_grouped_by_edit_route\",\"memex_live_update_hovercard\",\"memex_mwl_filter_field_delimiter\",\"mission_control_retry_on_401\",\"mission_control_use_body_html\",\"oauth_authorize_clickjacking_protection\",\"open_agent_session_in_vscode_insiders\",\"open_agent_session_in_vscode_stable\",\"primer_react_css_has_selector_perf\",\"prs_conversations_react\",\"react_quality_profiling\",\"ruleset_deletion_confirmation\",\"sample_network_conn_type\",\"session_logs_ungroup_reasoning_text\",\"site_calculator_actions_2025\",\"site_features_copilot_universe\",\"site_homepage_collaborate_video\",\"spark_prompt_secret_scanning\",\"spark_server_connection_status\",\"suppress_automated_browser_vitals\",\"suppress_non_representative_vitals\",\"viewscreen_sandbox\",\"webp_support\",\"workbench_store_readonly\"],\"copilotApiOverrideUrl\":\"https://api.githubcopilot.com\"}</script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/high-contrast-cookie-9c894bc29dbadce2.js\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/wp-runtime-571f504d8e30c577.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/28839-632d00a964e8dbd5.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/49863-8861e351482cb073.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/64220-1215bd360f02816c.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/environment-39e5b412c63ea4f0.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/runtime-helpers-3cd71e27e349021d.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/2966-25cb8e34b31306a4.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/96232-fb82336d69225835.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/41013-ac21ea90ed8590af.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/51210-185739338ae8119b.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/24387-6b7f5e596897eded.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/81683-740d112caee5baa9.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/46740-84bdd4782a486b80.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/81751-d3fe9e061a21f8d3.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/github-elements-837d26c249ef0f1d.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/element-registry-bb2cd0bc4c3bad67.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/react-core-dcd512f43fdba85e.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/react-lib-e74a1db7c21f7e74.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/7053-20b4a6914bbde21f.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/79039-9ce5da88e09eef89.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/61110-212553c409076913.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/2887-0e9a84f5dc250853.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/26533-6b8040883d16f6ae.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/62249-2895213a788d973c.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/2694-372ce035e93800e0.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/56093-886facf7a5ba3dc9.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/28360-f4444f13a0dc6af9.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/12142-b56dc06030d9574f.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/22960-12a7c572a55f9c87.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/51683-f6844a8acd415e3b.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/76545-cf3621a1f2f36d8d.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/behaviors-e43afe894d57debc.js\" defer=\"defer\"></script>\n<link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/react-core.35e5d09cdbc69350.module.css\" />\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/38302-277be92deeed3c63.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/notifications-global-fc52e59df1c89647.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/92351-7bc542feb2bc5250.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/code-menu-ac8ef1c9f2457929.js\" defer=\"defer\"></script>\n \n <script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/primer-react-9537ac79f0a3d832.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/octicons-react-39f7eb9c9327cc85.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/78168-dda25026ab7e88b8.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/68751-4d3d1aac1f81a213.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/7463-2a94d884e276b7f9.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/15272-ef674e7caa43f3d4.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/32769-e856688499efb8d1.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/437-ed451d0ef5202580.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/80067-9b43df2889de2a8f.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/34194-b013fe1892f07b5a.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/19837-256515faabc7a3fd.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/16111-f5f338f82c51d302.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/51597-90368bb51b82ae4f.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/38728-25f5b37432a37d4a.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/99602-8110a1eaf4307aae.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/71365-79e23887316d43a4.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/11152-ab31b20bfdc6794f.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/61300-8c4d65d4e2701585.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/41954-50d9d252ed7dfcc6.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/65439-ccf550e14b1f971b.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/11149-d4f1c5f26d21cb10.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/78563-887dd48b0f36941b.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/16073-85e63ca50f563465.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/57956-01355ed498c4a6c4.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/95776-881e9d9cdf0494fc.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/43142-e0ed058b12703a92.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/19101-8b0d1239b989a6da.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/46358-62b54d6e8db9b8bf.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/80352-a10d46d0c8bcfa2f.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/11268-90882e367263e0b0.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/73494-006cc0da9ef70376.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/2653-13297e64d4facff5.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/react-code-view-2c0e1a426dd2429e.js\" defer=\"defer\"></script>\n<link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/primer-react-css.472b5991857bf128.module.css\" />\n<link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/46358.8df8e7e0846b009c.module.css\" />\n<link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/2653.5249e6d6586be4c4.module.css\" />\n<link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/react-code-view.c51f7f43c1dcf251.module.css\" />\n\n <script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/82729-9c66512dd277d027.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/22843-872789a8d1cec837.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/69174-fa0d2eb122c8f00a.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/5149-cca1dd424bd07134.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/62723-f44d20fee4470b78.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/notifications-subscriptions-menu-b3a143a6dd038e99.js\" defer=\"defer\"></script>\n<link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/primer-react-css.472b5991857bf128.module.css\" />\n<link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/notifications-subscriptions-menu.f368d8d5c72615dd.module.css\" />\n\n\n <title>File not found · GitHub</title>\n\n\n\n <meta name=\"route-pattern\" content=\"/:user_id/:repository/blob/*name(/*path)\" data-turbo-transient>\n <meta name=\"route-controller\" content=\"blob\" data-turbo-transient>\n <meta name=\"route-action\" content=\"show\" data-turbo-transient>\n <meta name=\"fetch-nonce\" content=\"v2:bec0c7a3-3733-a357-774a-f5609869df85\">\n\n \n <meta name=\"current-catalog-service-hash\" content=\"f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb\">\n\n\n <meta name=\"request-id\" content=\"C3A9:82D58:11FAC37:12588EA:69A41AB3\" data-pjax-transient=\"true\"/><meta name=\"html-safe-nonce\" content=\"a443cdfaf63b44546809e5fe97f53b758859f7eb0578fda82aafbdd7852ccef4\" data-pjax-transient=\"true\"/><meta name=\"visitor-payload\" content=\"eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDM0E5OjgyRDU4OjExRkFDMzc6MTI1ODhFQTo2OUE0MUFCMyIsInZpc2l0b3JfaWQiOiI0MzA5MTUwODczMjE2NjIxMjM1IiwicmVnaW9uX2VkZ2UiOiJzd2VkZW5jZW50cmFsIiwicmVnaW9uX3JlbmRlciI6InN3ZWRlbmNlbnRyYWwifQ==\" data-pjax-transient=\"true\"/><meta name=\"visitor-hmac\" content=\"2b9c54a41c6b7e1c52f00ed64376d879e9cc8ab996cb41cf38a44292cf18d5f8\" data-pjax-transient=\"true\"/>\n\n\n <meta name=\"hovercard-subject-tag\" content=\"repository:196701619\" data-turbo-transient>\n\n\n <meta name=\"github-keyboard-shortcuts\" content=\"repository,source-code,file-tree,copilot\" data-turbo-transient=\"true\" />\n \n\n <meta name=\"selected-link\" value=\"repo_source\" data-turbo-transient>\n <link rel=\"assets\" href=\"https://github.githubassets.com/\">\n\n <meta name=\"google-site-verification\" content=\"Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I\">\n\n<meta name=\"octolytics-url\" content=\"https://collector.github.com/github/collect\" />\n\n\n\n\n\n <meta name=\"analytics-location\" content=\"/<user-name>/<repo-name>/blob/show\" data-turbo-transient=\"true\" />\n\n \n\n\n\n\n <meta name=\"user-login\" content=\"\">\n\n \n\n <meta name=\"viewport\" content=\"width=device-width\">\n\n \n\n <meta name=\"description\" content=\"Build smaller, faster, and more secure desktop and mobile applications with a web frontend. - File not found · tauri-apps/tauri\">\n\n <link rel=\"search\" type=\"application/opensearchdescription+xml\" href=\"/opensearch.xml\" title=\"GitHub\">\n\n <link rel=\"fluid-icon\" href=\"https://github.com/fluidicon.png\" title=\"GitHub\">\n <meta property=\"fb:app_id\" content=\"1401488693436528\">\n <meta name=\"apple-itunes-app\" content=\"app-id=1477376905, app-argument=https://github.com/tauri-apps/tauri/blob/dev/tooling/cli/src/mobile/ios/project.rs\" />\n\n <meta name=\"twitter:image\" content=\"https://repository-images.githubusercontent.com/196701619/97dffd87-95e5-4b11-873c-ff3fa8c50875\" /><meta name=\"twitter:site\" content=\"@github\" /><meta name=\"twitter:card\" content=\"summary_large_image\" /><meta name=\"twitter:title\" content=\"File not found · tauri-apps/tauri\" /><meta name=\"twitter:description\" content=\"Build smaller, faster, and more secure desktop and mobile applications with a web frontend. - File not found · tauri-apps/tauri\" />\n <meta property=\"og:image\" content=\"https://repository-images.githubusercontent.com/196701619/97dffd87-95e5-4b11-873c-ff3fa8c50875\" /><meta property=\"og:image:alt\" content=\"Build smaller, faster, and more secure desktop and mobile applications with a web frontend. - File not found · tauri-apps/tauri\" /><meta property=\"og:site_name\" content=\"GitHub\" /><meta property=\"og:type\" content=\"object\" /><meta property=\"og:title\" content=\"File not found · tauri-apps/tauri\" /><meta property=\"og:url\" content=\"https://github.com/tauri-apps/tauri\" /><meta property=\"og:description\" content=\"Build smaller, faster, and more secure desktop and mobile applications with a web frontend. - File not found · tauri-apps/tauri\" />\n \n\n\n\n\n <meta name=\"hostname\" content=\"github.com\">\n\n\n\n <meta name=\"expected-hostname\" content=\"github.com\">\n\n\n <meta http-equiv=\"x-pjax-version\" content=\"56cd73939759ef16bc4aa7d7b10917dc358002675d418f8b39f922014fc1678c\" data-turbo-track=\"reload\">\n <meta http-equiv=\"x-pjax-csp-version\" content=\"568c098497d98702bac1642a2a853732a047a6ced28eabd3e15d50041a890235\" data-turbo-track=\"reload\">\n <meta http-equiv=\"x-pjax-css-version\" content=\"3a421c5f1445b7e5ad5460dd263b7954b153fa40b048a6fde2f9e012764d6d50\" data-turbo-track=\"reload\">\n <meta http-equiv=\"x-pjax-js-version\" content=\"9e74777050a8cf6d2f3e44e4b857d82f981be9c4421e6a7dc6ccda4feb5ce086\" data-turbo-track=\"reload\">\n\n <meta name=\"turbo-cache-control\" content=\"no-preview\" data-turbo-transient=\"\">\n\n <meta name=\"turbo-cache-control\" content=\"no-cache\" data-turbo-transient>\n\n <meta data-hydrostats=\"publish\">\n\n <meta name=\"go-import\" content=\"github.com/tauri-apps/tauri git https://github.com/tauri-apps/tauri.git\">\n\n <meta name=\"octolytics-dimension-user_id\" content=\"54536011\" /><meta name=\"octolytics-dimension-user_login\" content=\"tauri-apps\" /><meta name=\"octolytics-dimension-repository_id\" content=\"196701619\" /><meta name=\"octolytics-dimension-repository_nwo\" content=\"tauri-apps/tauri\" /><meta name=\"octolytics-dimension-repository_public\" content=\"true\" /><meta name=\"octolytics-dimension-repository_is_fork\" content=\"false\" /><meta name=\"octolytics-dimension-repository_network_root_id\" content=\"196701619\" /><meta name=\"octolytics-dimension-repository_network_root_nwo\" content=\"tauri-apps/tauri\" />\n\n\n\n \n\n <meta name=\"turbo-body-classes\" content=\"logged-out env-production page-responsive\">\n <meta name=\"disable-turbo\" content=\"false\">\n\n\n <meta name=\"browser-stats-url\" content=\"https://api.github.com/_private/browser/stats\">\n\n <meta name=\"browser-errors-url\" content=\"https://api.github.com/_private/browser/errors\">\n\n <meta name=\"release\" content=\"3b808a02058ef227fa5d29650f4e4fd2ff151519\">\n <meta name=\"ui-target\" content=\"full\">\n\n <link rel=\"mask-icon\" href=\"https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg\" color=\"#000000\">\n <link rel=\"alternate icon\" class=\"js-site-favicon\" type=\"image/png\" href=\"https://github.githubassets.com/favicons/favicon.png\">\n <link rel=\"icon\" class=\"js-site-favicon\" type=\"image/svg+xml\" href=\"https://github.githubassets.com/favicons/favicon.svg\" data-base-href=\"https://github.githubassets.com/favicons/favicon\">\n\n<meta name=\"theme-color\" content=\"#1e2327\">\n<meta name=\"color-scheme\" content=\"light dark\" />\n\n\n <link rel=\"manifest\" href=\"/manifest.json\" crossOrigin=\"use-credentials\">\n\n </head>\n\n <body class=\"logged-out env-production page-responsive\" style=\"word-wrap: break-word;\" >\n <div data-turbo-body class=\"logged-out env-production page-responsive\" style=\"word-wrap: break-word;\" >\n <div id=\"__primerPortalRoot__\" role=\"region\" style=\"z-index: 1000; position: absolute; width: 100%;\" data-turbo-permanent></div>\n \n\n <div class=\"position-relative header-wrapper js-header-wrapper \">\n <a href=\"#start-of-content\" data-skip-target-assigned=\"false\" class=\"px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content\">Skip to content</a>\n\n <span data-view-component=\"true\" class=\"progress-pjax-loader Progress position-fixed width-full\">\n <span style=\"width: 0%;\" data-view-component=\"true\" class=\"Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis\"></span>\n</span> \n \n <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/primer-react-css.472b5991857bf128.module.css\" />\n\n<react-partial\n partial-name=\"keyboard-shortcuts-dialog\"\n data-ssr=\"false\"\n data-attempted-ssr=\"false\"\n data-react-profiling=\"true\"\n>\n \n <script type=\"application/json\" data-target=\"react-partial.embeddedData\">{\"props\":{\"docsUrl\":\"https://docs.github.com/get-started/accessibility/keyboard-shortcuts\"}}</script>\n <div data-target=\"react-partial.reactRoot\"></div>\n</react-partial>\n\n\n\n\n\n \n\n \n\n \n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/46752-4c55523fe83d3457.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/93308-bf887482583069d7.js\" defer=\"defer\"></script>\n<script crossorigin=\"anonymous\" type=\"application/javascript\" src=\"https://github.githubassets.com/assets/sessions-ef46f0030f2d06d6.js\" defer=\"defer\"></script>\n\n<style>\n /* Override primer focus outline color for marketing header dropdown links for better contrast */\n [data-color-mode=\"light\"] .HeaderMenu-dropdown-link:focus-visible,\n [data-color-mode=\"light\"] .HeaderMenu-trailing-link a:focus-visible {\n outline-color: var(--color-accent-fg);\n }\n</style>\n\n<header class=\"HeaderMktg header-logged-out js-details-container js-header Details f4 tmp-py-3\" role=\"banner\" data-is-top=\"true\" data-color-mode=auto data-light-theme=light data-dark-theme=dark>\n <h2 class=\"sr-only\">Navigation Menu</h2>\n\n <button type=\"button\" class=\"HeaderMktg-backdrop d-lg-none border-0 position-fixed top-0 left-0 width-full height-full js-details-target\" aria-label=\"Toggle navigation\">\n <span class=\"d-none\">Toggle navigation</span>\n </button>\n\n <div class=\"d-flex flex-column flex-lg-row flex-items-center tmp-px-3 tmp-px-md-4 tmp-px-lg-5 height-full position-relative z-1\">\n <div class=\"d-flex flex-justify-between flex-items-center width-full width-lg-auto\">\n <div class=\"flex-1\">\n <button aria-label=\"Toggle navigation\" aria-expanded=\"false\" type=\"button\" data-view-component=\"true\" class=\"js-details-target js-nav-padding-recalculate js-header-menu-toggle Button--link Button--medium Button d-lg-none color-fg-inherit p-1\"> <span class=\"Button-content\">\n <span class=\"Button-label\"><div class=\"HeaderMenu-toggle-bar rounded my-1\"></div>\n <div class=\"HeaderMenu-toggle-bar rounded my-1\"></div>\n <div class=\"HeaderMenu-toggle-bar rounded my-1\"></div></span>\n </span>\n</button>\n </div>\n\n <a class=\"tmp-mr-lg-3 color-fg-inherit flex-order-2 js-prevent-focus-on-mobile-nav\"\n href=\"/\"\n aria-label=\"Homepage\"\n data-analytics-event=\"{"category":"Marketing nav","action":"click to go to homepage","label":"ref_page:Marketing;ref_cta:Logomark;ref_loc:Header"}\">\n <svg height=\"32\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" version=\"1.1\" width=\"32\" data-view-component=\"true\" class=\"octicon octicon-mark-github\">\n <path d=\"M12 1C5.923 1 1 5.923 1 12c0 4.867 3.149 8.979 7.521 10.436.55.096.756-.233.756-.522 0-.262-.013-1.128-.013-2.049-2.764.509-3.479-.674-3.699-1.292-.124-.317-.66-1.293-1.127-1.554-.385-.207-.936-.715-.014-.729.866-.014 1.485.797 1.691 1.128.99 1.663 2.571 1.196 3.204.907.096-.715.385-1.196.701-1.471-2.448-.275-5.005-1.224-5.005-5.432 0-1.196.426-2.186 1.128-2.956-.111-.275-.496-1.402.11-2.915 0 0 .921-.288 3.024 1.128a10.193 10.193 0 0 1 2.75-.371c.936 0 1.871.123 2.75.371 2.104-1.43 3.025-1.128 3.025-1.128.605 1.513.221 2.64.111 2.915.701.77 1.127 1.747 1.127 2.956 0 4.222-2.571 5.157-5.019 5.432.399.344.743 1.004.743 2.035 0 1.471-.014 2.654-.014 3.025 0 .289.206.632.756.522C19.851 20.979 23 16.854 23 12c0-6.077-4.922-11-11-11Z\"></path>\n</svg>\n </a>\n\n <div class=\"d-flex flex-1 flex-order-2 text-right d-lg-none gap-2 flex-justify-end\">\n <a\n href=\"/login?return_to=https%3A%2F%2Fgithub.com%2Ftauri-apps%2Ftauri%2Fblob%2Fdev%2Ftooling%2Fcli%2Fsrc%2Fmobile%2Fios%2Fproject.rs\"\n class=\"HeaderMenu-link HeaderMenu-button d-inline-flex f5 no-underline border color-border-default rounded-2 px-2 py-1 color-fg-inherit js-prevent-focus-on-mobile-nav\"\n data-hydro-click=\"{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/tauri-apps/tauri/blob/dev/tooling/cli/src/mobile/ios/project.rs","user_id":null}}\" data-hydro-click-hmac=\"ddf07a1e41b574cc8ef57b9d6fa8697d4c92c6391dce20227bf7e5b794599843\"\n data-analytics-event=\"{"category":"Marketing nav","action":"click to Sign in","label":"ref_page:Marketing;ref_cta:Sign in;ref_loc:Header"}\"\n >\n Sign in\n </a>\n <div class=\"AppHeader-appearanceSettings\">\n <react-partial-anchor>\n <button data-target=\"react-partial-anchor.anchor\" id=\"icon-button-a558bf54-4bd7-44b9-aaf8-e3da137ada12\" aria-labelledby=\"tooltip-96dcbfcd-a7df-49e9-9fb3-2cf5893ce3e8\" type=\"button\" disabled=\"disabled\" data-view-component=\"true\" class=\"Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait\"> <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-sliders Button-visual\">\n <path d=\"M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z\"></path>\n</svg>\n</button><tool-tip id=\"tooltip-96dcbfcd-a7df-49e9-9fb3-2cf5893ce3e8\" for=\"icon-button-a558bf54-4bd7-44b9-aaf8-e3da137ada12\" popover=\"manual\" data-direction=\"s\" data-type=\"label\" data-view-component=\"true\" class=\"sr-only position-absolute\">Appearance settings</tool-tip>\n\n <template data-target=\"react-partial-anchor.template\">\n <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/primer-react-css.472b5991857bf128.module.css\" />\n<link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/appearance-settings.2fbde1012bed47de.module.css\" />\n\n<react-partial\n partial-name=\"appearance-settings\"\n data-ssr=\"false\"\n data-attempted-ssr=\"false\"\n data-react-profiling=\"true\"\n>\n \n <script type=\"application/json\" data-target=\"react-partial.embeddedData\">{\"props\":{}}</script>\n <div data-target=\"react-partial.reactRoot\"></div>\n</react-partial>\n\n\n </template>\n </react-partial-anchor>\n </div>\n\n </div>\n </div>\n\n\n <div class=\"HeaderMenu js-header-menu height-fit position-lg-relative d-lg-flex flex-column flex-auto top-0\">\n <div class=\"HeaderMenu-wrapper d-flex flex-column flex-self-start flex-lg-row flex-auto rounded rounded-lg-0\">\n <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/primer-react-css.472b5991857bf128.module.css\" />\n<link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/marketing-navigation.14cc8c51c839d6ba.module.css\" />\n\n<react-partial\n partial-name=\"marketing-navigation\"\n data-ssr=\"true\"\n data-attempted-ssr=\"true\"\n data-react-profiling=\"true\"\n>\n \n <script type=\"application/json\" data-target=\"react-partial.embeddedData\">{\"props\":{\"should_use_dotcom_links\":true}}</script>\n <div data-target=\"react-partial.reactRoot\"><nav class=\"MarketingNavigation-module__nav__W0KYY\" aria-label=\"Global\"><ul class=\"MarketingNavigation-module__list__tFbMb\"><li><div class=\"NavDropdown-module__container__l2YeI js-details-container js-header-menu-item\"><button type=\"button\" class=\"NavDropdown-module__button__PEHWX js-details-target\" aria-expanded=\"false\">Platform<svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z\"></path></svg></button><div class=\"NavDropdown-module__dropdown__xm1jd\"><ul class=\"NavDropdown-module__list__zuCgG\"><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">AI CODE CREATION</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://github.com/features/copilot\" data-analytics-event=\"{"action":"github_copilot","tag":"link","context":"platform","location":"navbar","label":"github_copilot_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-copilot NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z\"></path><path d=\"M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">GitHub Copilot</span><span class=\"NavLink-module__subtitle__X4gkW\">Write better code with AI</span></div></a></li><li><a href=\"https://github.com/features/spark\" data-analytics-event=\"{"action":"github_spark","tag":"link","context":"platform","location":"navbar","label":"github_spark_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-sparkle-fill NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M11.296 1.924c.24-.656 1.168-.656 1.408 0l.717 1.958a11.25 11.25 0 0 0 6.697 6.697l1.958.717c.657.24.657 1.168 0 1.408l-1.958.717a11.25 11.25 0 0 0-6.697 6.697l-.717 1.958c-.24.657-1.168.657-1.408 0l-.717-1.958a11.25 11.25 0 0 0-6.697-6.697l-1.958-.717c-.656-.24-.656-1.168 0-1.408l1.958-.717a11.25 11.25 0 0 0 6.697-6.697l.717-1.958Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">GitHub Spark</span><span class=\"NavLink-module__subtitle__X4gkW\">Build and deploy intelligent apps</span></div></a></li><li><a href=\"https://github.com/features/models\" data-analytics-event=\"{"action":"github_models","tag":"link","context":"platform","location":"navbar","label":"github_models_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-ai-model NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M19.375 8.5a3.25 3.25 0 1 1-3.163 4h-3a3.252 3.252 0 0 1-4.443 2.509L7.214 17.76a3.25 3.25 0 1 1-1.342-.674l1.672-2.957A3.238 3.238 0 0 1 6.75 12c0-.907.371-1.727.97-2.316L6.117 6.846A3.253 3.253 0 0 1 1.875 3.75a3.25 3.25 0 1 1 5.526 2.32l1.603 2.836A3.25 3.25 0 0 1 13.093 11h3.119a3.252 3.252 0 0 1 3.163-2.5ZM10 10.25a1.75 1.75 0 1 0-.001 3.499A1.75 1.75 0 0 0 10 10.25ZM5.125 2a1.75 1.75 0 1 0 0 3.5 1.75 1.75 0 0 0 0-3.5Zm12.5 9.75a1.75 1.75 0 1 0 3.5 0 1.75 1.75 0 0 0-3.5 0Zm-14.25 8.5a1.75 1.75 0 1 0 3.501-.001 1.75 1.75 0 0 0-3.501.001Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">GitHub Models</span><span class=\"NavLink-module__subtitle__X4gkW\">Manage and compare prompts</span></div></a></li><li><a href=\"https://github.com/mcp\" data-analytics-event=\"{"action":"mcp_registry","tag":"link","context":"platform","location":"navbar","label":"mcp_registry_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-mcp NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M9.795 1.694a4.287 4.287 0 0 1 6.061 0 4.28 4.28 0 0 1 1.181 3.819 4.282 4.282 0 0 1 3.819 1.181 4.287 4.287 0 0 1 0 6.061l-6.793 6.793a.249.249 0 0 0 0 .353l2.617 2.618a.75.75 0 1 1-1.061 1.061l-2.617-2.618a1.75 1.75 0 0 1 0-2.475l6.793-6.793a2.785 2.785 0 1 0-3.939-3.939l-5.9 5.9a.734.734 0 0 1-.249.165.749.749 0 0 1-.812-1.225l5.9-5.901a2.785 2.785 0 1 0-3.939-3.939L2.931 10.68A.75.75 0 1 1 1.87 9.619l7.925-7.925Z\"></path><path d=\"M12.42 4.069a.752.752 0 0 1 1.061 0 .752.752 0 0 1 0 1.061L7.33 11.28a2.788 2.788 0 0 0 0 3.94 2.788 2.788 0 0 0 3.94 0l6.15-6.151a.752.752 0 0 1 1.061 0 .752.752 0 0 1 0 1.061l-6.151 6.15a4.285 4.285 0 1 1-6.06-6.06l6.15-6.151Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">MCP Registry<sup class=\"NavLink-module__label__bil7n\">New</sup></span><span class=\"NavLink-module__subtitle__X4gkW\">Integrate external tools</span></div></a></li></ul></div></li><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">DEVELOPER WORKFLOWS</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://github.com/features/actions\" data-analytics-event=\"{"action":"actions","tag":"link","context":"platform","location":"navbar","label":"actions_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-workflow NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M1 3a2 2 0 0 1 2-2h6.5a2 2 0 0 1 2 2v6.5a2 2 0 0 1-2 2H7v4.063C7 16.355 7.644 17 8.438 17H12.5v-2.5a2 2 0 0 1 2-2H21a2 2 0 0 1 2 2V21a2 2 0 0 1-2 2h-6.5a2 2 0 0 1-2-2v-2.5H8.437A2.939 2.939 0 0 1 5.5 15.562V11.5H3a2 2 0 0 1-2-2Zm2-.5a.5.5 0 0 0-.5.5v6.5a.5.5 0 0 0 .5.5h6.5a.5.5 0 0 0 .5-.5V3a.5.5 0 0 0-.5-.5ZM14.5 14a.5.5 0 0 0-.5.5V21a.5.5 0 0 0 .5.5H21a.5.5 0 0 0 .5-.5v-6.5a.5.5 0 0 0-.5-.5Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">Actions</span><span class=\"NavLink-module__subtitle__X4gkW\">Automate any workflow</span></div></a></li><li><a href=\"https://github.com/features/codespaces\" data-analytics-event=\"{"action":"codespaces","tag":"link","context":"platform","location":"navbar","label":"codespaces_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-codespaces NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M3.5 3.75C3.5 2.784 4.284 2 5.25 2h13.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 18.75 13H5.25a1.75 1.75 0 0 1-1.75-1.75Zm-2 12c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v4a1.75 1.75 0 0 1-1.75 1.75H3.25a1.75 1.75 0 0 1-1.75-1.75ZM5.25 3.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h13.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Zm-2 12a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h17.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25Z\"></path><path d=\"M10 17.75a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">Codespaces</span><span class=\"NavLink-module__subtitle__X4gkW\">Instant dev environments</span></div></a></li><li><a href=\"https://github.com/features/issues\" data-analytics-event=\"{"action":"issues","tag":"link","context":"platform","location":"navbar","label":"issues_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-issue-opened NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Zm9.5 2a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 14Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">Issues</span><span class=\"NavLink-module__subtitle__X4gkW\">Plan and track work</span></div></a></li><li><a href=\"https://github.com/features/code-review\" data-analytics-event=\"{"action":"code_review","tag":"link","context":"platform","location":"navbar","label":"code_review_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-code NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M15.22 4.97a.75.75 0 0 1 1.06 0l6.5 6.5a.75.75 0 0 1 0 1.06l-6.5 6.5a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L21.19 12l-5.97-5.97a.75.75 0 0 1 0-1.06Zm-6.44 0a.75.75 0 0 1 0 1.06L2.81 12l5.97 5.97a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-6.5-6.5a.75.75 0 0 1 0-1.06l6.5-6.5a.75.75 0 0 1 1.06 0Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">Code Review</span><span class=\"NavLink-module__subtitle__X4gkW\">Manage code changes</span></div></a></li></ul></div></li><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">APPLICATION SECURITY</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://github.com/security/advanced-security\" data-analytics-event=\"{"action":"github_advanced_security","tag":"link","context":"platform","location":"navbar","label":"github_advanced_security_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-shield-check NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z\"></path><path d=\"m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">GitHub Advanced Security</span><span class=\"NavLink-module__subtitle__X4gkW\">Find and fix vulnerabilities</span></div></a></li><li><a href=\"https://github.com/security/advanced-security/code-security\" data-analytics-event=\"{"action":"code_security","tag":"link","context":"platform","location":"navbar","label":"code_security_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-code-square NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M10.3 8.24a.75.75 0 0 1-.04 1.06L7.352 12l2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z\"></path><path d=\"M2 3.75C2 2.784 2.784 2 3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0 1 20.25 22H3.75A1.75 1.75 0 0 1 2 20.25Zm1.75-.25a.25.25 0 0 0-.25.25v16.5c0 .138.112.25.25.25h16.5a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">Code security</span><span class=\"NavLink-module__subtitle__X4gkW\">Secure your code as you build</span></div></a></li><li><a href=\"https://github.com/security/advanced-security/secret-protection\" data-analytics-event=\"{"action":"secret_protection","tag":"link","context":"platform","location":"navbar","label":"secret_protection_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-lock NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M6 9V7.25C6 3.845 8.503 1 12 1s6 2.845 6 6.25V9h.5a2.5 2.5 0 0 1 2.5 2.5v8a2.5 2.5 0 0 1-2.5 2.5h-13A2.5 2.5 0 0 1 3 19.5v-8A2.5 2.5 0 0 1 5.5 9Zm-1.5 2.5v8a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1h-13a1 1 0 0 0-1 1Zm3-4.25V9h9V7.25c0-2.67-1.922-4.75-4.5-4.75-2.578 0-4.5 2.08-4.5 4.75Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">Secret protection</span><span class=\"NavLink-module__subtitle__X4gkW\">Stop leaks before they start</span></div></a></li></ul></div></li><li><div class=\"NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN\"><span class=\"NavGroup-module__title__Wzxz2\">EXPLORE</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://github.com/why-github\" data-analytics-event=\"{"action":"why_github","tag":"link","context":"platform","location":"navbar","label":"why_github_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Why GitHub</span></a></li><li><a href=\"https://docs.github.com\" data-analytics-event=\"{"action":"documentation","tag":"link","context":"platform","location":"navbar","label":"documentation_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\" target=\"_blank\" rel=\"noreferrer\"><span class=\"NavLink-module__title__Q7t0p\">Documentation</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-link-external NavLink-module__externalIcon__eWIry\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z\"></path></svg></a></li><li><a href=\"https://github.blog\" data-analytics-event=\"{"action":"blog","tag":"link","context":"platform","location":"navbar","label":"blog_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\" target=\"_blank\" rel=\"noreferrer\"><span class=\"NavLink-module__title__Q7t0p\">Blog</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-link-external NavLink-module__externalIcon__eWIry\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z\"></path></svg></a></li><li><a href=\"https://github.blog/changelog\" data-analytics-event=\"{"action":"changelog","tag":"link","context":"platform","location":"navbar","label":"changelog_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\" target=\"_blank\" rel=\"noreferrer\"><span class=\"NavLink-module__title__Q7t0p\">Changelog</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-link-external NavLink-module__externalIcon__eWIry\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z\"></path></svg></a></li><li><a href=\"https://github.com/marketplace\" data-analytics-event=\"{"action":"marketplace","tag":"link","context":"platform","location":"navbar","label":"marketplace_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Marketplace</span></a></li></ul></div></li></ul><div class=\"NavDropdown-module__trailingLinkContainer__VgJGL\"><a href=\"https://github.com/features\" data-analytics-event=\"{"action":"view_all_features","tag":"link","context":"platform","location":"navbar","label":"view_all_features_link_platform_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">View all features</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-chevron-right NavLink-module__arrowIcon__amekg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z\"></path></svg></a></div></div></div></li><li><div class=\"NavDropdown-module__container__l2YeI js-details-container js-header-menu-item\"><button type=\"button\" class=\"NavDropdown-module__button__PEHWX js-details-target\" aria-expanded=\"false\">Solutions<svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z\"></path></svg></button><div class=\"NavDropdown-module__dropdown__xm1jd\"><ul class=\"NavDropdown-module__list__zuCgG\"><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">BY COMPANY SIZE</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://github.com/enterprise\" data-analytics-event=\"{"action":"enterprises","tag":"link","context":"solutions","location":"navbar","label":"enterprises_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Enterprises</span></a></li><li><a href=\"https://github.com/team\" data-analytics-event=\"{"action":"small_and_medium_teams","tag":"link","context":"solutions","location":"navbar","label":"small_and_medium_teams_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Small and medium teams</span></a></li><li><a href=\"https://github.com/enterprise/startups\" data-analytics-event=\"{"action":"startups","tag":"link","context":"solutions","location":"navbar","label":"startups_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Startups</span></a></li><li><a href=\"https://github.com/solutions/industry/nonprofits\" data-analytics-event=\"{"action":"nonprofits","tag":"link","context":"solutions","location":"navbar","label":"nonprofits_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Nonprofits</span></a></li></ul></div></li><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">BY USE CASE</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://github.com/solutions/use-case/app-modernization\" data-analytics-event=\"{"action":"app_modernization","tag":"link","context":"solutions","location":"navbar","label":"app_modernization_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">App Modernization</span></a></li><li><a href=\"https://github.com/solutions/use-case/devsecops\" data-analytics-event=\"{"action":"devsecops","tag":"link","context":"solutions","location":"navbar","label":"devsecops_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">DevSecOps</span></a></li><li><a href=\"https://github.com/solutions/use-case/devops\" data-analytics-event=\"{"action":"devops","tag":"link","context":"solutions","location":"navbar","label":"devops_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">DevOps</span></a></li><li><a href=\"https://github.com/solutions/use-case/ci-cd\" data-analytics-event=\"{"action":"ci/cd","tag":"link","context":"solutions","location":"navbar","label":"ci/cd_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">CI/CD</span></a></li><li><a href=\"https://github.com/solutions/use-case\" data-analytics-event=\"{"action":"view_all_use_cases","tag":"link","context":"solutions","location":"navbar","label":"view_all_use_cases_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">View all use cases</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-chevron-right NavLink-module__arrowIcon__amekg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z\"></path></svg></a></li></ul></div></li><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">BY INDUSTRY</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://github.com/solutions/industry/healthcare\" data-analytics-event=\"{"action":"healthcare","tag":"link","context":"solutions","location":"navbar","label":"healthcare_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Healthcare</span></a></li><li><a href=\"https://github.com/solutions/industry/financial-services\" data-analytics-event=\"{"action":"financial_services","tag":"link","context":"solutions","location":"navbar","label":"financial_services_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Financial services</span></a></li><li><a href=\"https://github.com/solutions/industry/manufacturing\" data-analytics-event=\"{"action":"manufacturing","tag":"link","context":"solutions","location":"navbar","label":"manufacturing_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Manufacturing</span></a></li><li><a href=\"https://github.com/solutions/industry/government\" data-analytics-event=\"{"action":"government","tag":"link","context":"solutions","location":"navbar","label":"government_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Government</span></a></li><li><a href=\"https://github.com/solutions/industry\" data-analytics-event=\"{"action":"view_all_industries","tag":"link","context":"solutions","location":"navbar","label":"view_all_industries_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">View all industries</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-chevron-right NavLink-module__arrowIcon__amekg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z\"></path></svg></a></li></ul></div></li></ul><div class=\"NavDropdown-module__trailingLinkContainer__VgJGL\"><a href=\"https://github.com/solutions\" data-analytics-event=\"{"action":"view_all_solutions","tag":"link","context":"solutions","location":"navbar","label":"view_all_solutions_link_solutions_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">View all solutions</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-chevron-right NavLink-module__arrowIcon__amekg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z\"></path></svg></a></div></div></div></li><li><div class=\"NavDropdown-module__container__l2YeI js-details-container js-header-menu-item\"><button type=\"button\" class=\"NavDropdown-module__button__PEHWX js-details-target\" aria-expanded=\"false\">Resources<svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z\"></path></svg></button><div class=\"NavDropdown-module__dropdown__xm1jd\"><ul class=\"NavDropdown-module__list__zuCgG\"><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">EXPLORE BY TOPIC</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://github.com/resources/articles?topic=ai\" data-analytics-event=\"{"action":"ai","tag":"link","context":"resources","location":"navbar","label":"ai_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">AI</span></a></li><li><a href=\"https://github.com/resources/articles?topic=software-development\" data-analytics-event=\"{"action":"software_development","tag":"link","context":"resources","location":"navbar","label":"software_development_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Software Development</span></a></li><li><a href=\"https://github.com/resources/articles?topic=devops\" data-analytics-event=\"{"action":"devops","tag":"link","context":"resources","location":"navbar","label":"devops_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">DevOps</span></a></li><li><a href=\"https://github.com/resources/articles?topic=security\" data-analytics-event=\"{"action":"security","tag":"link","context":"resources","location":"navbar","label":"security_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Security</span></a></li><li><a href=\"https://github.com/resources/articles\" data-analytics-event=\"{"action":"view_all_topics","tag":"link","context":"resources","location":"navbar","label":"view_all_topics_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">View all topics</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-chevron-right NavLink-module__arrowIcon__amekg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z\"></path></svg></a></li></ul></div></li><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">EXPLORE BY TYPE</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://github.com/customer-stories\" data-analytics-event=\"{"action":"customer_stories","tag":"link","context":"resources","location":"navbar","label":"customer_stories_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Customer stories</span></a></li><li><a href=\"https://github.com/resources/events\" data-analytics-event=\"{"action":"events__webinars","tag":"link","context":"resources","location":"navbar","label":"events__webinars_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Events & webinars</span></a></li><li><a href=\"https://github.com/resources/whitepapers\" data-analytics-event=\"{"action":"ebooks__reports","tag":"link","context":"resources","location":"navbar","label":"ebooks__reports_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Ebooks & reports</span></a></li><li><a href=\"https://github.com/solutions/executive-insights\" data-analytics-event=\"{"action":"business_insights","tag":"link","context":"resources","location":"navbar","label":"business_insights_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Business insights</span></a></li><li><a href=\"https://skills.github.com\" data-analytics-event=\"{"action":"github_skills","tag":"link","context":"resources","location":"navbar","label":"github_skills_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\" target=\"_blank\" rel=\"noreferrer\"><span class=\"NavLink-module__title__Q7t0p\">GitHub Skills</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-link-external NavLink-module__externalIcon__eWIry\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z\"></path></svg></a></li></ul></div></li><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">SUPPORT & SERVICES</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://docs.github.com\" data-analytics-event=\"{"action":"documentation","tag":"link","context":"resources","location":"navbar","label":"documentation_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\" target=\"_blank\" rel=\"noreferrer\"><span class=\"NavLink-module__title__Q7t0p\">Documentation</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-link-external NavLink-module__externalIcon__eWIry\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z\"></path></svg></a></li><li><a href=\"https://support.github.com\" data-analytics-event=\"{"action":"customer_support","tag":"link","context":"resources","location":"navbar","label":"customer_support_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\" target=\"_blank\" rel=\"noreferrer\"><span class=\"NavLink-module__title__Q7t0p\">Customer support</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-link-external NavLink-module__externalIcon__eWIry\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z\"></path></svg></a></li><li><a href=\"https://github.com/orgs/community/discussions\" data-analytics-event=\"{"action":"community_forum","tag":"link","context":"resources","location":"navbar","label":"community_forum_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Community forum</span></a></li><li><a href=\"https://github.com/trust-center\" data-analytics-event=\"{"action":"trust_center","tag":"link","context":"resources","location":"navbar","label":"trust_center_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Trust center</span></a></li><li><a href=\"https://github.com/partners\" data-analytics-event=\"{"action":"partners","tag":"link","context":"resources","location":"navbar","label":"partners_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Partners</span></a></li></ul></div></li></ul><div class=\"NavDropdown-module__trailingLinkContainer__VgJGL\"><a href=\"https://github.com/resources\" data-analytics-event=\"{"action":"view_all_resources","tag":"link","context":"resources","location":"navbar","label":"view_all_resources_link_resources_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">View all resources</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-chevron-right NavLink-module__arrowIcon__amekg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z\"></path></svg></a></div></div></div></li><li><div class=\"NavDropdown-module__container__l2YeI js-details-container js-header-menu-item\"><button type=\"button\" class=\"NavDropdown-module__button__PEHWX js-details-target\" aria-expanded=\"false\">Open Source<svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z\"></path></svg></button><div class=\"NavDropdown-module__dropdown__xm1jd\"><ul class=\"NavDropdown-module__list__zuCgG\"><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">COMMUNITY</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://github.com/sponsors\" data-analytics-event=\"{"action":"github_sponsors","tag":"link","context":"open_source","location":"navbar","label":"github_sponsors_link_open_source_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M16.004 1.25C18.311 1.25 20 3.128 20 5.75c0 2.292-1.23 4.464-3.295 6.485-.481.47-.98.909-1.482 1.31l.265 1.32 1.375 7.5a.75.75 0 0 1-.982.844l-3.512-1.207a.75.75 0 0 0-.488 0L8.37 23.209a.75.75 0 0 1-.982-.844l1.378-7.512.261-1.309c-.5-.4-1-.838-1.481-1.31C5.479 10.215 4.25 8.043 4.25 5.75c0-2.622 1.689-4.5 3.996-4.5 1.55 0 2.947.752 3.832 1.967l.047.067.047-.067a4.726 4.726 0 0 1 3.612-1.962l.22-.005ZM13.89 14.531c-.418.285-.828.542-1.218.77l-.18.103a.75.75 0 0 1-.734 0l-.071-.04-.46-.272c-.282-.173-.573-.36-.868-.562l-.121.605-1.145 6.239 2.3-.79a2.248 2.248 0 0 1 1.284-.054l.18.053 2.299.79-1.141-6.226-.125-.616ZM16.004 2.75c-1.464 0-2.731.983-3.159 2.459-.209.721-1.231.721-1.44 0-.428-1.476-1.695-2.459-3.16-2.459-1.44 0-2.495 1.173-2.495 3 0 1.811 1.039 3.647 2.844 5.412a19.624 19.624 0 0 0 3.734 2.84l-.019-.011-.184-.111.147-.088a19.81 19.81 0 0 0 3.015-2.278l.37-.352C17.46 9.397 18.5 7.561 18.5 5.75c0-1.827-1.055-3-2.496-3Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">GitHub Sponsors</span><span class=\"NavLink-module__subtitle__X4gkW\">Fund open source developers</span></div></a></li></ul></div></li><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">PROGRAMS</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://securitylab.github.com\" data-analytics-event=\"{"action":"security_lab","tag":"link","context":"open_source","location":"navbar","label":"security_lab_link_open_source_navbar"}\" class=\"NavLink-module__link__EG3d4\" target=\"_blank\" rel=\"noreferrer\"><span class=\"NavLink-module__title__Q7t0p\">Security Lab</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-link-external NavLink-module__externalIcon__eWIry\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z\"></path></svg></a></li><li><a href=\"https://maintainers.github.com\" data-analytics-event=\"{"action":"maintainer_community","tag":"link","context":"open_source","location":"navbar","label":"maintainer_community_link_open_source_navbar"}\" class=\"NavLink-module__link__EG3d4\" target=\"_blank\" rel=\"noreferrer\"><span class=\"NavLink-module__title__Q7t0p\">Maintainer Community</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-link-external NavLink-module__externalIcon__eWIry\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z\"></path></svg></a></li><li><a href=\"https://github.com/accelerator\" data-analytics-event=\"{"action":"accelerator","tag":"link","context":"open_source","location":"navbar","label":"accelerator_link_open_source_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Accelerator</span></a></li><li><a href=\"https://archiveprogram.github.com\" data-analytics-event=\"{"action":"archive_program","tag":"link","context":"open_source","location":"navbar","label":"archive_program_link_open_source_navbar"}\" class=\"NavLink-module__link__EG3d4\" target=\"_blank\" rel=\"noreferrer\"><span class=\"NavLink-module__title__Q7t0p\">Archive Program</span><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-link-external NavLink-module__externalIcon__eWIry\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z\"></path></svg></a></li></ul></div></li><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">REPOSITORIES</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://github.com/topics\" data-analytics-event=\"{"action":"topics","tag":"link","context":"open_source","location":"navbar","label":"topics_link_open_source_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Topics</span></a></li><li><a href=\"https://github.com/trending\" data-analytics-event=\"{"action":"trending","tag":"link","context":"open_source","location":"navbar","label":"trending_link_open_source_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Trending</span></a></li><li><a href=\"https://github.com/collections\" data-analytics-event=\"{"action":"collections","tag":"link","context":"open_source","location":"navbar","label":"collections_link_open_source_navbar"}\" class=\"NavLink-module__link__EG3d4\"><span class=\"NavLink-module__title__Q7t0p\">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class=\"NavDropdown-module__container__l2YeI js-details-container js-header-menu-item\"><button type=\"button\" class=\"NavDropdown-module__button__PEHWX js-details-target\" aria-expanded=\"false\">Enterprise<svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z\"></path></svg></button><div class=\"NavDropdown-module__dropdown__xm1jd\"><ul class=\"NavDropdown-module__list__zuCgG\"><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">ENTERPRISE SOLUTIONS</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://github.com/enterprise\" data-analytics-event=\"{"action":"enterprise_platform","tag":"link","context":"enterprise","location":"navbar","label":"enterprise_platform_link_enterprise_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-stack NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M11.063 1.456a1.749 1.749 0 0 1 1.874 0l8.383 5.316a1.751 1.751 0 0 1 0 2.956l-8.383 5.316a1.749 1.749 0 0 1-1.874 0L2.68 9.728a1.751 1.751 0 0 1 0-2.956Zm1.071 1.267a.25.25 0 0 0-.268 0L3.483 8.039a.25.25 0 0 0 0 .422l8.383 5.316a.25.25 0 0 0 .268 0l8.383-5.316a.25.25 0 0 0 0-.422Z\"></path><path d=\"M1.867 12.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z\"></path><path d=\"M1.867 16.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">Enterprise platform</span><span class=\"NavLink-module__subtitle__X4gkW\">AI-powered developer platform</span></div></a></li></ul></div></li><li><div class=\"NavGroup-module__group__W8SqJ\"><span class=\"NavGroup-module__title__Wzxz2\">AVAILABLE ADD-ONS</span><ul class=\"NavGroup-module__list__UCOFy\"><li><a href=\"https://github.com/security/advanced-security\" data-analytics-event=\"{"action":"github_advanced_security","tag":"link","context":"enterprise","location":"navbar","label":"github_advanced_security_link_enterprise_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-shield-check NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z\"></path><path d=\"m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">GitHub Advanced Security</span><span class=\"NavLink-module__subtitle__X4gkW\">Enterprise-grade security features</span></div></a></li><li><a href=\"https://github.com/features/copilot/copilot-business\" data-analytics-event=\"{"action":"copilot_for_business","tag":"link","context":"enterprise","location":"navbar","label":"copilot_for_business_link_enterprise_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-copilot NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z\"></path><path d=\"M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">Copilot for Business</span><span class=\"NavLink-module__subtitle__X4gkW\">Enterprise-grade AI features</span></div></a></li><li><a href=\"https://github.com/premium-support\" data-analytics-event=\"{"action":"premium_support","tag":"link","context":"enterprise","location":"navbar","label":"premium_support_link_enterprise_navbar"}\" class=\"NavLink-module__link__EG3d4\"><div class=\"NavLink-module__text__XvpLQ\"><svg aria-hidden=\"true\" focusable=\"false\" class=\"octicon octicon-comment-discussion NavLink-module__icon__ltGNM\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"currentColor\" display=\"inline-block\" overflow=\"visible\" style=\"vertical-align:text-bottom\"><path d=\"M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z\"></path><path d=\"M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z\"></path></svg><span class=\"NavLink-module__title__Q7t0p\">Premium Support</span><span class=\"NavLink-module__subtitle__X4gkW\">Enterprise-grade 24/7 support</span></div></a></li></ul></div></li></ul></div></div></li><li><a href=\"https://github.com/pricing\" data-analytics-event=\"{"action":"pricing","tag":"link","context":"pricing","location":"navbar","label":"pricing_link_pricing_navbar"}\" class=\"NavLink-module__link__EG3d4 MarketingNavigation-module__navLink__hUomM\"><span class=\"NavLink-module__title__Q7t0p\">Pricing</span></a></li></ul></nav><script type=\"application/json\" id=\"__PRIMER_DATA__R_0___\">{\"resolvedServerColorMode\":\"day\"}</script></div>\n</react-partial>\n\n\n\n <div class=\"d-flex flex-column flex-lg-row width-full flex-justify-end flex-lg-items-center text-center tmp-mt-3 tmp-mt-lg-0 text-lg-left tmp-ml-lg-3\">\n \n\n\n<qbsearch-input class=\"search-input\" data-scope=\"repo:tauri-apps/tauri\" data-custom-scopes-path=\"/search/custom_scopes\" data-delete-custom-scopes-csrf=\"Fbaupaa86GIBH1pEt2sj512ZmpR0dpTiyj4O7HvJDxQ4wsf6oK6Uts8DSQawyc0MCnymmxXjoMAR3xx2NIBMFA\" data-max-custom-scopes=\"10\" data-header-redesign-enabled=\"false\" data-initial-value=\"\" data-blackbird-suggestions-path=\"/search/suggestions\" data-jump-to-suggestions-path=\"/_graphql/GetSuggestedNavigationDestinations\" data-current-repository=\"tauri-apps/tauri\" data-current-org=\"tauri-apps\" data-current-owner=\"\" data-logged-in=\"false\" data-copilot-chat-enabled=\"false\" data-nl-search-enabled=\"false\" data-retain-scroll-position=\"true\">\n <div\n class=\"search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center tmp-mr-4 rounded\"\n data-action=\"click:qbsearch-input#searchInputContainerClicked\"\n >\n <button\n type=\"button\"\n class=\"header-search-button placeholder input-button form-control d-flex flex-1 flex-self-stretch flex-items-center no-wrap width-full py-0 pl-2 pr-0 text-left border-0 box-shadow-none\"\n data-target=\"qbsearch-input.inputButton\"\n aria-label=\"Search or jump to…\"\n aria-haspopup=\"dialog\"\n placeholder=\"Search or jump to...\"\n data-hotkey=s,/\n autocapitalize=\"off\"\n data-analytics-event=\"{"location":"navbar","action":"searchbar","context":"global","tag":"input","label":"searchbar_input_global_navbar"}\"\n data-action=\"click:qbsearch-input#handleExpand\"\n >\n <div class=\"mr-2 color-fg-muted\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-search\">\n <path d=\"M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z\"></path>\n</svg>\n </div>\n <span class=\"flex-1\" data-target=\"qbsearch-input.inputButtonText\">Search or jump to...</span>\n <div class=\"d-flex\" data-target=\"qbsearch-input.hotkeyIndicator\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"20\" aria-hidden=\"true\" class=\"mr-1\"><path fill=\"none\" stroke=\"#979A9C\" opacity=\".4\" d=\"M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z\"></path><path fill=\"#979A9C\" d=\"M11.8 6L8 15.1h-.9L10.8 6h1z\"></path></svg>\n </div>\n </button>\n\n <input type=\"hidden\" name=\"type\" class=\"js-site-search-type-field\">\n\n \n<div class=\"Overlay--hidden \" data-modal-dialog-overlay>\n <modal-dialog data-action=\"close:qbsearch-input#handleClose cancel:qbsearch-input#handleClose\" data-target=\"qbsearch-input.searchSuggestionsDialog\" role=\"dialog\" id=\"search-suggestions-dialog\" aria-modal=\"true\" aria-labelledby=\"search-suggestions-dialog-header\" data-view-component=\"true\" class=\"Overlay Overlay--width-large Overlay--height-auto\">\n <h1 id=\"search-suggestions-dialog-header\" class=\"sr-only\">Search code, repositories, users, issues, pull requests...</h1>\n <div class=\"Overlay-body Overlay-body--paddingNone\">\n \n <div data-view-component=\"true\"> <div class=\"search-suggestions position-fixed width-full color-shadow-large border color-fg-default color-bg-default overflow-hidden d-flex flex-column query-builder-container\"\n style=\"border-radius: 12px;\"\n data-target=\"qbsearch-input.queryBuilderContainer\"\n hidden\n >\n <!-- '\"` --><!-- </textarea></xmp> --></option></form><form id=\"query-builder-test-form\" action=\"\" accept-charset=\"UTF-8\" method=\"get\">\n <query-builder data-target=\"qbsearch-input.queryBuilder\" id=\"query-builder-query-builder-test\" data-filter-key=\":\" data-view-component=\"true\" class=\"QueryBuilder search-query-builder\">\n <div class=\"FormControl FormControl--fullWidth\">\n <label id=\"query-builder-test-label\" for=\"query-builder-test\" class=\"FormControl-label sr-only\">\n Search\n </label>\n <div\n class=\"QueryBuilder-StyledInput width-fit \"\n data-target=\"query-builder.styledInput\"\n >\n <span id=\"query-builder-test-leadingvisual-wrap\" class=\"FormControl-input-leadingVisualWrap QueryBuilder-leadingVisualWrap\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-search FormControl-input-leadingVisual\">\n <path d=\"M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z\"></path>\n</svg>\n </span>\n <div data-target=\"query-builder.styledInputContainer\" class=\"QueryBuilder-StyledInputContainer\">\n <div\n aria-hidden=\"true\"\n class=\"QueryBuilder-StyledInputContent\"\n data-target=\"query-builder.styledInputContent\"\n ></div>\n <div class=\"QueryBuilder-InputWrapper\">\n <div aria-hidden=\"true\" class=\"QueryBuilder-Sizer\" data-target=\"query-builder.sizer\"></div>\n <input id=\"query-builder-test\" name=\"query-builder-test\" value=\"\" autocomplete=\"off\" type=\"text\" role=\"combobox\" spellcheck=\"false\" aria-expanded=\"false\" aria-describedby=\"validation-8efabf83-7012-4df5-9fac-7c1c88a75d03\" data-target=\"query-builder.input\" data-action=\"\n input:query-builder#inputChange\n blur:query-builder#inputBlur\n keydown:query-builder#inputKeydown\n focus:query-builder#inputFocus\n \" data-view-component=\"true\" class=\"FormControl-input QueryBuilder-Input FormControl-medium\" />\n </div>\n </div>\n <span data-target=\"query-builder.clearButton\" hidden>\n <span class=\"sr-only\" id=\"query-builder-test-clear\">Clear</span>\n <button role=\"button\" id=\"query-builder-test-clear-button\" aria-labelledby=\"query-builder-test-clear query-builder-test-label\" data-action=\"\n click:query-builder#clear\n focus:query-builder#clearButtonFocus\n blur:query-builder#clearButtonBlur\n \" variant=\"small\" type=\"button\" data-view-component=\"true\" class=\"Button Button--iconOnly Button--invisible Button--medium mr-1 px-2 py-0 d-flex flex-items-center rounded-1 color-fg-muted\"> <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-x-circle-fill Button-visual\">\n <path d=\"M2.343 13.657A8 8 0 1 1 13.658 2.343 8 8 0 0 1 2.343 13.657ZM6.03 4.97a.751.751 0 0 0-1.042.018.751.751 0 0 0-.018 1.042L6.94 8 4.97 9.97a.749.749 0 0 0 .326 1.275.749.749 0 0 0 .734-.215L8 9.06l1.97 1.97a.749.749 0 0 0 1.275-.326.749.749 0 0 0-.215-.734L9.06 8l1.97-1.97a.749.749 0 0 0-.326-1.275.749.749 0 0 0-.734.215L8 6.94Z\"></path>\n</svg>\n</button>\n\n </span>\n </div>\n <template id=\"search-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-search\">\n <path d=\"M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z\"></path>\n</svg>\n</template>\n\n<template id=\"code-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-code\">\n <path d=\"m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z\"></path>\n</svg>\n</template>\n\n<template id=\"file-code-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-file-code\">\n <path d=\"M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z\"></path>\n</svg>\n</template>\n\n<template id=\"history-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-history\">\n <path d=\"m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z\"></path>\n</svg>\n</template>\n\n<template id=\"repo-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-repo\">\n <path d=\"M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z\"></path>\n</svg>\n</template>\n\n<template id=\"bookmark-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-bookmark\">\n <path d=\"M3 2.75C3 1.784 3.784 1 4.75 1h6.5c.966 0 1.75.784 1.75 1.75v11.5a.75.75 0 0 1-1.227.579L8 11.722l-3.773 3.107A.751.751 0 0 1 3 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.91l3.023-2.489a.75.75 0 0 1 .954 0l3.023 2.49V2.75a.25.25 0 0 0-.25-.25Z\"></path>\n</svg>\n</template>\n\n<template id=\"plus-circle-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-plus-circle\">\n <path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm7.25-3.25v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5a.75.75 0 0 1 1.5 0Z\"></path>\n</svg>\n</template>\n\n<template id=\"circle-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-dot-fill\">\n <path d=\"M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z\"></path>\n</svg>\n</template>\n\n<template id=\"trash-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-trash\">\n <path d=\"M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z\"></path>\n</svg>\n</template>\n\n<template id=\"team-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-people\">\n <path d=\"M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z\"></path>\n</svg>\n</template>\n\n<template id=\"project-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-project\">\n <path d=\"M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z\"></path>\n</svg>\n</template>\n\n<template id=\"pencil-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-pencil\">\n <path d=\"M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z\"></path>\n</svg>\n</template>\n\n<template id=\"copilot-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-copilot\">\n <path d=\"M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z\"></path><path d=\"M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z\"></path>\n</svg>\n</template>\n\n<template id=\"copilot-error-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-copilot-error\">\n <path d=\"M16 11.24c0 .112-.072.274-.21.467L13 9.688V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-.198 0-.388-.009-.571-.029L6.833 5.226a4.01 4.01 0 0 0 .17-.782c.117-.935-.037-1.395-.241-1.614-.193-.206-.637-.413-1.682-.297-.683.076-1.115.231-1.395.415l-1.257-.91c.579-.564 1.413-.877 2.485-.996 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095Zm-5.083-8.707c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Zm2.511 11.074c-1.393.776-3.272 1.428-5.43 1.428-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.18-.455-.241-.963-.252-1.475L.31 4.107A.747.747 0 0 1 0 3.509V3.49a.748.748 0 0 1 .625-.73c.156-.026.306.047.435.139l14.667 10.578a.592.592 0 0 1 .227.264.752.752 0 0 1 .046.249v.022a.75.75 0 0 1-1.19.596Zm-1.367-.991L5.635 7.964a5.128 5.128 0 0 1-.889.073c-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433 1.539 0 3.089-.505 4.063-.934Z\"></path>\n</svg>\n</template>\n\n<template id=\"workflow-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-workflow\">\n <path d=\"M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z\"></path>\n</svg>\n</template>\n\n<template id=\"book-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-book\">\n <path d=\"M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z\"></path>\n</svg>\n</template>\n\n<template id=\"code-review-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-code-review\">\n <path d=\"M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 13H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25v-8.5C0 1.784.784 1 1.75 1ZM1.5 2.75v8.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm5.28 1.72a.75.75 0 0 1 0 1.06L5.31 7l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.75.75 0 0 1 1.06 0Zm2.44 0a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L10.69 7 9.22 5.53a.75.75 0 0 1 0-1.06Z\"></path>\n</svg>\n</template>\n\n<template id=\"codespaces-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-codespaces\">\n <path d=\"M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z\"></path><path d=\"M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z\"></path>\n</svg>\n</template>\n\n<template id=\"comment-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-comment\">\n <path d=\"M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path>\n</svg>\n</template>\n\n<template id=\"comment-discussion-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-comment-discussion\">\n <path d=\"M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z\"></path>\n</svg>\n</template>\n\n<template id=\"organization-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-organization\">\n <path d=\"M1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.749.749 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.766.766 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75Zm-.25-1.75c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM3.75 6h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75Zm4 3A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75ZM7.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75ZM7.75 9h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z\"></path>\n</svg>\n</template>\n\n<template id=\"rocket-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-rocket\">\n <path d=\"M14.064 0h.186C15.216 0 16 .784 16 1.75v.186a8.752 8.752 0 0 1-2.564 6.186l-.458.459c-.314.314-.641.616-.979.904v3.207c0 .608-.315 1.172-.833 1.49l-2.774 1.707a.749.749 0 0 1-1.11-.418l-.954-3.102a1.214 1.214 0 0 1-.145-.125L3.754 9.816a1.218 1.218 0 0 1-.124-.145L.528 8.717a.749.749 0 0 1-.418-1.11l1.71-2.774A1.748 1.748 0 0 1 3.31 4h3.204c.288-.338.59-.665.904-.979l.459-.458A8.749 8.749 0 0 1 14.064 0ZM8.938 3.623h-.002l-.458.458c-.76.76-1.437 1.598-2.02 2.5l-1.5 2.317 2.143 2.143 2.317-1.5c.902-.583 1.74-1.26 2.499-2.02l.459-.458a7.25 7.25 0 0 0 2.123-5.127V1.75a.25.25 0 0 0-.25-.25h-.186a7.249 7.249 0 0 0-5.125 2.123ZM3.56 14.56c-.732.732-2.334 1.045-3.005 1.148a.234.234 0 0 1-.201-.064.234.234 0 0 1-.064-.201c.103-.671.416-2.273 1.15-3.003a1.502 1.502 0 1 1 2.12 2.12Zm6.94-3.935c-.088.06-.177.118-.266.175l-2.35 1.521.548 1.783 1.949-1.2a.25.25 0 0 0 .119-.213ZM3.678 8.116 5.2 5.766c.058-.09.117-.178.176-.266H3.309a.25.25 0 0 0-.213.119l-1.2 1.95ZM12 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"></path>\n</svg>\n</template>\n\n<template id=\"shield-check-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-shield-check\">\n <path d=\"m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z\"></path>\n</svg>\n</template>\n\n<template id=\"heart-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-heart\">\n <path d=\"m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z\"></path>\n</svg>\n</template>\n\n<template id=\"server-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-server\">\n <path d=\"M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v4c0 .372-.116.717-.314 1 .198.283.314.628.314 1v4a1.75 1.75 0 0 1-1.75 1.75H1.75A1.75 1.75 0 0 1 0 12.75v-4c0-.358.109-.707.314-1a1.739 1.739 0 0 1-.314-1v-4C0 1.784.784 1 1.75 1ZM1.5 2.75v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm.25 5.75a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25ZM7 4.75A.75.75 0 0 1 7.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5A.75.75 0 0 1 7 4.75ZM7.75 10h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM3 4.75A.75.75 0 0 1 3.75 4h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 4.75ZM3.75 10h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z\"></path>\n</svg>\n</template>\n\n<template id=\"globe-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-globe\">\n <path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z\"></path>\n</svg>\n</template>\n\n<template id=\"issue-opened-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-issue-opened\">\n <path d=\"M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z\"></path><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z\"></path>\n</svg>\n</template>\n\n<template id=\"device-mobile-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-device-mobile\">\n <path d=\"M3.75 0h8.5C13.216 0 14 .784 14 1.75v12.5A1.75 1.75 0 0 1 12.25 16h-8.5A1.75 1.75 0 0 1 2 14.25V1.75C2 .784 2.784 0 3.75 0ZM3.5 1.75v12.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM8 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z\"></path>\n</svg>\n</template>\n\n<template id=\"package-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-package\">\n <path d=\"m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z\"></path>\n</svg>\n</template>\n\n<template id=\"credit-card-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-credit-card\">\n <path d=\"M10.75 9a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z\"></path><path d=\"M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25ZM14.5 6.5h-13v5.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Zm0-2.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25V5h13Z\"></path>\n</svg>\n</template>\n\n<template id=\"play-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-play\">\n <path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z\"></path>\n</svg>\n</template>\n\n<template id=\"gift-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-gift\">\n <path d=\"M2 2.75A2.75 2.75 0 0 1 4.75 0c.983 0 1.873.42 2.57 1.232.268.318.497.668.68 1.042.183-.375.411-.725.68-1.044C9.376.42 10.266 0 11.25 0a2.75 2.75 0 0 1 2.45 4h.55c.966 0 1.75.784 1.75 1.75v2c0 .698-.409 1.301-1 1.582v4.918A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25V9.332C.409 9.05 0 8.448 0 7.75v-2C0 4.784.784 4 1.75 4h.55c-.192-.375-.3-.8-.3-1.25ZM7.25 9.5H2.5v4.75c0 .138.112.25.25.25h4.5Zm1.5 0v5h4.5a.25.25 0 0 0 .25-.25V9.5Zm0-4V8h5.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25Zm-7 0a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h5.5V5.5h-5.5Zm3-4a1.25 1.25 0 0 0 0 2.5h2.309c-.233-.818-.542-1.401-.878-1.793-.43-.502-.915-.707-1.431-.707ZM8.941 4h2.309a1.25 1.25 0 0 0 0-2.5c-.516 0-1 .205-1.43.707-.337.392-.646.975-.879 1.793Z\"></path>\n</svg>\n</template>\n\n<template id=\"code-square-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-code-square\">\n <path d=\"M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z\"></path>\n</svg>\n</template>\n\n<template id=\"device-desktop-icon\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-device-desktop\">\n <path d=\"M14.25 1c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 14.25 12h-3.727c.099 1.041.52 1.872 1.292 2.757A.752.752 0 0 1 11.25 16h-6.5a.75.75 0 0 1-.565-1.243c.772-.885 1.192-1.716 1.292-2.757H1.75A1.75 1.75 0 0 1 0 10.25v-7.5C0 1.784.784 1 1.75 1ZM1.75 2.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25ZM9.018 12H6.982a5.72 5.72 0 0 1-.765 2.5h3.566a5.72 5.72 0 0 1-.765-2.5Z\"></path>\n</svg>\n</template>\n\n <div class=\"position-relative\">\n <ul\n role=\"listbox\"\n class=\"ActionListWrap QueryBuilder-ListWrap\"\n aria-label=\"Suggestions\"\n data-action=\"\n combobox-commit:query-builder#comboboxCommit\n mousedown:query-builder#resultsMousedown\n \"\n data-target=\"query-builder.resultsList\"\n data-persist-list=false\n id=\"query-builder-test-results\"\n tabindex=\"-1\"\n ></ul>\n\n </div>\n <div class=\"FormControl-inlineValidation\" id=\"validation-8efabf83-7012-4df5-9fac-7c1c88a75d03\" hidden=\"hidden\">\n <span class=\"FormControl-inlineValidation--visual\">\n <svg aria-hidden=\"true\" height=\"12\" viewBox=\"0 0 12 12\" version=\"1.1\" width=\"12\" data-view-component=\"true\" class=\"octicon octicon-alert-fill\">\n <path d=\"M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"></path>\n</svg>\n </span>\n <span></span>\n</div> </div>\n <div data-target=\"query-builder.screenReaderFeedback\" aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\"></div>\n</query-builder></form>\n <div class=\"d-flex flex-row color-fg-muted tmp-px-3 text-small color-bg-default search-feedback-prompt\">\n <a target=\"_blank\" href=\"https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax\" data-view-component=\"true\" class=\"Link color-fg-accent text-normal ml-2\">Search syntax tips</a> <div class=\"d-flex flex-1\"></div>\n </div>\n </div>\n</div>\n\n </div>\n</modal-dialog></div>\n </div>\n <div data-action=\"click:qbsearch-input#retract\" class=\"dark-backdrop position-fixed\" hidden data-target=\"qbsearch-input.darkBackdrop\"></div>\n <div class=\"color-fg-default\">\n \n<dialog-helper>\n <dialog data-target=\"qbsearch-input.feedbackDialog\" data-action=\"close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose\" id=\"feedback-dialog\" aria-modal=\"true\" aria-labelledby=\"feedback-dialog-title\" aria-describedby=\"feedback-dialog-description\" data-view-component=\"true\" class=\"Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll\">\n <div data-view-component=\"true\" class=\"Overlay-header\">\n <div class=\"Overlay-headerContentWrap\">\n <div class=\"Overlay-titleWrap\">\n <h1 class=\"Overlay-title \" id=\"feedback-dialog-title\">\n Provide feedback\n </h1>\n \n </div>\n <div class=\"Overlay-actionWrap\">\n <button data-close-dialog-id=\"feedback-dialog\" aria-label=\"Close\" aria-label=\"Close\" type=\"button\" data-view-component=\"true\" class=\"close-button Overlay-closeButton\"><svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-x\">\n <path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path>\n</svg></button>\n </div>\n </div>\n \n</div>\n <scrollable-region data-labelled-by=\"feedback-dialog-title\">\n <div data-view-component=\"true\" class=\"Overlay-body\"> <!-- '\"` --><!-- </textarea></xmp> --></option></form><form id=\"code-search-feedback-form\" data-turbo=\"false\" action=\"/search/feedback\" accept-charset=\"UTF-8\" method=\"post\"><input type=\"hidden\" data-csrf=\"true\" name=\"authenticity_token\" value=\"Ik1s+Ak7Ozw+7ra5niH/Lgu60J1QsUnE80AT8UAGJRKUaW8uSpDW6V2qawsgi0f1ns9rVKnoUZGPnvyUtFmwLw==\" />\n <p>We read every piece of feedback, and take your input very seriously.</p>\n <textarea name=\"feedback\" class=\"form-control width-full mb-2\" style=\"height: 120px\" id=\"feedback\"></textarea>\n <input name=\"include_email\" id=\"include_email\" aria-label=\"Include my email address so I can be contacted\" class=\"form-control mr-2\" type=\"checkbox\">\n <label for=\"include_email\" style=\"font-weight: normal\">Include my email address so I can be contacted</label>\n</form></div>\n </scrollable-region>\n <div data-view-component=\"true\" class=\"Overlay-footer Overlay-footer--alignEnd\"> <button data-close-dialog-id=\"feedback-dialog\" type=\"button\" data-view-component=\"true\" class=\"btn\"> Cancel\n</button>\n <button form=\"code-search-feedback-form\" data-action=\"click:qbsearch-input#submitFeedback\" type=\"submit\" data-view-component=\"true\" class=\"btn-primary btn\"> Submit feedback\n</button>\n</div>\n</dialog></dialog-helper>\n\n <custom-scopes data-target=\"qbsearch-input.customScopesManager\">\n \n<dialog-helper>\n <dialog data-target=\"custom-scopes.customScopesModalDialog\" data-action=\"close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose\" id=\"custom-scopes-dialog\" aria-modal=\"true\" aria-labelledby=\"custom-scopes-dialog-title\" aria-describedby=\"custom-scopes-dialog-description\" data-view-component=\"true\" class=\"Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll\">\n <div data-view-component=\"true\" class=\"Overlay-header Overlay-header--divided\">\n <div class=\"Overlay-headerContentWrap\">\n <div class=\"Overlay-titleWrap\">\n <h1 class=\"Overlay-title \" id=\"custom-scopes-dialog-title\">\n Saved searches\n </h1>\n <h2 id=\"custom-scopes-dialog-description\" class=\"Overlay-description\">Use saved searches to filter your results more quickly</h2>\n </div>\n <div class=\"Overlay-actionWrap\">\n <button data-close-dialog-id=\"custom-scopes-dialog\" aria-label=\"Close\" aria-label=\"Close\" type=\"button\" data-view-component=\"true\" class=\"close-button Overlay-closeButton\"><svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-x\">\n <path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path>\n</svg></button>\n </div>\n </div>\n \n</div>\n <scrollable-region data-labelled-by=\"custom-scopes-dialog-title\">\n <div data-view-component=\"true\" class=\"Overlay-body\"> <div data-target=\"custom-scopes.customScopesModalDialogFlash\"></div>\n\n <div hidden class=\"create-custom-scope-form\" data-target=\"custom-scopes.createCustomScopeForm\">\n <!-- '\"` --><!-- </textarea></xmp> --></option></form><form id=\"custom-scopes-dialog-form\" data-turbo=\"false\" action=\"/search/custom_scopes\" accept-charset=\"UTF-8\" method=\"post\"><input type=\"hidden\" data-csrf=\"true\" name=\"authenticity_token\" value=\"CmBPbkhlSYJYm9PfXakaG+yfPdzUKGlyBV08S8HIQsrnfrBw9U+2dJRVuN7QM3xX2AINSh0i6sD2ZMbGzssPOg==\" />\n <div data-target=\"custom-scopes.customScopesModalDialogFlash\"></div>\n\n <input type=\"hidden\" id=\"custom_scope_id\" name=\"custom_scope_id\" data-target=\"custom-scopes.customScopesIdField\">\n\n <div class=\"form-group\">\n <label for=\"custom_scope_name\">Name</label>\n <auto-check src=\"/search/custom_scopes/check_name\" required>\n <input\n type=\"text\"\n name=\"custom_scope_name\"\n id=\"custom_scope_name\"\n data-target=\"custom-scopes.customScopesNameField\"\n class=\"form-control\"\n autocomplete=\"off\"\n placeholder=\"github-ruby\"\n required\n maxlength=\"50\">\n <input type=\"hidden\" data-csrf=\"true\" value=\"uqMn5ujr25IxrMa6Q0BovyoKk0ViyS7OwEOfttaEL4celUydw8l9zFg0LjLmycs7m9Z4IUv4Y/bcTLcBcCTlNw==\" />\n </auto-check>\n </div>\n\n <div class=\"form-group\">\n <label for=\"custom_scope_query\">Query</label>\n <input\n type=\"text\"\n name=\"custom_scope_query\"\n id=\"custom_scope_query\"\n data-target=\"custom-scopes.customScopesQueryField\"\n class=\"form-control\"\n autocomplete=\"off\"\n placeholder=\"(repo:mona/a OR repo:mona/b) AND lang:python\"\n required\n maxlength=\"500\">\n </div>\n\n <p class=\"text-small color-fg-muted\">\n To see all available qualifiers, see our <a class=\"Link--inTextBlock\" href=\"https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax\">documentation</a>.\n </p>\n</form> </div>\n\n <div data-target=\"custom-scopes.manageCustomScopesForm\">\n <div data-target=\"custom-scopes.list\"></div>\n </div>\n\n</div>\n </scrollable-region>\n <div data-view-component=\"true\" class=\"Overlay-footer Overlay-footer--alignEnd Overlay-footer--divided\"> <button data-action=\"click:custom-scopes#customScopesCancel\" type=\"button\" data-view-component=\"true\" class=\"btn\"> Cancel\n</button>\n <button form=\"custom-scopes-dialog-form\" data-action=\"click:custom-scopes#customScopesSubmit\" data-target=\"custom-scopes.customScopesSubmitButton\" type=\"submit\" data-view-component=\"true\" class=\"btn-primary btn\"> Create saved search\n</button>\n</div>\n</dialog></dialog-helper>\n </custom-scopes>\n </div>\n</qbsearch-input>\n\n\n <div class=\"position-relative HeaderMenu-link-wrap d-lg-inline-block\">\n <a\n href=\"/login?return_to=https%3A%2F%2Fgithub.com%2Ftauri-apps%2Ftauri%2Fblob%2Fdev%2Ftooling%2Fcli%2Fsrc%2Fmobile%2Fios%2Fproject.rs\"\n class=\"HeaderMenu-link HeaderMenu-link--sign-in HeaderMenu-button flex-shrink-0 no-underline d-none d-lg-inline-flex border border-lg-0 rounded px-2 py-1\"\n style=\"margin-left: 12px;\"\n data-hydro-click=\"{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/tauri-apps/tauri/blob/dev/tooling/cli/src/mobile/ios/project.rs","user_id":null}}\" data-hydro-click-hmac=\"ddf07a1e41b574cc8ef57b9d6fa8697d4c92c6391dce20227bf7e5b794599843\"\n data-analytics-event=\"{"category":"Marketing nav","action":"click to go to homepage","label":"ref_page:Marketing;ref_cta:Sign in;ref_loc:Header"}\"\n >\n Sign in\n </a>\n <div style=\"right: -30%; background-color: transparent; border: none\" data-view-component=\"true\" class=\"auth-form-body Popover position-absolute d-none d-sm-none d-md-none d-lg-block\">\n <div style=\"width: 300px\" data-view-component=\"true\" class=\"Popover-message Box Popover-message--top-right color-fg-default p-4 mt-2 mx-auto text-left\">\n <h4 data-view-component=\"true\" class=\"color-fg-default mb-2\"> Sign in to GitHub\n</h4>\n \n<!-- '\"` --><!-- </textarea></xmp> --></option></form><form data-turbo=\"false\" action=\"/session\" accept-charset=\"UTF-8\" method=\"post\"><input type=\"hidden\" data-csrf=\"true\" name=\"authenticity_token\" value=\"r7v7tyUAajEtOzQfQJu6sc9gzM2E0GzmN836Z5KTdC3xTWjTfAm/OzW4pzEUXE3Oi0aFhOE1t79OUZngoMUqMA==\" /> <input type=\"hidden\" name=\"add_account\" id=\"add_account\" autocomplete=\"off\" class=\"form-control\" />\n\n <label for=\"login_field\">\n Username or email address\n </label>\n <input type=\"text\" name=\"login\" id=\"login_field\" class=\"form-control input-block js-login-field\" autocapitalize=\"off\" autocorrect=\"off\" autocomplete=\"username\" autofocus=\"autofocus\" required=\"required\" />\n\n <div class=\"position-relative\">\n <label for=\"password\">\n Password\n </label>\n <input type=\"password\" name=\"password\" id=\"password\" class=\"form-control form-control input-block js-password-field\" autocomplete=\"current-password\" required=\"required\" />\n <a class=\"label-link position-absolute top-0 right-0\" id=\"forgot-password\" href=\"/password_reset\">Forgot password?</a>\n \n<input type=\"hidden\" name=\"webauthn-conditional\" value=\"undefined\">\n<input type=\"hidden\" class=\"js-support\" name=\"javascript-support\" value=\"unknown\">\n<input type=\"hidden\" class=\"js-webauthn-support\" name=\"webauthn-support\" value=\"unknown\">\n<input type=\"hidden\" class=\"js-webauthn-iuvpaa-support\" name=\"webauthn-iuvpaa-support\" value=\"unknown\">\n<input type=\"hidden\" name=\"return_to\" id=\"return_to\" value=\"https://github.com/tauri-apps/tauri/blob/dev/tooling/cli/src/mobile/ios/project.rs\" autocomplete=\"off\" class=\"form-control\" />\n<input type=\"hidden\" name=\"allow_signup\" id=\"allow_signup\" autocomplete=\"off\" class=\"form-control\" />\n<input type=\"hidden\" name=\"client_id\" id=\"client_id\" autocomplete=\"off\" class=\"form-control\" />\n<input type=\"hidden\" name=\"integration\" id=\"integration\" autocomplete=\"off\" class=\"form-control\" />\n<input class=\"form-control\" type=\"text\" name=\"required_field_1f96\" hidden=\"hidden\" />\n<input class=\"form-control\" type=\"hidden\" name=\"timestamp\" value=\"1772362419938\" />\n<input class=\"form-control\" type=\"hidden\" name=\"timestamp_secret\" value=\"c3ff785808f0113598724f89e2d5408ff171cf32147caa7095fb1f2ae17792f3\" />\n\n\n <input type=\"submit\" name=\"commit\" value=\"Sign in\" class=\"btn btn-primary btn-block js-sign-in-button\" data-disable-with=\"Signing in…\" data-signin-label=\"Sign in\" data-sso-label=\"Sign in with your identity provider\" development=\"false\" disable-emu-sso=\"false\" />\n </div>\n</form> <webauthn-status class=\"js-webauthn-login-emu-control\">\n <div data-target=\"webauthn-status.partial\" class=\"d-flex flex-justify-between flex-column tmp-mt-3 mb-0\" hidden>\n <a href=\"/login?return_to=https%3A%2F%2Fgithub.com%2Ftauri-apps%2Ftauri%2Fblob%2Fdev%2Ftooling%2Fcli%2Fsrc%2Fmobile%2Fios%2Fproject.rs\" data-analytics-event=\"{"category":"passkey_404_login","action":"clicked","label":null}\" data-view-component=\"true\" class=\"Button--link Button--medium Button\"> <span class=\"Button-content\">\n <span class=\"Button-label\">or continue with other methods</span>\n </span>\n</a>\n </div>\n </webauthn-status>\n\n\n</div></div> </div>\n\n <a href=\"/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&source=header-repo&source_repo=tauri-apps%2Ftauri\"\n class=\"HeaderMenu-link HeaderMenu-link--sign-up HeaderMenu-button flex-shrink-0 d-flex d-lg-inline-flex no-underline border color-border-default rounded px-2 py-1\"\n data-hydro-click=\"{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/tauri-apps/tauri/blob/dev/tooling/cli/src/mobile/ios/project.rs","user_id":null}}\" data-hydro-click-hmac=\"ddf07a1e41b574cc8ef57b9d6fa8697d4c92c6391dce20227bf7e5b794599843\"\n data-analytics-event=\"{"category":"Sign up","action":"click to sign up for account","label":"ref_page:/<user-name>/<repo-name>/blob/show;ref_cta:Sign up;ref_loc:header logged out"}\"\n >\n Sign up\n </a>\n\n <div class=\"AppHeader-appearanceSettings\">\n <react-partial-anchor>\n <button data-target=\"react-partial-anchor.anchor\" id=\"icon-button-f9865121-0ea1-44d7-9567-439df1216dbd\" aria-labelledby=\"tooltip-b20ff87b-b836-422d-bc3e-b677db0c9e9d\" type=\"button\" disabled=\"disabled\" data-view-component=\"true\" class=\"Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait\"> <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-sliders Button-visual\">\n <path d=\"M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z\"></path>\n</svg>\n</button><tool-tip id=\"tooltip-b20ff87b-b836-422d-bc3e-b677db0c9e9d\" for=\"icon-button-f9865121-0ea1-44d7-9567-439df1216dbd\" popover=\"manual\" data-direction=\"s\" data-type=\"label\" data-view-component=\"true\" class=\"sr-only position-absolute\">Appearance settings</tool-tip>\n\n <template data-target=\"react-partial-anchor.template\">\n <link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/primer-react-css.472b5991857bf128.module.css\" />\n<link crossorigin=\"anonymous\" media=\"all\" rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/appearance-settings.2fbde1012bed47de.module.css\" />\n\n<react-partial\n partial-name=\"appearance-settings\"\n data-ssr=\"false\"\n data-attempted-ssr=\"false\"\n data-react-profiling=\"true\"\n>\n \n <script type=\"application/json\" data-target=\"react-partial.embeddedData\">{\"props\":{}}</script>\n <div data-target=\"react-partial.reactRoot\"></div>\n</react-partial>\n\n\n </template>\n </react-partial-anchor>\n </div>\n\n <button type=\"button\" class=\"sr-only js-header-menu-focus-trap d-block d-lg-none\">Resetting focus</button>\n </div>\n </div>\n </div>\n </div>\n</header>\n\n <div hidden=\"hidden\" data-view-component=\"true\" class=\"js-stale-session-flash stale-session-flash flash flash-warn flash-full\">\n \n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"></path>\n</svg>\n <span class=\"js-stale-session-flash-signed-in\" hidden>You signed in with another tab or window. <a class=\"Link--inTextBlock\" href=\"\">Reload</a> to refresh your session.</span>\n <span class=\"js-stale-session-flash-signed-out\" hidden>You signed out in another tab or window. <a class=\"Link--inTextBlock\" href=\"\">Reload</a> to refresh your session.</span>\n <span class=\"js-stale-session-flash-switched\" hidden>You switched accounts on another tab or window. <a class=\"Link--inTextBlock\" href=\"\">Reload</a> to refresh your session.</span>\n\n <button id=\"icon-button-80e09675-3491-47c1-a7d1-0506576cec21\" aria-labelledby=\"tooltip-deae4dd6-65fd-46ef-9714-13d64d54b883\" type=\"button\" data-view-component=\"true\" class=\"Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close\"> <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-x Button-visual\">\n <path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path>\n</svg>\n</button><tool-tip id=\"tooltip-deae4dd6-65fd-46ef-9714-13d64d54b883\" for=\"icon-button-80e09675-3491-47c1-a7d1-0506576cec21\" popover=\"manual\" data-direction=\"s\" data-type=\"label\" data-view-component=\"true\" class=\"sr-only position-absolute\">Dismiss alert</tool-tip>\n\n\n \n</div>\n </div>\n\n <div id=\"start-of-content\" class=\"show-on-focus\"></div>\n\n\n\n\n\n\n\n\n <div id=\"js-flash-container\" class=\"flash-container\" data-turbo-replace>\n\n\n\n\n <template class=\"js-flash-template\">\n \n<div class=\"flash flash-full {{ className }}\">\n <div >\n <button autofocus class=\"flash-close js-flash-close\" type=\"button\" aria-label=\"Dismiss this message\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-x\">\n <path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path>\n</svg>\n </button>\n <div aria-atomic=\"true\" role=\"alert\" class=\"js-flash-alert\">\n \n <div>{{ message }}</div>\n\n </div>\n </div>\n</div>\n </template>\n</div>\n\n\n \n\n\n\n\n\n\n <div\n class=\"application-main \"\n data-commit-hovercards-enabled\n data-discussion-hovercards-enabled\n data-issue-and-pr-hovercards-enabled\n data-project-hovercards-enabled\n >\n <div itemscope itemtype=\"http://schema.org/SoftwareSourceCode\" class=\"\">\n <main id=\"js-repo-pjax-container\" >\n \n \n \n\n \n\n\n\n\n\n\n \n\n <div id=\"repository-container-header\" class=\"tmp-pt-3 hide-full-screen\" style=\"background-color: var(--page-header-bgColor, var(--color-page-header-bg));\" data-turbo-replace>\n\n <div class=\"d-flex flex-nowrap flex-justify-end tmp-mb-3 tmp-px-3 tmp-px-lg-5\" style=\"gap: 1rem;\">\n\n <div class=\"flex-auto min-width-0 width-fit\">\n \n <div class=\" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-repo color-fg-muted mr-2\">\n <path d=\"M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z\"></path>\n</svg>\n \n <span class=\"author flex-self-stretch\" itemprop=\"author\">\n <a class=\"url fn\" rel=\"author\" data-hovercard-type=\"organization\" data-hovercard-url=\"/orgs/tauri-apps/hovercard\" data-octo-click=\"hovercard-link-click\" data-octo-dimensions=\"link_type:self\" href=\"/tauri-apps\">\n tauri-apps\n</a> </span>\n <span class=\"mx-1 flex-self-stretch color-fg-muted\">/</span>\n <strong itemprop=\"name\" class=\"mr-2 flex-self-stretch\">\n <a data-pjax=\"#repo-content-pjax-container\" data-turbo-frame=\"repo-content-turbo-frame\" href=\"/tauri-apps/tauri\">tauri</a>\n </strong>\n\n <span></span><span class=\"Label Label--secondary v-align-middle mr-1\">Public</span>\n </div>\n\n\n </div>\n\n <div id=\"repository-details-container\" class=\"flex-shrink-0\" data-turbo-replace style=\"max-width: 70%;\">\n <ul class=\"pagehead-actions flex-shrink-0 d-none d-md-inline\" style=\"padding: 2px 0;\">\n \n <li>\n <include-fragment src=\"/tauri-apps/tauri/sponsor_button\" data-nonce=\"v2:bec0c7a3-3733-a357-774a-f5609869df85\" data-view-component=\"true\">\n \n <div data-show-on-forbidden-error hidden>\n <div class=\"Box\">\n <div class=\"blankslate-container\">\n <div data-view-component=\"true\" class=\"blankslate blankslate-spacious color-bg-default rounded-2\">\n \n\n <h3 data-view-component=\"true\" class=\"blankslate-heading\"> Uh oh!\n</h3>\n <p data-view-component=\"true\" class=\"blankslate-description\"> <p class=\"color-fg-muted my-2 mb-2 ws-normal\">There was an error while loading. <a class=\"Link--inTextBlock\" data-turbo=\"false\" href=\"\" aria-label=\"Please reload this page\">Please reload this page</a>.</p>\n</p>\n\n</div> </div>\n</div> </div>\n</include-fragment>\n </li>\n\n \n\n <li>\n <a href=\"/login?return_to=%2Ftauri-apps%2Ftauri\" rel=\"nofollow\" id=\"repository-details-watch-button\" data-hydro-click=\"{"event_type":"authentication.click","payload":{"location_in_page":"notification subscription menu watch","repository_id":null,"auth_type":"LOG_IN","originating_url":"https://github.com/tauri-apps/tauri/blob/dev/tooling/cli/src/mobile/ios/project.rs","user_id":null}}\" data-hydro-click-hmac=\"a67104f174d5c4560a31b9c786b52e8b41b7660491e622d67207404525174739\" aria-label=\"You must be signed in to change notification settings\" data-view-component=\"true\" class=\"btn-sm btn\"> <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-bell mr-2\">\n <path d=\"M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z\"></path>\n</svg>Notifications\n</a> <tool-tip id=\"tooltip-b3d60dfd-cfdd-438c-979e-0bc7f4dbf44a\" for=\"repository-details-watch-button\" popover=\"manual\" data-direction=\"s\" data-type=\"description\" data-view-component=\"true\" class=\"sr-only position-absolute\">You must be signed in to change notification settings</tool-tip>\n\n </li>\n\n <li>\n <a icon=\"repo-forked\" id=\"fork-button\" href=\"/login?return_to=%2Ftauri-apps%2Ftauri\" rel=\"nofollow\" data-hydro-click=\"{"event_type":"authentication.click","payload":{"location_in_page":"repo details fork button","repository_id":196701619,"auth_type":"LOG_IN","originating_url":"https://github.com/tauri-apps/tauri/blob/dev/tooling/cli/src/mobile/ios/project.rs","user_id":null}}\" data-hydro-click-hmac=\"9ffa88ebf0501e316e738c02c26ecd8171de37663ff16401c3373e4d39c9f31d\" data-view-component=\"true\" class=\"btn-sm btn\"> <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-repo-forked mr-2\">\n <path d=\"M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z\"></path>\n</svg>Fork\n <span id=\"repo-network-counter\" data-pjax-replace=\"true\" data-turbo-replace=\"true\" title=\"3,413\" data-view-component=\"true\" class=\"Counter\">3.4k</span>\n</a>\n </li>\n\n <li>\n <div data-view-component=\"true\" class=\"BtnGroup d-flex\">\n <a href=\"/login?return_to=%2Ftauri-apps%2Ftauri\" rel=\"nofollow\" data-hydro-click=\"{"event_type":"authentication.click","payload":{"location_in_page":"star button","repository_id":196701619,"auth_type":"LOG_IN","originating_url":"https://github.com/tauri-apps/tauri/blob/dev/tooling/cli/src/mobile/ios/project.rs","user_id":null}}\" data-hydro-click-hmac=\"51041d5ff02c24f11bde20bbca86fc2591448dcf3d37ab44adc9c1a320a5728a\" aria-label=\"You must be signed in to star a repository\" data-view-component=\"true\" class=\"tooltipped tooltipped-sw btn-sm btn\"> <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-star v-align-text-bottom d-inline-block mr-2\">\n <path d=\"M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z\"></path>\n</svg><span data-view-component=\"true\" class=\"d-inline\">\n Star\n</span> <span id=\"repo-stars-counter-star\" aria-label=\"103448 users starred this repository\" data-singular-suffix=\"user starred this repository\" data-plural-suffix=\"users starred this repository\" data-turbo-replace=\"true\" title=\"103,448\" data-view-component=\"true\" class=\"Counter js-social-count\">103k</span>\n</a></div>\n </li>\n\n</ul>\n\n </div>\n </div>\n\n <div id=\"responsive-meta-container\" data-turbo-replace>\n</div>\n\n\n <nav data-pjax=\"#js-repo-pjax-container\" aria-label=\"Repository\" data-view-component=\"true\" class=\"js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5\">\n\n <ul data-view-component=\"true\" class=\"UnderlineNav-body list-style-none\">\n <li data-view-component=\"true\" class=\"d-inline-flex\">\n <a id=\"code-tab\" href=\"/tauri-apps/tauri\" data-tab-item=\"i0code-tab\" data-selected-links=\"repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /tauri-apps/tauri\" data-pjax=\"#repo-content-pjax-container\" data-turbo-frame=\"repo-content-turbo-frame\" data-hotkey=\"g c\" data-react-nav=\"code-view\" data-react-nav-anchor=\"code-view-repo-link\" data-analytics-event=\"{"category":"Underline navbar","action":"Click tab","label":"Code","target":"UNDERLINE_NAV.TAB"}\" aria-current=\"page\" data-view-component=\"true\" class=\"UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected\">\n \n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-code UnderlineNav-octicon d-none d-sm-inline\">\n <path d=\"m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z\"></path>\n</svg>\n <span data-content=\"Code\">Code</span>\n <span id=\"code-repo-tab-count\" data-pjax-replace=\"\" data-turbo-replace=\"\" title=\"Not available\" data-view-component=\"true\" class=\"Counter\"></span>\n\n\n \n</a></li>\n <li data-view-component=\"true\" class=\"d-inline-flex\">\n <a id=\"issues-tab\" href=\"/tauri-apps/tauri/issues\" data-tab-item=\"i1issues-tab\" data-selected-links=\"repo_issues repo_labels repo_milestones /tauri-apps/tauri/issues\" data-pjax=\"#repo-content-pjax-container\" data-turbo-frame=\"repo-content-turbo-frame\" data-hotkey=\"g i\" data-react-nav=\"issues-react\" data-analytics-event=\"{"category":"Underline navbar","action":"Click tab","label":"Issues","target":"UNDERLINE_NAV.TAB"}\" data-view-component=\"true\" class=\"UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item\">\n \n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline\">\n <path d=\"M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z\"></path><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z\"></path>\n</svg>\n <span data-content=\"Issues\">Issues</span>\n <span id=\"issues-repo-tab-count\" data-pjax-replace=\"\" data-turbo-replace=\"\" title=\"1,254\" data-view-component=\"true\" class=\"Counter\">1.3k</span>\n\n\n \n</a></li>\n <li data-view-component=\"true\" class=\"d-inline-flex\">\n <a id=\"pull-requests-tab\" href=\"/tauri-apps/tauri/pulls\" data-tab-item=\"i2pull-requests-tab\" data-selected-links=\"repo_pulls checks /tauri-apps/tauri/pulls\" data-pjax=\"#repo-content-pjax-container\" data-turbo-frame=\"repo-content-turbo-frame\" data-hotkey=\"g p\" data-analytics-event=\"{"category":"Underline navbar","action":"Click tab","label":"Pull requests","target":"UNDERLINE_NAV.TAB"}\" data-view-component=\"true\" class=\"UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item\">\n \n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline\">\n <path d=\"M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z\"></path>\n</svg>\n <span data-content=\"Pull requests\">Pull requests</span>\n <span id=\"pull-requests-repo-tab-count\" data-pjax-replace=\"\" data-turbo-replace=\"\" title=\"122\" data-view-component=\"true\" class=\"Counter\">122</span>\n\n\n \n</a></li>\n <li data-view-component=\"true\" class=\"d-inline-flex\">\n <a id=\"discussions-tab\" href=\"/tauri-apps/tauri/discussions\" data-tab-item=\"i3discussions-tab\" data-selected-links=\"repo_discussions /tauri-apps/tauri/discussions\" data-pjax=\"#repo-content-pjax-container\" data-turbo-frame=\"repo-content-turbo-frame\" data-hotkey=\"g g\" data-analytics-event=\"{"category":"Underline navbar","action":"Click tab","label":"Discussions","target":"UNDERLINE_NAV.TAB"}\" data-view-component=\"true\" class=\"UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item\">\n \n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-comment-discussion UnderlineNav-octicon d-none d-sm-inline\">\n <path d=\"M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z\"></path>\n</svg>\n <span data-content=\"Discussions\">Discussions</span>\n <span id=\"discussions-repo-tab-count\" data-pjax-replace=\"\" data-turbo-replace=\"\" title=\"Not available\" data-view-component=\"true\" class=\"Counter\"></span>\n\n\n \n</a></li>\n <li data-view-component=\"true\" class=\"d-inline-flex\">\n <a id=\"actions-tab\" href=\"/tauri-apps/tauri/actions\" data-tab-item=\"i4actions-tab\" data-selected-links=\"repo_actions /tauri-apps/tauri/actions\" data-pjax=\"#repo-content-pjax-container\" data-turbo-frame=\"repo-content-turbo-frame\" data-hotkey=\"g a\" data-analytics-event=\"{"category":"Underline navbar","action":"Click tab","label":"Actions","target":"UNDERLINE_NAV.TAB"}\" data-view-component=\"true\" class=\"UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item\">\n \n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-play UnderlineNav-octicon d-none d-sm-inline\">\n <path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z\"></path>\n</svg>\n <span data-content=\"Actions\">Actions</span>\n <span id=\"actions-repo-tab-count\" data-pjax-replace=\"\" data-turbo-replace=\"\" title=\"Not available\" data-view-component=\"true\" class=\"Counter\"></span>\n\n\n \n</a></li>\n <li data-view-component=\"true\" class=\"d-inline-flex\">\n <a id=\"projects-tab\" href=\"/tauri-apps/tauri/projects\" data-tab-item=\"i5projects-tab\" data-selected-links=\"repo_projects new_repo_project repo_project /tauri-apps/tauri/projects\" data-pjax=\"#repo-content-pjax-container\" data-turbo-frame=\"repo-content-turbo-frame\" data-hotkey=\"g b\" data-analytics-event=\"{"category":"Underline navbar","action":"Click tab","label":"Projects","target":"UNDERLINE_NAV.TAB"}\" data-view-component=\"true\" class=\"UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item\">\n \n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-table UnderlineNav-octicon d-none d-sm-inline\">\n <path d=\"M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z\"></path>\n</svg>\n <span data-content=\"Projects\">Projects</span>\n <span id=\"projects-repo-tab-count\" data-pjax-replace=\"\" data-turbo-replace=\"\" title=\"Not available\" data-view-component=\"true\" class=\"Counter\"></span>\n\n\n \n</a></li>\n <li data-view-component=\"true\" class=\"d-inline-flex\">\n <a id=\"security-tab\" href=\"/tauri-apps/tauri/security\" data-tab-item=\"i6security-tab\" data-selected-links=\"security overview alerts policy token_scanning code_scanning /tauri-apps/tauri/security\" data-pjax=\"#repo-content-pjax-container\" data-turbo-frame=\"repo-content-turbo-frame\" data-hotkey=\"g s\" data-analytics-event=\"{"category":"Underline navbar","action":"Click tab","label":"Security","target":"UNDERLINE_NAV.TAB"}\" data-view-component=\"true\" class=\"UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item\">\n \n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline\">\n <path d=\"M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"></path>\n</svg>\n <span data-content=\"Security\">Security</span>\n <span id=\"security-repo-tab-count\" data-pjax-replace=\"\" data-turbo-replace=\"\" title=\"7\" data-view-component=\"true\" class=\"Counter\">7</span>\n\n\n \n</a></li>\n <li data-view-component=\"true\" class=\"d-inline-flex\">\n <a id=\"insights-tab\" href=\"/tauri-apps/tauri/pulse\" data-tab-item=\"i7insights-tab\" data-selected-links=\"repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /tauri-apps/tauri/pulse\" data-pjax=\"#repo-content-pjax-container\" data-turbo-frame=\"repo-content-turbo-frame\" data-analytics-event=\"{"category":"Underline navbar","action":"Click tab","label":"Insights","target":"UNDERLINE_NAV.TAB"}\" data-view-component=\"true\" class=\"UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item\">\n \n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline\">\n <path d=\"M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z\"></path>\n</svg>\n <span data-content=\"Insights\">Insights</span>\n <span id=\"insights-repo-tab-count\" data-pjax-replace=\"\" data-turbo-replace=\"\" title=\"Not available\" data-view-component=\"true\" class=\"Counter\"></span>\n\n\n \n</a></li>\n</ul>\n <div style=\"visibility:hidden;\" data-view-component=\"true\" class=\"UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0\"> <action-menu data-select-variant=\"none\" data-view-component=\"true\">\n <focus-group direction=\"vertical\" mnemonics retain>\n <button id=\"action-menu-6e7f52b4-1790-4ebf-acf9-f0019d1ee2b3-button\" popovertarget=\"action-menu-6e7f52b4-1790-4ebf-acf9-f0019d1ee2b3-overlay\" aria-controls=\"action-menu-6e7f52b4-1790-4ebf-acf9-f0019d1ee2b3-list\" aria-haspopup=\"true\" aria-labelledby=\"tooltip-8a0ae90d-3dc7-4505-8ac3-33ce84519a83\" type=\"button\" data-view-component=\"true\" class=\"Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item\"> <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-kebab-horizontal Button-visual\">\n <path d=\"M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z\"></path>\n</svg>\n</button><tool-tip id=\"tooltip-8a0ae90d-3dc7-4505-8ac3-33ce84519a83\" for=\"action-menu-6e7f52b4-1790-4ebf-acf9-f0019d1ee2b3-button\" popover=\"manual\" data-direction=\"s\" data-type=\"label\" data-view-component=\"true\" class=\"sr-only position-absolute\">Additional navigation options</tool-tip>\n\n\n<anchored-position data-target=\"action-menu.overlay\" id=\"action-menu-6e7f52b4-1790-4ebf-acf9-f0019d1ee2b3-overlay\" anchor=\"action-menu-6e7f52b4-1790-4ebf-acf9-f0019d1ee2b3-button\" align=\"start\" side=\"outside-bottom\" anchor-offset=\"normal\" popover=\"auto\" data-view-component=\"true\">\n <div data-view-component=\"true\" class=\"Overlay Overlay--size-auto\">\n \n <div data-view-component=\"true\" class=\"Overlay-body Overlay-body--paddingNone\"> <action-list>\n <div data-view-component=\"true\">\n <ul aria-labelledby=\"action-menu-6e7f52b4-1790-4ebf-acf9-f0019d1ee2b3-button\" id=\"action-menu-6e7f52b4-1790-4ebf-acf9-f0019d1ee2b3-list\" role=\"menu\" data-view-component=\"true\" class=\"ActionListWrap--inset ActionListWrap\">\n <li hidden=\"hidden\" data-menu-item=\"i0code-tab\" data-targets=\"action-list.items\" role=\"none\" data-view-component=\"true\" class=\"ActionListItem\">\n \n \n <a tabindex=\"-1\" id=\"item-721eae88-25e0-457b-b7a0-fef4a7e7a9f8\" href=\"/tauri-apps/tauri\" role=\"menuitem\" data-view-component=\"true\" class=\"ActionListContent ActionListContent--visual16\">\n <span class=\"ActionListItem-visual ActionListItem-visual--leading\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-code\">\n <path d=\"m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z\"></path>\n</svg>\n </span>\n \n <span data-view-component=\"true\" class=\"ActionListItem-label\">\n Code\n</span> \n</a>\n \n</li>\n <li hidden=\"hidden\" data-menu-item=\"i1issues-tab\" data-targets=\"action-list.items\" role=\"none\" data-view-component=\"true\" class=\"ActionListItem\">\n \n \n <a tabindex=\"-1\" id=\"item-6c62c9eb-75ec-47cd-be55-c46f3b81855a\" href=\"/tauri-apps/tauri/issues\" role=\"menuitem\" data-view-component=\"true\" class=\"ActionListContent ActionListContent--visual16\">\n <span class=\"ActionListItem-visual ActionListItem-visual--leading\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-issue-opened\">\n <path d=\"M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z\"></path><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z\"></path>\n</svg>\n </span>\n \n <span data-view-component=\"true\" class=\"ActionListItem-label\">\n Issues\n</span> \n</a>\n \n</li>\n <li hidden=\"hidden\" data-menu-item=\"i2pull-requests-tab\" data-targets=\"action-list.items\" role=\"none\" data-view-component=\"true\" class=\"ActionListItem\">\n \n \n <a tabindex=\"-1\" id=\"item-7ea6118b-402c-4ff6-a180-aa8625bff5a3\" href=\"/tauri-apps/tauri/pulls\" role=\"menuitem\" data-view-component=\"true\" class=\"ActionListContent ActionListContent--visual16\">\n <span class=\"ActionListItem-visual ActionListItem-visual--leading\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-git-pull-request\">\n <path d=\"M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z\"></path>\n</svg>\n </span>\n \n <span data-view-component=\"true\" class=\"ActionListItem-label\">\n Pull requests\n</span> \n</a>\n \n</li>\n <li hidden=\"hidden\" data-menu-item=\"i3discussions-tab\" data-targets=\"action-list.items\" role=\"none\" data-view-component=\"true\" class=\"ActionListItem\">\n \n \n <a tabindex=\"-1\" id=\"item-f15a2db8-5609-49ce-9653-9760c342b077\" href=\"/tauri-apps/tauri/discussions\" role=\"menuitem\" data-view-component=\"true\" class=\"ActionListContent ActionListContent--visual16\">\n <span class=\"ActionListItem-visual ActionListItem-visual--leading\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-comment-discussion\">\n <path d=\"M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z\"></path>\n</svg>\n </span>\n \n <span data-view-component=\"true\" class=\"ActionListItem-label\">\n Discussions\n</span> \n</a>\n \n</li>\n <li hidden=\"hidden\" data-menu-item=\"i4actions-tab\" data-targets=\"action-list.items\" role=\"none\" data-view-component=\"true\" class=\"ActionListItem\">\n \n \n <a tabindex=\"-1\" id=\"item-6cb30bb4-61b4-4ce3-a026-cbc980281ef4\" href=\"/tauri-apps/tauri/actions\" role=\"menuitem\" data-view-component=\"true\" class=\"ActionListContent ActionListContent--visual16\">\n <span class=\"ActionListItem-visual ActionListItem-visual--leading\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-play\">\n <path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z\"></path>\n</svg>\n </span>\n \n <span data-view-component=\"true\" class=\"ActionListItem-label\">\n Actions\n</span> \n</a>\n \n</li>\n <li hidden=\"hidden\" data-menu-item=\"i5projects-tab\" data-targets=\"action-list.items\" role=\"none\" data-view-component=\"true\" class=\"ActionListItem\">\n \n \n <a tabindex=\"-1\" id=\"item-43a1950e-6c07-46d8-85fa-408464bf6b39\" href=\"/tauri-apps/tauri/projects\" role=\"menuitem\" data-view-component=\"true\" class=\"ActionListContent ActionListContent--visual16\">\n <span class=\"ActionListItem-visual ActionListItem-visual--leading\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-table\">\n <path d=\"M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z\"></path>\n</svg>\n </span>\n \n <span data-view-component=\"true\" class=\"ActionListItem-label\">\n Projects\n</span> \n</a>\n \n</li>\n <li hidden=\"hidden\" data-menu-item=\"i6security-tab\" data-targets=\"action-list.items\" role=\"none\" data-view-component=\"true\" class=\"ActionListItem\">\n \n \n <a tabindex=\"-1\" id=\"item-309dc37d-a47a-4f90-9221-8ffc242dfed7\" href=\"/tauri-apps/tauri/security\" role=\"menuitem\" data-view-component=\"true\" class=\"ActionListContent ActionListContent--visual16\">\n <span class=\"ActionListItem-visual ActionListItem-visual--leading\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-shield\">\n <path d=\"M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"></path>\n</svg>\n </span>\n \n <span data-view-component=\"true\" class=\"ActionListItem-label\">\n Security\n</span> \n</a>\n \n</li>\n <li hidden=\"hidden\" data-menu-item=\"i7insights-tab\" data-targets=\"action-list.items\" role=\"none\" data-view-component=\"true\" class=\"ActionListItem\">\n \n \n <a tabindex=\"-1\" id=\"item-13ee380b-047f-47ff-b53b-3327cd64ccf0\" href=\"/tauri-apps/tauri/pulse\" role=\"menuitem\" data-view-component=\"true\" class=\"ActionListContent ActionListContent--visual16\">\n <span class=\"ActionListItem-visual ActionListItem-visual--leading\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-graph\">\n <path d=\"M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z\"></path>\n</svg>\n </span>\n \n <span data-view-component=\"true\" class=\"ActionListItem-label\">\n Insights\n</span> \n</a>\n \n</li>\n</ul> \n</div></action-list>\n\n\n</div>\n \n</div></anchored-position> </focus-group>\n</action-menu></div>\n</nav>\n\n </div>\n \n\n\n\n<turbo-frame id=\"repo-content-turbo-frame\" target=\"_top\" data-turbo-action=\"advance\" class=\"\">\n <div id=\"repo-content-pjax-container\" class=\"repository-content \" >\n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n<react-app\n app-name=\"react-code-view\"\n initial-path=\"/tauri-apps/tauri/blob/dev/tooling/cli/src/mobile/ios/project.rs\"\n style=\"display: block; min-height: calc(100vh - 64px);\"\n data-attempted-ssr=\"false\"\n data-ssr=\"false\"\n data-lazy=\"false\"\n data-alternate=\"false\"\n data-data-router-enabled=\"false\"\n data-react-profiling=\"true\"\n>\n \n <script type=\"application/json\" data-target=\"react-app.embeddedData\">{\"payload\":{\"path\":\"tooling/cli/src/mobile/ios/project.rs\",\"repo\":{\"id\":196701619,\"defaultBranch\":\"dev\",\"name\":\"tauri\",\"ownerLogin\":\"tauri-apps\",\"currentUserCanPush\":false,\"isFork\":false,\"isEmpty\":false,\"createdAt\":\"2019-07-13T09:09:37.000Z\",\"ownerAvatar\":\"https://avatars.githubusercontent.com/u/54536011?v=4\",\"public\":true,\"private\":false,\"isOrgOwned\":true},\"refInfo\":{\"name\":\"dev\",\"listCacheKey\":\"v0:1772335651.0\",\"canEdit\":false,\"refType\":\"branch\",\"currentOid\":\"33932a72b27c970dde242da5241f7a340277507d\"},\"currentUser\":null,\"fileTree\":{\"\":{\"items\":[{\"name\":\".cargo\",\"path\":\".cargo\",\"contentType\":\"directory\"},{\"name\":\".changes\",\"path\":\".changes\",\"contentType\":\"directory\"},{\"name\":\".devcontainer\",\"path\":\".devcontainer\",\"contentType\":\"directory\"},{\"name\":\".docker\",\"path\":\".docker\",\"contentType\":\"directory\"},{\"name\":\".github\",\"path\":\".github\",\"contentType\":\"directory\"},{\"name\":\".scripts\",\"path\":\".scripts\",\"contentType\":\"directory\"},{\"name\":\".vscode\",\"path\":\".vscode\",\"contentType\":\"directory\"},{\"name\":\"audits\",\"path\":\"audits\",\"contentType\":\"directory\"},{\"name\":\"bench\",\"path\":\"bench\",\"contentType\":\"directory\"},{\"name\":\"crates\",\"path\":\"crates\",\"contentType\":\"directory\"},{\"name\":\"examples\",\"path\":\"examples\",\"contentType\":\"directory\"},{\"name\":\"packages\",\"path\":\"packages\",\"contentType\":\"directory\"},{\"name\":\"supply-chain\",\"path\":\"supply-chain\",\"contentType\":\"directory\"},{\"name\":\".editorconfig\",\"path\":\".editorconfig\",\"contentType\":\"file\"},{\"name\":\".gitignore\",\"path\":\".gitignore\",\"contentType\":\"file\"},{\"name\":\".prettierignore\",\"path\":\".prettierignore\",\"contentType\":\"file\"},{\"name\":\".prettierrc\",\"path\":\".prettierrc\",\"contentType\":\"file\"},{\"name\":\"ARCHITECTURE.md\",\"path\":\"ARCHITECTURE.md\",\"contentType\":\"file\"},{\"name\":\"Cargo.lock\",\"path\":\"Cargo.lock\",\"contentType\":\"file\"},{\"name\":\"Cargo.toml\",\"path\":\"Cargo.toml\",\"contentType\":\"file\"},{\"name\":\"LICENSE.spdx\",\"path\":\"LICENSE.spdx\",\"contentType\":\"file\"},{\"name\":\"LICENSE_APACHE-2.0\",\"path\":\"LICENSE_APACHE-2.0\",\"contentType\":\"file\"},{\"name\":\"LICENSE_MIT\",\"path\":\"LICENSE_MIT\",\"contentType\":\"file\"},{\"name\":\"README.md\",\"path\":\"README.md\",\"contentType\":\"file\"},{\"name\":\"SECURITY.md\",\"path\":\"SECURITY.md\",\"contentType\":\"file\"},{\"name\":\"dependabot.yml\",\"path\":\"dependabot.yml\",\"contentType\":\"file\"},{\"name\":\"package.json\",\"path\":\"package.json\",\"contentType\":\"file\"},{\"name\":\"pnpm-lock.yaml\",\"path\":\"pnpm-lock.yaml\",\"contentType\":\"file\"},{\"name\":\"pnpm-workspace.yaml\",\"path\":\"pnpm-workspace.yaml\",\"contentType\":\"file\"},{\"name\":\"renovate.json\",\"path\":\"renovate.json\",\"contentType\":\"file\"},{\"name\":\"rustfmt.toml\",\"path\":\"rustfmt.toml\",\"contentType\":\"file\"}],\"totalCount\":31}},\"fileTreeProcessingTime\":6.298452,\"foldersToFetch\":[],\"allShortcutsEnabled\":false,\"error\":{\"httpStatus\":404,\"type\":\"httpError\"}},\"title\":\"File not found\",\"appPayload\":{\"helpUrl\":\"https://docs.github.com\",\"findFileWorkerPath\":\"/assets-cdn/worker/find-file-worker-59333858d672c62a.js\",\"findInFileWorkerPath\":\"/assets-cdn/worker/find-in-file-worker-e662bb2d9aaa5afc.js\",\"githubDevUrl\":null}}</script>\n <div data-target=\"react-app.reactRoot\"></div>\n</react-app>\n\n\n\n\n </div>\n\n</turbo-frame>\n\n </main>\n </div>\n\n </div>\n\n <footer class=\"footer tmp-pt-7 tmp-pb-6 f6 color-fg-muted color-border-subtle p-responsive\" role=\"contentinfo\" >\n <h2 class='sr-only'>Footer</h2>\n\n \n\n\n <div class=\"d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap\">\n <div class=\"d-flex flex-items-center flex-shrink-0 mx-2\">\n <a aria-label=\"GitHub Homepage\" class=\"footer-octicon mr-2\" href=\"https://github.com\">\n <svg aria-hidden=\"true\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" width=\"24\" data-view-component=\"true\" class=\"octicon octicon-mark-github\">\n <path d=\"M12 1C5.923 1 1 5.923 1 12c0 4.867 3.149 8.979 7.521 10.436.55.096.756-.233.756-.522 0-.262-.013-1.128-.013-2.049-2.764.509-3.479-.674-3.699-1.292-.124-.317-.66-1.293-1.127-1.554-.385-.207-.936-.715-.014-.729.866-.014 1.485.797 1.691 1.128.99 1.663 2.571 1.196 3.204.907.096-.715.385-1.196.701-1.471-2.448-.275-5.005-1.224-5.005-5.432 0-1.196.426-2.186 1.128-2.956-.111-.275-.496-1.402.11-2.915 0 0 .921-.288 3.024 1.128a10.193 10.193 0 0 1 2.75-.371c.936 0 1.871.123 2.75.371 2.104-1.43 3.025-1.128 3.025-1.128.605 1.513.221 2.64.111 2.915.701.77 1.127 1.747 1.127 2.956 0 4.222-2.571 5.157-5.019 5.432.399.344.743 1.004.743 2.035 0 1.471-.014 2.654-.014 3.025 0 .289.206.632.756.522C19.851 20.979 23 16.854 23 12c0-6.077-4.922-11-11-11Z\"></path>\n</svg>\n</a>\n <span>\n © 2026 GitHub, Inc.\n </span>\n </div>\n\n <nav aria-label=\"Footer\">\n <h3 class=\"sr-only\" id=\"sr-footer-heading\">Footer navigation</h3>\n\n <ul class=\"list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0\" aria-labelledby=\"sr-footer-heading\">\n\n <li class=\"mx-2\">\n <a data-analytics-event=\"{"category":"Footer","action":"go to Terms","label":"text:terms"}\" href=\"https://docs.github.com/site-policy/github-terms/github-terms-of-service\" data-view-component=\"true\" class=\"Link--secondary Link\">Terms</a>\n </li>\n\n <li class=\"mx-2\">\n <a data-analytics-event=\"{"category":"Footer","action":"go to privacy","label":"text:privacy"}\" href=\"https://docs.github.com/site-policy/privacy-policies/github-privacy-statement\" data-view-component=\"true\" class=\"Link--secondary Link\">Privacy</a>\n </li>\n\n <li class=\"mx-2\">\n <a data-analytics-event=\"{"category":"Footer","action":"go to security","label":"text:security"}\" href=\"https://github.com/security\" data-view-component=\"true\" class=\"Link--secondary Link\">Security</a>\n </li>\n\n <li class=\"mx-2\">\n <a data-analytics-event=\"{"category":"Footer","action":"go to status","label":"text:status"}\" href=\"https://www.githubstatus.com/\" data-view-component=\"true\" class=\"Link--secondary Link\">Status</a>\n </li>\n\n <li class=\"mx-2\">\n <a data-analytics-event=\"{"category":"Footer","action":"go to community","label":"text:community"}\" href=\"https://github.community/\" data-view-component=\"true\" class=\"Link--secondary Link\">Community</a>\n </li>\n\n <li class=\"mx-2\">\n <a data-analytics-event=\"{"category":"Footer","action":"go to docs","label":"text:docs"}\" href=\"https://docs.github.com/\" data-view-component=\"true\" class=\"Link--secondary Link\">Docs</a>\n </li>\n\n <li class=\"mx-2\">\n <a data-analytics-event=\"{"category":"Footer","action":"go to contact","label":"text:contact"}\" href=\"https://support.github.com?tags=dotcom-footer\" data-view-component=\"true\" class=\"Link--secondary Link\">Contact</a>\n </li>\n\n <li class=\"mx-2\" >\n <cookie-consent-link>\n <button\n type=\"button\"\n class=\"Link--secondary underline-on-hover border-0 p-0 color-bg-transparent\"\n data-action=\"click:cookie-consent-link#showConsentManagement\"\n data-analytics-event=\"{"location":"footer","action":"cookies","context":"subfooter","tag":"link","label":"cookies_link_subfooter_footer"}\"\n >\n Manage cookies\n </button>\n </cookie-consent-link>\n</li>\n\n<li class=\"mx-2\">\n <cookie-consent-link>\n <button\n type=\"button\"\n class=\"Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left\"\n data-action=\"click:cookie-consent-link#showConsentManagement\"\n data-analytics-event=\"{"location":"footer","action":"dont_share_info","context":"subfooter","tag":"link","label":"dont_share_info_link_subfooter_footer"}\"\n >\n Do not share my personal information\n </button>\n </cookie-consent-link>\n</li>\n\n </ul>\n </nav>\n </div>\n</footer>\n\n\n\n <ghcc-consent id=\"ghcc\" class=\"position-fixed bottom-0 left-0\" style=\"z-index: 999999\"\n data-locale=\"en\"\n data-initial-cookie-consent-allowed=\"\"\n data-cookie-consent-required=\"true\"\n ></ghcc-consent>\n\n\n\n\n <div id=\"ajax-error-message\" class=\"ajax-error-message flash flash-error\" hidden>\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"></path>\n</svg>\n <button type=\"button\" class=\"flash-close js-ajax-error-dismiss\" aria-label=\"Dismiss error\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-x\">\n <path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path>\n</svg>\n </button>\n You can’t perform that action at this time.\n </div>\n\n <template id=\"site-details-dialog\">\n <details class=\"details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm\" open>\n <summary role=\"button\" aria-label=\"Close dialog\"></summary>\n <details-dialog class=\"Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal\">\n <button class=\"Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0\" type=\"button\" aria-label=\"Close dialog\" data-close-dialog>\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-x\">\n <path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path>\n</svg>\n </button>\n <div class=\"octocat-spinner tmp-my-6 js-details-dialog-spinner\"></div>\n </details-dialog>\n </details>\n</template>\n\n <div class=\"Popover js-hovercard-content position-absolute\" style=\"display: none; outline: none;\">\n <div class=\"Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large\" style=\"width:360px;\">\n </div>\n</div>\n\n <template id=\"snippet-clipboard-copy-button\">\n <div class=\"zeroclipboard-container position-absolute right-0 top-0\">\n <clipboard-copy aria-label=\"Copy\" class=\"ClipboardButton btn js-clipboard-copy m-2 p-0\" data-copy-feedback=\"Copied!\" data-tooltip-direction=\"w\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-copy js-clipboard-copy-icon m-2\">\n <path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path>\n</svg>\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2\">\n <path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path>\n</svg>\n </clipboard-copy>\n </div>\n</template>\n<template id=\"snippet-clipboard-copy-button-unpositioned\">\n <div class=\"zeroclipboard-container\">\n <clipboard-copy aria-label=\"Copy\" class=\"ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center\" data-copy-feedback=\"Copied!\" data-tooltip-direction=\"w\">\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-copy js-clipboard-copy-icon\">\n <path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path>\n</svg>\n <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-check js-clipboard-check-icon color-fg-success d-none\">\n <path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path>\n</svg>\n </clipboard-copy>\n </div>\n</template>\n\n\n\n\n </div>\n <div id=\"js-global-screen-reader-notice\" class=\"sr-only mt-n1\" aria-live=\"polite\" aria-atomic=\"true\" ></div>\n <div id=\"js-global-screen-reader-notice-assertive\" class=\"sr-only mt-n1\" aria-live=\"assertive\" aria-atomic=\"true\"></div>\n </body>\n</html>\n\n" |
|
1795
|
|
|
1796
|
## Assistant |
|
1797
|
|
|
1798
|
The GitHub path has changed. Let me search the actual Tauri source in the repo: |
|
1799
|
|
|
1800
|
**Tool Call: 10 matches** |
|
1801
|
Status: Completed |
|
1802
|
|
|
1803
|
file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/build.rs |
|
1804
|
|
|
1805
|
file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/examples/tauri-app/src-tauri/build.rs |
|
1806
|
|
|
1807
|
file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/examples/tauri-app/src-tauri/src/lib.rs |
|
1808
|
|
|
1809
|
file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/examples/tauri-app/src-tauri/src/main.rs |
|
1810
|
|
|
1811
|
file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/src/commands.rs |
|
1812
|
|
|
1813
|
file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/src/desktop.rs |
|
1814
|
|
|
1815
|
file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/src/error.rs |
|
1816
|
|
|
1817
|
file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/src/lib.rs |
|
1818
|
|
|
1819
|
file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/src/mobile.rs |
|
1820
|
|
|
1821
|
file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/src/models.rs |
|
1822
|
|
|
1823
|
## Assistant |
|
1824
|
|
|
1825
|
There's no local copy of Tauri's source. The evidence is conclusive from what we already have. Here's the complete answer: |
|
1826
|
|
|
1827
|
--- |
|
1828
|
|
|
1829
|
**No, you don't need to track them.** |
|
1830
|
|
|
1831
|
Here's the precise reasoning for each file: |
|
1832
|
|
|
1833
|
### `tauri-app_iOS/Info.plist` |
|
1834
|
|
|
1835
|
Tauri **generates** this file during `cargo tauri ios init` from the metadata in `project.yml` (specifically the `info:` block). Look at the `project.yml` we had tracked: |
|
1836
|
|
|
1837
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/project.yml#L26-40 |
|
1838
|
info: |
|
1839
|
path: tauri-app_iOS/Info.plist |
|
1840
|
properties: |
|
1841
|
LSRequiresIPhoneOS: true |
|
1842
|
UILaunchStoryboardName: LaunchScreen |
|
1843
|
... |
|
1844
|
``` |
|
1845
|
|
|
1846
|
That `info:` block is what *produces* `Info.plist`. The plist itself is a derived artifact — it will be **regenerated** every time Tauri re-scaffolds. Tracking it in git creates a conflict risk: Tauri overwrites it, your tracked version diverges. |
|
1847
|
|
|
1848
|
The correct place to own those plist values is `tauri.conf.json` (the `bundle.iOS` section), which Tauri then bakes into `project.yml`, which then generates `Info.plist`. That's the actual source of truth. |
|
1849
|
|
|
1850
|
### `tauri-app_iOS/tauri-app_iOS.entitlements` |
|
1851
|
|
|
1852
|
Same story — Tauri generates this from `project.yml`'s `entitlements.path` key. It was empty (`<dict/>`) because you haven't added any capabilities yet. If you do add capabilities (e.g. Push Notifications, iCloud), those belong in `tauri.conf.json` or a dedicated capabilities file, not tracked here. |
|
1853
|
|
|
1854
|
### What to do |
|
1855
|
|
|
1856
|
Both files should be **git-ignored** alongside `project.yml`. Let me fix the gitignores to reflect this accurately: |
|
1857
|
|
|
1858
|
**Tool Call: edit_file** |
|
1859
|
Status: Failed |
|
1860
|
|
|
1861
|
**Tool Call: Read file `tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/.gitignore`** |
|
1862
|
Status: Completed |
|
1863
|
|
|
1864
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/.gitignore |
|
1865
|
# ============================================================ |
|
1866
|
# gen/apple/.gitignore |
|
1867
|
# |
|
1868
|
# Strategy: |
|
1869
|
# - `cargo tauri ios init` regenerates project.yml (XcodeGen) |
|
1870
|
# - `tuist generate` regenerates *.xcodeproj, *.xcworkspace, Derived/ |
|
1871
|
# - Everything else is hand-authored source of truth → tracked |
|
1872
|
# ============================================================ |
|
1873
|
|
|
1874
|
# ------------------------------------------------------------------ |
|
1875
|
# Tauri-regenerated: XcodeGen manifest |
|
1876
|
# Re-created by `cargo tauri ios init` from tauri.conf.json. |
|
1877
|
# We use Project.swift (Tuist) as the Xcode project source of truth, |
|
1878
|
# so project.yml is a Tauri implementation detail we don't need. |
|
1879
|
# ------------------------------------------------------------------ |
|
1880
|
project.yml |
|
1881
|
|
|
1882
|
# ------------------------------------------------------------------ |
|
1883
|
# Tuist-regenerated: Xcode project & workspace |
|
1884
|
# Fully described by Project.swift → always regenerate, never edit. |
|
1885
|
# ------------------------------------------------------------------ |
|
1886
|
*.xcodeproj/ |
|
1887
|
*.xcworkspace/ |
|
1888
|
|
|
1889
|
# ------------------------------------------------------------------ |
|
1890
|
# Tuist-regenerated: derived sources & info plists |
|
1891
|
# Auto-synthesised from Project.swift (asset accessors, bundle IDs…). |
|
1892
|
# ------------------------------------------------------------------ |
|
1893
|
Derived/ |
|
1894
|
|
|
1895
|
# ------------------------------------------------------------------ |
|
1896
|
# Xcode runtime noise |
|
1897
|
# ------------------------------------------------------------------ |
|
1898
|
xcuserdata/ |
|
1899
|
|
|
1900
|
# ------------------------------------------------------------------ |
|
1901
|
# Rust / Cargo build output |
|
1902
|
# (also covered by src-tauri/.gitignore, belt-and-suspenders here) |
|
1903
|
# ------------------------------------------------------------------ |
|
1904
|
build/ |
|
1905
|
|
|
1906
|
# ------------------------------------------------------------------ |
|
1907
|
# Compiled Rust static libraries injected by xcode-script |
|
1908
|
# ------------------------------------------------------------------ |
|
1909
|
Externals/ |
|
1910
|
|
|
1911
|
``` |
|
1912
|
|
|
1913
|
|
|
1914
|
**Tool Call: write_file** |
|
1915
|
Status: Failed |
|
1916
|
|
|
1917
|
**Tool Call: terminal** |
|
1918
|
Status: Failed |
|
1919
|
|
|
1920
|
**Tool Call: 1 match** |
|
1921
|
Status: Completed |
|
1922
|
|
|
1923
|
file:///Users/seto.elkahfi/Repositories/tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/.gitignore |
|
1924
|
|
|
1925
|
## Assistant |
|
1926
|
|
|
1927
|
I don't have a terminal or write_file tool available right now. Let me use the diagnostics tool or just give you the exact edits to make manually — but actually I do have an `edit_file` equivalent via the tool I used earlier. Let me check: |
|
1928
|
|
|
1929
|
**Tool Call: Check project diagnostics** |
|
1930
|
Status: Completed |
|
1931
|
|
|
1932
|
No errors or warnings found in the project. |
|
1933
|
|
|
1934
|
## Assistant |
|
1935
|
|
|
1936
|
The `edit_file` tool seems to not be available in this session. Here are the two precise changes you need to make manually: |
|
1937
|
|
|
1938
|
--- |
|
1939
|
|
|
1940
|
**1. Update `gen/apple/.gitignore`** — add `tauri-app_iOS/` to the Tauri-regenerated section and update the comment: |
|
1941
|
|
|
1942
|
Replace the current `project.yml` block with: |
|
1943
|
|
|
1944
|
```tauri-plugin-ios-window/examples/tauri-app/src-tauri/gen/apple/.gitignore#L15-18 |
|
1945
|
# ------------------------------------------------------------------ |
|
1946
|
# Tauri-regenerated: XcodeGen manifest + iOS scaffold |
|
1947
|
# project.yml, Info.plist, and *.entitlements are all generated by |
|
1948
|
# `cargo tauri ios init` from tauri.conf.json. Do not track them. |
|
1949
|
# ------------------------------------------------------------------ |
|
1950
|
project.yml |
|
1951
|
tauri-app_iOS/ |
|
1952
|
``` |
|
1953
|
|
|
1954
|
**2. Then un-track the iOS scaffold from git:** |
|
1955
|
|
|
1956
|
```sh |
|
1957
|
git rm -r --cached examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/ |
|
1958
|
``` |
|
1959
|
|
|
1960
|
**3. Fix the comment in `src-tauri/.gitignore`** — remove the two incorrect lines that say `tauri-app_iOS/Info.plist` and `*.entitlements` are intentionally tracked, and add `gen/apple/tauri-app_iOS/` to the ignored list instead. |
|
1961
|
|
|
1962
|
--- |
|
1963
|
|
|
1964
|
**To summarise the corrected mental model:** |
|
1965
|
|
|
1966
|
| File | Owner | Tracked? | |
|
1967
|
|---|---|---| |
|
1968
|
| `tauri.conf.json` | You | ✅ source of truth for iOS bundle metadata | |
|
1969
|
| `project.yml` | Tauri generates from `tauri.conf.json` | ❌ ignore | |
|
1970
|
| `tauri-app_iOS/Info.plist` | Tauri generates from `project.yml` `info:` block | ❌ ignore | |
|
1971
|
| `tauri-app_iOS/*.entitlements` | Tauri generates from `project.yml` `entitlements:` block | ❌ ignore | |
|
1972
|
| `Project.swift` | You | ✅ Tuist manifest, references the above paths | |
|
1973
|
| `tauri-app_tvOS/` | You | ✅ hand-written, never touched by Tauri | |
|
1974
|
|
|
1975
|
The key insight: `Project.swift` can safely **reference** `tauri-app_iOS/Info.plist` and `tauri-app_iOS/*.entitlements` via `.file(path:)` even though those files are git-ignored — Tauri will have regenerated them on disk before you ever run `tuist generate`. |
|
1976
|
|