Skip to content

Commit 80bcbd0

Browse files
🚀 Version 25.07
2 parents 79430f7 + ca65fca commit 80bcbd0

File tree

14 files changed

+210
-80
lines changed

14 files changed

+210
-80
lines changed

PHP Monitor.xcodeproj/project.pbxproj

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@
2121
033D45A02B0D513900070080 /* RemovePhpExtensionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 033D459D2B0D513900070080 /* RemovePhpExtensionCommand.swift */; };
2222
033D45A12B0D513900070080 /* RemovePhpExtensionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 033D459D2B0D513900070080 /* RemovePhpExtensionCommand.swift */; };
2323
033D45A32B0D531D00070080 /* PhpExtensionManagerView+Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 033D45A22B0D531D00070080 /* PhpExtensionManagerView+Actions.swift */; };
24+
03BFF5272E312C3D007F96FA /* Startup+Timers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF5262E312C39007F96FA /* Startup+Timers.swift */; };
25+
03BFF5282E312C3D007F96FA /* Startup+Timers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF5262E312C39007F96FA /* Startup+Timers.swift */; };
26+
03BFF5292E312C3D007F96FA /* Startup+Timers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF5262E312C39007F96FA /* Startup+Timers.swift */; };
27+
03BFF52A2E312C3D007F96FA /* Startup+Timers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF5262E312C39007F96FA /* Startup+Timers.swift */; };
28+
03BFF52C2E313244007F96FA /* StatusMenu+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF52B2E313240007F96FA /* StatusMenu+Driver.swift */; };
29+
03BFF52D2E313244007F96FA /* StatusMenu+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF52B2E313240007F96FA /* StatusMenu+Driver.swift */; };
30+
03BFF52E2E313244007F96FA /* StatusMenu+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF52B2E313240007F96FA /* StatusMenu+Driver.swift */; };
31+
03BFF52F2E313244007F96FA /* StatusMenu+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BFF52B2E313240007F96FA /* StatusMenu+Driver.swift */; };
2432
03E36FE728D9219000636F7F /* ActiveShell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03E36FE628D9219000636F7F /* ActiveShell.swift */; };
2533
03E36FE828D9219000636F7F /* ActiveShell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03E36FE628D9219000636F7F /* ActiveShell.swift */; };
2634
5420395926135DC100FB00FA /* PreferencesVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395826135DC100FB00FA /* PreferencesVC.swift */; };
@@ -920,6 +928,8 @@
920928
033D45972B0D4EC600070080 /* InstallPhpExtensionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstallPhpExtensionCommand.swift; sourceTree = "<group>"; };
921929
033D459D2B0D513900070080 /* RemovePhpExtensionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemovePhpExtensionCommand.swift; sourceTree = "<group>"; };
922930
033D45A22B0D531D00070080 /* PhpExtensionManagerView+Actions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PhpExtensionManagerView+Actions.swift"; sourceTree = "<group>"; };
931+
03BFF5262E312C39007F96FA /* Startup+Timers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Startup+Timers.swift"; sourceTree = "<group>"; };
932+
03BFF52B2E313240007F96FA /* StatusMenu+Driver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StatusMenu+Driver.swift"; sourceTree = "<group>"; };
923933
03E36FE628D9219000636F7F /* ActiveShell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActiveShell.swift; sourceTree = "<group>"; };
924934
5420395826135DC100FB00FA /* PreferencesVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesVC.swift; sourceTree = "<group>"; };
925935
5420395E2613607600FB00FA /* Preferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = "<group>"; };
@@ -1850,6 +1860,7 @@
18501860
C4F361602836BFD9003598CC /* MainMenu+Actions.swift */,
18511861
C47331A1247093B7009A0597 /* StatusMenu.swift */,
18521862
C4C3643828AE4FCE00C0770E /* StatusMenu+Items.swift */,
1863+
03BFF52B2E313240007F96FA /* StatusMenu+Driver.swift */,
18531864
C4821C592C2DEDE200357A68 /* AppMenu.swift */,
18541865
);
18551866
path = Menu;
@@ -1938,6 +1949,7 @@
19381949
C4B97B7A275CF20A003F3378 /* App+GlobalHotkey.swift */,
19391950
C4EED88827A48778006D7272 /* InterAppHandler.swift */,
19401951
C4D8016522B1584700C6DA1B /* Startup.swift */,
1952+
03BFF5262E312C39007F96FA /* Startup+Timers.swift */,
19411953
C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */,
19421954
C40FE736282ABA4F00A302C2 /* AppVersion.swift */,
19431955
C409349C298EE8E900D25014 /* AppUpdater.swift */,
@@ -2589,6 +2601,7 @@
25892601
C4EB53E528551F9B006F9937 /* HeaderView.swift in Sources */,
25902602
C4EA3C472BA4F947007B0BA7 /* CustomButtonStyles.swift in Sources */,
25912603
C40FE737282ABA4F00A302C2 /* AppVersion.swift in Sources */,
2604+
03BFF5282E312C3D007F96FA /* Startup+Timers.swift in Sources */,
25922605
C44A874828905BB000498BC4 /* ProgressVC.swift in Sources */,
25932606
C4CCBA6C275C567B008C7055 /* PMWindowController.swift in Sources */,
25942607
C456A0C62AA614BD0080144F /* PhpPreference.swift in Sources */,
@@ -2641,6 +2654,7 @@
26412654
C40C7F3027722E8D00DDDCDC /* Logger.swift in Sources */,
26422655
C41CA5ED2774F8EE00A2C80E /* DomainListVC+Actions.swift in Sources */,
26432656
C412E5FC25700D5300A1FB67 /* HomebrewDecodable.swift in Sources */,
2657+
03BFF52E2E313244007F96FA /* StatusMenu+Driver.swift in Sources */,
26442658
03E36FE728D9219000636F7F /* ActiveShell.swift in Sources */,
26452659
C4D9ADBF277610E1007277F4 /* PhpSwitcher.swift in Sources */,
26462660
C45E76142854A65300B4FE0C /* ServicesManager.swift in Sources */,
@@ -2862,6 +2876,7 @@
28622876
C471E7FE28F9BACE0021E251 /* HomebrewDecodable.swift in Sources */,
28632877
C4415E8F2B0287E90035F520 /* BrewFormulaeObservable.swift in Sources */,
28642878
C471E7D828F9BA8F0021E251 /* FileSystemProtocol.swift in Sources */,
2879+
03BFF52F2E313244007F96FA /* StatusMenu+Driver.swift in Sources */,
28652880
C471E7F328F9BAC70021E251 /* PhpHelper.swift in Sources */,
28662881
C46DC7A62C7B5BC900F19D17 /* Favorites.swift in Sources */,
28672882
C471E7E728F9BAC20021E251 /* Constants.swift in Sources */,
@@ -2892,6 +2907,7 @@
28922907
C490E3B929BCA368006D2DE6 /* App+BrewWatch.swift in Sources */,
28932908
C471E7FF28F9BAD10021E251 /* Xdebug.swift in Sources */,
28942909
C409349F298EE8E900D25014 /* AppUpdater.swift in Sources */,
2910+
03BFF5292E312C3D007F96FA /* Startup+Timers.swift in Sources */,
28952911
C471E7F228F9BAC70021E251 /* PhpEnvironments.swift in Sources */,
28962912
C471E7E628F9BAC20021E251 /* Process.swift in Sources */,
28972913
C471E81928F9BAE80021E251 /* NSMenuItemExtension.swift in Sources */,
@@ -3078,6 +3094,7 @@
30783094
C4611E5A2AEAD2E20010BE24 /* ConfigManagerWindowController.swift in Sources */,
30793095
C471E80E28F9BAE80021E251 /* DateExtension.swift in Sources */,
30803096
C490E3BA29BCA368006D2DE6 /* App+BrewWatch.swift in Sources */,
3097+
03BFF5272E312C3D007F96FA /* Startup+Timers.swift in Sources */,
30813098
C471E7D028F9BA630021E251 /* FileSystemProtocol.swift in Sources */,
30823099
C471E81228F9BAE80021E251 /* TimeIntervalExtension.swift in Sources */,
30833100
C471E7DF28F9BAAB0021E251 /* RealCommand.swift in Sources */,
@@ -3089,6 +3106,7 @@
30893106
C471E80228F9BAD40021E251 /* PhpInstallation.swift in Sources */,
30903107
C471E81028F9BAE80021E251 /* StringExtension.swift in Sources */,
30913108
C48DDD1029C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */,
3109+
03BFF52C2E313244007F96FA /* StatusMenu+Driver.swift in Sources */,
30923110
C471E7F828F9BACB0021E251 /* InternalSwitcher.swift in Sources */,
30933111
C471E82328F9BB2E0021E251 /* ComposerJson.swift in Sources */,
30943112
C471E82128F9BB2E0021E251 /* ProjectTypeDetection.swift in Sources */,
@@ -3237,6 +3255,7 @@
32373255
C43603A1275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */,
32383256
C4C3643A28AE4FCE00C0770E /* StatusMenu+Items.swift in Sources */,
32393257
C42759682627662800093CAE /* NSMenuExtension.swift in Sources */,
3258+
03BFF52D2E313244007F96FA /* StatusMenu+Driver.swift in Sources */,
32403259
C4AFC4B429C4F43300BF4E0D /* HomebrewUpgradableTest.swift in Sources */,
32413260
C4E2E84828FC1D93003B070C /* TestableConfigurationTest.swift in Sources */,
32423261
C4D936CB27E3EE4A00BD69FE /* DomainListCellProtocol.swift in Sources */,
@@ -3248,6 +3267,7 @@
32483267
C485706D28BF450900539B36 /* NSMenuItemExtension.swift in Sources */,
32493268
C481F79726164A78004FBCFF /* PreferencesVC.swift in Sources */,
32503269
C495F5B028A42E080087F70A /* EnvironmentCheck.swift in Sources */,
3270+
03BFF52A2E312C3D007F96FA /* Startup+Timers.swift in Sources */,
32513271
C41E871B2763D42300161EE0 /* DomainListVC+ContextMenu.swift in Sources */,
32523272
C40C7F3127722E8D00DDDCDC /* Logger.swift in Sources */,
32533273
C4068CAB27B0890D00544CD5 /* MenuBarIcons.swift in Sources */,
@@ -3692,7 +3712,7 @@
36923712
CODE_SIGN_IDENTITY = "Apple Development";
36933713
CODE_SIGN_STYLE = Automatic;
36943714
COMBINE_HIDPI_IMAGES = YES;
3695-
CURRENT_PROJECT_VERSION = 1555;
3715+
CURRENT_PROJECT_VERSION = 1565;
36963716
DEAD_CODE_STRIPPING = YES;
36973717
DEBUG = YES;
36983718
ENABLE_HARDENED_RUNTIME = YES;
@@ -3704,7 +3724,7 @@
37043724
"@executable_path/../Frameworks",
37053725
);
37063726
MACOSX_DEPLOYMENT_TARGET = 13.5;
3707-
MARKETING_VERSION = 25.06;
3727+
MARKETING_VERSION = 25.07;
37083728
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon;
37093729
PRODUCT_MODULE_NAME = PHP_Monitor;
37103730
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -3722,7 +3742,7 @@
37223742
CODE_SIGN_IDENTITY = "Apple Development";
37233743
CODE_SIGN_STYLE = Automatic;
37243744
COMBINE_HIDPI_IMAGES = YES;
3725-
CURRENT_PROJECT_VERSION = 1555;
3745+
CURRENT_PROJECT_VERSION = 1565;
37263746
DEAD_CODE_STRIPPING = YES;
37273747
DEBUG = NO;
37283748
ENABLE_HARDENED_RUNTIME = YES;
@@ -3734,7 +3754,7 @@
37343754
"@executable_path/../Frameworks",
37353755
);
37363756
MACOSX_DEPLOYMENT_TARGET = 13.5;
3737-
MARKETING_VERSION = 25.06;
3757+
MARKETING_VERSION = 25.07;
37383758
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon;
37393759
PRODUCT_MODULE_NAME = PHP_Monitor;
37403760
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -3955,7 +3975,7 @@
39553975
CODE_SIGN_IDENTITY = "Apple Development";
39563976
CODE_SIGN_STYLE = Automatic;
39573977
COMBINE_HIDPI_IMAGES = YES;
3958-
CURRENT_PROJECT_VERSION = 1555;
3978+
CURRENT_PROJECT_VERSION = 1565;
39593979
DEAD_CODE_STRIPPING = YES;
39603980
DEBUG = NO;
39613981
ENABLE_HARDENED_RUNTIME = YES;
@@ -3967,7 +3987,7 @@
39673987
"@executable_path/../Frameworks",
39683988
);
39693989
MACOSX_DEPLOYMENT_TARGET = 13.5;
3970-
MARKETING_VERSION = 25.06;
3990+
MARKETING_VERSION = 25.07;
39713991
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.dev;
39723992
PRODUCT_MODULE_NAME = PHP_Monitor;
39733993
PRODUCT_NAME = "$(TARGET_NAME) DEV";
@@ -4071,7 +4091,7 @@
40714091
CODE_SIGN_IDENTITY = "Apple Development";
40724092
CODE_SIGN_STYLE = Automatic;
40734093
COMBINE_HIDPI_IMAGES = YES;
4074-
CURRENT_PROJECT_VERSION = 1555;
4094+
CURRENT_PROJECT_VERSION = 1565;
40754095
DEAD_CODE_STRIPPING = YES;
40764096
DEBUG = YES;
40774097
ENABLE_HARDENED_RUNTIME = YES;
@@ -4083,7 +4103,7 @@
40834103
"@executable_path/../Frameworks",
40844104
);
40854105
MACOSX_DEPLOYMENT_TARGET = 13.5;
4086-
MARKETING_VERSION = 25.06;
4106+
MARKETING_VERSION = 25.07;
40874107
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.dev;
40884108
PRODUCT_MODULE_NAME = PHP_Monitor;
40894109
PRODUCT_NAME = "$(TARGET_NAME) DEV";
@@ -4187,7 +4207,7 @@
41874207
CODE_SIGN_IDENTITY = "Apple Development";
41884208
CODE_SIGN_STYLE = Automatic;
41894209
COMBINE_HIDPI_IMAGES = YES;
4190-
CURRENT_PROJECT_VERSION = 1555;
4210+
CURRENT_PROJECT_VERSION = 1565;
41914211
DEAD_CODE_STRIPPING = YES;
41924212
DEBUG = YES;
41934213
ENABLE_HARDENED_RUNTIME = YES;
@@ -4199,7 +4219,7 @@
41994219
"@executable_path/../Frameworks",
42004220
);
42014221
MACOSX_DEPLOYMENT_TARGET = 13.5;
4202-
MARKETING_VERSION = 25.06;
4222+
MARKETING_VERSION = 25.07;
42034223
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.eap;
42044224
PRODUCT_MODULE_NAME = PHP_Monitor;
42054225
PRODUCT_NAME = "$(TARGET_NAME) EAP";
@@ -4366,7 +4386,7 @@
43664386
CODE_SIGN_IDENTITY = "Apple Development";
43674387
CODE_SIGN_STYLE = Automatic;
43684388
COMBINE_HIDPI_IMAGES = YES;
4369-
CURRENT_PROJECT_VERSION = 1555;
4389+
CURRENT_PROJECT_VERSION = 1565;
43704390
DEAD_CODE_STRIPPING = YES;
43714391
DEBUG = NO;
43724392
ENABLE_HARDENED_RUNTIME = YES;
@@ -4378,7 +4398,7 @@
43784398
"@executable_path/../Frameworks",
43794399
);
43804400
MACOSX_DEPLOYMENT_TARGET = 13.5;
4381-
MARKETING_VERSION = 25.06;
4401+
MARKETING_VERSION = 25.07;
43824402
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.eap;
43834403
PRODUCT_MODULE_NAME = PHP_Monitor;
43844404
PRODUCT_NAME = "$(TARGET_NAME) EAP";
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"images" : [
3+
{
4+
"idiom" : "universal",
5+
"scale" : "1x"
6+
},
7+
{
8+
"filename" : "[email protected]",
9+
"idiom" : "universal",
10+
"scale" : "2x"
11+
},
12+
{
13+
"idiom" : "universal",
14+
"scale" : "3x"
15+
}
16+
],
17+
"info" : {
18+
"author" : "xcode",
19+
"version" : 1
20+
},
21+
"properties" : {
22+
"template-rendering-intent" : "template"
23+
}
24+
}
831 Bytes
Loading

