前言

最近公司入职了一个新的iOS开发,趁着这个时机,把旧电脑安排给了新员工,然后换了一台新 MacBook Pro。这样,就涉及到资料的备份和转移,还好以往我把公司资料直接保存在icloud,这就省了很多时间。但是除了资料,mac上的开发环境、配置等等就需要重新配置了。

回想一下,重装电脑很多次了,每次都要查资料,重新配置。一方面是太麻烦了,另一方面,这样也会把自己很多配置文件丢失,比如:Xcode中的snips,ssh方面的常用的服务器,git和svn中的配置等等。因此希望将这次系统重装流程记录下来,并建立一个备份的资料库,作为自己的积累。

本文基于 macOS 10.14.5

1、重装系统

1.1、macOS 恢复系统

mac开机时有根据不同的命令,可以分别进入不同的模式。(参考Mac 的启动组合键)。

  • command + r

  • 进入内置的 macOS 恢复系统。只有在系统恢复盘还存在的时候使用。安装您的 Mac 上装有的最新 macOS。

  • command + option + r

  • 进入内置的 macOS 恢复系统。即使系统恢复盘报废,也可以恢复系统。升级到与您的 Mac 兼容的最新 macOS。

  • command + shift + option + r

  • 进入内置的 macOS 恢复系统。即使系统恢复盘报废,也可以恢复系统。安装 Mac 随附的 macOS 或与它最接近且仍在提供的版本。

  • option

  • 进入 启动管理器。如果该电脑安装了多个系统,那么就可以在这里选择启动盘。

  • command + option + p + r

    • 重置 NVRAM 或 PRAM。

      根据apple官方文档(重置 Mac 上的 NVRAM 或 PRAM)
      NVRAM(非易失性随机访问存储器)是一小部分内存,Mac 使用这些内存来储存某些设置并对其进行快速访问。PRAM(参数 RAM)储存着类似的信息,且 NVRAM 和 PRAM 的重置步骤相同。
      可储存在 NVRAM 中的设置包括音量、显示屏分辨率、启动磁盘选择、时区,以及最近的内核崩溃信息。储存在 NVRAM 中的设置取决于您的 Mac 以及与这台 Mac 搭配使用的设备。
      如果您遇到与这些设置或其他设置有关的问题,那么重置 NVRAM 可能会有帮助。例如,如果 Mac 并非从“启动磁盘”偏好设置中选定的磁盘启动,或者在 Mac 启动前短暂地显示了一个问号图标,则可能需要重置 NVRAM。

  • shift

    • 安全模式 启动。它会执行某些检查并防止某些软件自动载入或打开。根据apple官方文档。

      根据apple官方文档(使用安全模式查明 Mac 的相关问题
      )

      以安全模式启动 Mac 会完成以下操作:

      • 验证启动磁盘,并根据需要尝试修复目录问题
      • 仅载入所需的内核扩展
      • 防止启动项和登录项自动打开
      • 停用用户安装的字体
      • 删除字体缓存、内核缓存和其他系统缓存文件
      • 如果您的 Mac 出现问题,但这个问题在您以安全模式启动时消失,您或许能够查明问题原因。

正常情况,一般使用 command + r 命令就可以满足需求了。

1.2、格式化硬盘

进入 安全模式 之后,选择 macOS实用工具 -> 磁盘工具 ,然后在菜单栏中选择 查看 -> 显示所有设备,选中硬盘进行格式化,需要自定义磁盘名称,磁盘格式和方案选择默认就可以了。

1.3、在线重装系统

格式化硬盘之后,返回 macOS实用工具 ,选择 重新安装mac OS ,点击继续,选择安装磁盘,点击继续。在线安装根据网络状态,需要的时间也不等。在安装过程中,请保持电源连接,不要合上上盖,以便安装完成。

2、系统配置

系统重装完成之后,重新激活系统。可以选择从 Time Mechine 中还原系统,不过有个小问题。如果你使用icloud,备份的系统中 icloud drive 文件如果不是最新,那么会很麻烦。icloud drive 坑还是比较多的。在这里,我选择暂不传输,当做一台新电脑来折腾。
进入系统之后,首先将 mac 自带的软件用一个文件夹装起来,毕竟原生的APP很多都不是很顺手。接下来,真正的工作就要开始了。
首先我们来对mac进行一些配置。

2.1、允许运行第三方应用。

允许 mac 安装第三方的应用, 避免出现安装的应用不能运行,或者提示“已损坏”。

malideMacBook-Pro:Downloads mali$ sudo spctl --master-disable
Password:
malideMacBook-Pro:Downloads mali$ 

2.2、显示隐藏文件

macOS Sierra 系统之后,直接使用 command + shift + . 就可以快速切换。

defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder //显示隐藏文件
defaults write com.apple.finder AppleShowAllFiles No && killall Finder //不显示隐藏文件

2.3、生成公钥私钥

