I have an app that gives freebies to users the first time they install the app. So, cheaters can simply uninstall, delete data stored in Application Support and get the freebies infinitely.
Possible solutions:
Store data in NSUserDefaults: not persistent
iCloud: What if user disables iCloud?
keychain: keychain entries can easily be altered or deleted by user on Mac
Own server: won't work if user launches the app for the first time offline.
It seems to me that there is no way I can check if the app is installed on user's device for the first time. Am I right?