AnsiblePilot — Master Ansible Automation
AnsiblePilot is the leading resource for learning Ansible automation, DevOps, and infrastructure as code. Browse over 1,400 tutorials covering Ansible modules, playbooks, roles, collections, and real-world examples. Whether you are a beginner or an experienced engineer, our step-by-step guides help you automate Linux, Windows, cloud, containers, and network infrastructure.
Popular Topics
About Luca Berton
Luca Berton is an Ansible automation expert, author of 8 Ansible books published by Apress and Leanpub including "Ansible for VMware by Examples" and "Ansible for Kubernetes by Example", and creator of the Ansible Pilot YouTube channel. He shares practical automation knowledge through tutorials, books, and video courses to help IT professionals and DevOps engineers master infrastructure automation.
Ansible macOS Fork Error: objc[...] +[__NSCFConstantString initialize] Fix — Video Tutorial
Fix the macOS fork() crash error in Ansible. Set OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES permanently.
What You'll Learn
- Playbook
- error
- fix current session
- fix all future sessions
- Conclusion
- Why Does This Error Happen?
- Complete Fix Options
- Option 1: Environment variable (Recommended)
- Option 2: ansible.cfg configuration
- Option 3: Use a Linux VM or container
Full Tutorial Content
Today we're going to talk about Ansible troubleshooting and specifically about macOS fork errors.
I'm Luca Berton and welcome to today's episode of the Ansible Pilot.
Playbook
The best way of talking about Ansible troubleshooting is to jump in a live Playbook to show you practically the macOS fork error and how to solve it!
error
- error
```bash
objc[22868]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called.
objc[22868]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.
```
fix current session
- fix - current session only
```bash
export "OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES"
```
fix all future sessions
- fix - for all future sessions
```bash
echo "OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES" >> .bash_profile
```
You could verify the environment of the terminal with the following command:
```bash
$ env
[...]
OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
```
[code with ❤️ in GitHub](https://github.com/lucab85/ansible-pilot/tree/master/troubleshooting)
Conclusion
Now you know better how to troubleshoot the macOS fork error and how to fix it.
Why Does This Error Happen?
Starting with macOS High Sierra (10.13), Apple added a safety check that **crashes any process that calls `fork()` without `exec()`** when Objective-C runtime has been initialized. Ansible uses Python's `multiprocessing` module, which calls `fork()` to create worker processes for parallel task execution.
This error affects:
- **macOS Sonoma** (14.x)
- **macOS Ventura** (13.x)
- **macOS Monterey** (12.x)
- **Apple Silicon (M1/M2/M3/M4)** and Intel Macs
- All Python versions (3.9+)
Complete Fix Options
Option 1: Environment variable (Recommended)
The simplest and most reliable fix:
**For current terminal session only:**
```bash
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
ansible-playbook playbook.yml
```
**For all future sessions (bash):**
```bash
echo 'export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES' >> ~/.bash_profile
source ~/.bash_profile
```
**For all future sessions (zsh — default on modern macOS):**
```bash
echo 'export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES' >> ~/.zshrc
source ~/.zshrc
```
Option 2: ansible.cfg configuration
Add to your `ansible.cfg`:
```ini
[defaults]
Reduce forks to minimize fork() issues on macOS
forks = 1
```
Setting `forks = 1` avoids parallel execution entirely, which eliminates the fork issue but makes playbooks slower.
Option 3: Use a Linux VM or container
For production-grade Ansible work on macOS, consider running Ansible inside Docker:
```bash
docker run --rm -it -v $(pwd):/ansible -w /ansible python:3.12 bash -c "pip install ansible && ansible-playbook playbook.yml"
```
Verify the Fix
After setting the environment variable, confirm it's active:
```bash
$ echo $OBJC_DISAB
About This Tutorial
- Author: Luca Berton
- Difficulty: Beginner
- Read time: 3 min
- Category: installation
Read the full written article: Ansible macOS Fork Error: objc[...] +[__NSCFConstantString initialize] Fix