在Mac上有多种方式来生成公钥和私钥。

  1. openssl。macOS系统自带openssl。
  2. ssh_keygen
 ✘ mali@malideMacBook-Pro  ~  ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/mali/.ssh/id_rsa):
Created directory '/Users/mali/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/mali/.ssh/id_rsa.
Your public key has been saved in /Users/mali/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:qNJ/iRrfK66Qd0hG1f1JvkeyB4IfiuwP9lYqN7Vz1vw mali@malideMacBook-Pro.local
The key's randomart image is:
+---[RSA 2048]----+
|      .. .       |
|     .  . . .    |
|    .    . + .   |
|   .   .. o * .  |
|    o...So o *   |
|   = oo . + o o  |
|  + *.+. = . =   |
|   + *=+B o o o  |
|    o++B=o +   .E|
+----[SHA256]-----+
 mali@malideMacBook-Pro  ~ 

3、装机必备

配置完成之后,就要开始安装必备的软件了。

3.1、输入法

输入法,是一个多平台都需要使用的工具,比如手机,mac,pc等等。

苹果自带的输入法,性能当然是最好的。不过有一个问题,就是只能在apple生态内用,另外联想功能不是很好。所以我还是习惯性的使用 sougou输入法 ,可以多平台同步,之前的输入习惯都可以同步过来。

3.2、1password

在当前时代,每个人都有巨量的账号。那么,账号密码的管理就是个大问题。如果多平台都使用同一个密码,很容易就会被撞库导致数据泄露;但是针对不同平台设置不同的密码,是一件耗时耗力的事情。

1password 就是一款密码管理的保险箱,只需要记住一个主密码,用来登陆 1password ,其他所有的账号密码都由 1password 来保存,需要使用时,直接调取使用就可以。同时,1password 还会检查密码的泄露情况和其他安全问题,及时提示用户修改。

目前,除了支付宝、微信、以及各大银行的手机银行,我所有的账号密码都是由1password 来管理。如果不安装1password ,那我根本就不记得我的密码。平时需要做的,只是根据1password 的提示更新密码等就可以了。
另外,1password 支持多平台,iphonemacwindowschrome 插件等,多平台实时同步。据说windows下体验很差,不过我很少用,所以无所谓啦。

3.3、 chrome + lantern

chrome 是浏览器,lantern 是一款VPN。

macOS 自带的 safari 很好用,但是只能在apple生态内用,有着太多局限性。作为一个开发人员,虽然不是前端,当然也是使用 chrome 啦。对于我这种懒人来说,最重要的就是多端同步,在任何一台机器上登陆账号,都可以同步所有配置、拓展。当然, chrome 也有坑,就是官方下载 chrome 需要翻墙,登陆google账号同步个人数据时也需要翻墙。我是在本地保存了 chrome 的安装包和 democross 的安装文件,安装之后就可以使用了。

lantern ,我一般是直接上 **GitHub **下载。不过,在现在的大环境下,lantern也不是很好用了,经常性的连不上。我目前是用的免费版,每个月500M流量,同步 chrome 数据够用了。

当然,作为程序员,翻墙是基本需求了,lantern 这每个月500M肯定是不够用的。所以我另外用了一个工具, DemoCross ,是 chrome 中的一个 **extention ** ,巨稳定,也很便宜,9块一个月;当然,也有缺陷,只能在 chrome 中使用。基本满足我的需求了。

3.4、Alfred + dropbox

AlfredMac 平台上一款著名的效率提升工具,包含功能众多。它分为免费版和付费版。一般用户使用免费版就够了。
dropbox 是境外的云盘服务,需要配备VPN才能使用。我使用它的唯一原因,只是因为Alfred配置文件同步只支持dropbox。一般保持一周更新一次的频率。

Alfred的使用,我就不介绍了,太多文章了。这里列一些我收藏的。

从零开始学习 Alfred:基础功能及设置

一切为了让效率更进一步,Alfred 4.0 更新详解

它已不仅仅是一款 Mac 效率启动器:Alfred 3.0 新版详解

5 款提高文件处理效率的 Alfred 扩展

4 款「本地化」的 Alfred 扩展分享

妙用 Alfred 让你最近使用的文件触手可及

OS X 效率启动器 Alfred 的最佳伴侣:Alfred Remote for iOS 上手详解

OS X 效率启动器 Alfred 的 5 个实用扩展推荐(一)

OS X 效率启动器 Alfred 的 5 个实用扩展推荐(二)

妙用 Alfred 让你最近使用的文件触手可及

3.5、keka

macOS 系统自身只支持zip格式的解压和压缩。

但是,在工作和生活中,我们总是会碰到其他的压缩格式,7Z、gz、tar等等,这个时候就需要第三方的软件支持。kake 就是一款非常好用的压缩程序,支持各种压缩格式,支持分卷压缩,支持设置解压缩密码。

3.6、macOS 空间清理

