In my last report, I was working on automating the Mac release builds for my strategic leaf-raking business simulation game, Toytles: Leaf Raking.
While I’ve made progress, it’s still not going well.
Sprint 2026-MJ_7: Release SDL3 update version
In progress:
- Ensure Mac version can still be built/deployed
Last time, I was trying to get SDL3_ttf to build properly, since it has a couple of dependencies and I was running into trouble getting it to build a Universal Binary properly.
It turned out that I had to do a few things.
First, I needed to have my build scripts call SDL3_ttf’s download.sh so that it would populate the Harfbuzz and Freetype dependencies.
Second, I needed to make sure I set SDLTTF_VENDORED to “ON” so it would use its internal projects that I just downloaded.
Finally, I needed to build out of source. Apparently this matters in this repo (and not in other SDl3_* projects) for some reason.
SET(SDL3_TTF_CONFIGURE_ARGS
+ -DSDLTTF_VENDORED=ON
-DCMAKE_INSTALL_PREFIX=${TARGET_INSTALL_DIR})
+EXECUTE_PROCESS(COMMAND ./external/download.sh WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/${SDL3_ttf_EXTRACTED_DIR}")
+
+EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory build WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/${SDL3_ttf_EXTRACTED_DIR}")
ADD_CUSTOM_TARGET(SDL3_TTF_SHARED_LIBRARY
ALL
- ${CMAKE_COMMAND} "${MULTI_ARCH_ARG}" ${SDL3_TTF_CONFIGURE_ARGS} WORKING_DIRECTORY
+ ${CMAKE_COMMAND} .. "${MULTI_ARCH_ARG}" ${SDL3_TTF_CONFIGURE_ARGS} WORKING_DIRECTORY
COMMAND make
COMMAND make install
- WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/${SDL3_ttf_EXTRACTED_DIR}
- COMMENT "BUILDING libSDL3_ttf")
+ WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/${SDL3_ttf_EXTRACTED_DIR}/build
+ COMMENT "BUILDING libSDL3_ttf" VERBATIM)
At this point, I could create Universal Binaries for the SDL3 libraries. Whew!
Moving on to the Mac application, I had some work to do. When I last worked on creating a Mac port, all I did was use CMake to generate an Xcode project, then I built it manually in Xcode. As much as possible, I used CMake and a well-crafted Info.plist file to configure the project automatically. What’s nice is that a lot of things are handled already. I can bundle resources, have my “team” show up automatically in the code signing screen, and more.
So what do I need to do to create a Mac release? I need to archive the project, then notarize it through Xcode.
Unfortunately, I can’t seem to get it to archive properly. It seems to build my project just fine, but the main errors seem to be related to the code-signing step, and specifically when it comes to the dependencies on the SDL3 libraries.
When I read the logs, I see:
Command CodeSign failed with a nonzero exit code
And I see it for each of the libraries it failed to sign. For some reason, libSDL3.dylib was fine, but libSDL3_mixer.dylib, libSDL3_image.dylib, and libSDL3_ttf.dylib show “No such file or directory”.
That’s weird. If they didn’t exist, it makes sense that signing would fail for them, but they should exist!
So which directory is it looking in? Because those files are in the directory I installed them to.
The logs tell me that it is looking in an ArchiveIntermediates directory under ~/Library/Developer/Xcode/DerivedData/ and again, the files seem to exist there just fine.
But digging into it some more, I see that libSDL3.dylib is an actual file, while the other three are links to non-existent files.
So what’s going on?
Back to the logs. I noticed before the code signing activity that the libraries were copied from the directory I put them in and placed in the ArchiveIntermediates directory.
BUT! Only libSDL3.dylib had some special treatment to have strip called on it, which resulted in that file no longer being a symlink.
So I once again wished I had more hours to dedicate to this work, because I have questions to answer that probably just require some dedicated effort.
Why is libSDL3.dylib treated differently from the other libraries? I don’t see anything in my CMake configuration or in the resulting Xcode project settings to say why it is doing something special for that library and not the others.
Under “Frameworks, Libraries, and Embedded Content”, I see all of the libSDL3* libraries listed twice. For example, libSDL3_image.dylib is listed with the “Embed & Sign” option, while libSDL3_image.0.2.4.dylib, which is what the libSDL3_image.dylib symlink points to) is listed as “Do Not Embed”.
libSDL3.dylib pointed to libSDL3.0.dylib, yet somehow it seems to be doing the right thing when it comes to archiving and signing.
So what obscure Apple-specific thing changed that made something that used to work before suddenly not work, and what change do I need to make in order to make things behave the way they did before? I hope to figure it out this week.
Thanks for reading, and stay curious!
—
Want to learn about future Freshly Squeezed games I am creating? Sign up for the GBGames Curiosities newsletter, and download the full color Player’s Guides to my existing and future games for free!






