Skip to content

Commit f9bbc20

Browse files
committed
feat: update appxmanifest and improve build scripts for Windows packaging
1 parent ac7d610 commit f9bbc20

6 files changed

Lines changed: 74 additions & 18 deletions

File tree

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,10 @@ ROADMAP.md
4747
build_log.txt
4848
src-tauri/check_results.txt
4949
src-tauri/full_check.txt
50-
src-tauri/windows/Package.appxmanifest
5150
src-tauri/windows/msix-staging/timelens.exe
5251
src-tauri/windows/out/TimeLens-0.5.0.0.msix
53-
src-tauri/windows/msix-staging/AppxManifest.xml
5452
src-tauri/windows/msix-staging/timelens.exe
5553
browser-extension.zip
5654
src-tauri/windows/msix-staging/timelens.exe
5755
vscode-extension/timelens-vscode-extension-0.1.0.vsix
56+
src-tauri/windows/msix-staging/timelens.exe

scripts/build-msix.ps1

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -166,22 +166,25 @@ $OutDir = Join-Path $WindowsDir "out"
166166
$MsixPath = Join-Path $OutDir "TimeLens-$Version.msix"
167167
$SourceIcon = Join-Path $RepoRoot "src-tauri\icons\icon.png"
168168

169-
if (!(Test-Path $ManifestPath)) {
170-
Write-Host "Package.appxmanifest not found. Generating a default manifest..."
171-
$identityName = Convert-ToAppxIdentityName -Raw $TauriConfig.identifier
172-
$publisher = $TauriConfig.bundle.publisher
173-
if ([string]::IsNullOrWhiteSpace($publisher)) {
174-
$publisher = "CN=TimeLens"
175-
}
176-
$displayName = if ([string]::IsNullOrWhiteSpace($TauriConfig.productName)) { "TimeLens" } else { $TauriConfig.productName }
177-
$description = if ([string]::IsNullOrWhiteSpace($PackageJson.description)) {
178-
"Screen time tracker and desktop widget manager"
179-
} else {
180-
$PackageJson.description
181-
}
182-
New-AppxManifest -Path $ManifestPath -IdentityName $identityName -IdentityPublisher $publisher -IdentityVersion $Version -DisplayName $displayName -Description $description -PublisherDisplayName $displayName
183-
Write-Host "Generated manifest: $ManifestPath"
169+
$identityName = Convert-ToAppxIdentityName -Raw $TauriConfig.identifier
170+
$publisher = $TauriConfig.bundle.publisher
171+
if ([string]::IsNullOrWhiteSpace($publisher)) {
172+
$publisher = "CN=TimeLens"
173+
}
174+
$displayName = if ([string]::IsNullOrWhiteSpace($TauriConfig.productName)) { "TimeLens" } else { $TauriConfig.productName }
175+
$publisherDisplayName = if ($PackageJson.authors -and $PackageJson.authors.Count -gt 0) {
176+
[string]$PackageJson.authors[0]
177+
} else {
178+
$displayName
179+
}
180+
$description = if ([string]::IsNullOrWhiteSpace($PackageJson.description)) {
181+
"Screen time tracker and desktop widget manager"
182+
} else {
183+
$PackageJson.description
184184
}
185+
Write-Host "Regenerating Package.appxmanifest..."
186+
New-AppxManifest -Path $ManifestPath -IdentityName $identityName -IdentityPublisher $publisher -IdentityVersion $Version -DisplayName $displayName -Description $description -PublisherDisplayName $publisherDisplayName
187+
Write-Host "Generated manifest: $ManifestPath"
185188

186189
Write-Host "[1/5] Building Tauri release binary..."
187190
Push-Location $RepoRoot
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Package
3+
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
4+
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
5+
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
6+
IgnorableNamespaces="uap rescap">
7+
<Identity Name="ShanWenxiao.TimeLens.TimeManagementAppwithWidgets" Publisher="CN=67203FD7-3571-4CF3-9A8B-DE6BA454CE5B" Version="1.2.0.0" />
8+
<Properties>
9+
<DisplayName>TimeLens</DisplayName>
10+
<PublisherDisplayName>TimeLens</PublisherDisplayName>
11+
<Description>Screen time tracker and desktop widget manager</Description>
12+
<Logo>Assets\StoreLogo.png</Logo>
13+
</Properties>
14+
<Dependencies>
15+
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.22621.0" />
16+
</Dependencies>
17+
<Resources>
18+
<Resource Language="en-us" />
19+
<Resource Language="zh-cn" />
20+
</Resources>
21+
<Applications>
22+
<Application Id="App" Executable="timelens.exe" EntryPoint="Windows.FullTrustApplication">
23+
<uap:VisualElements
24+
DisplayName="TimeLens"
25+
Description="Screen time tracker and desktop widget manager"
26+
BackgroundColor="transparent"
27+
Square44x44Logo="Assets\Square44x44Logo.png"
28+
Square150x150Logo="Assets\Square150x150Logo.png">
29+
<uap:DefaultTile
30+
Wide310x150Logo="Assets\Wide310x150Logo.png"
31+
Square310x310Logo="Assets\Square310x310Logo.png"
32+
Square71x71Logo="Assets\Square71x71Logo.png" />
33+
</uap:VisualElements>
34+
</Application>
35+
</Applications>
36+
<Capabilities>
37+
<rescap:Capability Name="runFullTrust" />
38+
</Capabilities>
39+
</Package>
0 Bytes
Binary file not shown.

src/components/ExePickerInput.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { useState, useEffect, useRef } from "react";
22
import { FolderOpen } from "lucide-react";
3-
import { open as dialogOpen } from "@tauri-apps/plugin-dialog";
43
import type { ExecutableOption } from "@/types";
54
import clsx from "clsx";
65

@@ -60,6 +59,7 @@ export default function ExePickerInput({
6059

6160
const browseFile = async () => {
6261
try {
62+
const { open: dialogOpen } = await import("@tauri-apps/plugin-dialog");
6363
const selected = await dialogOpen({
6464
filters: [{ name: "Executable", extensions: ["exe", "app", ""] }],
6565
multiple: false,

vite.config.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,20 @@ export default defineConfig({
3131
target: ["es2021", "chrome105", "safari15"],
3232
minify: !process.env.TAURI_DEBUG ? "esbuild" : false,
3333
sourcemap: !!process.env.TAURI_DEBUG,
34+
rollupOptions: {
35+
output: {
36+
manualChunks(id) {
37+
if (!id.includes("node_modules")) return undefined;
38+
if (id.includes("react-router-dom")) return "react-router";
39+
if (id.includes("react-dom") || id.includes("react")) return "react";
40+
if (id.includes("recharts")) return "recharts";
41+
if (id.includes("lucide-react")) return "icons";
42+
if (id.includes("i18next") || id.includes("react-i18next")) return "i18n";
43+
if (id.includes("@tauri-apps")) return "tauri";
44+
if (id.includes("zustand")) return "state";
45+
return "vendor";
46+
},
47+
},
48+
},
3449
},
3550
});

0 commit comments

Comments
 (0)