清理垃圾,一般是指清除系统和各APP运行时产生的缓存。实际上,如果硬盘空间够用,是不用清理的。但是,mac硬盘空间太贵了,那么提高硬盘使用率就很有必要了。

  • OmniDiskSweeper 一款非常轻量级的清理软件,界面简单,功能强大,而且免费!!!

  • CleanMyMac 一款非常优秀的垃圾清理软件,集成了很多系统提供的 Automator ,收费,并且价值不菲。

3.7、NTFS for mac

在操作系统中,windows 才是主流,macOS 毕竟算是小众。因此,在日常工作生活中,经常会有在 macOSwindows 系统之间进行数据传输的需求。然而,由于 NTFS 属于微软的私有格式,已经被注册为知识产权产品,因此 macOS 系统将 NTFS 格式的写入功能屏蔽了。目前 macOS 系统只支持 NTFS 的读取,不支持写入。为了解决这个问题,这个时候我们就需要提供 NTFS for mac 服务的软件来帮助我们实现对外置硬盘或者U盘中数据的读写等操作。

目前主流的软件有:paragon NTFStuxera NTFS

具体比较可以看这篇文章:Tuxera vs Paragon: Mac 上的 NTFS 磁盘读写工具怎么选?

3.8、office || wps

日常办公软件,当然也是必须的。据说现在 wps 的使用体验已经很好了,不过我已经用惯了 office ,因此就不考虑 wps 了。

在使用 office 的过程中,我碰到过一个问题,在 office 的偏好设置里设置语言是无效的,只能跟随系统语言。查资料发现,是可以调整的。以word 为例,在命令行中输入 defaults write com.microsoft.Word AppleLanguages '("zh-tw")' ,然后重启即可。具体可以查看这篇文章: Office for Mac 语言设置问题

4、其他常用软件

4.1、印象笔记

我把印象笔记作为一款收集软件,意思是说,只做收藏,不做编辑。

4.2、pocket

pocket是一款主流的稍后读APP,全平台支持,能够随时随地的将内容保存到APP内。

4.3、百度网盘

其实是真不想安装,不过很多资源分享都是通过百度网盘,而不安装的话,根本不能下载,百度这招真的很恶心人。

4.4、teamviewer

远程必备。

4.5、macsfancontrol

可以自由控制mac的风扇。

4.6、截屏与录屏

macOS系统本身已经提供了截屏和录屏功能。 进入 System Preference -> keyboard -> Shortcuts -> Screenshots 查看。

  • ⌘ + ⇧ + 3 截取全屏,并保存在桌面。
  • ⌃ + ⌘ + ⇧ + 3 截取全屏,并保存到粘贴板。
  • ⌘ + ⇧ + 4 截取选择区域,并保存在桌面。
  • ⌃ + ⌘ + ⇧ + 4 截取选择区域,并保存到粘贴板。
  • ⌘ + ⇧ + 4 进入截屏、录屏选择界面。

系统的功能已经非常强大,能够满足基本的需求。更多了解可以查看以下文章。

如何在 Mac 上拍摄屏幕快照

Mac OS小技巧:如何用好自带的截图工具

另外,QQ和微信也内置了截图服务,登陆之后,使用快捷键 ⌘ + ⌃ + A 。效果类似于一款腾讯出品的软件:截图

如果对这些都不满意,可以选择另一款腾讯出品的截图软件: snip

至于录屏,可以使用 LICEcap ,这是一款简介医用的动画屏幕录制软件,可以捕捉屏幕的区域并保存为gif动画或lcf格式。

4.7、远程桌面、远程文件传输

和云服务器的文件传输,一般使用ftp或者sftp。

  • 文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。 FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。
  • sftp是SSH File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。

目前阿里云ECS centOS系统,内置了sftp服务,可以直接通过sftp方式传输文件。如果需要使用ftp,需要自行在云服务器上安装ftp服务了。

在macOS 可以使用命令行来实现数据的传输。具体可以查看以下文章。

Mac如何使用SSH远程连接linux及使用SCP、SFTP和Filezilla进行文件上传、下载

当然,我更习惯使用GUI的客户端。这里有两个推荐。远程桌面使用 Parallels Client 。文件传输,本来是购买的yummy ftp pro。不过在某个版本更新之后,我的购买就失效了,无奈之中。替换成 ForkLift ,除了每次都需要输入账号密码,其他的都挺好用的。

4.8、cheat sheet

cheat sheet 是macOS平台上一款用来查看当前页面的可用快捷键的APP,可以极大的提高效率。
使用比较简单,安装完毕之后,在 系统偏好设置 -> 安全性与隐私 -> 辅助功能 中添加权限,就可以正常使用啦,长按 command键即可。

4.9、irvue

irvue 是一款壁纸APP,基于 Unsplash ,有很多精美的图片。

其实基于 Unsplash 的壁纸APP还有好几款,不过 irvue 最让我满意的地方是,在存在多个桌面时,可以同时修改多个桌面的壁纸。

了解更多,可以参考少数派的这篇文章:你只需要欣赏桌面,把换壁纸的事交给 Irvue 就好了

