Last time, I reported that I was still automating the SDL3 update build for the iOS port of my strategic leaf-raking business simulation game, Toytles: Leaf Raking.
I made good progress, but even though I thought I was done, it turns out that I’m not finished yet.
Sprint 2026-MJ_15: Release SDL3 update version
In progress:
- Ensure iOS version can still be built/deployed
My project’s build scripts can now load the .xcframework for Apple-based builds or normal libraries for every other port.
To get there, I learned a bit more about CMake and even cleaned up my own build scripts based on that new understanding.
I was able to successfully build the app more or less automatically and run it in the iPhone simulator.
Then I went to submit the app to the App Store. First, I click on Validate in Xcode, which I will confess to not exactly understanding what kind of validation it does, but I figure that if it passes here, then I don’t need to worry about the kinds of things it checks for.
Unfortunately, it seems quite limited, and so as soon as I submitted the app for review to the App Store, I had an email that told me I had a few things that needed to be corrected that I have never run into before.
Basically, since SDL3 has code that lets you access Bluetooth, the camera, and the mic, Apple detects this and thinks you need to have usage description entries in your app’s Info.plist to explain to your players what you need such access for, even if your app doesn’t use that functionality.
NSBluetoothPeripheralUsageDescription, NSCameraUsageDescription, and NSBluetoothAlwaysUsageDescription were flagged in the email I received, but I also addressed the mic with NSMicrophoneUsageDescription. I use variables for the project title because my Info.plist gets generated by my build scripts:
<string>${GB_PROJECT_TITLE} would like to use Bluetooth controllers for input.</string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>${GB_PROJECT_TITLE} would like to use Bluetooth controllers for input.</string>
<key>NSCameraUsageDescription</key>
<string>${GB_PROJECT_TITLE} does not use the camera.</string>
<key>NSMicrophoneUsageDescription</key>
<string>${GB_PROJECT_TITLE} does not use the microphone.</string>
I confirmed the right project name showed up by looking at the Info.plist file that was generated and at what Xcode showed, and I submitted the app again.
This time, it successfully kicked off a review, but unfortunately on Saturday it was rejected because the app crashed on startup.
So, that’s not good, and it shows that I should have tested it on my own hardware before submitting it. I now have to figure out why it is crashing in the first place, then fix it so that it doesn’t.
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!

