Not possible without rejecting the binary unfortunately. If you submitted it a day ago or so, just reject it. It'll get dropped down in the queue but if the situation calls for it, might be necessary.
The static analyzer could alert a human of a dynamic performSelector call but they're still a myriad of ways to get around that as well. With just a tiny bit of obfuscation any human is simply going to dismiss analyzing the disassembly to figure out what's going on since performSelector is a valid API call. They can't remove you from being able to do things at runtime either or make only make static calls to objc_message.
Literally the only technical solution would be for them to run the app through some sort of dynamic analyze,r where it runs the code and figures out everything that's going on. There are obvious issues with such a system though even theoretically.
For example, let's say you have a variable x which has a value determined at runtime:
x = figureOutXBasedOnSomeRuntimeStuff()
if (x) {
InferPrivateMethodNameAndPerform()
} else {
DoSomethingElse()
}
The analyzer has to traverse all paths to actually know if a private method is being called but it can't just run the code once with x as true, and once with x as false. It's a dynamic environment so those actions may have radically different actions based on other variables or the user's preferences at runtime, etc. And if it simply runs the app then many code paths get missed. Maybe in the distant future the analyzer could actually play around with your app enough and possibly go through every code path that way. But by simply having it tied to a page on the Internet, you can just wait till its approved and then enable it.
So one obvious conclusion might be to have a human disassemble the app and figure out what's going on. But that's simply not economically feasible and even experienced security analysts can have a hard time figuring out what code is doing, even if you have the source code.
It's more likely overtime they will dull the sharp edges of objective c, especially for iOS. At which point the entire SDK will be structured in such a way as to not allow you to do things you aren't supposed to. But they can't prevent you from ripping llvm off of opensource.apple.com and compiling without the restrictions. In terms of a technical solution, it itself is not economically feasible. Definitely easier to just ban infringing people when they get caught, old fashioned way.
In summary it's more likely that they just don't care. Apple knows being on the app store is more valuable then using the minus button illegally (hah camera+). So they simply won't do anything about it, you can slip your app onto the app store taking full advantage of the private APIs with a bit of obfuscation and they'll most likely just let it through. They are smart enough to know realistically their efforts to enforce this rule is futile, so they probably just don't care and will simply ban you from the store (unless your app is making shit tons of money, then they'll just tell you to fix it).
I don't recommend it either but from a technical standpoint it's a very interesting puzzle of sorts.
Most developers learn by example. I've looked for resources on using vcs properly but the few that existed weren't very good. A great resource would be a showcase for a collection of great commits. It doesn't exist as far as I know unfortunately.
as davvid says, the git project is an excellent place to start. The git project inherited a lot of its practices from the linux kernel project, but they are different enough to make looking at both interesting.
The archive for the git list is at [1].
The other great thing to look for is a well designed standard, with examples, for how a commit message should look. Most everyone who uses a standard uses The Standard* [2], so I would suggest you do the same.
* Except that many projects don't require the sign-off
Sure it's not an issue if you think you have to support android. When in reality you just have to support the iPhone, and it doesn't have these issues.
Android support is helpful but not neccesary, like supporting IE alongside Firefox a few years ago. Sure people use IE more than any other browser (now Chrome, yes!), but that doesn't mean a lot of IE users are going to use your website in the first place.
IMHO that applies to android today, iPhone users are way more likely to buy your service in the first place so you should focus on them. No need to leave android users hanging, but clearly the platform doesn't warrant anyone's sole focus so much as basic support.
It's tough to tell if you are talking specifically about web apps for browsers or the platforms themselves. But in either case your comment is short sighted. Android has over 50% of smartphone market share, and that's only going to increase. Android support and Android versions of apps should be standard for companies and startups going forward.
Their research labs have quantum computers, I'm sure they are well aware. As for pushing this to market, no hurry, they're in the business of selling silicone 8086 based processors, they'll probably keep doing that for as long as possible.
I came across a very good text in 2008 from the time when there was a lot of confusion whether simulated annealing had cracked it. Someone had gone through a lot of trouble to explain p vs np and the position of sim. annealing with respect to complexity theory. Should be on my computer at work (currently on mobile) .
When we discuss solving whether P=NP, are we talking about a theoretical shortcut that allows us to not have to calculate everything? Or is it quantum computing that simply allows us to efficiently just compute everything because no shortcut is likely to be discovered?
This was kind of a strange way to answer the OP's question, although I think you did answer it. I believe he was asking whether "solving NP" means "finding polynomial time solutions to NP problems" (the traditional way to "solve" P?=NP) or "creating machines that through quantum magic can simply plow through NP problems despite not having a polynomial time algorithm for them".
I think the OP assumes that a quantum computer would indeed be able to do this, but I don't know whether that premise is true or not. I have heard this question phrased often times as "Does P=NP still matter in a world of quantum computers?". As I am not an expert on either P=?NP or quantum computing, I have no idea.
So, given that, it seems you are affirming that you are referring to just the P?=NP question and not the "practical" question of whether we can get around this through other means (such as quantum computing).
Edit: revised first sentence since I now think you answered his question.
It certainly wasn't intended to be condescending, I just genuinely don't understand the question.
> When we discuss solving whether P=NP,
> are we talking about a theoretical
> shortcut that allows us to not have
> to calculate everything?
I can't find any way to answer this question. We are asking whether there is an algorithm that solves a problem in NPC in polynomial time. I don't understand the question about a "theoretical shortcut," nor what it means not to have to "calculate everything." I am assuming there is a sensible question in the OP's mind, but it's not expressed in a way that makes sense to me. That's why I tried to state the question clearly and succinctly, to provide a basis for a follow-up question from the OP.
> Or is it quantum computing that simply
> allows us to efficiently just compute
> everything because no shortcut is
> likely to be discovered?
We're not talking about quantum computing, we are talking about classical algorithms.
I made a few edits to my original post as upon further reading (before you posted your reply), I did not find it condescending and in fact thought you did kind of answer him.
Also, I feel a little weird replying here since it was indeed the OP's question and not mine, but I'm kind of curious about this too now, so just know that this obviously just represents my own thoughts:
The OP's question was simply phrased in a non-mathematical way (something you will have to get used to if your goal is to teach this to people who are not familiar with this problem ;) ). By "talking about a theoretical shortcut that allows us to not calculate everything", I believe he means "finding an algorithm that allows us to not have to check every possible solution in the solution-space". Kind of how binary search is a "clever theoretical shortcut" to not have to check every index of an array. A lot of problems are exponential time because you end up having to check "basically" every possible permutation. So I think he's getting at "finding a polynomial algorithm" for the problem.
The second part then proceeds to ask whether you are considering the implications of quantum computing to this problem. I guess the answer you provided is "no", but now I would like to push you a little further as you want to write a website regarding this problem, and you seem to know a lot about it, and this is certainly a question I have heard a lot. Perhaps the answer is simply "quantum computing would not affect NP problems in any practical way", or "we just don't know", both of which would be perfectly satisfactory answers.
Thank you - useful feedback. I'll be looking to make changes to take your comments into account. It also gives me an excuse to get in touch with a friend who's working on quantum computing.
It's kind of a shame that it didn't get more upvotes, and hence the chance to be seen by more people. This feedback is exactly the sort of thing I was looking for. Oh well, never mind.