4.10、iina

mac OS 平台上非常好用的播放器。几乎支持全部格式视频,而且小巧,轻便,界面美观。

4.11、iStat Menus

iStat Menus 是一款非常强大的系统监控软件。通过它,可以最直观的了解几乎所有硬件的运行状态,它主要运行在系统状态栏。
具体使用可以参考以下文章:
不仅系统监控要做得更出色,iStat Menu 6 还能让你在状态栏看天气了
OS X 是了不起的操作系统:全能系统监测工具 iStat Menus 5 体验详解

5、iOS开发环境配置

ios开发, 一般来说,都是使用apple提供的IDE: Xcode 。另外,我习惯了使用 cocoapods 作为第三方库管理工具。

5.1、Xcode安装

现在一些辅助的工具安装完毕,作为一个iOS开发工程师,接下来首先要做的肯定是配置开发环境啦。
首先是Xcode。自从2015年 Xcode ghost事件之后,下载 Xcode 还是建议直接到mac的App Store去下载了,,非常方便,历史版本,可以直接上苹果开发者网站下载(More Downloads for Apple Developers)。Xcode作为苹果官方出品的IDE,如果不是Xcode8以后禁了插件,我会更爱它。

5.2、Xcode模拟器安装

模拟器安装本来是个很简单的工作,在「Xcode -> Preferences -> Components」中选择想要安装的模拟器就可以了。但是,apple的服务器着实不稳定,有时候会慢的让你怀疑人生。因此,我在想会不会又更方便的安装方式呢?检索资料之后,找到了这篇文章:解决直接在xcode下载模拟器慢的方案。感谢作者分享。
我大致介绍一下。

  1. 打开「实用工具 -> console」(系统控制台)。
  2. 进入「Xcode -> Preferences -> Components」,点击某个版本的模拟器进行下载。然后取消下载。在console中可以看到对应下载链接,该链接即这个版本的模拟器的下载路径。
DVTDownloadable: Download Cancelled. Downloadable: https://devimages-cdn.apple.com/downloads/xcode/simulators/com.apple.pkg.AppleTVSimulatorSDK12_1-12.1.1.1543439531.dmg.
  1. 把所有的模拟器都点一次,就可以获得所有的安装路径。下载就可以选择其他方式。
  2. 下载完成之后,进入路径~/Library/Caches,右击com.apple.dt.Xcode文件,选择显示包内容。再进入Downloads路径(没有就自己创建一个),将下载好的文件放入。
  3. 再次进入「Xcode -> Preferences -> Components」,再次点击下载。

5.3、Cocoapods

5.3.1、Cocoapods简介

CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It has over 62 thousand libraries and is used in over 3 million apps. CocoaPods can help you scale your projects elegantly.

这是官方的一段简介。大致意思是,Cocoapods 是专为基于swift和Objective-C语言编写的项目提供依赖库管理的工具,拥有超过6万个第三方框架,超过300万个APP在使用它。Cocoapods可以让你优雅的拓展项目。
具体来说,Cocoapods可以帮助我们节省配置和更新第三方库的时间;另外,自己开发的组件也可以上传到Cocoapods,以供他人使用。

如果不使用Cocoapods,正常来说,我们使用第三方库,需要经历一下步骤:

  1. 把需要使用的第三方库的源代码添加到我们的项目中。
  2. 配置第三方库需要的依赖(系统提供的framework,甚至是其他的第三方库)。
  3. 设置第三方库需要的编译条件。
  4. 手动管理第三方库的更新。

这个过程是比较繁琐的,其中更是会出现很多奇奇怪怪的报错,处理起来非常麻烦。如果是使用Cocoapods,那么这些都不用管,Cocoapods会帮我们处理好。

如果想多了解Cocoapods,可以看下这些文章:
我所理解的 CocoaPods
CocoaPods安装和使用教程

5.3.2、Cocoapods的安装

Cocoapods本质上是一个Ruby项目,由若干gems组成。因此本地需要配置Ruby环境才可以运行。在Mac系统中,是自带Ruby的。使用命令Ruby -v查看当前版本。

➜  ~ Ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
➜  ~

如果系统版本过低,导致系统自带的ruby版本太低,是无法安装cocoapods的,需要升级ruby才可以。我们通常使用RVM(Ruby Verssion Manager)来管理ruby的版本。

5.3.2.1、安装rmv
➜  ~ curl -L get.rvm.io | bash -s stable
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   194  100   194    0     0     63      0  0:00:03  0:00:03 --:--:--    63
100 24168  100 24168    0     0   5638      0  0:00:04  0:00:04 --:--:-- 3034k
Downloading https://github.com/rvm/rvm/archive/1.29.8.tar.gz
Downloading https://github.com/rvm/rvm/releases/download/1.29.8/1.29.8.tar.gz.asc
Found PGP signature at: 'https://github.com/rvm/rvm/releases/download/1.29.8/1.29.8.tar.gz.asc',
but no GPG software exists to validate it, skipping.
Installing RVM to /Users/mali/.rvm/
    Adding rvm PATH line to /Users/mali/.profile /Users/mali/.mkshrc /Users/mali/.bashrc /Users/mali/.zshrc.
    Adding rvm loading line to /Users/mali/.profile /Users/mali/.bash_profile /Users/mali/.zlogin.
