Aby rozwinąć powyższe komentarze Yonela i Benjiego:
1) Metoda Landona Fullera polegająca na sprawdzaniu szyfrowania, powiązana powyżej przez yonela, wydaje się być jedyną, która wciąż nie została pokonana przez automatyczne narzędzia do łamania zabezpieczeń. Nie martwiłbym się zbytnio, że Apple w najbliższym czasie zmieni stan nagłówka LC_ENCRYPTION_INFO. Wydaje się, że ma nieprzewidywalne skutki na iPhone'ach z jailbreakiem (nawet jeśli użytkownik kupił kopię ...)
W każdym razie nie podjąłbym żadnych pochopnych działań przeciwko użytkownikowi na podstawie tego kodu ...
2) Uzupełnienie komentarza Benjiego dot. zaciemnianie (absolutna konieczność, gdy mamy do czynienia z wartościami ciągów znaków w kodzie antypirackim): podobnym, ale być może nawet łatwiejszym sposobem jest zawsze sprawdzanie zasolonej, zaszyfrowanej wersji wartości, której szukasz. Na przykład (nawet jeśli to sprawdzenie nie jest już wydajne), sprawdziłbyś nazwę każdego klucza MainBundle jako md5 (keyName + "some secret salt") pod kątem odpowiedniej stałej ... Raczej proste, ale z pewnością pokonasz każdą próbę zlokalizowania strunowy.
Oczywiście wymaga to możliwości pośredniego zapytania o wartość, którą chcesz porównać (na przykład przechodząc przez tablicę, która ją zawiera). Ale tak jest najczęściej.