2 other anti debugging techniques.
1. use PTRACE_TRACEME to trace the app itself. gdb won't be able to attach
2. gdb opens some more file descriptors than the usual 3 for the child process. So you can check if more than 5 file descriptors exists. if they exist you can exit your app.
and of course you can use asm to do the basic PT_DENY_ATTACH
anyhow, I'm not an AppStore dev, I develop for the CydiaStore. Doesn't apple rely on being able to use gdb with your executable in order to test your app?
and make sure you avoid all kind of strings. strings are a dead giveaway (encrypted or not), especially you only need to break in gdb right before the msg_send and you can print out the objects in the registers (po $r0). Don't use objC for checks. try to use as much C as possible.
here are some other suggestions:
http://iphonedevwiki.net/index.php/Crack_prevention