Skip to content

Commit 2f54a53

Browse files
committed
fix(tauri): scope Parakeet sidecar to macOS builds and improve UX
- Remove externalBin from base config; add macOS-only tauri.macos.conf.json - Restrict sidecar capabilities to macOS (drop from default/windows) - Emit friendly 'parakeet-unavailable' event on spawn errors; show toast in UI - Harden Swift sidecar (avoid force unwraps); fix build.rs invocation - Update macOS build/release scripts to pass --config tauri.macos.conf.json Why: prevent non-macOS build failures, enforce least-privilege, and improve error UX per Tauri v2 guidance.
1 parent 855a2ed commit 2f54a53

File tree

18 files changed

+100
-50
lines changed

18 files changed

+100
-50
lines changed

scripts/build-notarized.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ echo -e "${YELLOW}Cleaning previous builds...${NC}"
9191
rm -rf target/universal-apple-darwin/release/bundle
9292

9393
# Build universal binary - Tauri will automatically sign and notarize
94-
cargo tauri build --target universal-apple-darwin --bundles app,dmg
94+
cargo tauri build --target universal-apple-darwin --bundles app,dmg --config tauri.macos.conf.json
9595

9696
cd ..
9797

scripts/rebuild-current-release.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ export COPYFILE_DISABLE=1
2222
echo -e "${GREEN}🔨 Building for both architectures...${NC}"
2323
echo -e "${YELLOW}Building for Intel (x86_64)...${NC}"
2424
cd src-tauri
25-
cargo tauri build --target x86_64-apple-darwin --bundles app
25+
cargo tauri build --target x86_64-apple-darwin --bundles app --config tauri.macos.conf.json
2626
cd ..
2727

2828
echo -e "${YELLOW}Building for Apple Silicon (aarch64)...${NC}"
2929
cd src-tauri
30-
cargo tauri build --target aarch64-apple-darwin --bundles app
30+
cargo tauri build --target aarch64-apple-darwin --bundles app --config tauri.macos.conf.json
3131
cd ..
3232

3333
# Create output directory

scripts/release-notarized.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ echo -e "${GREEN}🔨 Building for both architectures...${NC}"
132132
# Build Intel version
133133
echo -e "${YELLOW}Building for Intel (x86_64)...${NC}"
134134
cd src-tauri
135-
cargo tauri build --target x86_64-apple-darwin
135+
cargo tauri build --target x86_64-apple-darwin --config tauri.macos.conf.json
136136
cd ..
137137

138138
# Sign and notarize Intel build
@@ -147,7 +147,7 @@ fi
147147
# Build Apple Silicon version
148148
echo -e "${YELLOW}Building for Apple Silicon (aarch64)...${NC}"
149149
cd src-tauri
150-
cargo tauri build --target aarch64-apple-darwin
150+
cargo tauri build --target aarch64-apple-darwin --config tauri.macos.conf.json
151151
cd ..
152152

153153
# Sign and notarize Apple Silicon build

scripts/release-separate.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ echo -e "${GREEN}🔨 Building x86_64 binary with notarization...${NC}"
238238
echo -e "${BLUE}This will take some time as it includes notarization...${NC}"
239239

240240
cd src-tauri
241-
cargo tauri build --target x86_64-apple-darwin --bundles app,dmg
241+
cargo tauri build --target x86_64-apple-darwin --bundles app,dmg --config tauri.macos.conf.json
242242
cd ..
243243

244244
# Find x86_64 build artifacts
@@ -277,7 +277,7 @@ echo -e "${GREEN}🔨 Building aarch64 binary with notarization...${NC}"
277277
echo -e "${BLUE}This will take some time as it includes notarization...${NC}"
278278

279279
cd src-tauri
280-
cargo tauri build --target aarch64-apple-darwin --bundles app,dmg
280+
cargo tauri build --target aarch64-apple-darwin --bundles app,dmg --config tauri.macos.conf.json
281281
cd ..
282282

283283
# Find aarch64 build artifacts

scripts/release-universal.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ echo -e "${BLUE}This will take some time as it includes notarization...${NC}"
167167
cd src-tauri
168168

169169
# Build universal binary - Tauri will automatically sign and notarize
170-
cargo tauri build --target universal-apple-darwin --bundles app,dmg
170+
cargo tauri build --target universal-apple-darwin --bundles app,dmg --config tauri.macos.conf.json
171171

172172
cd ..
173173