Installation of RVM in /Users/mali/.rvm/ is almost complete:

  * To start using RVM you need to run `source /Users/mali/.rvm/scripts/rvm`
    in all your open shell windows, in rare cases you need to reopen all shell windows.
Thanks for installing RVM 🙏
Please consider donating to our open collective to help us maintain RVM.

👉  Donate: https://opencollective.com/rvm/donate


➜  ~ source ~/.bashrc
➜  ~ source ~/.bash_profile
➜  ~
5.3.2.2、rvm的基本使用

查看rvm版本

➜  ~ rvm -v
rvm 1.29.8 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]
➜  ~

查看可安装的ruby版本

➜  ~ rvm list known

安装一个ruby版本,我一般安装最新的

➜  ~ rvm install 2.6.3
Searching for binary rubies, this might take some time.
No binary rubies available for: osx/10.14/x86_64/ruby-2.6.3.
Continuing with compilation. Please read 'rvm help mount' to get more information on binary rubies.
Checking requirements for osx.
Certificates bundle '/usr/local/etc/openssl@1.1/cert.pem' is already up to date.
Requirements installation successful.
Installing Ruby from source to: /Users/mali/.rvm/rubies/ruby-2.6.3, this may take a while depending on your cpu(s)...
ruby-2.6.3 - #downloading ruby-2.6.3, this may take a while depending on your connection...
** Resuming transfer from byte position 7135232
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 7201k  100 7201k    0     0  22621      0  0:05:25  0:05:25 --:--:-- 18318
ruby-2.6.3 - #extracting ruby-2.6.3 to /Users/mali/.rvm/src/ruby-2.6.3 - please wait
ruby-2.6.3 - #configuring - please wait
ruby-2.6.3 - #post-configuration - please wait
ruby-2.6.3 - #compiling - please wait
ruby-2.6.3 - #installing - please wait
ruby-2.6.3 - #making binaries executable - please wait
ruby-2.6.3 - #downloading rubygems-3.0.4
ruby-2.6.3 - #extracting rubygems-3.0.4 - please wait
ruby-2.6.3 - #removing old rubygems - please wait
$LANG was empty, setting up LANG=en_US.US-ASCII, if it fails again try setting LANG to something sane and try again.
ruby-2.6.3 - #installing rubygems-3.0.4 - please wait
ruby-2.6.3 - #gemset created /Users/mali/.rvm/gems/ruby-2.6.3@global
ruby-2.6.3 - #importing gemset /Users/mali/.rvm/gemsets/global.gems - please wait
ruby-2.6.3 - #generating global wrappers - please wait
ruby-2.6.3 - #gemset created /Users/mali/.rvm/gems/ruby-2.6.3
ruby-2.6.3 - #importing gemsetfile /Users/mali/.rvm/gemsets/default.gems evaluated to empty gem list
ruby-2.6.3 - #generating default wrappers - please wait
ruby-2.6.3 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
Install of ruby-2.6.3 - #complete
Ruby was built without documentation, to build it run: rvm docs generate-ri

设置默认版本

➜  ~ rvm use 2.6.3 --default
Using /Users/mali/.rvm/gems/ruby-2.6.3
➜  ~

更换国内源https://gems.ruby-china.com/
由于墙的存在,因此默认的源是非常非常慢的,需要切换的国内的镜像源。

// 移除自带源,因为国内被墙了
➜  ~ gem sources --remove https://rubygems.org/
https://rubygems.org/ removed from sources
➜  ~


//添加国内镜像源
➜  ~ gem source -a https://gems.ruby-china.com/
https://gems.ruby-china.com/ added to sources
➜  ~


// 查看是否更换成功
➜  ~ gem sources -l
*** CURRENT SOURCES ***

