Skip to content

Commit fa9b51a

Browse files
🚀 Version 7.0.3
2 parents 4a3dee3 + b8affad commit fa9b51a

File tree

9 files changed

+92
-53
lines changed

9 files changed

+92
-53
lines changed

PHP Monitor.xcodeproj/project.pbxproj

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3667,7 +3667,7 @@
36673667
CODE_SIGN_IDENTITY = "Apple Development";
36683668
CODE_SIGN_STYLE = Automatic;
36693669
COMBINE_HIDPI_IMAGES = YES;
3670-
CURRENT_PROJECT_VERSION = 1455;
3670+
CURRENT_PROJECT_VERSION = 1460;
36713671
DEAD_CODE_STRIPPING = YES;
36723672
DEBUG = YES;
36733673
DEVELOPMENT_TEAM = 8M54J5J787;
@@ -3680,7 +3680,7 @@
36803680
"@executable_path/../Frameworks",
36813681
);
36823682
MACOSX_DEPLOYMENT_TARGET = 12.4;
3683-
MARKETING_VERSION = 7.0.2;
3683+
MARKETING_VERSION = 7.0.3;
36843684
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon;
36853685
PRODUCT_MODULE_NAME = PHP_Monitor;
36863686
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -3698,7 +3698,7 @@
36983698
CODE_SIGN_IDENTITY = "Apple Development";
36993699
CODE_SIGN_STYLE = Automatic;
37003700
COMBINE_HIDPI_IMAGES = YES;
3701-
CURRENT_PROJECT_VERSION = 1455;
3701+
CURRENT_PROJECT_VERSION = 1460;
37023702
DEAD_CODE_STRIPPING = YES;
37033703
DEBUG = NO;
37043704
DEVELOPMENT_TEAM = 8M54J5J787;
@@ -3711,7 +3711,7 @@
37113711
"@executable_path/../Frameworks",
37123712
);
37133713
MACOSX_DEPLOYMENT_TARGET = 12.4;
3714-
MARKETING_VERSION = 7.0.2;
3714+
MARKETING_VERSION = 7.0.3;
37153715
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon;
37163716
PRODUCT_MODULE_NAME = PHP_Monitor;
37173717
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -3939,7 +3939,7 @@
39393939
CODE_SIGN_IDENTITY = "Apple Development";
39403940
CODE_SIGN_STYLE = Automatic;
39413941
COMBINE_HIDPI_IMAGES = YES;
3942-
CURRENT_PROJECT_VERSION = 1455;
3942+
CURRENT_PROJECT_VERSION = 1460;
39433943
DEAD_CODE_STRIPPING = YES;
39443944
DEBUG = NO;
39453945
DEVELOPMENT_TEAM = 8M54J5J787;
@@ -3952,7 +3952,7 @@
39523952
"@executable_path/../Frameworks",
39533953
);
39543954
MACOSX_DEPLOYMENT_TARGET = 12.4;
3955-
MARKETING_VERSION = 7.0.2;
3955+
MARKETING_VERSION = 7.0.3;
39563956
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.dev;
39573957
PRODUCT_MODULE_NAME = PHP_Monitor;
39583958
PRODUCT_NAME = "$(TARGET_NAME) DEV";
@@ -4056,7 +4056,7 @@
40564056
CODE_SIGN_IDENTITY = "Apple Development";
40574057
CODE_SIGN_STYLE = Automatic;
40584058
COMBINE_HIDPI_IMAGES = YES;
4059-
CURRENT_PROJECT_VERSION = 1455;
4059+
CURRENT_PROJECT_VERSION = 1460;
40604060
DEAD_CODE_STRIPPING = YES;
40614061
DEBUG = YES;
40624062
DEVELOPMENT_TEAM = 8M54J5J787;
@@ -4069,7 +4069,7 @@
40694069
"@executable_path/../Frameworks",
40704070
);
40714071
MACOSX_DEPLOYMENT_TARGET = 12.4;
4072-
MARKETING_VERSION = 7.0.2;
4072+
MARKETING_VERSION = 7.0.3;
40734073
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.dev;
40744074
PRODUCT_MODULE_NAME = PHP_Monitor;
40754075
PRODUCT_NAME = "$(TARGET_NAME) DEV";
@@ -4173,7 +4173,7 @@
41734173
CODE_SIGN_IDENTITY = "Apple Development";
41744174
CODE_SIGN_STYLE = Automatic;
41754175
COMBINE_HIDPI_IMAGES = YES;
4176-
CURRENT_PROJECT_VERSION = 1455;
4176+
CURRENT_PROJECT_VERSION = 1460;
41774177
DEAD_CODE_STRIPPING = YES;
41784178
DEBUG = YES;
41794179
DEVELOPMENT_TEAM = 8M54J5J787;
@@ -4186,7 +4186,7 @@
41864186
"@executable_path/../Frameworks",
41874187
);
41884188
MACOSX_DEPLOYMENT_TARGET = 12.4;
4189-
MARKETING_VERSION = 7.0.2;
4189+
MARKETING_VERSION = 7.0.3;
41904190
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.eap;
41914191
PRODUCT_MODULE_NAME = PHP_Monitor;
41924192
PRODUCT_NAME = "$(TARGET_NAME) EAP";
@@ -4355,7 +4355,7 @@
43554355
CODE_SIGN_IDENTITY = "Apple Development";
43564356
CODE_SIGN_STYLE = Automatic;
43574357
COMBINE_HIDPI_IMAGES = YES;
4358-
CURRENT_PROJECT_VERSION = 1455;
4358+
CURRENT_PROJECT_VERSION = 1460;
43594359
DEAD_CODE_STRIPPING = YES;
43604360
DEBUG = NO;
43614361
DEVELOPMENT_TEAM = 8M54J5J787;
@@ -4368,7 +4368,7 @@
43684368
"@executable_path/../Frameworks",
43694369
);
43704370
MACOSX_DEPLOYMENT_TARGET = 12.4;
4371-
MARKETING_VERSION = 7.0.2;
4371+
MARKETING_VERSION = 7.0.3;
43724372
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.eap;
43734373
PRODUCT_MODULE_NAME = PHP_Monitor;
43744374
PRODUCT_NAME = "$(TARGET_NAME) EAP";

