👨💻 Setup Development and Testing Environment on MacOS
8 min read
Table of contents
🎯 Getting started with MacOS development and testing on a MacOS. Using VSCode and the Remote SSH extension, you can connect to remote servers.
✅ You may need to restart your computer after installing the above packages. 🚀
Software Developer's Tech Stack
✅ React, React Native, Next.js
✅ NodeJS 16.x, Redis
✅ Python 3.9
[ ] SQL: SQLite, MySQL/MariaDB, Postgres
[ ] NoSQL: MongoDB, DynamoDB
Install Web Browsers:
Install Web Browser Extensions (chromium)
[ ] iTerm 2
Visual Studio Code Extensions
☑️ GitLens — Git supercharged
[ ] ESLint
[ ] Excel Viewer
Install Package Managers
✍️ NOTE: This guide assumes you are using ZSH as your shell.
✅ If running
echo $SHELLin your Terminal returns
/bin/zsh, then you shouldn’t run into any issues.
[ ] If you are using Bash (
/bin/bashis returned instead), then change
~/.bash_profilewhenever you are exporting variables.
Install Homebrew & Update Git
## Install Homebrew from the Git repository /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ## Follow along with the prompts to complete the installation. ## You may want to restart the Terminal after installation to make sure the PATH variable is set correctly ## If you see a warning during installation such as ## Warning: /usr/local/bin is not in your PATH, then add it to the PATH # export PATH=/usr/local/bin:$PATH ## Install Ruby to use Amazon Homebrew formulas without sudo # brew install ruby ## REQUIRED: Turn off Homebrew analytics brew analytics off
## Install an updated version of Git # brew install git ## Check if your username and email are configured correctly in Git git config --list ## If either your username or email is not set properly, then update it with the respective command git config --global user.name "Thanh Nguyen" git config --global user.email firstname.lastname@example.org
Create APFS Volumes & Setup Workplace Folder
[ ] ⚠️ WARNING:
This is the only part in this guide that has the potential to render data unusable. Trying to use the tool to create a
workplacevolume if it already exists can cause your encryption key to be overwritten. Unless you made a copy of the key you will end up having to erase the volume all together - potentially causing you to lose work contained within the workspace volume.
Disk Utilityprogram should now have the volumes, make sure under the name it says: APFS Volume • APFS (Encrypted)
Setup Workplace Folder
## Change to your user directory cd ~ ## Check if the workplace folder exists ls -l workplace ## If you see "workplace -> /Volumes/Workplace" continute to Part 4 ## If you see "ls: workplace: No such file or directory" create the symlink ln -s /Volumes/Workplace ~/workplace ## Otherwise, if you see some other output, you already have a workplace folder but it is not linked to the encrypted volume. ## You may want to consider moving that content to a new folder (eg workplace_old) and then create the symlink with the above command. ## This will make following future commands and guides easier since they all assume you have the workplace folder. ## Ask for help if you need it since getting this wrong will make the rest of the guide much harder. ## Check if the workplace folder symlink is correct ls -l workplace ## ✅ You should see "workplace -> /Volumes/Workplace"
Bash note: if using Bash then change
## Add JAVA_HOME to your environment permanently - version 11 is currently recommended echo "export JAVA_HOME=/Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Content ## Verify that this is in ~/.zshrc or ~/.bash_profile cat ~/.zshrc ## OR # cat ~/.bash_profile
Note: if python-build fails due to “zipimport.ZipImportError: can’t decompress data; zlib not available” go here first.
Bash note: if using Bash then change
## Install the prerequisites from Homebrew brew install pyenv xz ## Add pyenv init to your environment to enable shims # echo - e 'if command -v pyenv 1 >/dev/null 2 >&1; then\n eval "$(pyenv init -)"\nfi' >> ## OR for Bash # echo -e 'if command -v pyenv 1 >/dev/null 2 >&1; then\n eval "$(pyenv init -)"\nfi' >> ## Reload your environment echo "alias python=/usr/bin/python3" >> ~/.zshrc echo "alias pip=/usr/bin/pip3" >> ~/.zshrc source ~/.zshrc ## If using bash # source ~/.bash_profile ## Setup the recommended Python versions # python-build 3.8.3 ~/.runtimes/Python 38 # python-build 3.9.14 ~/.runtimes/Python 39
Install Ruby Languages
## Install the prerequisites from Homebrew brew install rbenv libyaml libffi ## Set up the recommended Ruby version for Brazil ruby-build 2.5. 8 ~/.runtimes/Ruby 25 x
## Install NodeJS (version 16.x) from Homebrew # brew install node@16 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.zshrc # nvm ls-remote --lts nvm install --lts=hydrogen nvm use --lts=hydrogen # nvm alias default node node -v npm -v
✅ Node.js v16 or later
[ ] Gatsby CLI
[ ] Cypress
[ ] Lambda Runtime
Install AWS CLI
Note: if AWS CLI is version 1 then go here to install AWS CLI version 2.
## Check if AWS CLI version 2 is already installed aws --version ## If you see "aws-cli/2.0.0" or higher then continue ## If you see "zsh: command not found: aws" then download the package from below --> Download [AWS CLI version 2](https://awscli.amazonaws.com/AWSCLIV2.pkg)
Set Up AWS CLI Config File: AWS CLI v2 utilizes a config file to store frequently used configurations and credentials.
## Make sure ~/.aws exists ls ~/.aws ## If you see an error saying no such file or directory then create it mkdir ~/.aws ## Edit the config file nano ~/.aws/config
Add the following to your AWS CLI config file.
[default] output=json region=ap-southeast-2 ## (Optional) Add a named profile - boto 3 has issues assuming named profiles [profile oceansoft] output=json region=ap-southeast-2
To exit Nano, press Control+X, “Y” to accept changes, and then Return to save the file at
/Users/<ALIAS>/.aws/config. After, enter the following in the Terminal.
## Check AWS CLI is working well aws s3 ls ## (Optional) Check that your named profile works aws s3 ls --profile oceansoft ## If successful, you should see a list of your S3 buckets and AWS CLI is successfully using temporary credentials
Finished & Post Setup
If you followed along with this guide you should now have a working MacOS environment set up for development work. The Post Setup steps following this guide are needed every time you set up a new workspace for development work.
Create Python 3 Venv
## Create a workspace for your development work mkdir ~/workplace/<WORKSPACE_NAME> ## Change into the workspace directory cd ~/workplace/<WORKSPACE_NAME> ## List the Python versions you have installed with pyenv pyenv versions ## If you don't have the version installed that you want to use then list all versions available to install pyenv install --list ## Or only list Python versions 3.7, 3.8, or 3. pyenv install --list | grep " 3 \.[ 6789 ]" ## Install the version you want to use - this takes some time pyenv install <VERSION> ## Set the local Python version within the workspace pyenv local <VERSION> ## Make sure you are using the correct Python version python --version ## Create the Python virtual environment and store it in the "env" directory python 3 - m venv venv ## Activate the virtual environment - you must do this every time you start a new shell. ## You can tell you are in the virtual environment if you see ## (env) at the beginning of your Terminal line source env/bin/activate ## You are now ready to create Python code within a virtual environment. ## Running pip install will install packages to your "env" directory and ## will not make changes to your system packages. ## After you are finished working in the virtual environment you can deactivate it. deactivate
[ ] Example Resource Settings:
[ ] MacBook - 4 core CPU, 16GB Memory, 250GB SSD Disk
[ ] Docker - 2 CPU, 4GB Memory, 32GB Disk
docker system prune --all --force
Docker is a tool used to run containerized applications. In the event that you require it for a project, Docker can be installed by following the instructions at
During the installation it is recommend that you modify the system resources reserved for Docker ( (2 CPUs and 2 GB RAM). If you are only running a few containers at a time then the default settings will be adequate. This will also leave more resources for your actual MacBook to consume if you leave Docker running in the background.
Show Your Mac's Hidden Files
Find Terminal under Launchpad > Other > Terminal, then run the following commands:
defaults write com.apple.Finder AppleShowAllFiles trueand press Enter
killall Finderand press Enter again
[ ] Enable SSH Kerberos