Detailed changes
@@ -3070,7 +3070,6 @@ dependencies = [
"clock",
"cloud_api_client",
"cloud_llm_client",
- "cocoa 0.26.0",
"collections",
"credentials_provider",
"derive_more",
@@ -3083,6 +3082,7 @@ dependencies = [
"http_client_tls",
"httparse",
"log",
+ "objc2-foundation",
"parking_lot",
"paths",
"postage",
@@ -537,6 +537,31 @@ nbformat = { git = "https://github.com/ConradIrwin/runtimed", rev = "7130c80421
nix = "0.29"
num-format = "0.4.4"
objc = "0.2"
+objc2-foundation = { version = "0.3", default-features = false, features = [
+ "NSArray",
+ "NSAttributedString",
+ "NSBundle",
+ "NSCoder",
+ "NSData",
+ "NSDate",
+ "NSDictionary",
+ "NSEnumerator",
+ "NSError",
+ "NSGeometry",
+ "NSNotification",
+ "NSNull",
+ "NSObjCRuntime",
+ "NSObject",
+ "NSProcessInfo",
+ "NSRange",
+ "NSRunLoop",
+ "NSString",
+ "NSURL",
+ "NSUndoManager",
+ "NSValue",
+ "objc2-core-foundation",
+ "std"
+] }
open = "5.0.0"
ordered-float = "2.1.1"
palette = { version = "0.7.5", default-features = false, features = ["std"] }
@@ -75,7 +75,7 @@ util = { workspace = true, features = ["test-support"] }
windows.workspace = true
[target.'cfg(target_os = "macos")'.dependencies]
-cocoa.workspace = true
+objc2-foundation.workspace = true
[target.'cfg(any(target_os = "windows", target_os = "macos"))'.dependencies]
tokio-native-tls = "0.3"
@@ -84,6 +84,10 @@ static DOTNET_PROJECT_FILES_REGEX: LazyLock<Regex> = LazyLock::new(|| {
Regex::new(r"^(global\.json|Directory\.Build\.props|.*\.(csproj|fsproj|vbproj|sln))$").unwrap()
});
+#[cfg(target_os = "macos")]
+static MACOS_VERSION_REGEX: LazyLock<Regex> =
+ LazyLock::new(|| Regex::new(r"(\s*\(Build [^)]*[0-9]\))").unwrap());
+
pub fn os_name() -> String {
#[cfg(target_os = "macos")]
{
@@ -108,19 +112,16 @@ pub fn os_name() -> String {
pub fn os_version() -> String {
#[cfg(target_os = "macos")]
{
- use cocoa::base::nil;
- use cocoa::foundation::NSProcessInfo;
-
- unsafe {
- let process_info = cocoa::foundation::NSProcessInfo::processInfo(nil);
- let version = process_info.operatingSystemVersion();
- gpui::SemanticVersion::new(
- version.majorVersion as usize,
- version.minorVersion as usize,
- version.patchVersion as usize,
- )
+ use objc2_foundation::NSProcessInfo;
+ let process_info = NSProcessInfo::processInfo();
+ let version_nsstring = unsafe { process_info.operatingSystemVersionString() };
+ // "Version 15.6.1 (Build 24G90)" -> "15.6.1 (Build 24G90)"
+ let version_string = version_nsstring.to_string().replace("Version ", "");
+ // "15.6.1 (Build 24G90)" -> "15.6.1"
+ // "26.0.0 (Build 25A5349a)" -> unchanged (Beta or Rapid Security Response; ends with letter)
+ MACOS_VERSION_REGEX
+ .replace_all(&version_string, "")
.to_string()
- }
}
#[cfg(any(target_os = "linux", target_os = "freebsd"))]
{