SECURITY.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,20 @@
44

55
Generally speaking, only the latest version of **PHP Monitor** is supported, except during transition periods (for example, when particular system requirements go up):
66

7-
| Version | Apple Silicon | Supported | Supported macOS | Deployment Target | Detected PHP Versions | Recommended Valet Version |
7+
| Version | Apple Silicon | Supported | Supported macOS | Minimum Deployment | Detected PHP Versions | Recommended Valet Version |
88
| ------- | ------------- | ------------------ | ----- | ----- | ----- | ----
9-
| 6.2 | ✅ Universal binary | ✅ Yes | Monterey (12.4+)<br/>Ventura (13.0+)<br/>Sonoma (14.0) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.4 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.4 (w/ Valet 4.x)| 3.0 or higher recommended<br/> 2.16.2 minimum |
9+
| 7.0 | ✅ Universal binary | ✅ Yes | Monterey (12.4+)<br/>Ventura (13.0+)<br/>Sonoma (14.0) | macOS 12.4+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.4 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.4 (w/ Valet 4.x)| 3.0 or higher recommended<br/> 2.16.2 minimum |
1010

1111
## Legacy versions
1212

1313
These versions of PHP Monitor are no longer supported, but if you’re using an older computer with an older version of Homebrew, Valet or macOS, you might want to use one of these versions.
1414