https://gems.ruby-china.com/
➜  ~
5.3.2.3、安装cocoapods
// 安装cocoapods
➜  ~ sudo gem install cocoapods
Password:
Fetching thread_safe-0.3.6.gem
Fetching concurrent-ruby-1.1.5.gem
Fetching i18n-0.9.5.gem
Fetching activesupport-4.2.11.1.gem
Fetching fuzzy_match-2.0.4.gem
Fetching tzinfo-1.2.5.gem
Fetching nap-1.1.0.gem
Fetching cocoapods-core-1.7.2.gem
Fetching claide-1.0.2.gem
Fetching cocoapods-deintegrate-1.0.4.gem
Fetching cocoapods-downloader-1.2.2.gem
Fetching cocoapods-plugins-1.0.0.gem
Fetching cocoapods-search-1.0.0.gem
Fetching cocoapods-stats-1.1.0.gem
Fetching netrc-0.11.0.gem
Fetching cocoapods-trunk-1.3.1.gem
Fetching cocoapods-try-1.1.0.gem
Fetching molinillo-0.6.6.gem
Fetching atomos-0.1.3.gem
Fetching CFPropertyList-3.0.0.gem
Fetching colored2-3.1.2.gem
Fetching nanaimo-0.2.6.gem
Fetching xcodeproj-1.10.0.gem
Fetching escape-0.0.4.gem
Fetching fourflusher-2.3.1.gem
Fetching gh_inspector-1.1.3.gem
Fetching ruby-macho-1.4.0.gem
Fetching cocoapods-1.7.2.gem
Successfully installed thread_safe-0.3.6
Successfully installed tzinfo-1.2.5
Successfully installed concurrent-ruby-1.1.5
Successfully installed i18n-0.9.5
Successfully installed activesupport-4.2.11.1
Successfully installed nap-1.1.0
Successfully installed fuzzy_match-2.0.4
Successfully installed cocoapods-core-1.7.2
Successfully installed claide-1.0.2
Successfully installed cocoapods-deintegrate-1.0.4
Successfully installed cocoapods-downloader-1.2.2
Successfully installed cocoapods-plugins-1.0.0
Successfully installed cocoapods-search-1.0.0
Successfully installed cocoapods-stats-1.1.0
Successfully installed netrc-0.11.0
Successfully installed cocoapods-trunk-1.3.1
Successfully installed cocoapods-try-1.1.0
Successfully installed molinillo-0.6.6
Successfully installed atomos-0.1.3
Successfully installed CFPropertyList-3.0.0
Successfully installed colored2-3.1.2
Successfully installed nanaimo-0.2.6
Successfully installed xcodeproj-1.10.0
Successfully installed escape-0.0.4
Successfully installed fourflusher-2.3.1
Successfully installed gh_inspector-1.1.3
Successfully installed ruby-macho-1.4.0
Successfully installed cocoapods-1.7.2
Parsing documentation for thread_safe-0.3.6
Installing ri documentation for thread_safe-0.3.6
Parsing documentation for tzinfo-1.2.5
Installing ri documentation for tzinfo-1.2.5
Parsing documentation for concurrent-ruby-1.1.5
Installing ri documentation for concurrent-ruby-1.1.5
Parsing documentation for i18n-0.9.5
Installing ri documentation for i18n-0.9.5
Parsing documentation for activesupport-4.2.11.1
Installing ri documentation for activesupport-4.2.11.1
Parsing documentation for nap-1.1.0
Installing ri documentation for nap-1.1.0
Parsing documentation for fuzzy_match-2.0.4
Installing ri documentation for fuzzy_match-2.0.4
Parsing documentation for cocoapods-core-1.7.2
Installing ri documentation for cocoapods-core-1.7.2
Parsing documentation for claide-1.0.2
Installing ri documentation for claide-1.0.2
Parsing documentation for cocoapods-deintegrate-1.0.4
Installing ri documentation for cocoapods-deintegrate-1.0.4
Parsing documentation for cocoapods-downloader-1.2.2
Installing ri documentation for cocoapods-downloader-1.2.2
Parsing documentation for cocoapods-plugins-1.0.0
Installing ri documentation for cocoapods-plugins-1.0.0
Parsing documentation for cocoapods-search-1.0.0
Installing ri documentation for cocoapods-search-1.0.0
Parsing documentation for cocoapods-stats-1.1.0
Installing ri documentation for cocoapods-stats-1.1.0
Parsing documentation for netrc-0.11.0
Installing ri documentation for netrc-0.11.0
Parsing documentation for cocoapods-trunk-1.3.1
Installing ri documentation for cocoapods-trunk-1.3.1
Parsing documentation for cocoapods-try-1.1.0
Installing ri documentation for cocoapods-try-1.1.0
Parsing documentation for molinillo-0.6.6
Installing ri documentation for molinillo-0.6.6
Parsing documentation for atomos-0.1.3
Installing ri documentation for atomos-0.1.3
Parsing documentation for CFPropertyList-3.0.0
Installing ri documentation for CFPropertyList-3.0.0
Parsing documentation for colored2-3.1.2
Installing ri documentation for colored2-3.1.2
Parsing documentation for nanaimo-0.2.6
Installing ri documentation for nanaimo-0.2.6
Parsing documentation for xcodeproj-1.10.0
Installing ri documentation for xcodeproj-1.10.0
Parsing documentation for escape-0.0.4
Installing ri documentation for escape-0.0.4
Parsing documentation for fourflusher-2.3.1
Installing ri documentation for fourflusher-2.3.1
Parsing documentation for gh_inspector-1.1.3
Installing ri documentation for gh_inspector-1.1.3
Parsing documentation for ruby-macho-1.4.0
Installing ri documentation for ruby-macho-1.4.0
Parsing documentation for cocoapods-1.7.2
Installing ri documentation for cocoapods-1.7.2
Done installing documentation for thread_safe, tzinfo, concurrent-ruby, i18n, activesupport, nap, fuzzy_match, cocoapods-core, claide, cocoapods-deintegrate, cocoapods-downloader, cocoapods-plugins, cocoapods-search, cocoapods-stats, netrc, cocoapods-trunk, cocoapods-try, molinillo, atomos, CFPropertyList, colored2, nanaimo, xcodeproj, escape, fourflusher, gh_inspector, ruby-macho, cocoapods after 15 seconds
28 gems installed

