Negative side:
----------------
let's say if we let a user to extend free game to full version then what to do ? we have to use a Game attribute to record the purchase right? And that's the point. As i know jailbreak devices can easily access that Game attribute & any time they can extend free game to full version without paying developer.
There are ways to edit the files without Jailbreak(*cough* iFunbox *cough*), especially if the save file from someone who bought the upgrade is shared. As someone who might plan on developing apps in the future, I've thought a bit about this. Clearly, the most secure way would be checking values on a server, although it's pretty simple just to turn on airplane mode as long as the game operates offline. Anyways, people get frustrated when they can't play offline, not that you probably have the money for a server like that.
There might be a way to cut down drastically on hacking if you can have the game attribute encode a username, in addition to the Boolean. I'm not sure if you would be able to detect the Game Center username, but you might be able to just have them make one up at the beginning of the game. Like if a username was "hacker", you could have "hFaAcLkSeEr" stored, meaning that their name is "hacker" and they have not purchased the game. Also, if you have the two things combined, searching in memory, it might be harder for someone to find it in the memory by doing a search. Although it might be still possible to search through the hex values of the app (this probably requires JB), find what triggers the "sorry, you need to buy that" message, and possibly decode what the game is doing, it would be very difficult.
Just FYI...