Why framerate not changed in iOS device?

I set QualitySettings.vSyncCount = 0; to force no vSync, and set target framerate to 40.Application.targetFrameRate = 40; to save some battery.

It works OK in my android device, but in my iPhoneX, it still gets 60FPS, why?

On iOS VSync is always on and there is no way to disabled. So the FPS can only be set to 60 (or higher if the screen supports that) or a number that can be multiplied by an integer to get 60 (30, 20, 15, etc.).

Yes, when I change fps to 30, it works!