Para ampliar los comentarios de Yonel y Benjie anteriores:
1) El método de Landon Fuller que se basa en la verificación de cifrado, vinculado anteriormente por yonel, parece ser el único que aún no ha sido derrotado por herramientas de craqueo automatizadas. No me preocuparía demasiado que Apple cambie el estado del encabezado LC_ENCRYPTION_INFO en el corto plazo. Parece tener algunos efectos impredecibles en iphones con jailbreak (incluso cuando el usuario ha comprado una copia ...)
En cualquier caso, no tomaría ninguna acción precipitada contra un usuario basado en ese código ...
2) Para complementar el comentario de Benjie re. ofuscación (una necesidad absoluta cuando se trata de cualquier valor de cadena en su código antipiratería): una forma similar, pero quizás incluso más fácil, es verificar siempre una versión hash con sal del valor que está buscando. Por ejemplo (aunque esa comprobación ya no sea eficaz), comprobaría el nombre de la clave de cada MainBundle como md5 (keyName + "some secret salt") con la constante apropiada ... Bastante básica, pero seguro que anula cualquier intento de localizar cuerda.
Por supuesto, esto requiere que pueda consultar indirectamente el valor que desea comparar (por ejemplo, revisando una matriz que lo contiene). Pero este es el caso más frecuente.