2009-05-20 26 views
14

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?

+0

@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. –

+0

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. –

Trả lời

11

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 :.

+14

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

+5

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

+4

Câu trả lời này hiện sai thẳng vì gestaltSystemVersion không thể đại diện cho 10.10. –

7

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

0

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

+0

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'. –

19

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ự.

+0

Đ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). –

+2

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

+0

Cảm ơn, giải pháp tốt nhất tôi đã tìm thấy từ 10.8 –

11
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]; 
} 
+0

Chỉ là những gì tôi đang tìm kiếm. – David

+2

Đáng buồn thay, Gestalt không được chấp nhận kể từ 10.8. –

9

-[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.

+0

+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

+0

có thể gọi [NSProcessInfo operatingSystemVersionString] từ mã C++ không? – Vlad

+0

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

0

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; 
} 
0

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ố.

Các vấn đề liên quan