15-
| Version | Apple Silicon | Supported | Supported macOS | Deployment Target | Detected PHP Versions | Minimum Required Valet Version |
15+
| Version | Apple Silicon | Supported | Supported macOS | Minimum Deployment | Detected PHP Versions | Minimum Required Valet Version |
1616
| ------- | ------------- | ------------------ | ----- | ----- | ----- | ----
17-
| 6.1 | ✅ Universal binary || Monterey (12.4+)<br/>Ventura (13.0+)<br/>Sonoma (14.0) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.4 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.4 (w/ Valet 4.x)| 3.0 or higher recommended<br/> 2.16.2 minimum |
18-
| 6.0 | ✅ Universal binary || Monterey (12.4+)<br/>Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.2 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended<br/> 2.16.2 minimum |
19-
| 5.8 | ✅ Universal binary || Monterey (12.4+)<br/>Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.2 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended<br/> 2.16.2 minimum |
17+
| 6.2 | ✅ Universal binary || Monterey (12.4+)<br/>Ventura (13.0+)<br/>Sonoma (14.0) | macOS 12.4+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.4 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.4 (w/ Valet 4.x)| 3.0 or higher recommended<br/> 2.16.2 minimum |
18+
| 6.1 | ✅ Universal binary || Monterey (12.4+)<br/>Ventura (13.0+)<br/>Sonoma (14.0) | macOS 12.4+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.4 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.4 (w/ Valet 4.x)| 3.0 or higher recommended<br/> 2.16.2 minimum |
19+
| 6.0 | ✅ Universal binary || Monterey (12.4+)<br/>Ventura (13.0+) | macOS 12.4+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.2 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended<br/> 2.16.2 minimum |
20+
| 5.8 | ✅ Universal binary || Monterey (12.4+)<br/>Ventura (13.0+) | macOS 12.4+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.2 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended<br/> 2.16.2 minimum |
2021
| 5.7 | ✅ Universal binary || Big Sur (11.0)<br/>Monterey (12.0)<br/>Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.2 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended<br/> 2.16.2 minimum |
2122
| 5.6 | ✅ Universal binary || Big Sur (11.0)<br/>Monterey (12.0)<br/>Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.2 (w/ Valet 3.x) | 3.0 recommended<br/> 2.16.2 minimum |
2223
| 4.1 | ✅ Universal binary || Big Sur (11.0)<br/>Monterey (12.0) | macOS 11+ | PHP 5.6—PHP 8.2 | 2.16.2 |

phpmon/Domain/App/AppDelegate.swift

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele
2323
*/
2424
let state: App
2525

