I just had a app rejected for this same reason.<p>Although the API was never called, the static analyzer throws a flag when you override any private framework. Joe was doing this for some debugging purposes and accidentally let it through for some release builds a while ago. Just updating to the newest Three20 should fix it.
The relevant changeset in Three20 where Joe resolves this should answer your questions:<p><a href="http://github.com/facebook/three20/commit/8183ae25528bbc575ab41a41227756f06c166240" rel="nofollow">http://github.com/facebook/three20/commit/8183ae25528bbc575a...</a>
This is getting ridiculous. The Objective-C runtime allows dynamic method calls, using performSelector: which takes a selector name, which can be constructed from any random string. This basically means any static analysis tool can be trivially fooled. Apple might as well start rejecting all apps which use any "features" of their runtime.<p>Who cares whether a method was overridden or called or whatever -- if it's in the runtime it can be invoked.
Did I read this correctly? They overrode a private API call, but then never called the method that they overrode? Or did they only call the method they overrode, and never call the private method.<p>I don't see why you would override a method but never call it, and if you override it, shouldn't you call [super methodX] (thereby calling the private method)?
Nice. Just thought I would point out that on Android, I can write applications in my language of choice, and I can use any construct I want. If I break something, I get to keep both pieces.<p>Why do you iPhone guys put up with arbitrary restrictions?