Well it depends on what your game does. Specifically, what values do you worry about beeing cheated? Score? Player health?
I see there are two categories: Static and Dynamic values (that you want to protect)
Static values you can theoretically compare to a different static value, so in case someone tinkers with said value (e.g. Player jump strenght = 9999) then the event "Player jump strength = 123" would not be true and anti-cheat would kick in. Consider though, that a cheater might be able to adjust both values, so I´d make the second value be send from a server, rather than beeing inside the app.
For coins (dynamic value) I´m not sure what the best method is. You probably want to check for "was that possible?". E.g. having coins always go up by 1, it´s not possible to suddenly go up by more than one coin (indicating cheating) Also you could use a server, that instead of counting the coins up, you send a request to the server, and the server then responds if the coin pickup was legitimate. Only then you count up the coins. You also likely have to use some protection for that so someone can´t simply fake the server response. That could probably be done using sessionIDs and hashing + salting.
I´m no expert on that subject though, take it with a grain of salt. But maybe you can google some of the stuff I said and find a solution.