Accelerometer calibration works on Unity Remote, but not on device after build..

Here is the code I am using, to determine initial position of the phone in space y,x and then get new position, calculate the difference and move the object x,y based on this information.

While using a remote I can hold my phone on 45 degree angle and it will use it as a starting point with this code, so 0 degrees will be full forward 90 back.

After building it and using it on a phone its fails to initialize for unknown reason and using 0 for neutral -45 for forward +45 for backward, not sure if I am missing something or its a bug.

Any thoughts/input/suggestions are appreciated, thank you for taking the time to reply.

function Start()
{
    dirInit.y = Input.acceleration.y;
    dirInit.x = Input.acceleration.x;
}
     
function Update ()
{
    dir.y = Input.acceleration.y;
    dir.x = Input.acceleration.x;
    dir.y-=dirInit.y;
    dir.x-=dirInit.x;
       
    transform.Translate (dir * speed * Time.deltaTime,Space.World);
    clampedPosition = transform.position;
    clampedPosition.y = Mathf.Clamp( clampedPosition.y, -6, 2.0);
    clampedPosition.x = Mathf.Clamp( clampedPosition.x, -9.3, 9.3);
    transform.position = clampedPosition;
 }

The issue is on device the accelerometer is not registered until after onStart for some reason.

    -> registered unity classes
-> registered mono modules
-> applicationDidFinishLaunching()

End Load File completely

-> applicationDidBecomeActive()

awake begin
awake end

start begin 
start end

-> force accelerometer registration

update

The only way to get around this that I have found is by doing it like this:

var hasInt : boolean = false;
        function Update(){
    
       if(!hasInt){
         dirInit.y = Input.acceleration.y;
         dirInit.x = Input.acceleration.x;
         hasInt = true;
    }
    
    //continue code
    
    }
    
    
    
    
    }