// 安装本地库,需要等待很长时间
➜  ~ pod setup
Ignoring executable-hooks-1.6.0 because its extensions are not built. Try: gem pristine executable-hooks --version 1.6.0
Ignoring gem-wrappers-1.4.0 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.4.0
Setting up CocoaPods master repo
  $ /usr/bin/git -C /Users/mali/.cocoapods/repos/master fetch origin --progress
  remote: Enumerating objects: 11494, done.
  remote: Counting objects: 100% (11494/11494), done.
  remote: Compressing objects: 100% (165/165), done.
  remote: Total 44594 (delta 11354), reused 11424 (delta 11313), pack-reused 33100
  Receiving objects: 100% (44594/44594), 5.01 MiB | 36.00 KiB/s, done.
  Resolving deltas: 100% (30150/30150), completed with 4479 local objects.
  From https://github.com/CocoaPods/Specs
     c68db42388d..082ed90868f  master     -> origin/master
   + a1c937ec508...02443419999 indexes    -> origin/indexes  (forced update)
   * [new branch]              netlify    -> origin/netlify
  $ /usr/bin/git -C /Users/mali/.cocoapods/repos/master rev-parse --abbrev-ref HEAD
  master
  $ /usr/bin/git -C /Users/mali/.cocoapods/repos/master reset --hard origin/master
  Checking out files: 100% (4657/4657), done.
  HEAD is now at 082ed90868f [Add] WrapModel 1.0.8
Setup completed
➜  ~
5.3.2.4、cocoapods常用命令
// 当前使用 pod 版本
pod –version
// 更新到最新稳定版本
sudo gem install cocoapods
// 安装指定版本
sudo gem install cocoapods -v [版本号]
// 移除 CocoaPods,如果你安装多个,会列出一个 list 让你选择删除那个。如果只安装一个,也会给你提示,问你是否确定删除。
sudo gem uninstall cocopods
// 移除指定版本
sudo gem uninstall cocopods -v [版本号]
// 初始化项目`cocoapods`
pod init
// Podfile 中添加组件
pod ‘’
// 安装组件
pod install
// 安装组件的详细过程
pod install –verbose
// 更新某一组件
pod update [组件名]
// 更新本地依赖
pod repo update

5.4、git && svn

5.4.1、svn

mac是自带svn的,直接使用命令行可能是最便捷的方式了。如果需要GUI,可以使用cornerStore。

5.4.2、git

通过homebrew安装git,直接使用命令行。如果需要GUI,可以使用sourcetree。

5.5、蒲公英

由于iOS系统的特殊性,在测试阶段,真机测试是个非常麻烦的。蒲公英提供了一种相对简单的方式,简化了我们的流程。

5.6、Charles

Charles是一款Mac上常用的抓包工具,在移动开发过程中,我们常常需要调试与服务端的网络通讯协议,截取网络封包。Charles是通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问都通过它来完成,从而实现了网络封包的抓取。

5.7、app icon gear || prepo

这两款软件都是帮助生成APP开发中需要的icon的软件。当你对公司UI绝望的时候,这类软件会让你重获新生。

6、其他好用的开发工具

6.1、homebrew

homebrew是一款 Mac OS 系统下的第三方软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多使用的功能。homebrew会将软件包安装到独立目录,并将其文件symlink(软连接)到 /usr/local/Cellar 路径下。

6.1.1、安装homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
6.1.2、卸载homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"  
6.1.3、homebrew常用命令,及使用。
brew help                  //帮助
brew update                //更新homebrew软件,把所有的Formula目录更新,并且会对本机已经安装并有更新的软件标明。
brew upgrade               //更新homebrew软件,更新所有安装的Formula。
brew upgrade [Formula]     //更新homebrew软件,更新某个Formula。
brew info [FORMULA...]     //展示某个Formula的信息。
brew search [TEXT|/REGEX/] //搜索某个Formula,支持正则表达式。
brew install [FORMULA]     //安装Formula。
brew uninstall [FORMULA]   //卸载Formula。
brew list                  //展示目前安装的软件。
6.1.4、常用Formula

版本管理:git

malideMacBook-Pro:~ mali$ brew install git

预览插件( quick-look-plugins )

