Skip to content

Commit daad3b0

Browse files
committed
Fix font loading in sandboxed environments (VST3)
- Root cause: CGDataProviderCreateWithURL fails in macOS sandbox - Solution: Load fonts into memory first using LoadResource - Use LoadFont(fontID, pData, dataSize) instead of LoadFont(fontID, filename) - Fixes SIGSEGV crash in nvgCreateFontFaceMem when running in VST3PluginTestHost Resolves crash at nanovg.c:2307 with NULL font data pointer.
1 parent db3a02d commit daad3b0

File tree

4 files changed

+96
-2
lines changed

4 files changed

+96
-2
lines changed

NeuralAmpModeler/NeuralAmpModeler.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,15 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info)
115115
pGraphics->EnableTooltips(true);
116116
pGraphics->EnableMultiTouch(true);
117117

118-
pGraphics->LoadFont("Roboto-Regular", ROBOTO_FN);
119-
pGraphics->LoadFont("Michroma-Regular", MICHROMA_FN);
118+
// Load fonts from memory to avoid CGDataProviderCreateWithURL sandbox issues
119+
// See iPlug2 IGraphicsCoreText.mm line 48 comment about sandbox failures
120+
WDL_TypedBuf<uint8_t> robotoData = LoadResource(ROBOTO_FN, "ttf");
121+
if (robotoData.GetSize() > 0)
122+
pGraphics->LoadFont("Roboto-Regular", robotoData.Get(), robotoData.GetSize());
123+
124+
WDL_TypedBuf<uint8_t> michromaData = LoadResource(MICHROMA_FN, "ttf");
125+
if (michromaData.GetSize() > 0)
126+
pGraphics->LoadFont("Michroma-Regular", michromaData.Get(), michromaData.GetSize());
120127

121128
const auto gearSVG = pGraphics->LoadSVG(GEAR_FN);
122129
const auto fileSVG = pGraphics->LoadSVG(FILE_FN);

NeuralAmpModelerPlugin

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit 699719b7b948840307cf3be96eee38325325921e

clear_mac_cache.sh

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#!/bin/bash
2+
# Script to clear ALL NeuralAmpModeler caches on macOS
3+
# Run this before testing a new build to ensure clean state
4+
5+
echo "=== Clearing NeuralAmpModeler Mac Caches ==="
6+
echo ""
7+
8+
# 1. Kill audio processes
9+
echo "1. Killing audio processes..."
10+
sudo killall -9 AudioComponentRegistrar 2>/dev/null || true
11+
sudo killall -9 coreaudiod 2>/dev/null || true
12+
sudo killall -9 NeuralAmpModeler 2>/dev/null || true
13+
echo " Done"
14+
echo ""
15+
16+
# 2. Remove installed plugins and apps
17+
echo "2. Removing installed plugins and apps..."
18+
sudo rm -rf ~/Library/Audio/Plug-Ins/Components/NeuralAmpModeler.component
19+
sudo rm -rf ~/Library/Audio/Plug-Ins/VST3/NeuralAmpModeler.vst3
20+
sudo rm -rf ~/Library/Audio/Plug-Ins/VST/NeuralAmpModeler.vst
21+
sudo rm -rf /Library/Audio/Plug-Ins/Components/NeuralAmpModeler.component
22+
sudo rm -rf /Library/Audio/Plug-Ins/VST3/NeuralAmpModeler.vst3
23+
sudo rm -rf /Library/Audio/Plug-Ins/VST/NeuralAmpModeler.vst
24+
sudo rm -rf ~/Applications/NeuralAmpModeler.app
25+
sudo rm -rf /Applications/NeuralAmpModeler.app
26+
sudo rm -rf ~/Downloads/NeuralAmpModeler.app
27+
echo " Done"
28+
echo ""
29+
30+
# 3. Clear application state and preferences
31+
echo "3. Clearing application state and preferences..."
32+
rm -rf ~/Library/Saved\ Application\ State/com.StevenAtkinson.app.NeuralAmpModeler*
33+
rm -rf ~/Library/Preferences/com.StevenAtkinson.app.NeuralAmpModeler.plist
34+
defaults delete com.StevenAtkinson.app.NeuralAmpModeler 2>/dev/null || true
35+
echo " Done"
36+
echo ""
37+
38+
# 4. Clear system caches
39+
echo "4. Clearing system caches..."
40+
sudo rm -rf /Library/Caches/com.StevenAtkinson.app.NeuralAmpModeler*
41+
rm -rf ~/Library/Caches/com.StevenAtkinson.app.NeuralAmpModeler*
42+
sudo rm -rf /System/Library/Caches/com.apple.audio.InfoCache.plist
43+
echo " Done"
44+
echo ""
45+
46+
# 5. Clear audio unit cache
47+
echo "5. Clearing Audio Unit cache..."
48+
sudo rm -rf ~/Library/Caches/AudioUnitCache
49+
killall -9 AudioComponentRegistrar 2>/dev/null || true
50+
echo " Done"
51+
echo ""
52+
53+
# 6. Restart Core Audio
54+
echo "6. Restarting Core Audio daemon..."
55+
sudo launchctl kickstart -kp system/com.apple.audio.coreaudiod
56+
echo " Done"
57+
echo ""
58+
59+
echo "=== Cache Clear Complete ==="
60+
echo ""
61+
echo "IMPORTANT: Reboot your Mac now to ensure completely clean state:"
62+
echo " sudo reboot"
63+
echo ""
64+
echo "After reboot, install the NEW binary from artifact 4461379434"

verify_build.sh

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/bin/bash
2+
# Verification script to check if Layer 10B is compiled in the binary
3+
4+
echo "=== Build Verification Script ==="
5+
echo ""
6+
echo "Current commit:"
7+
git log --oneline -1
8+
echo ""
9+
echo "AudioDSPTools submodule commit:"
10+
git submodule status AudioDSPTools
11+
echo ""
12+
echo "Layer 10B check in ImpulseResponse.cpp:"
13+
grep -n "Layer 10B" AudioDSPTools/dsp/ImpulseResponse.cpp || echo "WARNING: Layer 10B comment not found!"
14+
echo ""
15+
echo "Checking both constructors have initialization:"
16+
grep -A 2 "ImpulseResponse::ImpulseResponse" AudioDSPTools/dsp/ImpulseResponse.cpp | grep "mRawAudioSampleRate(0.0)" || echo "WARNING: Initialization missing!"
17+
echo ""
18+
echo "Expected offset: Should be different from 745664"
19+
echo "Previous offsets:"
20+
echo " Layers 7-9: 745664 (0xB60C0)"
21+
echo " Layer 10 (file constructor only): 745680 (0xB60D0)"
22+
echo " Layer 10B (both constructors): Should be different again"

0 commit comments

Comments
 (0)