从Darwin / XNU版本中提取macOS版本名称

时间:2018-07-01 07:55:36

标签: macos version darwin

是否存在从其对应的darwin版本或xnu版本中获取macOS版本(10.X)的公式(每个版本都没有预定义的表)

例如,在macOS Mojave(10.14)中,我们具有以下内容:

export default class SearchBarItem extends Component {
  state = {
    showOptions: false,
    selectedItem: [],
  }

  handleSelectItem = (selectedItem) => this.props.handleSelectItem(this.props.selectCategory, selectedItem);

  submitSearch = () => this.props.submitSearch();

  handleClickCategory = () => {
    this.setState({ showOptions: !this.state.showOptions });
  }

  handleClickItem(option) {
    this.setState({
      selectedItem: [...this.state.selectedItem, option],
    }, () => this.handleSelectItem(this.state.selectedItem));
  }

  render() {
    const options = this.props.options.map((item, index) => (
      <div
        className={this.state.selectedItem === item ? "searchBarItem__option--active" : "searchBarItem__option"}
        key={index}
        onClick={() => this.handleClickItem(item)}
      >
        {item}
      </div>
    ));

    const optionBox = (
      <div className="searchBarItem__box">
        <div
          className="searchBarItem__option"
          onClick={() => this.handleClickItem('')}
        >
          不限{this.props.name}
        </div>
        {options}
        <div className="searchBarItem__confirm">
          <span>取消</span><span onClick={() => this.submitSearch()} >套用</span>
        </div>
      </div>
    );

    return (
      <div className="searchBarItem">
        <span onClick={() => this.handleClickCategory()} >
          {(() => {
              switch (this.state.selectedItem.length) {
                case 0: return this.props.name;
                case 1: return this.state.selectedItem[0];
                default: return `${this.state.selectedItem.length} ${this.props.name}`;
              }
            })()}
        </span>
        { this.state.selectedItem.length > 0 ? '' : <Icon icon={ICONS.DROP_DOWN} size={18} /> }
        { this.state.showOptions ? optionBox : '' }
      </div>
    );
  }
}

SearchBarItem.propTypes = {
  name: PropTypes.string.isRequired,
  selectCategory: PropTypes.string.isRequired,
  options: PropTypes.arrayOf(PropTypes.string).isRequired,
  handleSelectItem: PropTypes.func.isRequired,
  submitSearch: PropTypes.func.isRequired,
};

在macOS high sierra(10.13)中,我们有:

darwin version 18.0.0
xnu version 4903.200.249

因此,我推断达尔文版本的专业编号在每个OS版本中都是唯一的:

10.13.3: xnu-4570.41.2  darwin version 17.4.0   
10.13.2: xnu-4570.31.3  darwin version 17.3.0   
10.13.1: xnu-4570.20.62 darwin version 17.2.0
10.13:   xnu-4570.1.46  darwin version 17.0.0   

我的假设正确吗?

2 个答案:

答案 0 :(得分:1)

是的,这对于主要版本号是正确的。次版本有时会增加,即使没有进行macOS修订,反之亦然,反之亦然,例如10.13.1,其中达尔文次要版本为安全版本增加1,然后为10.13.1再次增加。

答案 1 :(得分:0)

等式正确。要涵盖所有* OS变体,请使用:

D =达尔文版

MacOS = 10.(D-4) TvOS = iOS =(D-6) WatchOS =(D-13)

并且未成年人通常会对齐,除非如pmdj所述,修复程序会增加。

如果您想要确切的MacOS(或* OS变体)版本,而没有任何变化,那么它唯一真正存在的地方是/System/Library/CoreServices/SystemVersion.plist。 ProductVersion键(在MacOS中,ProductUserVisibleVersion键是在GUI和其他位置报告的键。MacOS版本号在OS中的任何地方都没有实际意义。