<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: LIBRARY REJECTED: NimbleKit (private API names)</title>
	<atom:link href="http://apprejections.com/index.php/post/63/feed" rel="self" type="application/rss+xml" />
	<link>http://apprejections.com/index.php/post/63</link>
	<description>Send app-rejection news to @redglassesapps on twitter</description>
	<lastBuildDate>Thu, 22 Jul 2010 18:02:25 +0100</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Alexander Voloshyn</title>
		<link>http://apprejections.com/index.php/post/63/comment-page-1#comment-821</link>
		<dc:creator>Alexander Voloshyn</dc:creator>
		<pubDate>Sun, 07 Feb 2010 09:20:41 +0000</pubDate>
		<guid isPermaLink="false">http://apprejections.com/?p=63#comment-821</guid>
		<description>@drunknbass: why would you think NimbleKit would parse something? There are numerous ways of creating obj-c/js bridges and only couple of them are forbidden. What you say is not correct, they accepted over 200 NimbleKit based apps, doing that regularly for 8 months, of course they know about obj-c/js bridge. You can&#039;t parse by yourself, but you can use Apple&#039;s classes for that, javascript is parsed using UIWebView only, so there is no violation. Also, there are planned Apple seminars &quot;My first iPhone Application&quot; to start end of January, NimbleKit stuff was invited to the event by Apple company to present NimbleKit on seminars for 20 days in 5 different cities, I really doubt they would do that if they don&#039;t not know how NK works and it&#039;s capabilities. And of course Apple would not teach their users to use framework just to reject all their apps later.</description>
		<content:encoded><![CDATA[<p>@drunknbass: why would you think NimbleKit would parse something? There are numerous ways of creating obj-c/js bridges and only couple of them are forbidden. What you say is not correct, they accepted over 200 NimbleKit based apps, doing that regularly for 8 months, of course they know about obj-c/js bridge. You can&#8217;t parse by yourself, but you can use Apple&#8217;s classes for that, javascript is parsed using UIWebView only, so there is no violation. Also, there are planned Apple seminars &#8220;My first iPhone Application&#8221; to start end of January, NimbleKit stuff was invited to the event by Apple company to present NimbleKit on seminars for 20 days in 5 different cities, I really doubt they would do that if they don&#8217;t not know how NK works and it&#8217;s capabilities. And of course Apple would not teach their users to use framework just to reject all their apps later.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: drunknbass</title>
		<link>http://apprejections.com/index.php/post/63/comment-page-1#comment-637</link>
		<dc:creator>drunknbass</dc:creator>
		<pubDate>Mon, 25 Jan 2010 20:52:00 +0000</pubDate>
		<guid isPermaLink="false">http://apprejections.com/?p=63#comment-637</guid>
		<description>nimblekit is not allowed by sdk rules. its as simple as that. its only a matter of time till apple looks into it and started blocking every app thats built with it.. this is just a poor mans js-&gt;obj-c bridge and is exactly what apple forbids.


you cannot legally parse ANY js function and bind it to native code, PERIOD.</description>
		<content:encoded><![CDATA[<p>nimblekit is not allowed by sdk rules. its as simple as that. its only a matter of time till apple looks into it and started blocking every app thats built with it.. this is just a poor mans js-&gt;obj-c bridge and is exactly what apple forbids.</p>
<p>you cannot legally parse ANY js function and bind it to native code, PERIOD.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: adam</title>
		<link>http://apprejections.com/index.php/post/63/comment-page-1#comment-619</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Mon, 25 Jan 2010 14:33:09 +0000</pubDate>
		<guid isPermaLink="false">http://apprejections.com/?p=63#comment-619</guid>
		<description>@Kristofer

I believe NimbleKit is now accepted - as explained by Alexander above.</description>
		<content:encoded><![CDATA[<p>@Kristofer</p>
<p>I believe NimbleKit is now accepted &#8211; as explained by Alexander above.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kristofer Layon</title>
		<link>http://apprejections.com/index.php/post/63/comment-page-1#comment-592</link>
		<dc:creator>Kristofer Layon</dc:creator>
		<pubDate>Sat, 23 Jan 2010 23:55:11 +0000</pubDate>
		<guid isPermaLink="false">http://apprejections.com/?p=63#comment-592</guid>
		<description>I&#039;m pretty sure that Apple could not have an inherent bias against NimbleKit. Otherwise, why would they have it on their web site as a featured development tool??

http://www.apple.com/downloads/macosx/development_tools/nimblekit.html

I took this to be, at the very least, an overall technical affirmation of the tool.

But if Apple is featuring a product that they are then rejecting the use of in practice, that&#039;s ridiculous.

Note: I have 2 NimbleKit projects in production, but have not finished and submitted them yet. So I have neither app acceptance nor rejection experience using NimbleKit. Wish me luck! =)</description>
		<content:encoded><![CDATA[<p>I&#8217;m pretty sure that Apple could not have an inherent bias against NimbleKit. Otherwise, why would they have it on their web site as a featured development tool??</p>
<p><a href="http://www.apple.com/downloads/macosx/development_tools/nimblekit.html" rel="nofollow">http://www.apple.com/downloads/macosx/development_tools/nimblekit.html</a></p>
<p>I took this to be, at the very least, an overall technical affirmation of the tool.</p>
<p>But if Apple is featuring a product that they are then rejecting the use of in practice, that&#8217;s ridiculous.</p>
<p>Note: I have 2 NimbleKit projects in production, but have not finished and submitted them yet. So I have neither app acceptance nor rejection experience using NimbleKit. Wish me luck! =)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: App Rejections &#187; Blog Archive &#187; TOOL: APIkit (avoid being rejected for bad method names)</title>
		<link>http://apprejections.com/index.php/post/63/comment-page-1#comment-538</link>
		<dc:creator>App Rejections &#187; Blog Archive &#187; TOOL: APIkit (avoid being rejected for bad method names)</dc:creator>
		<pubDate>Sun, 17 Jan 2010 17:06:41 +0000</pubDate>
		<guid isPermaLink="false">http://apprejections.com/?p=63#comment-538</guid>
		<description>[...] seen a few examples already of apps (and even entire libraries) getting rejected for innocently choosing &#8220;the wrong names&#8221; for methods. Although in [...]</description>
		<content:encoded><![CDATA[<p>[...] seen a few examples already of apps (and even entire libraries) getting rejected for innocently choosing &#8220;the wrong names&#8221; for methods. Although in [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rory</title>
		<link>http://apprejections.com/index.php/post/63/comment-page-1#comment-144</link>
		<dc:creator>Rory</dc:creator>
		<pubDate>Sat, 05 Dec 2009 03:14:01 +0000</pubDate>
		<guid isPermaLink="false">http://apprejections.com/?p=63#comment-144</guid>
		<description>@Antoine -

Non - je travaille pas chez Apple. Je travail chez moi maintenant car je veux faire des choses que je pouvais pas faire a mon dernier boulot.

Ce-que je peut te dire c&#039;est que mon francais est terrible. D&#039;accord? Le francais est pas ma langue maternelle, alors je peux pas m&#039;exprimer en francais comme en anglais.

That is, there might be an issue here with language barriers. It&#039;s hard in English to tell when someone&#039;s angry/joking/etc., and it&#039;s even harder when trying to figure out what someone&#039;s tone is in a language other than your own.

So, I&#039;m not angry :)

I was just thinking out loud about some of the reasons Apple might not want projects like NimbleKit around. As I stated, I didn&#039;t know much about NimbleKit - just a summary of what it does, and I tried to infer the rest. I should have made it clearer that the issues I was raising had more to do with how a system like NimbleKit *could potentially* be abused (though it appears I misunderstood how NimbleKit works).

I have no problem at all with someone wanting to write their apps using HTML and script. I&#039;m very platform-agnostic. I&#039;ve worked with many platforms and tools - even when I was working at Microsoft, I recommended things like MySQL to customers when I thought it was &quot;the right tool for the job.&quot; I want people to use the tools *they* want to use - I don&#039;t like religious tech battles. However, I can see why you took my posts the way you did, and that was my bad - I didn&#039;t clarify my position.

Apologies, by the way, to Alexander - I didn&#039;t intend to speak poorly of NimbleKit if that&#039;s how it came off.

After reading the summary of NimbleKit, I got to thinking about various approaches to writing such a framework. I&#039;ve looked at some of the others out there, but hadn&#039;t previously thought about the issues beyond what it might be like to use in one of my own projects.

The idea I was enjoying, and one that nobody would be able to get away with, was providing a javascript/Objective-C bridge that would allow you to send arbitrary messages to Objective-C types. If there were such a system, you could get around all kinds of limitations imposed by Apple&#039;s rules (which is, of course, the reason such a system would never see the light of day).

It&#039;d be a way around the no-plugin rule. Want more functionality for your *native* app? Point it to a URL, grab new HTML and script, save it in the Documents folder, and you&#039;ve got a plugin.

Contrary to how I came off in my comment, I actually really *like* that idea. There&#039;s a simplicity to it that I appreciate, though the security holes are obvious. That might be part of the reason Apple was especially strict with NimbleKit - because of how anything-goes Objective-C can be, it&#039;d be easy to slip some code into such a framework that would allow for all kinds of trouble. I&#039;m *not* saying NimbleKit does this - just saying that you *could* do something like this with a javascript/Objective-C pass-through doohickey, and it may be that Apple is being unusually cautious because of it.

The post and comments got me thinking about all sorts of ways you could circumvent the rules about plugins and accessing &quot;private&quot; APIs. It&#039;s interesting stuff. (Interesting stuff, I should add, that&#039;d get any such apps yanked right out of the store.)

I should really shut up at this point - this is all thought-exercise stuff - I&#039;m not advocating breaking the rules - just navel-gazing and daydreaming... :)</description>
		<content:encoded><![CDATA[<p>@Antoine -</p>
<p>Non &#8211; je travaille pas chez Apple. Je travail chez moi maintenant car je veux faire des choses que je pouvais pas faire a mon dernier boulot.</p>
<p>Ce-que je peut te dire c&#8217;est que mon francais est terrible. D&#8217;accord? Le francais est pas ma langue maternelle, alors je peux pas m&#8217;exprimer en francais comme en anglais.</p>
<p>That is, there might be an issue here with language barriers. It&#8217;s hard in English to tell when someone&#8217;s angry/joking/etc., and it&#8217;s even harder when trying to figure out what someone&#8217;s tone is in a language other than your own.</p>
<p>So, I&#8217;m not angry <img src='http://apprejections.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I was just thinking out loud about some of the reasons Apple might not want projects like NimbleKit around. As I stated, I didn&#8217;t know much about NimbleKit &#8211; just a summary of what it does, and I tried to infer the rest. I should have made it clearer that the issues I was raising had more to do with how a system like NimbleKit *could potentially* be abused (though it appears I misunderstood how NimbleKit works).</p>
<p>I have no problem at all with someone wanting to write their apps using HTML and script. I&#8217;m very platform-agnostic. I&#8217;ve worked with many platforms and tools &#8211; even when I was working at Microsoft, I recommended things like MySQL to customers when I thought it was &#8220;the right tool for the job.&#8221; I want people to use the tools *they* want to use &#8211; I don&#8217;t like religious tech battles. However, I can see why you took my posts the way you did, and that was my bad &#8211; I didn&#8217;t clarify my position.</p>
<p>Apologies, by the way, to Alexander &#8211; I didn&#8217;t intend to speak poorly of NimbleKit if that&#8217;s how it came off.</p>
<p>After reading the summary of NimbleKit, I got to thinking about various approaches to writing such a framework. I&#8217;ve looked at some of the others out there, but hadn&#8217;t previously thought about the issues beyond what it might be like to use in one of my own projects.</p>
<p>The idea I was enjoying, and one that nobody would be able to get away with, was providing a javascript/Objective-C bridge that would allow you to send arbitrary messages to Objective-C types. If there were such a system, you could get around all kinds of limitations imposed by Apple&#8217;s rules (which is, of course, the reason such a system would never see the light of day).</p>
<p>It&#8217;d be a way around the no-plugin rule. Want more functionality for your *native* app? Point it to a URL, grab new HTML and script, save it in the Documents folder, and you&#8217;ve got a plugin.</p>
<p>Contrary to how I came off in my comment, I actually really *like* that idea. There&#8217;s a simplicity to it that I appreciate, though the security holes are obvious. That might be part of the reason Apple was especially strict with NimbleKit &#8211; because of how anything-goes Objective-C can be, it&#8217;d be easy to slip some code into such a framework that would allow for all kinds of trouble. I&#8217;m *not* saying NimbleKit does this &#8211; just saying that you *could* do something like this with a javascript/Objective-C pass-through doohickey, and it may be that Apple is being unusually cautious because of it.</p>
<p>The post and comments got me thinking about all sorts of ways you could circumvent the rules about plugins and accessing &#8220;private&#8221; APIs. It&#8217;s interesting stuff. (Interesting stuff, I should add, that&#8217;d get any such apps yanked right out of the store.)</p>
<p>I should really shut up at this point &#8211; this is all thought-exercise stuff &#8211; I&#8217;m not advocating breaking the rules &#8211; just navel-gazing and daydreaming&#8230; <img src='http://apprejections.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexander Voloshyn</title>
		<link>http://apprejections.com/index.php/post/63/comment-page-1#comment-108</link>
		<dc:creator>Alexander Voloshyn</dc:creator>
		<pubDate>Mon, 30 Nov 2009 21:37:35 +0000</pubDate>
		<guid isPermaLink="false">http://apprejections.com/?p=63#comment-108</guid>
		<description>My name is Alexander Voloshyn and I&#039;m the developer of NimbleKit framework. This situation is a simple misunderstanding, those API names are NimbleKit APIs and not Apple&#039;s private. Think now by yourself, how would you call the method which sets parameters? I think that Apple is very wrong in this situation as private APIs should have special names like &quot;setInternalPrivateParameters&quot; or something complicated which can not be the same as half developers would call their methods, for instance Microsoft calls their private APIs with 2-3 dashes at the beginning of the name, so they are sure people won&#039;t call functions like that. However this already changed, I renamed my APIs to be setNKParameters, setNKCurrentPage, setNKWebView, etc so now this is solved and application won&#039;t be rejected anymore. This is not big deal or problem, if you NimbleKit user all you have to do is update and resubmit your application.</description>
		<content:encoded><![CDATA[<p>My name is Alexander Voloshyn and I&#8217;m the developer of NimbleKit framework. This situation is a simple misunderstanding, those API names are NimbleKit APIs and not Apple&#8217;s private. Think now by yourself, how would you call the method which sets parameters? I think that Apple is very wrong in this situation as private APIs should have special names like &#8220;setInternalPrivateParameters&#8221; or something complicated which can not be the same as half developers would call their methods, for instance Microsoft calls their private APIs with 2-3 dashes at the beginning of the name, so they are sure people won&#8217;t call functions like that. However this already changed, I renamed my APIs to be setNKParameters, setNKCurrentPage, setNKWebView, etc so now this is solved and application won&#8217;t be rejected anymore. This is not big deal or problem, if you NimbleKit user all you have to do is update and resubmit your application.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Antoine</title>
		<link>http://apprejections.com/index.php/post/63/comment-page-1#comment-107</link>
		<dc:creator>Antoine</dc:creator>
		<pubDate>Mon, 30 Nov 2009 21:27:15 +0000</pubDate>
		<guid isPermaLink="false">http://apprejections.com/?p=63#comment-107</guid>
		<description>Dear Rory,
Are you working for Apple ???? Sorry... but you&#039;re so.. how can I say ?!?!.... so... angry in your comment... that it&#039;s really confusing... ;-) ... or... or .... may be you&#039;re a very very frustrated developer, your iPhone applications are always rejected, etc... etc... well, in fact... may be you&#039;re not a good developer... (humour français)
I don&#039;t care if people can use Javascript&amp;HTML to build application, what&#039;s the problem ???? What is the fucking problem ???? Please just be objective, the real problem is that Apple should not be judge and jury at the same time. There&#039;s real reasons (bugs, bad user interface...), and others........
Regards,
Antoine
A french iPhone(in Objective C, of course... it&#039;s important for u... no ?)/J2ME/Android developer...</description>
		<content:encoded><![CDATA[<p>Dear Rory,<br />
Are you working for Apple ???? Sorry&#8230; but you&#8217;re so.. how can I say ?!?!&#8230;. so&#8230; angry in your comment&#8230; that it&#8217;s really confusing&#8230; <img src='http://apprejections.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  &#8230; or&#8230; or &#8230;. may be you&#8217;re a very very frustrated developer, your iPhone applications are always rejected, etc&#8230; etc&#8230; well, in fact&#8230; may be you&#8217;re not a good developer&#8230; (humour français)<br />
I don&#8217;t care if people can use Javascript&amp;HTML to build application, what&#8217;s the problem ???? What is the fucking problem ???? Please just be objective, the real problem is that Apple should not be judge and jury at the same time. There&#8217;s real reasons (bugs, bad user interface&#8230;), and others&#8230;&#8230;..<br />
Regards,<br />
Antoine<br />
A french iPhone(in Objective C, of course&#8230; it&#8217;s important for u&#8230; no ?)/J2ME/Android developer&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rory</title>
		<link>http://apprejections.com/index.php/post/63/comment-page-1#comment-99</link>
		<dc:creator>Rory</dc:creator>
		<pubDate>Sun, 29 Nov 2009 21:54:46 +0000</pubDate>
		<guid isPermaLink="false">http://apprejections.com/?p=63#comment-99</guid>
		<description>I should add, to call it out, that because of Objective-C&#039;s partially dynamic ways, you could still download resources from the net that modify the way your Objective-C calls work (like, you could download a simple comma-delimited text file or plist or whatever that your app could read and then use to map old selectors to new selectors (provided you&#039;re using ObjC&#039;s dynamic-y bits), and use *that* to call into private APIs - the difference is that it&#039;d be easy-ish to spot (Does anybody know why this app just went off and downloaded a text file that seems to be key-value pairs, the values of which appear to be the names of private API calls? Anybody? Fellow AppStore peeps? Hello...? And does anybody else think it&#039;s weird that the app looks for this file before making certain calls?&quot;)).

It wouldn&#039;t be *that* easy, but it&#039;d be easier to catch you. Also, because binaries are rigid, there&#039;d only be so much you can do - even if you replaced an existing call with a private API call, your code would have to be written in such a way that whatever happened as a result fit into the app&#039;s existing logic. A clever person could do it, but, except for the thrill of getting your app pulled, I&#039;d like to think a clever person might spend more time writing a *good* app that&#039;s worth the money and that improves everybody&#039;s lives. Even the people without iPhones. Clever people should write apps that turn sound emitted from the phone&#039;s speakers into food. Or that turn dirt into money. Apps that solve financial crises and food shortages - *that&#039;s* what clever people should be doing. Little mobile Bono apps.

Sorry. Got a little tangential there near the end. But wanted to point out that I&#039;m aware there are ways of doing bad, naughty things even with the system as it is. I don&#039;t want to make it sound like the Objective-C runtime is a secure, un-exploitable thing when it totally isn&#039;t (which is what Apple gets for not providing a modern, managed environment for app execution - they compensate with sandboxing, and although it works, it&#039;s a real pain for devs (remember the days when you could share data between apps without resorting to all kinds of nasty hacks? I do. I miss those days.)).

Aight.

Turning off my fingers for now.

Juuust being thorough...</description>
		<content:encoded><![CDATA[<p>I should add, to call it out, that because of Objective-C&#8217;s partially dynamic ways, you could still download resources from the net that modify the way your Objective-C calls work (like, you could download a simple comma-delimited text file or plist or whatever that your app could read and then use to map old selectors to new selectors (provided you&#8217;re using ObjC&#8217;s dynamic-y bits), and use *that* to call into private APIs &#8211; the difference is that it&#8217;d be easy-ish to spot (Does anybody know why this app just went off and downloaded a text file that seems to be key-value pairs, the values of which appear to be the names of private API calls? Anybody? Fellow AppStore peeps? Hello&#8230;? And does anybody else think it&#8217;s weird that the app looks for this file before making certain calls?&#8221;)).</p>
<p>It wouldn&#8217;t be *that* easy, but it&#8217;d be easier to catch you. Also, because binaries are rigid, there&#8217;d only be so much you can do &#8211; even if you replaced an existing call with a private API call, your code would have to be written in such a way that whatever happened as a result fit into the app&#8217;s existing logic. A clever person could do it, but, except for the thrill of getting your app pulled, I&#8217;d like to think a clever person might spend more time writing a *good* app that&#8217;s worth the money and that improves everybody&#8217;s lives. Even the people without iPhones. Clever people should write apps that turn sound emitted from the phone&#8217;s speakers into food. Or that turn dirt into money. Apps that solve financial crises and food shortages &#8211; *that&#8217;s* what clever people should be doing. Little mobile Bono apps.</p>
<p>Sorry. Got a little tangential there near the end. But wanted to point out that I&#8217;m aware there are ways of doing bad, naughty things even with the system as it is. I don&#8217;t want to make it sound like the Objective-C runtime is a secure, un-exploitable thing when it totally isn&#8217;t (which is what Apple gets for not providing a modern, managed environment for app execution &#8211; they compensate with sandboxing, and although it works, it&#8217;s a real pain for devs (remember the days when you could share data between apps without resorting to all kinds of nasty hacks? I do. I miss those days.)).</p>
<p>Aight.</p>
<p>Turning off my fingers for now.</p>
<p>Juuust being thorough&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rory</title>
		<link>http://apprejections.com/index.php/post/63/comment-page-1#comment-98</link>
		<dc:creator>Rory</dc:creator>
		<pubDate>Sun, 29 Nov 2009 21:39:15 +0000</pubDate>
		<guid isPermaLink="false">http://apprejections.com/?p=63#comment-98</guid>
		<description>I read a little about NimbleKit, and it sounds like the author has a legitimate gripe, but Apple does, too (and your post reflects that possibility). But, from what I read, it almost sounds like Apple&#039;s issue might be with something else, and it could just be that their feedback was poorly phrased or just wrong (people make mistakes - especially when having to deal with the workload the App Store approvers do).

I should read more about NimbleKit, but like any idiot on the net, I want to have my say before I sufficiently research it (at least I admit it, right?).

So, here&#039;s what I think Apple&#039;s beef actually is...

When you submit your app, what it is is what it&#039;s gonna be. Your binary is your binary, and your code isn&#039;t going to change. Even with the new in-app purchase functionality that lets you turn your &quot;lite&quot; version into the full version with a payment, the full code for the full version was in the lite version to begin with - paying just unlocks the extra features.

It *looks* like a plugin system, but it isn&#039;t. And if anything new is pulled down to your phone as a result of an in-app purchase, it&#039;s something that&#039;s also gone through The Process (you can&#039;t just download any old thing - and if you figure out how to, Apple would boot you).

Hang on - this gets relevant.

The difference here is that it *almost* sounds like you can put together some html and script where your script calls are passed through to Objective-C objects.

While the NimbleKit-based app you write might be totally legit at the time you submit it, there&#039;s a potential hole here: unlike your app&#039;s binary, which is what it is and all it will ever be, your app could easily pull new html and script from some site of your choosing, store it locally on the phone, and contain script that passes an entirely different set of calls to the Objective-C end of things.

That is, with a single call (if you wanted to do it the uncool synchronous way), your app could pull down what would be the equivalent of a plugin. It&#039;s just that the plugin would be written using script hosted in an html page rather than in a native binary that hooks into your original binary and provides additional functionality.

If I&#039;m still not making sense, it sounds to me (and I could be TOTALLY wrong here) like NimbleKit *could* allow you to pass arbitrary calls to arbitrary objects. It&#039;s easy enough to call &quot;performSelector:&quot; on an object. You do it all the time in the Objective-C world as a way of implementing callbacks (and exactly one-bajillion other things).

If you could use NimbleKit to call &quot;performSelector:&quot; on an object, you could easily access private APIs through your script. And, like I said, although the script that ships with your app might be legit, if NimbleKit allows for this, it would be eeeeeasy to call all sorts of things you aren&#039;t supposed to call just by downloading a new script that contains the calls that get passed through to Objective-C-land.

You have your fun NimbleKit-based Pac-Man clone (or whatever), and the AppStore people get a kick out of it, and they delay approving other apps because they&#039;re so busy playing your really fun Pac-Man clone, but then it dawns on them that &quot;performSelector:&quot; is getting called by the pass-through mechanism, and that any old html document could be downloaded and stored in the app&#039;s sandboxed Documents folder. From there, it&#039;d be easy enough for your app to load that page, run that script, and then everything goes horribly wrong because your *new* script goes to town on private APIs.

Again, I want to stress that I don&#039;t know if this is how NimbleKit works, but if it does have a pass-through system that lets you call Objective-C from javascript (and it&#039;s not remotely the first tool to let you do that), if there isn&#039;t some degree of protection from some very bad and naughty person taking advantage of Objective-C&#039;s partially dynamic nature, then Apple is right to reject it.

While I&#039;m babbling, you wouldn&#039;t even have to download a new page and run it locally - you could point a UIWebView instance to the URL for the page and start executing away as soon as it loads.

If I were Apple, I&#039;d reject anything that even remotely came close to allowing for that. While it *might* really come down to a matter of naming of methods (which seems unlikely, but, as I admitted, I haven&#039;t looked into this enough), then the problem is easily fixed and everybody&#039;s happy. And anybody with a text editor (or, I don&#039;t know, IDE) should only be slightly inconvenienced by having to perform a search and replace on the method names.

In short, this could potentially have been very bad for Apple (We approve this app! Hey, this app just hit a page that has new script that gets calls passed through to private APIs! Hey... this stinks!), and what they&#039;re asking isn&#039;t unreasonable, and the developer&#039;s rant in his forums is pretty whiny, which makes me less sympathetic to him (OMG, everybody... whoah is us... we&#039;re going to have to search and replace some functions and resubmit... what&#039;s the world coming to... ohhhh... whoah is us... (there&#039;s some paraphrasing in there)).

Much of the time, people get their apps rejected because they violate rules set out in the guidelines that, as an iPhone dev, you *must* read. But I&#039;ve met so many devs who haven&#039;t read the first line - they sit down, start copying and pasting code they find on the web, put together their million-dollar idea, wait for the bucks to roll in, and then get rejected because their apps suck or violate Apple&#039;s rules.

In this case, it sounds like NimbleKit could be modified to perform its function without also being a risk.

If I were Apple, and if I&#039;m even half-right about what I&#039;ve said here, I&#039;d reject that sucker, too.</description>
		<content:encoded><![CDATA[<p>I read a little about NimbleKit, and it sounds like the author has a legitimate gripe, but Apple does, too (and your post reflects that possibility). But, from what I read, it almost sounds like Apple&#8217;s issue might be with something else, and it could just be that their feedback was poorly phrased or just wrong (people make mistakes &#8211; especially when having to deal with the workload the App Store approvers do).</p>
<p>I should read more about NimbleKit, but like any idiot on the net, I want to have my say before I sufficiently research it (at least I admit it, right?).</p>
<p>So, here&#8217;s what I think Apple&#8217;s beef actually is&#8230;</p>
<p>When you submit your app, what it is is what it&#8217;s gonna be. Your binary is your binary, and your code isn&#8217;t going to change. Even with the new in-app purchase functionality that lets you turn your &#8220;lite&#8221; version into the full version with a payment, the full code for the full version was in the lite version to begin with &#8211; paying just unlocks the extra features.</p>
<p>It *looks* like a plugin system, but it isn&#8217;t. And if anything new is pulled down to your phone as a result of an in-app purchase, it&#8217;s something that&#8217;s also gone through The Process (you can&#8217;t just download any old thing &#8211; and if you figure out how to, Apple would boot you).</p>
<p>Hang on &#8211; this gets relevant.</p>
<p>The difference here is that it *almost* sounds like you can put together some html and script where your script calls are passed through to Objective-C objects.</p>
<p>While the NimbleKit-based app you write might be totally legit at the time you submit it, there&#8217;s a potential hole here: unlike your app&#8217;s binary, which is what it is and all it will ever be, your app could easily pull new html and script from some site of your choosing, store it locally on the phone, and contain script that passes an entirely different set of calls to the Objective-C end of things.</p>
<p>That is, with a single call (if you wanted to do it the uncool synchronous way), your app could pull down what would be the equivalent of a plugin. It&#8217;s just that the plugin would be written using script hosted in an html page rather than in a native binary that hooks into your original binary and provides additional functionality.</p>
<p>If I&#8217;m still not making sense, it sounds to me (and I could be TOTALLY wrong here) like NimbleKit *could* allow you to pass arbitrary calls to arbitrary objects. It&#8217;s easy enough to call &#8220;performSelector:&#8221; on an object. You do it all the time in the Objective-C world as a way of implementing callbacks (and exactly one-bajillion other things).</p>
<p>If you could use NimbleKit to call &#8220;performSelector:&#8221; on an object, you could easily access private APIs through your script. And, like I said, although the script that ships with your app might be legit, if NimbleKit allows for this, it would be eeeeeasy to call all sorts of things you aren&#8217;t supposed to call just by downloading a new script that contains the calls that get passed through to Objective-C-land.</p>
<p>You have your fun NimbleKit-based Pac-Man clone (or whatever), and the AppStore people get a kick out of it, and they delay approving other apps because they&#8217;re so busy playing your really fun Pac-Man clone, but then it dawns on them that &#8220;performSelector:&#8221; is getting called by the pass-through mechanism, and that any old html document could be downloaded and stored in the app&#8217;s sandboxed Documents folder. From there, it&#8217;d be easy enough for your app to load that page, run that script, and then everything goes horribly wrong because your *new* script goes to town on private APIs.</p>
<p>Again, I want to stress that I don&#8217;t know if this is how NimbleKit works, but if it does have a pass-through system that lets you call Objective-C from javascript (and it&#8217;s not remotely the first tool to let you do that), if there isn&#8217;t some degree of protection from some very bad and naughty person taking advantage of Objective-C&#8217;s partially dynamic nature, then Apple is right to reject it.</p>
<p>While I&#8217;m babbling, you wouldn&#8217;t even have to download a new page and run it locally &#8211; you could point a UIWebView instance to the URL for the page and start executing away as soon as it loads.</p>
<p>If I were Apple, I&#8217;d reject anything that even remotely came close to allowing for that. While it *might* really come down to a matter of naming of methods (which seems unlikely, but, as I admitted, I haven&#8217;t looked into this enough), then the problem is easily fixed and everybody&#8217;s happy. And anybody with a text editor (or, I don&#8217;t know, IDE) should only be slightly inconvenienced by having to perform a search and replace on the method names.</p>
<p>In short, this could potentially have been very bad for Apple (We approve this app! Hey, this app just hit a page that has new script that gets calls passed through to private APIs! Hey&#8230; this stinks!), and what they&#8217;re asking isn&#8217;t unreasonable, and the developer&#8217;s rant in his forums is pretty whiny, which makes me less sympathetic to him (OMG, everybody&#8230; whoah is us&#8230; we&#8217;re going to have to search and replace some functions and resubmit&#8230; what&#8217;s the world coming to&#8230; ohhhh&#8230; whoah is us&#8230; (there&#8217;s some paraphrasing in there)).</p>
<p>Much of the time, people get their apps rejected because they violate rules set out in the guidelines that, as an iPhone dev, you *must* read. But I&#8217;ve met so many devs who haven&#8217;t read the first line &#8211; they sit down, start copying and pasting code they find on the web, put together their million-dollar idea, wait for the bucks to roll in, and then get rejected because their apps suck or violate Apple&#8217;s rules.</p>
<p>In this case, it sounds like NimbleKit could be modified to perform its function without also being a risk.</p>
<p>If I were Apple, and if I&#8217;m even half-right about what I&#8217;ve said here, I&#8217;d reject that sucker, too.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