phpmon/Common/Core/Constants.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@ struct Constants {
1818
*/
1919
static let MinimumRecommendedValetVersion = "2.16.2"
2020

21+
/**
22+
The amount of seconds that is considered the threshold for
23+
PHP Monitor to mark any given launch as a "slow" launch.
24+
25+
If the startup procedure was slow (or hangs), this message should
26+
be displayed. This is based on an appropriate launch time on a
27+
basic M1 Apple chip, with some margin for slower Intel chips.
28+
*/
29+
static let SlowBootThresholdInterval: TimeInterval = 30.0
30+
2131
/**
2232
PHP Monitor supplies a hardcoded list of PHP packages in its own
2333
PHP Version Manager.
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
//
2+
// Startup+Timers.swift
3+
// PHP Monitor
4+
//
5+
// Created by Nico Verbruggen on 23/07/2025.
6+
// Copyright © 2025 Nico Verbruggen. All rights reserved.
7+
//
8+
9+
import Foundation
10+
import AppKit
11+
import NVAlert
12+
13+
extension Startup {
14+
@MainActor static var startupTimer: Timer?
15+
@MainActor static var launchTime: Date?
16+
17+
/** Returns a human-readable version to indicate how many seconds elapsed since boot. */
18+
@MainActor static var humanReadableSinceBootTime: String {
19+
return String(format: "%.2f", Date().timeIntervalSince(Self.launchTime!))
20+
}
21+
22+
/** Starts the timeout timer that keeps track of how long the app takes to boot. */
23+
@MainActor func startStartupTimer() {
24+
Self.launchTime = Date()
25+
Self.startupTimer = Timer.scheduledTimer(
26+
timeInterval: Constants.SlowBootThresholdInterval, target: self,
27+
selector: #selector(startupTimeout), userInfo: nil, repeats: false
28+
)
29+
}
30+
31+
/**
32+
Invalidates and stops the startup timer.
33+
This is only called if the slow boot threshold is not exceeded.
34+
*/
35+
@MainActor static func invalidateTimeoutTimer() {
36+
if Self.startupTimer == nil {
37+
return
38+
}
39+
40+
Log.info("PHP Monitor was quick; elapsed time: \(Self.humanReadableSinceBootTime) sec.")
41+
Self.startupTimer?.invalidate()
42+
Self.startupTimer = nil
43+
}
44+
45+
/**
46+
Displays an alert for when the application startup process takes too long.
47+
*/
48+
@MainActor @objc func startupTimeout() {
49+
Log.info("PHP Monitor was slow; elapsed time: \(Self.humanReadableSinceBootTime) sec.")
50+
51+
// Invalidate the timer
52+
Self.startupTimer?.invalidate()
53+
Self.startupTimer = nil
54+
55+
// Present an alert that lets the user know about the slow start
56+
NVAlert()
57+
.withInformation(
58+
title: "startup.timeout.title".localized,
59+
subtitle: "startup.timeout.subtitle".localized,
60+
description: "startup.timeout.description".localized
61+
)
62+
.withPrimary(text: "alert.cannot_start.close".localized, action: { vc in
63+
vc.close(with: .alertFirstButtonReturn)
64+
exit(1)
65+
})
66+
.withSecondary(text: "startup.timeout.ignore".localized, action: { vc in
67+
vc.close(with: .alertSecondButtonReturn)
68+
})
69+
.withTertiary(text: "", action: { _ in
70+
NSWorkspace.shared.open(URL(string: "https://github.com/nicoverbruggen/phpmon/issues/294")!)
71+
})
72+
.show()
73+
}
74+
}

