os-ver 0.2.1

Detect version number of operating system (Windows, macOS, iOS, Linux)
Documentation
use objc2::{
    class,
    encode::{Encoding, RefEncode},
    msg_send_id,
    rc::Id,
    runtime::NSObject,
    Message,
};
use objc2_foundation::NSString;

use crate::Version;

#[link(name = "UIKit", kind = "framework")]
extern "C" {}

struct UIDevice;

unsafe impl RefEncode for UIDevice {
    const ENCODING_REF: Encoding = NSObject::ENCODING_REF;
}

unsafe impl Message for UIDevice {}

impl UIDevice {
    fn current_device() -> Id<UIDevice> {
        unsafe { msg_send_id![class!(UIDevice), currentDevice] }
    }

    fn system_version(&self) -> Id<NSString> {
        unsafe { msg_send_id![self, systemVersion] }
    }
}

pub(crate) fn get_version() -> Version {
    let ver_str = UIDevice::current_device().system_version().to_string();
    let mut ver_numbers = ver_str.split('.').map(|s| s.parse().unwrap_or(0));
    let major = ver_numbers.next().unwrap_or(0);
    let minor = ver_numbers.next().unwrap_or(0);
    let patch = ver_numbers.next().unwrap_or(0);
    Version::new(major, minor, patch, 0)
}