Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 6 additions & 2 deletions Sentinel.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
objects = {

/* Begin PBXBuildFile section */
3002E9352F38E9A5008068BA /* 202602.icon in Resources */ = {isa = PBXBuildFile; fileRef = 3002E9342F38E9A5008068BA /* 202602.icon */; };
4180AEAE2839753E0054FEA9 /* SentinelApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4180AEAD2839753E0054FEA9 /* SentinelApp.swift */; };
4180AEEB2839A0280054FEA9 /* AboutCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4180AEEA2839A0280054FEA9 /* AboutCommand.swift */; };
4180AEFB2839A32F0054FEA9 /* AboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4180AEFA2839A32F0054FEA9 /* AboutView.swift */; };
Expand Down Expand Up @@ -54,6 +55,7 @@
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
3002E9342F38E9A5008068BA /* 202602.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = 202602.icon; sourceTree = "<group>"; };
4180AEAA2839753E0054FEA9 /* Sentinel.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Sentinel.app; sourceTree = BUILT_PRODUCTS_DIR; };
4180AEAD2839753E0054FEA9 /* SentinelApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentinelApp.swift; sourceTree = "<group>"; };
4180AEB62839753F0054FEA9 /* SentinelApp.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SentinelApp.entitlements; sourceTree = "<group>"; };
Expand Down Expand Up @@ -150,6 +152,7 @@
4180AEEC2839A0560054FEA9 /* Utilities */,
4180AEAD2839753E0054FEA9 /* SentinelApp.swift */,
C7374B662E79C8110015DEED /* Sentinel.icon */,
3002E9342F38E9A5008068BA /* 202602.icon */,
4180AEB62839753F0054FEA9 /* SentinelApp.entitlements */,
C733F76E29CA65AC00DADADD /* AppState.swift */,
C78AAAB42BB33F9A002AD918 /* Styles.swift */,
Expand Down Expand Up @@ -276,6 +279,7 @@
buildActionMask = 2147483647;
files = (
C7BEBE212E846AB400B56DE9 /* Assets.xcassets in Resources */,
3002E9352F38E9A5008068BA /* 202602.icon in Resources */,
C7374B672E79C8110015DEED /* Sentinel.icon in Resources */,
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that the app icon build setting points to 202602, the old Sentinel.icon is likely no longer used by the main app target but is still being copied into the app’s Resources. If it’s not needed for anything else, removing it from the Resources build phase will avoid shipping two icon composer assets and reduce bundle size/confusion.

Suggested change
C7374B672E79C8110015DEED /* Sentinel.icon in Resources */,

Copilot uses AI. Check for mistakes.
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down Expand Up @@ -457,7 +461,7 @@
4180AEBA2839753F0054FEA9 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = Sentinel;
ASSETCATALOG_COMPILER_APPICON_NAME = 202602;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = Sentinel/SentinelApp.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
Expand Down Expand Up @@ -497,7 +501,7 @@
4180AEBB2839753F0054FEA9 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = Sentinel;
ASSETCATALOG_COMPILER_APPICON_NAME = 202602;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = Sentinel/SentinelApp.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Release"
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
Expand Down
Binary file added Sentinel/202602.icon/Assets/Image 2.png
Binary file added Sentinel/202602.icon/Assets/Image 3.png
Binary file added Sentinel/202602.icon/Assets/Image.png
101 changes: 101 additions & 0 deletions Sentinel/202602.icon/icon.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
{
"fill" : {
"linear-gradient" : [
"display-p3:0.48945,0.17982,0.58353,1.00000",
"display-p3:0.04332,0.12145,0.34426,1.00000"
],
"orientation" : {
"start" : {
"x" : 0.5,
"y" : 0
},
"stop" : {
"x" : 0.5,
"y" : 0.7
}
}
},
"groups" : [
{
"layers" : [
{
"fill-specializations" : [
{
"appearance" : "tinted",
"value" : {
"solid" : "extended-srgb:0.00000,0.53333,1.00000,1.00000"
}
}
],
"glass" : false,
"hidden" : false,
"image-name" : "Image 3.png",
"name" : "Image 3",
"position" : {
"scale" : 0.86,
"translation-in-points" : [
0,
11.390625
]
}
},
{
"glass" : false,
"hidden" : true,
"image-name" : "Image 2.png",
"name" : "Image 2",
"position" : {
"scale" : 0.77,
"translation-in-points" : [
0,
0
]
}
}
],
"shadow" : {
"kind" : "neutral",
"opacity" : 0.5
},
"translucency" : {
"enabled" : true,
"value" : 0.5
}
},
{
"layers" : [
{
"fill-specializations" : [
{
"appearance" : "tinted",
"value" : "automatic"
}
],
"glass" : false,
"image-name" : "Image.png",
"name" : "Image"
}
],
"position" : {
"scale" : 0.69,
"translation-in-points" : [
0,
0
]
},
"shadow" : {
"kind" : "neutral",
"opacity" : 0.5
},
"translucency" : {
"enabled" : true,
"value" : 0.5
}
}
],
"supported-platforms" : {
"squares" : [
"macOS"
]
}
}
2 changes: 1 addition & 1 deletion Sentinel/AppState.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import SwiftUI
import FinderSync

class AppState: ObservableObject {
static let shared = AppState()
@MainActor static let shared = AppState()
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR is titled/described as an app icon update, but this change introduces a concurrency/actor-isolation behavior change for the AppState singleton. If this is intentional (e.g., to address main-thread publishing warnings), it should be called out in the PR description; otherwise consider moving it to a separate PR to keep scope focused.

Copilot uses AI. Check for mistakes.
@Published var isGatekeeperEnabled: Bool = true
@Published var isGatekeeperEnabledState: Bool = true
@Published var hasInitializedGatekeeperState = false
Expand Down
11 changes: 11 additions & 0 deletions Sentinel/SentinelApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,17 @@ class AppDelegate: NSObject, NSApplicationDelegate {
guard !AppState.shared.isLoading else { return }
updateGatekeeperUI(appState: AppState.shared)
}

// Add window close notification observer
NotificationCenter.default.addObserver(
Comment on lines +64 to +66
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These changes (window-close observer) don’t appear related to the PR’s stated goal of updating the app icon. Consider moving this behavior change into a separate PR (or at least calling it out in the PR description) to keep review/rollback scoped to the icon update.

Copilot uses AI. Check for mistakes.
Comment on lines +65 to +66
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indentation is off here (the comment is indented more than the surrounding code), which makes the block harder to read and looks like an accidental tab/space change. Align it with the other statements in applicationDidFinishLaunching(_:).

Copilot uses AI. Check for mistakes.
forName: NSWindow.willCloseNotification,
object: nil,
queue: .main
) { _ in
if NSApp.windows.isEmpty {
NSApp.terminate(nil)
}
}
Comment on lines +65 to +74
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new NSWindow.willCloseNotification observer is redundant with applicationShouldTerminateAfterLastWindowClosed(_:), which already returns true. Also, checking NSApp.windows.isEmpty inside willClose is unlikely to ever be true because the closing window is still present when willClose fires, so this probably won’t terminate as intended. Prefer removing this observer entirely (keep the delegate method), or move the logic into applicationShouldTerminateAfterLastWindowClosed / use a post-close notification (or dispatch async) if custom behavior is needed.

Copilot uses AI. Check for mistakes.
}

// MARK: - File Opening
Expand Down
5 changes: 2 additions & 3 deletions Sentinel/Styles.swift
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,6 @@ struct DropTarget: View {


struct DropBG: View {

var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 8)
Expand All @@ -124,9 +123,9 @@ struct DropBG: View {
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}

}


public struct LearnMorePopover: View {
@State private var isPopoverPresented: Bool = false
let text: String
Expand Down Expand Up @@ -165,7 +164,7 @@ struct UnlockView: View {

var body: some View {
HStack() {
Image(systemName: "lock.open.fill")
Image(systemName: "lock.open.fill")
Text(text)
}
.foregroundColor(Color(red: 1/255, green: 99/255, blue: 16/255, opacity: 1))
Expand Down
Binary file added assets/128×128@2x.png
Binary file added assets/256×256@2x.png
Binary file added assets/sentinel.png
Loading