Refactor Apple platform overlay for Tauri app
Move hand-authored Apple platform files to src-tauri/apple/. Add bootstrap.sh for idempotent overlay into gen/apple/. Simplify gen/apple/.gitignore and remove tracked files from gen/apple/. Update documentation and workflow for Tuist and Apple targets.
Seto Elkahfi committed
Mar 7, 2026 at 11:48 UTC
582adcc967a62ff20ffdcc035633033033584b4d
45 files changed
+143
-384
examples/tauri-app/src-tauri/.gitignore
+9
-48
@@ -3,53 +3,14 @@
3
/target/
4
5
# ============================================================
6
-# gen/apple — Tauri scaffolds this directory on `cargo tauri ios init`.
7
-# A nested .gitignore at gen/apple/.gitignore handles the fine-grained
8
-# rules for that subtree. The entries below are a belt-and-suspenders
9
-# safety net at this level.
10
-# ============================================================
11
-
12
-# Rust static libraries produced by the Xcode build phase script
13
-gen/apple/Externals/
14
-
15
-# Xcode project & workspace — regenerated by `tuist generate`
16
-# (Project.swift is the source of truth, not these files)
17
-gen/apple/*.xcodeproj/
18
-gen/apple/*.xcworkspace/
19
-
20
-# Tuist derived sources / plists — regenerated by `tuist generate`
21
-gen/apple/Derived/
22
-
23
-# Xcode per-user settings
24
-gen/apple/xcuserdata/
25
-
26
-# Xcode build artefacts
27
-gen/apple/build/
28
-
29
-# XcodeGen manifest — regenerated by `cargo tauri ios init`.
30
-# We use Project.swift (Tuist) as the Xcode project source of truth.
31
-gen/apple/project.yml
32
-
33
-# ============================================================
34
-# The following gen/apple files ARE intentionally tracked because
35
-# they are either hand-authored or not regenerated by Tauri/Tuist:
6
+# gen/apple — entirely regenerated, never edit in place.
7
+#
8
+# Workflow:
9
+# 1. cargo tauri ios init → scaffolds gen/apple/
10
+# 2. ./apple/bootstrap.sh → overlays Tuist + Apple platform targets
11
+# 3. tuist generate --no-open → builds .xcodeproj from Project.swift
12
#
37
-# Project.swift — Tuist project manifest (our source of truth)
38
-# Tuist.swift — Tuist configuration
39
-# mise.toml — Tuist version pin
40
-# README.md — workflow documentation
41
-# tauri-app_iOS/Info.plist — iOS app Info.plist (Tauri reads this)
42
-# tauri-app_iOS/*.entitlements — iOS entitlements
43
-# tauri-app_tvOS/App.swift — native tvOS app entry point
44
-# tauri-app_tvOS/Info.plist — tvOS Info.plist
45
-# tauri-app_watchOS/App.swift — native watchOS app entry point
46
-# tauri-app_watchOS/Info.plist — watchOS Info.plist
47
-# tauri-app_watchOS/Assets.xcassets/ — watchOS-specific icon asset catalog
48
-# tauri-app_visionOS/App.swift — native visionOS app entry point
49
-# tauri-app_visionOS/Info.plist — visionOS Info.plist
50
-# Sources/ — Obj-C/C++ glue generated once by Tauri
51
-# Assets.xcassets/ — shared app icons & asset catalog (iOS/tvOS/visionOS)
52
-# LaunchScreen.storyboard — iOS launch screen
53
-# ExportOptions.plist — archive export options
54
-# Podfile — CocoaPods manifest
13
+# The source of truth for hand-authored Apple platform files lives in
14
+# src-tauri/apple/ (outside the Tauri blast radius).
15
# ============================================================
16
+gen/apple/
examples/tauri-app/src-tauri/apple/Project.swift
renamed
examples/tauri-app/src-tauri/apple/README.md
new
+78
@@ -0,0 +1,78 @@
1
+# Apple Platform Overlay
2
+
3
+This directory contains hand-authored files for the Apple platform targets
4
+(tvOS, watchOS, visionOS) and the Tuist project configuration. It lives
5
+**outside** `gen/apple/` so it survives `rm -rf gen/apple && cargo tauri ios init`.
6
+
7
+## Directory Layout
8
+
9
+```
10
+apple/
11
+├── bootstrap.sh ← copies everything into gen/apple/
12
+├── README.md ← you are here
13
+├── Project.swift ← Tuist project manifest (source of truth)
14
+├── Tuist.swift ← Tuist configuration
15
+├── mise.toml ← pins the Tuist version
16
+├── apple.gitignore ← becomes gen/apple/.gitignore
17
+├── tauri-app_tvOS/
18
+│ ├── App.swift
19
+│ └── Info.plist
20
+├── tauri-app_watchOS/
21
+│ ├── App.swift
22
+│ ├── Info.plist
23
+│ └── Assets.xcassets/ ← watchOS-specific app icon
24
+└── tauri-app_visionOS/
25
+ ├── App.swift
26
+ └── Info.plist
27
+```
28
+
29
+## Workflow
30
+
31
+The full setup from a clean state:
32
+
33
+```sh
34
+# 1. Tauri scaffolds gen/apple/ (Sources, Assets, iOS target, etc.)
35
+cargo tauri ios init
36
+
37
+# 2. Overlay our Apple platform targets + Tuist config into gen/apple/
38
+./src-tauri/apple/bootstrap.sh
39
+
40
+# 3. Install pinned Tuist via mise
41
+cd src-tauri/gen/apple
42
+mise install
43
+
44
+# 4. Generate the Xcode project from Project.swift
45
+tuist generate --no-open
46
+```
47
+
48
+After this, open `gen/apple/tauri-app.xcworkspace` in Xcode.
49
+
50
+## Idempotency
51
+
52
+This workflow is idempotent. You can run it any number of times:
53
+
54
+```sh
55
+rm -rf src-tauri/gen/apple
56
+cargo tauri ios init
57
+./src-tauri/apple/bootstrap.sh
58
+cd src-tauri/gen/apple && tuist generate --no-open
59
+```
60
+
61
+`gen/apple/` is fully git-ignored. The source of truth is:
62
+
63
+| What | Where |
64
+|---|---|
65
+| iOS scaffold (Sources, assets, Info.plist) | `cargo tauri ios init` (from `tauri.conf.json`) |
66
+| Tuist manifest + Apple platform targets | `src-tauri/apple/` (this directory) |
67
+| Xcode project | `tuist generate` (from `Project.swift`) |
68
+
69
+## Editing
70
+
71
+**To change tvOS / watchOS / visionOS targets or Tuist config:**
72
+edit the files in this `apple/` directory, then re-run `bootstrap.sh`.
73
+
74
+**To change the iOS target or Tauri build settings:**
75
+edit `tauri.conf.json` and re-run `cargo tauri ios init` + `bootstrap.sh`.
76
+
77
+**Never edit files directly inside `gen/apple/`** — they will be overwritten
78
+on the next scaffold or bootstrap.
\ No newline at end of file
examples/tauri-app/src-tauri/apple/Tuist.swift
renamed
examples/tauri-app/src-tauri/apple/apple.gitignore
renamed
examples/tauri-app/src-tauri/apple/bootstrap.sh
new
+56
@@ -0,0 +1,56 @@
1
+#!/usr/bin/env bash
2
+# =============================================================================
3
+# apple/bootstrap.sh
4
+#
5
+# Overlays hand-authored Apple platform files into gen/apple/ after Tauri
6
+# regenerates its iOS scaffold.
7
+#
8
+# This makes the workflow idempotent:
9
+# rm -rf src-tauri/gen/apple
10
+# cargo tauri ios init
11
+# ./src-tauri/apple/bootstrap.sh
12
+#
13
+# The apple/ directory lives outside the Tauri blast radius (gen/apple/)
14
+# so it survives any scaffold regeneration.
15
+# =============================================================================
16
+set -euo pipefail
17
+
18
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
19
+SRC_TAURI="$(cd "$SCRIPT_DIR/.." && pwd)"
20
+APPLE="$SRC_TAURI/gen/apple"
21
+
22
+if [ ! -d "$APPLE" ]; then
23
+ echo "❌ $APPLE does not exist."
24
+ echo " Run 'cargo tauri ios init' first, then re-run this script."
25
+ exit 1
26
+fi
27
+
28
+echo "▶ Overlaying native tooling into gen/apple …"
29
+
30
+# Tuist project manifest & config
31
+cp "$SCRIPT_DIR/Project.swift" "$APPLE/Project.swift"
32
+cp "$SCRIPT_DIR/Tuist.swift" "$APPLE/Tuist.swift"
33
+cp "$SCRIPT_DIR/mise.toml" "$APPLE/mise.toml"
34
+cp "$SCRIPT_DIR/README.md" "$APPLE/README.md"
35
+
36
+# .gitignore (stored as apple.gitignore to avoid being invisible in editors)
37
+cp "$SCRIPT_DIR/apple.gitignore" "$APPLE/.gitignore"
38
+
39
+# tvOS target
40
+mkdir -p "$APPLE/tauri-app_tvOS"
41
+cp -R "$SCRIPT_DIR/tauri-app_tvOS/." "$APPLE/tauri-app_tvOS/"
42
+
43
+# watchOS target (includes its own Assets.xcassets)
44
+mkdir -p "$APPLE/tauri-app_watchOS"
45
+cp -R "$SCRIPT_DIR/tauri-app_watchOS/." "$APPLE/tauri-app_watchOS/"
46
+
47
+# visionOS target
48
+mkdir -p "$APPLE/tauri-app_visionOS"
49
+cp -R "$SCRIPT_DIR/tauri-app_visionOS/." "$APPLE/tauri-app_visionOS/"
50
+
51
+echo "✅ Apple platform overlay applied."
52
+echo ""
53
+echo " Next steps:"
54
+echo " mise install # install pinned tuist"
55
+echo " tuist generate --no-open # (re)generate Xcode project"
56
+echo ""
examples/tauri-app/src-tauri/apple/mise.toml
renamed
examples/tauri-app/src-tauri/apple/tauri-app_tvOS/App.swift
renamed
examples/tauri-app/src-tauri/apple/tauri-app_tvOS/Info.plist
renamed
examples/tauri-app/src-tauri/apple/tauri-app_visionOS/App.swift
renamed
examples/tauri-app/src-tauri/apple/tauri-app_visionOS/Info.plist
renamed
examples/tauri-app/src-tauri/apple/tauri-app_watchOS/App.swift
renamed
examples/tauri-app/src-tauri/apple/tauri-app_watchOS/Assets.xcassets/AppIcon.appiconset/AppIcon-1024x1024.png
renamed
examples/tauri-app/src-tauri/apple/tauri-app_watchOS/Assets.xcassets/AppIcon.appiconset/Contents.json
renamed
examples/tauri-app/src-tauri/apple/tauri-app_watchOS/Assets.xcassets/Contents.json
renamed
examples/tauri-app/src-tauri/apple/tauri-app_watchOS/Info.plist
renamed
examples/tauri-app/src-tauri/gen/apple/.keep
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@3x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@3x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x-1.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x-1.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@2x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@2x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png
Binary files a/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png and /dev/null differ
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted
-116
@@ -1,116 +0,0 @@
1
-{
2
- "images" : [
3
- {
4
- "size" : "20x20",
5
- "idiom" : "iphone",
6
- "filename" : "AppIcon-20x20@2x.png",
7
- "scale" : "2x"
8
- },
9
- {
10
- "size" : "20x20",
11
- "idiom" : "iphone",
12
- "filename" : "AppIcon-20x20@3x.png",
13
- "scale" : "3x"
14
- },
15
- {
16
- "size" : "29x29",
17
- "idiom" : "iphone",
18
- "filename" : "AppIcon-29x29@2x-1.png",
19
- "scale" : "2x"
20
- },
21
- {
22
- "size" : "29x29",
23
- "idiom" : "iphone",
24
- "filename" : "AppIcon-29x29@3x.png",
25
- "scale" : "3x"
26
- },
27
- {
28
- "size" : "40x40",
29
- "idiom" : "iphone",
30
- "filename" : "AppIcon-40x40@2x.png",
31
- "scale" : "2x"
32
- },
33
- {
34
- "size" : "40x40",
35
- "idiom" : "iphone",
36
- "filename" : "AppIcon-40x40@3x.png",
37
- "scale" : "3x"
38
- },
39
- {
40
- "size" : "60x60",
41
- "idiom" : "iphone",
42
- "filename" : "AppIcon-60x60@2x.png",
43
- "scale" : "2x"
44
- },
45
- {
46
- "size" : "60x60",
47
- "idiom" : "iphone",
48
- "filename" : "AppIcon-60x60@3x.png",
49
- "scale" : "3x"
50
- },
51
- {
52
- "size" : "20x20",
53
- "idiom" : "ipad",
54
- "filename" : "AppIcon-20x20@1x.png",
55
- "scale" : "1x"
56
- },
57
- {
58
- "size" : "20x20",
59
- "idiom" : "ipad",
60
- "filename" : "AppIcon-20x20@2x-1.png",
61
- "scale" : "2x"
62
- },
63
- {
64
- "size" : "29x29",
65
- "idiom" : "ipad",
66
- "filename" : "AppIcon-29x29@1x.png",
67
- "scale" : "1x"
68
- },
69
- {
70
- "size" : "29x29",
71
- "idiom" : "ipad",
72
- "filename" : "AppIcon-29x29@2x.png",
73
- "scale" : "2x"
74
- },
75
- {
76
- "size" : "40x40",
77
- "idiom" : "ipad",
78
- "filename" : "AppIcon-40x40@1x.png",
79
- "scale" : "1x"
80
- },
81
- {
82
- "size" : "40x40",
83
- "idiom" : "ipad",
84
- "filename" : "AppIcon-40x40@2x-1.png",
85
- "scale" : "2x"
86
- },
87
- {
88
- "size" : "76x76",
89
- "idiom" : "ipad",
90
- "filename" : "AppIcon-76x76@1x.png",
91
- "scale" : "1x"
92
- },
93
- {
94
- "size" : "76x76",
95
- "idiom" : "ipad",
96
- "filename" : "AppIcon-76x76@2x.png",
97
- "scale" : "2x"
98
- },
99
- {
100
- "size" : "83.5x83.5",
101
- "idiom" : "ipad",
102
- "filename" : "AppIcon-83.5x83.5@2x.png",
103
- "scale" : "2x"
104
- },
105
- {
106
- "size" : "1024x1024",
107
- "idiom" : "ios-marketing",
108
- "filename" : "AppIcon-512@2x.png",
109
- "scale" : "1x"
110
- }
111
- ],
112
- "info" : {
113
- "version" : 1,
114
- "author" : "xcode"
115
- }
116
-}
\ No newline at end of file
examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/Contents.json
deleted
-6
@@ -1,6 +0,0 @@
1
-{
2
- "info" : {
3
- "version" : 1,
4
- "author" : "xcode"
5
- }
6
-}
\ No newline at end of file
examples/tauri-app/src-tauri/gen/apple/ExportOptions.plist
deleted
-8
@@ -1,8 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
-<plist version="1.0">
4
-<dict>
5
- <key>method</key>
6
- <string>debugging</string>
7
-</dict>
8
-</plist>
examples/tauri-app/src-tauri/gen/apple/LaunchScreen.storyboard
deleted
-30
@@ -1,30 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17150" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="Y6W-OH-hqX">
3
- <dependencies>
4
- <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17122"/>
5
- <capability name="Safe area layout guides" minToolsVersion="9.0"/>
6
- <capability name="System colors in document resources" minToolsVersion="11.0"/>
7
- <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
8
- </dependencies>
9
- <scenes>
10
- <!--View Controller-->
11
- <scene sceneID="s0d-6b-0kx">
12
- <objects>
13
- <viewController id="Y6W-OH-hqX" sceneMemberID="viewController">
14
- <view key="view" contentMode="scaleToFill" id="5EZ-qb-Rvc">
15
- <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
16
- <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
17
- <viewLayoutGuide key="safeArea" id="vDu-zF-Fre"/>
18
- <color key="backgroundColor" systemColor="systemBackgroundColor"/>
19
- </view>
20
- </viewController>
21
- <placeholder placeholderIdentifier="IBFirstResponder" id="Ief-a0-LHa" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
22
- </objects>
23
- </scene>
24
- </scenes>
25
- <resources>
26
- <systemColor name="systemBackgroundColor">
27
- <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
28
- </systemColor>
29
- </resources>
30
-</document>
examples/tauri-app/src-tauri/gen/apple/Podfile
deleted
-21
@@ -1,21 +0,0 @@
1
-# Uncomment the next line to define a global platform for your project
2
-
3
-target 'tauri-app_iOS' do
4
-platform :ios, '14.0'
5
- # Pods for tauri-app_iOS
6
-end
7
-
8
-target 'tauri-app_macOS' do
9
-platform :osx, '11.0'
10
- # Pods for tauri-app_macOS
11
-end
12
-
13
-# Delete the deployment target for iOS and macOS, causing it to be inherited from the Podfile
14
-post_install do |installer|
15
- installer.pods_project.targets.each do |target|
16
- target.build_configurations.each do |config|
17
- config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
18
- config.build_settings.delete 'MACOSX_DEPLOYMENT_TARGET'
19
- end
20
- end
21
-end
examples/tauri-app/src-tauri/gen/apple/README.md
deleted
-92
@@ -1,92 +0,0 @@
1
-# Tauri + Tuist — iOS / tvOS / watchOS / visionOS project
2
-
3
-`Project.swift` is the single source of truth for the Xcode project.
4
-There is no Makefile. Use Tuist directly.
5
-
6
-## Prerequisites
7
-
8
-Install [mise](https://mise.jdx.dev/) then activate the pinned Tuist version:
9
-
10
-```sh
11
-mise install # reads mise.toml → installs tuist 4.150.0
12
-eval "$(mise activate bash)" # or zsh/fish
13
-```
14
-
15
-## Day-to-day commands
16
-
17
-| What | Command |
18
-|---|---|
19
-| Generate the Xcode project (headless) | `tuist generate --no-open` |
20
-| Generate **and** open Xcode | `tuist generate` |
21
-| Clean generated artifacts | `tuist clean` |
22
-| Edit Project.swift in Xcode | `tuist edit` |
23
-
24
-## Building
25
-
26
-After `tuist generate`, build through Xcode or the command line:
27
-
28
-```sh
29
-# iOS (simulator)
30
-xcodebuild \
31
- -workspace tauri-app.xcworkspace \
32
- -scheme tauri-app_iOS \
33
- -destination "generic/platform=iOS Simulator" \
34
- -configuration Debug \
35
- build
36
-
37
-# tvOS (simulator)
38
-xcodebuild \
39
- -workspace tauri-app.xcworkspace \
40
- -scheme tauri-app_tvOS \
41
- -destination "generic/platform=tvOS Simulator" \
42
- -configuration Debug \
43
- build
44
-
45
-# watchOS (simulator)
46
-xcodebuild \
47
- -workspace tauri-app.xcworkspace \
48
- -scheme tauri-app_watchOS \
49
- -destination "generic/platform=watchOS Simulator" \
50
- -configuration Debug \
51
- build
52
-
53
-# visionOS (simulator)
54
-xcodebuild \
55
- -workspace tauri-app.xcworkspace \
56
- -scheme tauri-app_visionOS \
57
- -destination "generic/platform=visionOS Simulator" \
58
- -configuration Debug \
59
- build
60
-```
61
-
62
-## After `cargo tauri ios init`
63
-
64
-Tauri regenerates `project.yml` (XcodeGen format) but does **not** touch
65
-`Project.swift`. Since Tuist is the source of truth, just re-run:
66
-
67
-```sh
68
-tuist generate --no-open
69
-```
70
-
71
-If Tauri added new source files or frameworks in `project.yml`, port those
72
-changes to `Project.swift` first, then generate.
73
-
74
-## Full reset
75
-
76
-```sh
77
-cd ../../ # back to src-tauri
78
-cargo tauri ios init # re-scaffold project.yml
79
-cd gen/apple
80
-tuist generate --no-open
81
-```
82
-
83
-## What gets generated (git-ignored)
84
-
85
-| Path | Created by |
86
-|---|---|
87
-| `project.yml` | `cargo tauri ios init` |
88
-| `*.xcodeproj/` | `tuist generate` |
89
-| `*.xcworkspace/` | `tuist generate` |
90
-| `Derived/` | `tuist generate` |
91
-| `Externals/` | Rust build (`cargo tauri ios xcode-script`) |
92
-| `build/` | Xcode |
\ No newline at end of file
examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/bindings/bindings.h
deleted
-8
@@ -1,8 +0,0 @@
1
-#pragma once
2
-
3
-namespace ffi {
4
- extern "C" {
5
- void start_app();
6
- }
7
-}
8
-
examples/tauri-app/src-tauri/gen/apple/Sources/tauri-app/main.mm
deleted
-6
@@ -1,6 +0,0 @@
1
-#include "bindings/bindings.h"
2
-
3
-int main(int argc, char * argv[]) {
4
- ffi::start_app();
5
- return 0;
6
-}
examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/Info.plist
deleted
-44
@@ -1,44 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
-<plist version="1.0">
4
-<dict>
5
- <key>CFBundleDevelopmentRegion</key>
6
- <string>$(DEVELOPMENT_LANGUAGE)</string>
7
- <key>CFBundleExecutable</key>
8
- <string>$(EXECUTABLE_NAME)</string>
9
- <key>CFBundleIdentifier</key>
10
- <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11
- <key>CFBundleInfoDictionaryVersion</key>
12
- <string>6.0</string>
13
- <key>CFBundleName</key>
14
- <string>$(PRODUCT_NAME)</string>
15
- <key>CFBundlePackageType</key>
16
- <string>APPL</string>
17
- <key>CFBundleShortVersionString</key>
18
- <string>0.1.0</string>
19
- <key>CFBundleVersion</key>
20
- <string>0.1.0</string>
21
- <key>LSRequiresIPhoneOS</key>
22
- <true/>
23
- <key>UILaunchStoryboardName</key>
24
- <string>LaunchScreen</string>
25
- <key>UIRequiredDeviceCapabilities</key>
26
- <array>
27
- <string>arm64</string>
28
- <string>metal</string>
29
- </array>
30
- <key>UISupportedInterfaceOrientations</key>
31
- <array>
32
- <string>UIInterfaceOrientationPortrait</string>
33
- <string>UIInterfaceOrientationLandscapeLeft</string>
34
- <string>UIInterfaceOrientationLandscapeRight</string>
35
- </array>
36
- <key>UISupportedInterfaceOrientations~ipad</key>
37
- <array>
38
- <string>UIInterfaceOrientationPortrait</string>
39
- <string>UIInterfaceOrientationPortraitUpsideDown</string>
40
- <string>UIInterfaceOrientationLandscapeLeft</string>
41
- <string>UIInterfaceOrientationLandscapeRight</string>
42
- </array>
43
-</dict>
44
-</plist>
\ No newline at end of file
examples/tauri-app/src-tauri/gen/apple/tauri-app_iOS/tauri-app_iOS.entitlements
deleted
-5
@@ -1,5 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
-<plist version="1.0">
4
-<dict/>
5
-</plist>