qlcolorcode 预览代码时代码高亮。
qlstephen 支持预览没有后缀的文本文件。
qlmarkdown 预览markdown文件的渲染效果。
quicklook-json 对json文件的格式化和高亮预览。
betterzip 预览压缩文件内部的内容,并支持自定义解压缩的行为;收费。
qlimagesize 图片预览时展示分辨率和大小。
webpquicklook 支持预览webP格式的图片。
qlvideo 预览更多格式的视频文件。
provisionql 可以预览.app或者.ipa文件的程序。
quicklookapk 预览安卓.apk的程序。

malideMacBook-Pro:~ mali$ brew cask install qlcolorcode qlstephen qlmarkdown quicklook-json qlimagesize webpquicklook qlvideo provisionql quicklookapk

下载利器:wget

malideMacBook-Pro:~ mali$ brew install wget

6.2、iterm2 + oh my zsh

作为程序员,会有非常多的场景用到命令行。macOS系统自带的terminal有时候不是很顺手,我们可以选择另外一个更好用的命令行工具 iterm2。可以使用homebrew安装。

malideMacBook-Pro:Downloads mali$ brew cask install iterm2
Updating Homebrew...
==> Satisfying dependencies
==> Downloading https://iterm2.com/downloads/stable/iTerm2-3_2_9.zip
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'iterm2'.
==> Installing Cask iterm2
==> Moving App 'iTerm.app' to '/Applications/iTerm.app'.
🍺  iterm2 was successfully installed!
malideMacBook-Pro:Downloads mali$ 

iterm2 安装完毕之后,开始安装 oh my zsh

//curl安装
malideMacBook-Pro:~ mali$ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

//wget安装
malideMacBook-Pro:~ mali$ sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
6.2.1、为什么用zsh

zsh和bash都是shell的一种,不过zsh在使用中,更加便利。对我来说,仅仅是zsh的自动补全就足以让我选择用它了。向更进一步了解,可以查看下列文章。
为什么说 zsh 是 shell 中的极品?
Zsh和Bash,究竟有何不同 坑很深

6.2.2、为什么用oh my zsh

zsh的配置需要花费大量的时间,而 oh my zsh 相当于是一个提供了预设个性配置的zsh,大大减少了我们配置的时间,非常推荐使用。
oh-my-zsh,让你的终端从未这么爽过

6.2.3、oh my zsh 基本使用
//查看当前使用的shell
➜  ~ echo $SHELL
/bin/zsh
➜  ~


//查看当前zsh版本
➜  ~ zsh --version
zsh 5.3 (x86_64-apple-darwin18.0)
➜  ~


//切换shell,从bash切换到zsh,需要重启iterm
➜  ~ chsh -s /bin/zsh
Changing shell for mali.
Password for mali:
➜  ~ 


//切换shell,从zsh切换到bash,需要重启iterm
➜  ~ chsh -s /bin/bash
Changing shell for mali.
Password for mali:
➜  ~


//查看当前环境安装了哪些shell
➜  ~ cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
➜  ~


//修改主题
oh my zsh 的配置文件路径是:~/.zshrc
进入配置文件,找到 ZSH_THEME 字段,修改为 ZSH_THEME="agnoster"。
agnoster主题,需要Powerline字体库的支持。

//从github拉取[Powerline字体库](https://github.com/powerline/fonts),拉取完成之后,运行install.sh文件安装。
然后设置iterm字体为 Meslo LG S DZ for Powerline 即可。
6.2.4、iterm 基本使用

恢复原始配置

~ ➤ defaults delete com.googlecode.iterm2
~ ➤
然后重启iterm即可。

6.3、ssh-copy-id

SSH 是 Secure Shell 的缩写,其实就是远程 Shell 登录。只要能远程登录到某台机器的 Shell 上,大到 Mac 笔记本,小到树莓派和智能路由器,我们就可以上传或下载文件、执行脚本等等,几乎掌握了设备的控制权。一般来说,配置自己的云服务器,都需要ssh登陆。
ssh登陆时,需要制定ip地址和登录名,例如ssh 192.168.1.1@root,就是指登陆ip为192.168.1.1的主机的用户root。ssh协议默认端口为22,不用填写;如果设备为了安全修改了端口为1234,则必须输入,例如ssh -p 1234 192.168.1.1@root。接下来输入密码就可以登陆了。
不过记忆密码是一件非常麻烦的事,好在ssh支持使用RSA的公钥和私钥来验证身份。具体就是指将自己的公钥文件( ~/.ssh/id_rsa.pub )的内容复制到目标服务器( ~/.ssh/authorized_keys )文件中。这样其实也很繁琐。
ssh-copy-id 就是一款简化过程,方便我们使用的工具。
另外,可以通过ssh的配置文件配置来设置云服务器的别名,省去了记忆ip、用户名、端口号的麻烦。基本格式如下

Host malitest
    HostName 192.168.1.1
    User root
    Port 22
    IdentityFile ~/.ssh/id_rsa

6.4、Dash

Dash 是一个API文档浏览器。配合 Alfred 可以快速查询api。

具体可以查看文章:程序员的 API 文档查询利器:Dash

7、自我提升

7.1、腾讯课堂

7.2、欧路词典