# 操作系统

除了特殊情况下，本书的读者无需考虑操作系统的问题。

当你准备制作一个真正的安装包的时候，对于一个严肃的开发和测试者来说，操作系统测试环境的要求，一方面最好是纯净的，这样可以最大限度地测试软件安装后的完整性，避免因软件的外部依赖而产生错误；另一方面，有的时候也需要测试与其他软件相互配合和相互的兼容性，那么最好是只安装所需的软件的纯净环境。如果是要试错，那么可能尽量让最多的用户测试，是一个不错的办法。&#x20;

复杂的情况一般都来自网络或多用户的情况。一般来说，安装包可能被运行在不同版本的操作系统，而有些系统特性随着操作系统版本而不同，这些因素可能需要建立不同macOS系统版本的测试环境。&#x20;

比如系统完整性保护（System Integrity Protection， 简称SIP，有时也会被坊间称作rootless），在OS X 10.11 El Captain 及更新版本中使用，那么在安装时就尽量使用SIP准许用户使用的文件路径，比如/Library和/usr/local等。如果被安装软件无法满足SIP的要求而需要用户禁止SIP，那么安装包最好预先判断用户环境，比如使用下面的命令做出判断：\
`$ if csrutil status | grep enabled; then echo Yes; else echo No; fi`

安装包制作者可以选择或者安装后提醒用户关闭SIP，或者提示用户必选先关闭SIP后才能安装。&#x20;

再比如，从macOS 10.13 High Sierra开始支持的APFS文件系统的情况下，如果我们希望在安装过程中判断目标系统的中分区和文件卷的情况，那么就需要使用下面三个命令，才能完全掌握有可能的亦或只有普通卷，亦或有核心存储，抑或是APFS的所有情况：\
`$ diskutil list`\
`$ diskutil cs list`\
`$ diskutil apfs list`

很多时候，软件的不同版本，特别是经过重大改版的软件，它们安装后的环境与前期版本有可能有很大差异，而且有时它们可以共生，有时又是排他的，那么就要考虑周全这些情况的不同组合，搭建测试环境。为了简化环境，有时可能需要强制使用一种或者两个版本。这种排他性可能体现在用户环境中的特殊数据库或资源中，一旦在一台Mac上升级了，在没有该版本的其它电脑上就有可能出现错误。

Mac操作系统可以被安装在虚拟机中，我们也可以用虚拟机搭建测试环境，不仅快速便捷，还可以利用虚拟机的快照（snapshot）功能，更容易实现系统状态的回滚，而且也可以方便的新建和复制给团队使用等。&#x20;

目前最流行的有三个虚拟机软件：

* Parallels的 Parallels Desktop for Mac，需付费
* VMWare的Fusion for Mac，需付费
* Oracle的Virtual Box，免费

众所周知，这些软件可以安装运行Windows虚拟机，其实同样可以运行Mac系统，在网上可以找到适合每种虚拟机软件的安装macOS的方法，有的是软件官方文档，也有第三方的变通方法，或者仅仅是注意事项。

在使用虚拟机的时候需要注意Mac操作系统的使用许可协议，相关文档可以询问苹果官方，或者参考苹果官网信息，比如中文的：[法律信息及通知](https://www.apple.com/cn/legal/terms/site.html)以及英文的[Software License Agreements](https://www.apple.com/legal/sla/)。
