Hi Developers,
I'm encountering persistent validation errors in Xcode 16.3 (16E140) on macOS 15.4.1 (24E263) with M1 when archiving and distributing a macOS app (Developer ID signing + notarization).
App Structure: A native Swift/Obj-C wrapper app that launches a nested .app inside its Resources.
The nested app is built with PyInstaller and includes:
A Python core
Custom C++ binaries
Many bundled .so libraries (e.g., from OpenCV, PyQt/PySide)
Issues During Validation:
- App Sandbox Not Enabled
Error: App Sandbox missing for NestedApp.app/Contents/MacOS/NestedExecutable.
Question: For Developer ID (not App Store), is sandboxing strictly required for nested PyInstaller apps? If the wrapper is sandboxed, must the nested app be as well? Given the PyInstaller app's nature (requiring broad system access), how should entitlements be managed?
- Upload Symbols Failed
Errors for missing .dSYM files for:
The nested app’s executable
Custom C++ binaries
.so files (OpenCV, PyQt, etc.)
These are either third-party or built without DWARF data, making .dSYM generation impractical post-build.
Question: Are these symbol errors critical for Developer ID notarization (not App Store)? Can notarization succeed despite them? Is lack of symbol upload a known limitation with PyInstaller apps? Any best practices?
A native Swift/Obj-C wrapper app that launches a nested .app inside its Resources.
That’s not a good start )-: Contents/Resources
is reserved for data. Nested code needs to be in some other location. I generally recommend Contents/MacOS
for a nested app. See Placing Content in a Bundle.
It’s very likely that your nested app will have other bundle structure problems. While I don’t have specific experience with the tool you’re using, my general experience is that such tools tend to flout the rules in Placing Content in a Bundle [1]. In some cases you can get away with that but, quoting that doc, there’s a possibility you might “encounter hard-to-debug code signing and distribution problems” )-:
In your case specifically, it’s possible that the Xcode’s re-signing process, as expressed in the organiser window, won’t handle this structure. If that turns out to be the case, you might be able to resolve your problem by signing your code manually, as explained in Creating distribution-signed code for macOS. However, my general advice is:
-
Follow the rules in Placing Content in a Bundle.
-
If you can’t do that, check out Embedding nonstandard code structures in a bundle.
For Developer ID (not App Store), is sandboxing strictly required … ?
No. I suspect that you’re mixing up your distribution mechanisms. Are you clicking Validate App in the Xcode organiser? If so, be aware that that’s for App Store apps only. If you plan to distribute your app directly, it won’t yield useful results.
Rather, click Distribute App and follow the Direct Distribution workflow.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"
[1] To be fair, a lot of these tools were created before Placing Content in a Bundle was published, and the previous documentation about this stuff was significantly less clear.