I’ve got some questions about the support Unity has for notarization and, in particular, the hardened runtime that will be required for notarization past January 2020. Right now Apple have waived a few requirements, which is okay as a temporary measure, but it seems a long term solution for Unity games (especially legacy products) is currently not available.
This is what I have observed right now, in LTS 2018.4.11f1:
When using the legacy .NET 3.5 runtime, an empty Unity project, and codesigning with a hardened runtime (–options runtime), the application crashes at launch. If you execute it from a console, you’ll see the following output:
In this case, it seems that libmono.0.dylib is built against sdk 10.6 (which is below Apple’s minimum requirements for the hardened runtime).
otool output:
When using the .NET 4.x runtime, the same empty Unity project, and codesigning with the same options, the application hangs at launch. If you execute it from a console, you’ll see the following output:
When using IL2cpp on either runtime, with Xcode 11 installed, the build fails (issue reported here ). If you workaround it or use an older version of Xcode, both of these builds run successfully after codesigning with hardened runtime.
All the builds above use the same entitlements:
And the following codesign invocation
And all variations of the build successfully pass notarization when built with the hardened runtime, even though the builds do not actually run. When not hardened, it of course passes as well (see Apple announcement of relaxation of notarization requirements linked at the start of this post), but with the caveat that it won’t very soon.
It seems that the only viable way to produce a notarizable build to Apple’s standards right now is to use il2cpp. We can ship an unhardened product for now, but if we wish to maintain this product past January, that won’t work anymore. All this is potentially infeasible for legacy projects. Is there a roadmap for complete Unity support here? Have I missed something?