I agree with everyone that putting more than a few hours on anti-piracy stuff is a waste of your time. It is futile to try to keep the pirates out which wouldn't buy your app anyway. The gray area, those who might buy your app but only if there is no pirated version available is very, very small. You can easily anger more legal purchasers by malfunctioning copy protection / crack detection than getting those in the gray area to purchase your app.
I summed it up 2 months ago in this post why piracy isn't a real problem that actually needs defeating ... the time is better spent on improving the App or promoting it:
If you want anti-crack then choose one of the available solutions, don't reinvent the wheel. ;)
Try Dr. Touch's Anti-Crack for example: http://www.drobnik.com/touch/anticrack/
From a technical point of view, the call to a single function "isPirated" is straightforward to remove once found. You want to have at least a base level of security by inlining all your anti-crack checks, implement several variations of them so they can't all be easily pinned down, then call them from all over the place in several variations. But that's where you can easily introduce mistakes and testing becomes a pain. IMHO crack protection for iPhone apps is a waste of time. If you can't do it right, why do it at all? If you want to do it right, you'd have to obsess over it spending countless hours and it'll still get cracked within days.
@Pearapps: There's no way you're getting any money from immoral crackers. That's the whole point, their morale code does not allow such a thing. Instead they try even harder to crack or just wait longer. There's enough other stuff to go around.