Чтобы расширить комментарии Йонела и Бенджи выше:
1) Метод Лэндона Фуллера , основанный на проверке шифрования, описанной выше Йонелем, кажется, единственный, который еще не побежден инструментами автоматического взлома. Я не буду чрезмерно беспокоиться о том, что Apple в ближайшее время изменит состояние заголовка LC_ENCRYPTION_INFO. Кажется, что он имеет некоторые непредсказуемые эффекты на взломанных iPhone (даже если пользователь купил копию ...)
Во всяком случае, я бы не стал предпринимать необдуманных действий против пользователя на основе этого кода ...
2) В дополнение к комментарию Бенджи. обфускация (абсолютная необходимость при работе с любыми строковыми значениями в коде защиты от пиратства): похожий, но, возможно, даже более простой способ - всегда проверять соленую хешированную версию значения, которое вы ищем. Например (даже если эта проверка уже не эффективна), вы должны проверить имя ключа каждого MainBundle как md5 (keyName + "некоторая секретная соль") по отношению к соответствующей константе ... Скорее простой, но обязательно победите любую попытку найти строка.
Конечно, для этого требуется, чтобы вы имели возможность косвенно запрашивать значение, которое вы хотите сравнить (например, просматривая массив, содержащий его). Но это чаще всего так.