Чтобы действительно зашифровать скомпилированный код, вероятно, больше проблем, чем оно того стоит. Вы должны изолировать код, который будет расшифрован в динамическую библиотеку, и загрузить библиотеку вручную после дешифрования в памяти. Динамические библиотеки и другие методы, которые вы можете использовать для изменения кода во время выполнения, не одобрены Apple при использовании с iOS.
С Objective-C вы по существу отправляете со встроенными в ваш код заголовками. Это значительно облегчает копание в вашем приложении. Все, что вы можете сделать в C, где символы могут быть удалены, будет немного сложнее для чтения. Вы также можете использовать #define, чтобы немного запутать имена ваших классов и методов. Это далеко не шифрование, но его гораздо проще реализовать и меньше вероятность появления дурацких ошибок.
#define MyNicelyNamedClass somegarblegarble
#define myNicelyNamedMethod othergarblegarble
@interface MyNicelyNamedClass
-(id) myNicelyNamedMethod;
@end
Это относительно безболезненный способ для разработчика сделать свой код Objective-C менее очевидным для других. Это примерно так же эффективно, как и запутывание в javascript, то есть это еще одно маленькое препятствие, которое отговорит многих случайных злоумышленников.
Если вы выбираете осмысленные, но вводящие в заблуждение имена вместо простого мусора, вы можете даже заставить кого-то часами копаться в неправильном коде. Не то, чтобы вы когда-либо знали, но это удовлетворительная мысль.