Tôi muốn nhận được phiên bản hệ điều hành OS X, chẳng hạn như: 10.5.4, 10.4.8, v.v. Tôi muốn tải nó trong ứng dụng của mình, làm cách nào để thực hiện việc này? Cảm ơn!Cách tải phiên bản hệ điều hành X?
Trả lời
Bạn có thể sử dụng Gestalt:
SInt32 version = 0;
Gestalt(gestaltSystemVersion, &version);
BOOL leopard = (version >= 0x1050);
if (leopard)
{
//draw it this way
}
else
{
//draw it that way
}
Hãy ghi nhớ nếu bạn đang kiểm tra nếu một phương pháp có sẵn hay không, nó tốt hơn để kiểm tra trực tiếp sử dụng respondsToSelector :.
Lưu ý rằng gestaltSystemVersion không được khuyến khích vì 10.4 có lợi cho gestaltSystemVersionMajor, gestaltSystemVersionMinor và gestaltSystemVersionBugFix, do giới hạn 1 chữ số. Ví dụ: 10.4.10 và .11, không thể phát hiện bằng mã của bạn. – smorgan
Vì Gestalt không được chấp nhận trong 10.8, có cách nào khác hoạt động từ 10.6 - 10.8 không? – adib
Câu trả lời này hiện sai thẳng vì gestaltSystemVersion không thể đại diện cho 10.10. –
Một lần nữa, bạn có thể sử dụng Gestalt. Xem tài liệu để biết thêm thông tin; Cụ thể, bạn sẽ muốn vượt qua gestaltSystemVersionMajor
, gestaltSystemVersionMinor
, và gestaltSystemVersionBugFix
hằng trong "Hệ thống Version Constants" phần của Gestalt Manager Reference documentation
Ngoài ra còn có một wrapper Cocoa quanh Gestalt gọi những người khác đã đề cập trong hộp công cụ của Google dành cho Mac: http://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/Foundation/GTMSystemVersion.h
Meh, có vẻ như rắc rối nhiều hơn nó có giá trị cho một kiểm tra đơn giản. Có lẽ nếu tôi đã sử dụng GTM, nhưng nó đơn giản hơn để chỉ kiểm tra 'gestaltSystemVersionMinor'. –
Bạn có thể đọc danh sách bất động sản tại "/System/Library/CoreServices/SystemVersion.plist và trích xuất các 'ProductVersion' chìa khóa, đây là cách hệ điều hành ứng dụng X installer nó Dưới đây là một ví dụ:.
NSString *versionString;
NSDictionary * sv = [NSDictionary dictionaryWithContentsOfFile:@"/System/Library/CoreServices/SystemVersion.plist"];
versionString = [sv objectForKey:@"ProductVersion"];
Cách khác, lệnh swvers -productVersion
sẽ thực hiện tương tự.
Điều đó hoạt động, nhưng nó phát sinh đĩa I/O và không cần thiết. Gestalt là một lựa chọn tốt hơn (và nhanh hơn). –
Nhưng không dùng nữa kể từ 10,8 và có vẻ như đây là cách tốt nhất hiện có. Xem câu hỏi này: http://stackoverflow.com/questions/11072804/mac-os-x-10-8-replacement-for-gestalt-for-testing-os-version-at-runtime – hobotron
Cảm ơn, giải pháp tốt nhất tôi đã tìm thấy từ 10.8 –
NSString *osver()
{
SInt32 versionMajor=0, versionMinor=0, versionBugFix=0;
Gestalt(gestaltSystemVersionMajor, &versionMajor);
Gestalt(gestaltSystemVersionMinor, &versionMinor);
Gestalt(gestaltSystemVersionBugFix, &versionBugFix);
return [NSString stringWithFormat:@"%d.%d.%d", versionMajor, versionMinor, versionBugFix];
}
Chỉ là những gì tôi đang tìm kiếm. – David
Đáng buồn thay, Gestalt không được chấp nhận kể từ 10.8. –
-[NSProcessInfo operatingSystemVersionString]
là con người có thể đọc được và cục bộ. Thích hợp để hiển thị cho người dùng hoặc sử dụng trong các email lỗi và như vậy, nhưng không thích hợp để phân tích cú pháp.
+1: Rất đẹp. Tôi đề nghị một chút sửa đổi đề cập đến phương thức lớp '+ processInfo' để nhận một cá thể để gọi' -operatingSystemVersionString' trên đó. – ArtOfWarfare
có thể gọi [NSProcessInfo operatingSystemVersionString] từ mã C++ không? – Vlad
Không. Bạn cần phải tạo một phương thức bao bọc xung quanh nó để gọi nó từ C++ và bạn sẽ phải thêm một số Objective-C vào chương trình của bạn để thực hiện điều đó. Bạn có thể tạo tệp Objective-C++, bạn có thể sử dụng Gestalt, bạn có thể sử dụng hệ thống() để gọi swvers -productVersion từ dòng lệnh hoặc bạn có thể đọc nó từ hệ thống tệp (như đã đề cập ở đâu đó trên trang này). Nó chỉ phụ thuộc vào tình hình của bạn và những gì bạn đang cố gắng làm. – brant
sử dụng phương pháp này nó sẽ trở lại phiên bản Mac OS X
+(SInt32) OSVersion;
{
SInt32 osxMinorVersion;
Gestalt(gestaltSystemVersionMinor, &osxMinorVersion);
return osxMinorVersion;
}
Sau 10_10, 8_0 đã được trình bày tốt hơn & Cách đơn giản nhất sẽ là
[NSProcessInfo processInfo].operatingSystemVersion
đó sẽ trở lại
NSOperatingSystemVersion
struct
với tất cả 3 số.
- 1. jQuery - phát hiện hệ điều hành và phiên bản hệ điều hành
- 2. Cách tải phiên bản Hệ điều hành Windows Phone hiện tại?
- 3. Node.js để nhận/xác định phiên bản hệ điều hành
- 4. Sự khác biệt thực sự giữa Phiên bản Hệ điều hành SDK và Phiên bản Triển khai hoặc Phiên bản Hệ điều hành Triển khai là gì?
- 5. Cài đặt PocketSphinx trên một hệ điều hành MAC X
- 6. Cách xác định phiên bản hệ điều hành iPhone hiện tại khi chạy và so sánh các chuỗi phiên bản?
- 7. Phiên bản hệ điều hành iPhone 3.0.1 (7A400) - không được hỗ trợ bởi phiên bản mới nhất của XCode
- 8. Apache: cách ẩn phiên bản máy chủ và hệ điều hành của người dùng?
- 9. lỗi lệnh SED trên hệ điều hành MacOS X
- 10. Phát hiện phiên bản hệ điều hành chính xác từ trình duyệt
- 11. Khả năng tương thích với hệ điều hành cho các phiên bản .NET Framework khác nhau
- 12. Buộc một hệ nhị phân Mac OS X 32/64-bit để chạy 32 bit chỉ trên một phiên bản hệ điều hành cũ?
- 13. Tải hệ điều hành hiện tại Trong Adobe Air
- 14. Swing UI không có hệ điều hành bản địa tìm
- 15. Câu hỏi khởi động hệ điều hành cơ bản
- 16. Cách tải phiên bản JUnit
- 17. Lập trình điều khiển các phiên bản hệ điều hành iPhone để kích hoạt chức năng cho cả OS 3.x và 4 - Vấn đề MFMessageComposeViewController
- 18. Sự khác biệt cơ bản giữa hệ điều hành Linux và hệ điều hành di động (android)
- 19. Làm cách nào để có được phiên bản hệ điều hành thân thiện với người dùng trong tương lai?
- 20. Tải phiên bản ExtJS
- 21. Phát hiện hệ điều hành
- 22. Hệ điều hành trong Ada
- 23. Thu thập số phiên bản hệ điều hành và công cụ cho mục đích lưu trữ xây dựng
- 24. malloc trong hệ thống nhúng không có hệ điều hành
- 25. Phát triển một hệ điều hành
- 26. động LINQ và điều hành quá tải
- 27. Sử dụng KeyMap mặc định của hệ điều hành gốc
- 28. Phiên bản OS X của bringSubviewToFront :?
- 29. Viết hệ điều hành trong C++
- 30. ruby câu hỏi quá tải điều hành
@JakePetroules cách thức này có thể trùng lặp nếu được hỏi 7 năm trước và giả ban đầu - 4 năm trước! Nhìn vào ngày xin vui lòng. –
Vì câu hỏi khác có chứa câu trả lời chính xác như câu trả lời được chấp nhận. Điều này chứa tất cả các câu trả lời sai hoặc lỗi thời, ngoại trừ câu trả lời ở dưới cùng. Stack Overflow là một wiki để mọi người tìm câu trả lời, chứ không phải nhật ký lịch sử các câu hỏi và câu trả lời. –