mirror of
https://github.com/exituser/Pearcleaner.git
synced 2026-09-17 08:29:07 +00:00
v3.0.1
This commit is contained in:
@@ -539,7 +539,7 @@
|
|||||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
|
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 19;
|
CURRENT_PROJECT_VERSION = 20;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = BK8443AXLU;
|
DEVELOPMENT_TEAM = BK8443AXLU;
|
||||||
@@ -557,7 +557,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 3.0.0;
|
MARKETING_VERSION = 3.0.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.alienator88.Pearcleaner;
|
PRODUCT_BUNDLE_IDENTIFIER = com.alienator88.Pearcleaner;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
@@ -574,7 +574,7 @@
|
|||||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
|
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 19;
|
CURRENT_PROJECT_VERSION = 20;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = BK8443AXLU;
|
DEVELOPMENT_TEAM = BK8443AXLU;
|
||||||
@@ -592,7 +592,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 3.0.0;
|
MARKETING_VERSION = 3.0.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.alienator88.Pearcleaner;
|
PRODUCT_BUNDLE_IDENTIFIER = com.alienator88.Pearcleaner;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class Locations: ObservableObject {
|
|||||||
"\(home)/Library/Preferences",
|
"\(home)/Library/Preferences",
|
||||||
"\(home)/Library/Preferences/ByHost",
|
"\(home)/Library/Preferences/ByHost",
|
||||||
"\(home)/Library/Saved Application State",
|
"\(home)/Library/Saved Application State",
|
||||||
|
"\(home)/Library/Services",
|
||||||
"\(home)/Library/WebKit",
|
"\(home)/Library/WebKit",
|
||||||
"/Users/Shared",
|
"/Users/Shared",
|
||||||
"/Users/Library",
|
"/Users/Library",
|
||||||
|
|||||||
@@ -541,6 +541,7 @@ struct FilesViewActionButton: ButtonStyle {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct SentinelToggleStyle: ToggleStyle {
|
struct SentinelToggleStyle: ToggleStyle {
|
||||||
|
|
||||||
func makeBody(configuration: Configuration) -> some View {
|
func makeBody(configuration: Configuration) -> some View {
|
||||||
@@ -669,7 +670,7 @@ struct PearDropView: View {
|
|||||||
VStack(alignment: .center, spacing: 0) {
|
VStack(alignment: .center, spacing: 0) {
|
||||||
HStack(spacing: 0) {
|
HStack(spacing: 0) {
|
||||||
LinearGradient(gradient: Gradient(colors: [.green, .orange]), startPoint: .leading, endPoint: .trailing)
|
LinearGradient(gradient: Gradient(colors: [.green, .orange]), startPoint: .leading, endPoint: .trailing)
|
||||||
.frame(width: 195)
|
.frame(width: 220)
|
||||||
LinearGradient(gradient: Gradient(colors: [.orange, Color("mode").opacity(0.5)]), startPoint: .leading, endPoint: .trailing)
|
LinearGradient(gradient: Gradient(colors: [.orange, Color("mode").opacity(0.5)]), startPoint: .leading, endPoint: .trailing)
|
||||||
.frame(width: 10)
|
.frame(width: 10)
|
||||||
LinearGradient(gradient: Gradient(colors: [Color("mode").opacity(0.5), Color("mode").opacity(0.5)]), startPoint: .leading, endPoint: .trailing)
|
LinearGradient(gradient: Gradient(colors: [Color("mode").opacity(0.5), Color("mode").opacity(0.5)]), startPoint: .leading, endPoint: .trailing)
|
||||||
@@ -679,7 +680,7 @@ struct PearDropView: View {
|
|||||||
Image("logo_text_small")
|
Image("logo_text_small")
|
||||||
.resizable()
|
.resizable()
|
||||||
.scaledToFit()
|
.scaledToFit()
|
||||||
.frame(width: 500, height: 120)
|
.frame(width: 500)
|
||||||
.padding()
|
.padding()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ struct PearcleanerApp: App {
|
|||||||
loadAllPaths(allApps: sortedApps.userApps + sortedApps.systemApps, appState: appState, locations: locations)
|
loadAllPaths(allApps: sortedApps.userApps + sortedApps.systemApps, appState: appState, locations: locations)
|
||||||
}
|
}
|
||||||
|
|
||||||
getFeatures(appState: appState, show: $showFeature, features: $features)
|
|
||||||
|
|
||||||
#if !DEBUG
|
#if !DEBUG
|
||||||
Task {
|
Task {
|
||||||
@@ -114,6 +114,7 @@ struct PearcleanerApp: App {
|
|||||||
// Check for updates after app launch
|
// Check for updates after app launch
|
||||||
if diskP {
|
if diskP {
|
||||||
loadGithubReleases(appState: appState)
|
loadGithubReleases(appState: appState)
|
||||||
|
getFeatures(appState: appState, show: $showFeature, features: $features)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for disk/accessibility permissions just once on initial app launch
|
// Check for disk/accessibility permissions just once on initial app launch
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
"color-space" : "display-p3",
|
"color-space" : "display-p3",
|
||||||
"components" : {
|
"components" : {
|
||||||
"alpha" : "1.000",
|
"alpha" : "1.000",
|
||||||
"blue" : "0x59",
|
"blue" : "0xFF",
|
||||||
"green" : "0x48",
|
"green" : "0xFF",
|
||||||
"red" : "0xFF"
|
"red" : "0xFF"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -23,8 +23,8 @@
|
|||||||
"color-space" : "display-p3",
|
"color-space" : "display-p3",
|
||||||
"components" : {
|
"components" : {
|
||||||
"alpha" : "1.000",
|
"alpha" : "1.000",
|
||||||
"blue" : "0x59",
|
"blue" : "0xFF",
|
||||||
"green" : "0x48",
|
"green" : "0xFF",
|
||||||
"red" : "0xFF"
|
"red" : "0xFF"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"colors" : [
|
||||||
|
{
|
||||||
|
"color" : {
|
||||||
|
"color-space" : "display-p3",
|
||||||
|
"components" : {
|
||||||
|
"alpha" : "1.000",
|
||||||
|
"blue" : "0xF6",
|
||||||
|
"green" : "0xF6",
|
||||||
|
"red" : "0xF6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"idiom" : "universal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"appearances" : [
|
||||||
|
{
|
||||||
|
"appearance" : "luminosity",
|
||||||
|
"value" : "dark"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"color" : {
|
||||||
|
"color-space" : "display-p3",
|
||||||
|
"components" : {
|
||||||
|
"alpha" : "1.000",
|
||||||
|
"blue" : "0x29",
|
||||||
|
"green" : "0x28",
|
||||||
|
"red" : "0x29"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -48,6 +48,7 @@ struct GeneralSettingsTab: View {
|
|||||||
.font(.callout)
|
.font(.callout)
|
||||||
.foregroundStyle(.gray)
|
.foregroundStyle(.gray)
|
||||||
}
|
}
|
||||||
|
InfoButton(text: "When transparent material is enabled, sticky section headers (User/System) in app list are disabled to keep from showing app name text overlayed under the section header text with no background to separate the two.", color: nil)
|
||||||
Spacer()
|
Spacer()
|
||||||
Toggle(isOn: $glass, label: {
|
Toggle(isOn: $glass, label: {
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -64,35 +64,46 @@ struct AppListView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.padding(.top, 20)
|
.padding(.top, 20)
|
||||||
.padding(.bottom)
|
// .padding(.bottom)
|
||||||
|
|
||||||
ScrollView {
|
ScrollView {
|
||||||
|
|
||||||
LazyVStack(alignment: .leading, pinnedViews: [.sectionHeaders]) {
|
LazyVStack(alignment: .leading, spacing: 0, pinnedViews: [glass ? [] : .sectionHeaders]) {
|
||||||
|
|
||||||
if filteredUserApps.count > 0 {
|
if filteredUserApps.count > 0 {
|
||||||
VStack {
|
// VStack {
|
||||||
Header(title: "User", count: filteredUserApps.count, showPopover: $showPopover)
|
// Header(title: "User", count: filteredUserApps.count, showPopover: $showPopover)
|
||||||
ForEach(filteredUserApps, id: \.self) { appInfo in
|
ForEach(filteredUserApps, id: \.self) { appInfo in
|
||||||
|
Section(header: Header(title: "User", count: filteredUserApps.count, showPopover: $showPopover)) {
|
||||||
AppListItems(search: $search, showPopover: $showPopover, appInfo: appInfo)
|
AppListItems(search: $search, showPopover: $showPopover, appInfo: appInfo)
|
||||||
|
.padding(.vertical,5)
|
||||||
if appInfo != filteredUserApps.last {
|
if appInfo != filteredUserApps.last {
|
||||||
Divider().padding(.horizontal, 5)
|
Divider().padding(.horizontal, 5)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// AppListItems(search: $search, showPopover: $showPopover, appInfo: appInfo)
|
||||||
|
// if appInfo != filteredUserApps.last {
|
||||||
|
// Divider().padding(.horizontal, 5)
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if filteredSystemApps.count > 0 {
|
if filteredSystemApps.count > 0 {
|
||||||
VStack {
|
// VStack {
|
||||||
Header(title: "System", count: filteredSystemApps.count, showPopover: $showPopover)
|
// Header(title: "System", count: filteredSystemApps.count, showPopover: $showPopover)
|
||||||
|
Section(header: Header(title: "System", count: filteredSystemApps.count, showPopover: $showPopover)) {
|
||||||
|
|
||||||
ForEach(filteredSystemApps, id: \.self) { appInfo in
|
ForEach(filteredSystemApps, id: \.self) { appInfo in
|
||||||
AppListItems(search: $search, showPopover: $showPopover, appInfo: appInfo)
|
AppListItems(search: $search, showPopover: $showPopover, appInfo: appInfo)
|
||||||
|
.padding(.vertical,5)
|
||||||
if appInfo != filteredSystemApps.last {
|
if appInfo != filteredSystemApps.last {
|
||||||
Divider().padding(.horizontal, 5)
|
Divider().padding(.horizontal, 5)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -199,6 +210,7 @@ struct Header: View {
|
|||||||
@EnvironmentObject var locations: Locations
|
@EnvironmentObject var locations: Locations
|
||||||
@Binding var showPopover: Bool
|
@Binding var showPopover: Bool
|
||||||
@AppStorage("settings.general.instant") private var instantSearch: Bool = true
|
@AppStorage("settings.general.instant") private var instantSearch: Bool = true
|
||||||
|
@AppStorage("settings.general.glass") private var glass: Bool = true
|
||||||
|
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
@@ -253,7 +265,8 @@ struct Header: View {
|
|||||||
Spacer()
|
Spacer()
|
||||||
|
|
||||||
}
|
}
|
||||||
.padding(.vertical, 8)
|
.padding(.vertical, 9)
|
||||||
.padding(.leading, 6)
|
.padding(.leading, 6)
|
||||||
|
.background(!glass ? Color("windowBG") : .clear)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,9 +91,11 @@ struct MiniEmptyView: View {
|
|||||||
Image(systemName: "plus.square.dashed")
|
Image(systemName: "plus.square.dashed")
|
||||||
.resizable()
|
.resizable()
|
||||||
.scaledToFit()
|
.scaledToFit()
|
||||||
.frame(width: 100, height: 100)
|
.frame(width: 120, height: 120)
|
||||||
.padding()
|
.padding()
|
||||||
|
.fontWeight(.ultraLight)
|
||||||
)
|
)
|
||||||
|
.frame(width: 160)
|
||||||
}
|
}
|
||||||
|
|
||||||
Text("Drop your app here")
|
Text("Drop your app here")
|
||||||
@@ -142,6 +144,7 @@ struct MiniAppView: View {
|
|||||||
@State private var showUsr: Bool = true
|
@State private var showUsr: Bool = true
|
||||||
@AppStorage("settings.general.mini") private var mini: Bool = false
|
@AppStorage("settings.general.mini") private var mini: Bool = false
|
||||||
@AppStorage("settings.general.instant") private var instantSearch: Bool = true
|
@AppStorage("settings.general.instant") private var instantSearch: Bool = true
|
||||||
|
@AppStorage("settings.general.glass") private var glass: Bool = true
|
||||||
@Binding var showPopover: Bool
|
@Binding var showPopover: Bool
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
@@ -185,33 +188,40 @@ struct MiniAppView: View {
|
|||||||
|
|
||||||
ScrollView {
|
ScrollView {
|
||||||
|
|
||||||
LazyVStack(alignment: .leading, pinnedViews: [.sectionHeaders]) {
|
LazyVStack(alignment: .leading, spacing: 0, pinnedViews: [glass ? [] : .sectionHeaders]) {
|
||||||
|
|
||||||
if filteredUserApps.count > 0 {
|
if filteredUserApps.count > 0 {
|
||||||
|
|
||||||
VStack {
|
// VStack {
|
||||||
Header(title: "User", count: filteredUserApps.count, showPopover: $showPopover)
|
// Header(title: "User", count: filteredUserApps.count, showPopover: $showPopover)
|
||||||
|
Section(header: Header(title: "User", count: filteredUserApps.count, showPopover: $showPopover)) {
|
||||||
|
|
||||||
ForEach(filteredUserApps, id: \.self) { appInfo in
|
ForEach(filteredUserApps, id: \.self) { appInfo in
|
||||||
AppListItems(search: $search, showPopover: $showPopover, appInfo: appInfo)
|
AppListItems(search: $search, showPopover: $showPopover, appInfo: appInfo)
|
||||||
|
// .padding(.vertical,5)
|
||||||
if appInfo != filteredUserApps.last {
|
if appInfo != filteredUserApps.last {
|
||||||
Divider().padding(.horizontal, 5)
|
Divider().padding(.horizontal, 5)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if filteredSystemApps.count > 0 {
|
if filteredSystemApps.count > 0 {
|
||||||
|
|
||||||
VStack {
|
// VStack {
|
||||||
Header(title: "System", count: filteredSystemApps.count, showPopover: $showPopover)
|
// Header(title: "System", count: filteredSystemApps.count, showPopover: $showPopover)
|
||||||
|
Section(header: Header(title: "System", count: filteredSystemApps.count, showPopover: $showPopover)) {
|
||||||
ForEach(filteredSystemApps, id: \.self) { appInfo in
|
ForEach(filteredSystemApps, id: \.self) { appInfo in
|
||||||
AppListItems(search: $search, showPopover: $showPopover, appInfo: appInfo)
|
AppListItems(search: $search, showPopover: $showPopover, appInfo: appInfo)
|
||||||
|
.padding(.vertical,5)
|
||||||
if appInfo != filteredSystemApps.last {
|
if appInfo != filteredSystemApps.last {
|
||||||
Divider().padding(.horizontal, 5)
|
Divider().padding(.horizontal, 5)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -221,7 +231,7 @@ struct MiniAppView: View {
|
|||||||
.scrollIndicators(.never)
|
.scrollIndicators(.never)
|
||||||
|
|
||||||
if appState.currentView != .empty {
|
if appState.currentView != .empty {
|
||||||
SearchBarMiniBottom(search: $search)
|
SearchBarMiniBottom(search: $search).background(.ultraThinMaterial)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.padding(.bottom)
|
.padding(.bottom)
|
||||||
|
|||||||
Reference in New Issue
Block a user