phpmon/Domain/App/Startup.swift

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,6 @@ import AppKit
1010
import NVAlert
1111

1212
class Startup {
13-
14-
@MainActor static var startupTimer: Timer?
15-
16-
@MainActor func startTimeoutTimer() {
17-
Self.startupTimer = Timer.scheduledTimer(
18-
timeInterval: 30.0, target: self, selector: #selector(startupTimeout),
19-
userInfo: nil, repeats: false
20-
)
21-
}
22-
23-
@MainActor static func invalidateTimeoutTimer() {
24-
Self.startupTimer?.invalidate()
25-
Self.startupTimer = nil
26-
}
27-
2813
/**
2914
Checks the user's environment and checks if PHP Monitor can be used properly.
3015
This checks if PHP is installed, Valet is running, the appropriate permissions are set, and more.
@@ -38,7 +23,7 @@ class Startup {
3823

3924
// Set up a "background" timer on the main thread
4025
Task { @MainActor in
41-
startTimeoutTimer()
26+
startStartupTimer()
4227
}
4328

4429
for group in self.groups {
@@ -69,29 +54,6 @@ class Startup {
6954
return true
7055
}
7156

72-
/**
73-
Displays an alert for when the application startup process takes too long.
74-
*/
75-
@MainActor @objc func startupTimeout() {
76-
NVAlert()
77-
.withInformation(
78-
title: "startup.timeout.title".localized,
79-
subtitle: "startup.timeout.subtitle".localized,
80-
description: "startup.timeout.description".localized
81-
)
82-
.withPrimary(text: "alert.cannot_start.close".localized, action: { vc in
83-
vc.close(with: .alertFirstButtonReturn)
84-
exit(1)
85-
})
86-
.withSecondary(text: "startup.timeout.ignore".localized, action: { vc in
87-
vc.close(with: .alertSecondButtonReturn)
88-
})
89-
.withTertiary(text: "", action: { _ in
90-
NSWorkspace.shared.open(URL(string: "https://github.com/nicoverbruggen/phpmon/issues/294")!)
91-
})
92-
.show()
93-
}
94-
9557
/**
9658
Displays an alert for a particular check. There are two types of alerts:
9759
- ones that require an app restart, which prompt the user to exit the app

phpmon/Domain/Integrations/Composer/ProjectTypeDetection.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ struct ProjectTypeDetection {
1515
public static let CommonDependencyList = [
1616
"laravel/framework": "Laravel",
1717
"symfony/symfony": "Symfony",
18-
"laravel/lumen": "Lumen"
18+
"laravel/lumen": "Lumen",
19+
"tempest/framework": "Tempest"
1920
]
2021

2122
/**

0 commit comments

Comments
 (0)