26-
/**
27-
The MainMenu singleton is responsible for rendering the
28-
menu bar item and its menu, as well as its actions.
29-
*/
30-
let menu: MainMenu
31-
3226
/**
3327
The paths singleton that determines where Homebrew is installed,
3428
and where to look for binaries.
@@ -96,7 +90,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele
9690
}
9791

9892
self.state = App.shared
99-
self.menu = MainMenu.shared
10093
self.paths = Paths.shared
10194
self.valet = Valet.shared
10295
self.brew = Brew.shared
@@ -132,7 +125,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele
132125
setupNotifications()
133126

134127
Task { // Make sure the menu performs its initial checks
135-
await menu.startup()
128+
await MainMenu.shared.startup()
136129
}
137130
}
138131

phpmon/Domain/Menu/StatusMenu+Items.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ extension StatusMenu {
242242
addLoadedPresets()
243243
}
244244

245-
private func addEmptyPresetHelp() {
245+
@MainActor private func addEmptyPresetHelp() {
246246
addItem(NSMenuItem(title: "mi_presets_title".localized, submenu: [
247247
NSMenuItem(title: "mi_no_presets".localized),
248248
NSMenuItem.separator(),
@@ -251,7 +251,7 @@ extension StatusMenu {
251251
], target: MainMenu.shared))
252252
}
253253

254-
private func addLoadedPresets() {
254+
@MainActor private func addLoadedPresets() {
255255
addItem(NSMenuItem(title: "mi_presets_title".localized, submenu: [
256256
NSMenuItem.separator(),
257257
HeaderView.asMenuItem(text: "mi_apply_presets_title".localized)
@@ -266,7 +266,7 @@ extension StatusMenu {
266266

267267
// MARK: - Xdebug
268268

269-
func addXdebugMenuItem() {
269+
@MainActor func addXdebugMenuItem() {
270270
if !Xdebug.enabled {
271271
addItem(NSMenuItem.separator())
272272
return
@@ -286,7 +286,7 @@ extension StatusMenu {
286286

287287
// MARK: - PHP Doctor
288288

289-
func addPhpDoctorMenuItem() {
289+
@MainActor func addPhpDoctorMenuItem() {
290290
if !Preferences.isEnabled(.showPhpDoctorSuggestions) ||
291291
!WarningManager.shared.hasWarnings() {
292292
return
@@ -302,7 +302,7 @@ extension StatusMenu {
302302

303303
// MARK: - First Aid & Services
304304

305-
func addFirstAidAndServicesMenuItems() {
305+
@MainActor func addFirstAidAndServicesMenuItems() {
306306
let services = NSMenuItem(title: "mi_other".localized)
307307

308308
var items: [NSMenuItem] = [
@@ -359,7 +359,7 @@ extension StatusMenu {
359359

360360
// MARK: - Other helper methods to generate menu items
361361

362-
func addExtensionItem(_ phpExtension: PhpExtension, _ shortcutKey: Int) {
362+
@MainActor func addExtensionItem(_ phpExtension: PhpExtension, _ shortcutKey: Int) {
363363
let keyEquivalent = shortcutKey < 9 ? "\(shortcutKey)" : ""
364364

365365
let menuItem = ExtensionMenuItem(

phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,16 @@ struct VersionPopoverView: View {
1414

1515
@State var validPhpVersions: [VersionNumber]
1616

17+
@State var prefersIsolationSuggestions: Bool
18+
1719
@State var parent: NSPopover!
1820

21+
let rows = [
22+
GridItem(.flexible()),
23+
GridItem(.flexible()),
24+
GridItem(.flexible())
25+
]
26+
1927
var body: some View {
2028
VStack(alignment: .leading, spacing: 10) {
2129
Text(getTitleText())
@@ -32,14 +40,29 @@ struct VersionPopoverView: View {
3240
message: "alert.php_suggestions".localized,
3341
color: Color("AppColor")
3442
)
35-
HStack {
36-
ForEach(validPhpVersions, id: \.self) { version in
37-
Button("site_link.switch_to_php".localized(version.short), action: {
38-
MainMenu.shared.switchToPhpVersion(version.short)
39-
parent?.close()
40-
})
41-
}
42-
}.padding(EdgeInsets(top: 10, leading: 0, bottom: 0, trailing: 0))
43+
if prefersIsolationSuggestions {
44+
// SITE ISOLATION (preferred)
45+
LazyVGrid(columns: self.rows, alignment: .leading, spacing: 5, content: {
46+
ForEach(validPhpVersions, id: \.self) { version in
47+
Button("site_link.isolate_php".localized(version.short), action: {
48+
App.shared.domainListWindowController?.contentVC
49+
.isolateSite(site: site, version: version.short)
50+
parent?.close()
51+
}).padding(EdgeInsets(top: 3, leading: 0, bottom: 3, trailing: 0))
52+
}
53+
}).padding(EdgeInsets(top: 5, leading: 0, bottom: 0, trailing: 0))
54+
} else {
55+
// GLOBAL SWITCHER
56+
LazyVGrid(columns: self.rows, alignment: .leading, spacing: 5, content: {
57+
ForEach(validPhpVersions, id: \.self) { version in
58+
Button("site_link.switch_to_php".localized(version.short), action: {
59+
MainMenu.shared.switchToPhpVersion(version.short)
60+
parent?.close()
61+
}).padding(EdgeInsets(top: 3, leading: 0, bottom: 3, trailing: 0))
62+
}
63+
}).padding(EdgeInsets(top: 5, leading: 0, bottom: 0, trailing: 0))
64+
}
65+
4366
}
4467
} else {
4568
if site.preferredPhpVersionSource == .unknown {
@@ -137,6 +160,7 @@ struct DisclaimerView: View {
137160
constraint: ""
138161
),
139162
validPhpVersions: [],
163+
prefersIsolationSuggestions: false,
140164
parent: nil
141165
)
142166
}
@@ -152,6 +176,7 @@ struct DisclaimerView: View {
152176
constraint: "^8.1"
153177
),
154178
validPhpVersions: [],
179+
prefersIsolationSuggestions: false,
155180
parent: nil
156181
)
157182
}
@@ -168,6 +193,7 @@ struct DisclaimerView: View {
168193
isolated: "8.0"
169194
),
170195
validPhpVersions: [],
196+
prefersIsolationSuggestions: false,
171197
parent: nil
172198
)
173199
}
@@ -184,6 +210,7 @@ struct DisclaimerView: View {
184210
isolated: "7.4"
185211
),
186212
validPhpVersions: [],
213+
prefersIsolationSuggestions: false,
187214
parent: nil
188215
)
189216
}
@@ -200,8 +227,12 @@ struct DisclaimerView: View {
200227
),
201228
validPhpVersions: [
202229
VersionNumber(major: 8, minor: 0, patch: 0),
203-
VersionNumber(major: 8, minor: 1, patch: 0)
230+
VersionNumber(major: 8, minor: 1, patch: 0),
231+
VersionNumber(major: 8, minor: 2, patch: 0),
232+
VersionNumber(major: 8, minor: 3, patch: 0),
233+
VersionNumber(major: 8, minor: 4, patch: 0)
204234
],
235+
prefersIsolationSuggestions: true,
205236
parent: nil
206237
)
207238
}

phpmon/Modules/Domain List/UI/Cells/DomainListPhpCell.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,12 @@ class DomainListPhpCell: NSTableCellView, DomainListCellProtocol {
7070
let button = self.buttonPhpVersion!
7171
let popover = NSPopover()
7272

73-
let view = VersionPopoverView(site: site, validPhpVersions: validPhpSuggestions, parent: popover)
73+
let view = VersionPopoverView(
74+
site: site,
75+
validPhpVersions: validPhpSuggestions,
76+
prefersIsolationSuggestions: Valet.enabled(feature: .isolatedSites),
77+
parent: popover
78+
)
7479

7580
popover.contentViewController = NSHostingController(rootView: view)
7681
popover.behavior = .transient

phpmon/Modules/Domain List/UI/DomainListVC+Actions.swift

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -126,17 +126,17 @@ extension DomainListVC {
126126
}
127127
}
128128

129-
@objc func isolateSite(sender: PhpMenuItem) {
130-
guard let site = selectedSite else {
131-
return
132-
}
133-
129+
public func isolateSite(site: ValetSite, version: String) {
134130
waitAndExecute {
135131
do {
136132
// Instruct Valet to isolate a given PHP version
137-
try await site.isolate(version: sender.version)
138-
// Reload the UI
139-
self.reloadSelectedRow()
133+
try await site.isolate(version: version)
134+
// Reload the UI if it's the same site
135+
if self.selectedSite?.absolutePath == site.absolutePath {
136+
self.reloadSelectedRow()
137+
} else {
138+
await self.reloadDomains()
139+
}
140140
} catch {
141141
// Notify the user about a failed command
142142
let error = error as! ValetInteractionError
@@ -145,7 +145,15 @@ extension DomainListVC {
145145
}
146146
}
147147

148-
@objc func removeIsolatedSite() {
148+
@objc func isolateSiteViaMenuItem(sender: PhpMenuItem) {
149+
guard let site = selectedSite else {
150+
return
151+
}
152+
153+
self.isolateSite(site: site, version: sender.version)
154+
}
155+
156+
@objc func removeIsolatedSiteViaMenuItem() {
149157
guard let site = selectedSite else {
150158
return
151159
}

phpmon/Modules/Domain List/UI/DomainListVC+ContextMenu.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ extension DomainListVC {
121121
for version in PhpEnvironments.shared.availablePhpVersions.reversed() {
122122
let item = PhpMenuItem(
123123
title: "domain_list.always_use_php".localized(version),
124-
action: #selector(self.isolateSite),
124+
action: #selector(self.isolateSiteViaMenuItem),
125125
keyEquivalent: ""
126126
)
127127
if site.servingPhpVersion == version && site.isolatedPhpVersion != nil {
@@ -137,7 +137,7 @@ extension DomainListVC {
137137
items.append(NSMenuItem.separator())
138138
items.append(NSMenuItem(
139139
title: "domain_list.remove_isolation".localized,
140-
action: #selector(self.removeIsolatedSite)
140+
action: #selector(self.removeIsolatedSiteViaMenuItem)
141141
))
142142
}
143143

0 commit comments

Comments
 (0)