Quick answer: Unity IL2CPP builds with Strip Engine Code = High breaking Time.timeFromThread? The engine-level function gets stripped - add to link.xml or lower strip level.
Profiler integration uses Time.timeFromThread. Editor: works. iOS Release: returns 0.
Preserve Time class
<type fullname="UnityEngine.Time" preserve="all"/>In link.xml. Engine class stays available.
Lower strip level
Medium instead of High. Costs binary size; gains engine API availability.
Or use frame-counter time
For non-precise needs, frame counter * fixedDeltaTime. Doesn't depend on stripped engine code.
“Stripping is aggressive. Engine code is in scope for stripping unless preserved.”
If you ship IL2CPP, audit engine API usage. The stripping bug class is broad; testing catches the most-used ones.