We eventually solved the problem so I'm updating here as it may be helpful for others.
The actual crash was in dyld3:
Thread 1#0		0x00000001371e3d08 in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, bool, void (unsigned int) block_pointer, void const*) const ()
#1		0x00000001371ecca4 in dyld3::closure::ClosureBuilder::buildImage(dyld3::closure::ImageWriter&, dyld3::closure::ClosureBuilder::BuilderLoadedImage&) ()
#2		0x00000001371f5b20 in dyld3::closure::ClosureBuilder::makeLaunchClosure(dyld3::closure::LoadedFileInfo const&, bool) ()
#3		0x00000001371bfc0c in dyld::buildLaunchClosure(unsigned char const*, dyld3::closure::LoadedFileInfo const&, char const**) ()
#4		0x00000001371be88c in dyld::_main(macho_header const*, unsigned long, int, char const, char const, char const**, unsigned long*) ()
#5		0x00000001371b9208 in dyldbootstrap::start(dyld3::MachOLoaded const*, int, char const**, dyld3::MachOLoaded const*, unsigned long*) ()
#6		0x00000001371b9038 in _dyld_start ()
So we realised it could have been something to do with static variables.
After narrowing down the set of changes who went in we changed a long list of 'inline const' constant into 'extern' and defined them into a cpp file.
This fixed the problem.
However we also realised that this crash happened after we passed the threshold of 128, maybe it's random maybe not, difficult to say.
For some reason from iOS 13.x (not sure about the version) the launcher seems to have this threshold.
Maybe someone can correct me.
For sure the same code works on iOS version < 13