scripts/release.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,10 @@ git push origin "v${NEW_VERSION}"
8080
echo -e "${GREEN}🔨 Building for both architectures...${NC}"
8181
echo -e "${YELLOW}Building for Intel (x86_64)...${NC}"
8282
cd src-tauri
83-
cargo tauri build --target x86_64-apple-darwin
83+
cargo tauri build --target x86_64-apple-darwin --config tauri.macos.conf.json
8484

8585
echo -e "${YELLOW}Building for Apple Silicon (aarch64)...${NC}"
86-
cargo tauri build --target aarch64-apple-darwin
86+
cargo tauri build --target aarch64-apple-darwin --config tauri.macos.conf.json
8787
cd ..
8888

8989
# Fix archives to remove AppleDouble files

sidecar/parakeet-swift/Sources/main.swift

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,15 @@ struct ParakeetSidecar {
7979
guard !trimmed.isEmpty else { continue }
8080

8181
do {
82-
let data = trimmed.data(using: .utf8)!
83-
let json = try JSONSerialization.jsonObject(with: data) as! [String: Any]
82+
guard let data = trimmed.data(using: .utf8) else {
83+
sendError("invalid_encoding", message: "Failed to parse command payload", encoder: encoder)
84+
continue
85+
}
86+
87+
guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] else {
88+
sendError("invalid_payload", message: "Command payload must be a JSON object", encoder: encoder)
89+
continue
90+
}
8491

8592
switch json["type"] as? String {
8693
case "load_model", "download_model":
@@ -153,8 +160,9 @@ struct ParakeetSidecar {
153160
isModelDownloaded = true
154161

155162
// Initialize ASR manager with downloaded models
156-
asrManager = AsrManager(config: .default)
157-
try await asrManager!.initialize(models: models)
163+
let manager = AsrManager(config: .default)
164+
try await manager.initialize(models: models)
165+
asrManager = manager
158166

159167
log("✅ ASR manager initialized, model ready for use!")
160168
isModelLoaded = true
@@ -216,9 +224,14 @@ struct ParakeetSidecar {
216224
return
217225
}
218226

227+
guard let manager = asrManager else {
228+
sendError("model_not_loaded", message: "Parakeet engine is not initialized", encoder: encoder)
229+
return
230+
}
231+
219232
do {
220233
// Transcribe the audio file (returns ASRResult)
221-
let result = try await asrManager!.transcribe(fileURL)
234+
let result = try await manager.transcribe(fileURL)
222235

223236
// Send transcription response
224237
let response = TranscriptionResponse(

src-tauri/build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ fn main() {
1818
std::fs::create_dir_all(&dist_dir).ok();
1919

2020
let output = Command::new("bash")
21-
.arg(&build_script)
21+
.arg("build.sh")
2222
.arg("release")
2323
.current_dir(&sidecar_dir)
2424
.output();

src-tauri/capabilities/default.json

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,6 @@
2727
"dialog:default",
2828
"fs:scope-appdata",
2929
"shell:allow-open",
30-
{
31-
"identifier": "shell:allow-spawn",
32-
"allow": [
33-
{ "name": "parakeet-sidecar", "sidecar": true },
34-
{ "name": "parakeet-sidecar-aarch64-apple-darwin", "sidecar": true }
35-
]
36-
},
37-
{
38-
"identifier": "shell:allow-stdin-write",
39-
"allow": [
40-
{ "name": "parakeet-sidecar", "sidecar": true },
41-
{ "name": "parakeet-sidecar-aarch64-apple-darwin", "sidecar": true }
42-
]
43-
},
4430
"autostart:allow-enable",
4531
"autostart:allow-disable",
4632
"autostart:allow-is-enabled",

src-tauri/capabilities/windows.json

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,6 @@
2828
"dialog:default",
2929
"fs:scope-appdata",
3030
"shell:allow-open",
31-
{ "identifier": "shell:allow-spawn", "allow": [
32-
{ "name": "parakeet-sidecar", "sidecar": true },
33-
{ "name": "parakeet-sidecar-x86_64-pc-windows-msvc", "sidecar": true }
34-
] },
35-
{ "identifier": "shell:allow-stdin-write", "allow": [
36-
{ "name": "parakeet-sidecar", "sidecar": true },
37-
{ "name": "parakeet-sidecar-x86_64-pc-windows-msvc", "sidecar": true }
38-
] },
3931
"autostart:allow-enable",
4032
"autostart:allow-disable",
4133
"autostart:allow-is-enabled",

0 commit comments

Comments
 (0)