3 ms·
How can you ship an app with access to private APIs? There is a private API usage scanning before you can submit for review.
by chj 10y ago
How can you ship an app with access to private APIs? There is a private API usage scanning before you can submit for review.
- 0x0 10y agoThe scanner isn't foolproof. You could fool it if you obfuscate your calls to performSelector well enough, for example if jsonResponseFromYourBackend contains:"runThis" then performSelector:json["runThis"] and make sure you don't send a runThis param while the app is in review. Unfortunately for Apple's app review process, Apple's own objective-C language and runtime has very strong dynamic reflection capabilities.
- joosters 10y agoApple could potentially close any loopholes here by scanning new apps for their API usage, checking for any 'bad' calls, and then writing the remaining discovered calls into a permissions file that is delivered with the app in the store. At runtime, any API calls made by the app are checked against this file; if a new API call is found, then it must have escaped Apple's code scanning logic. The API call can be rejected and logged for Apple to improve their scanner.
- edude03 10y agoThis is a great idea actually. Actually, isn't google already doing this via SELinux? You give the app a manifest of calls it's allowed to make, and if the call isn't in the manifest the call gets rejected?
- AstralStorm 10y agoSELinux is not that strong. It works on kernel syscall boundaries and some parameters thereof, and those aren't particularly fine grained. Service access is governed by a separate Google API, for example. Moreover, any random app cannot enhance SELinux policy of the system.
- leonatan 10y agoThere are many legitimate uses of calling methods and functions using reflection. Expecting to hit all of them in a short review process is comically optimistic for anything but the simplistic of apps. Your suggestion of enforcing this also makes no sense from performance or privacy standpoint.
- ThrustVectoring 10y agoFair warning that I'm not familiar with Swift Obvious (to me) idea: have the private API access stored as data sent from the server at runtime, rather than code in the reviewed app. Basically the equivalent of eval()-ing a string for front-end javascript code.