My name is Aderval, and I am testing the NuclIOS component. So far I am very glad with it, with just one or two issues that I was planning to submit to the support team, but maybe it is just a matter of learning the API.
Well, my last real test was submitting my app to the App Store, in order to check if it would pass without problems. To my surprise, I've got a Binary Rejected status, with the following text:
"We found that your app uses one or more non-public APIs, which is not in compliance with the App Store Review Guidelines. The use of non-public APIs is not permissible because it can lead to a poor user experience should these APIs change.
We found the following non-public API/s in your app:gridView:heightForHeaderInSection:gridView:viewForHeaderInSection:If you have defined methods in your source code with the same names as the above-mentioned APIs, we suggest altering your method names so that they no longer collide with Apple's private APIs to avoid your application being flagged in future submissions."
I saw in the NuclIOS that these methods really exists on the GridView API. So, how can I bypass this in order to approve my App??
Thats very strange. I've submitted multiple apps with both of those protocol methods implemented and never got a rejection. In fact our Nuclios samples browser itself implements both of those methods in various samples and again has never been rejected. Plus we've submitted that specific app to the app store 4 times already.
I believe when your app gets rejected, you can request more information. Would it be possible to find out out what internal API's they're referencing?
Also, are you explicitly using those API's or was the rejection completely random?
I absolutely want to get to the bottom of this, so we can avoid these issues in the future.
They state that the rejected API's were:
I am not explicitly using any of them... just those that are in the developer's guide (Adding a GridView).
Yes, i saw the 2 offending methods in your first post. I was referring to finding out, to which Internal API's those 2 methods belong to. For example, does it belong to some internal control or something along those lines. I apologize for not being more clear in my previous post.
My first guess is that that Apple has made a mistake here. Maybe, confusing our grid as being internal. Seeing as nothing else has gotten rejected, and those API's have existed since we released in October, something weird must be happening.
Could you also let me know what frameworks' your app is referencing? Perhaps, the reason our apps never got rejected, was b/c we're not referencing a specific framework that actually does have those methods internally?
I understand this must be frustrating, and again i apologize as i don't really know what has happened. However, changing a public API is really a big deal, and something we take very seriously. Plus, if there is some sort of internal gridview somewhere in Apple's API's, we need to make sure no other API's violate this.
I'm not using any of the methods explicitly. What I did was: copied the example that is in the NucliOS documentation (adding a gridView...), and changed just some lines of code inside the method's implementation (only cellAt, numberOfRowsInSection, and numberOfColumnsInGridView). That was all. I'm only using the libraries/frameworks that your components requires, as stated on the documentation.
I think Apple started recently to analyze code and reject calls to methods of objects that they do not expose. It seems to not happen before. Just take a look at this (recent) discussion: https://github.com/kolinkrewinkel/KKGridView/issues/150
I hope you can help me.
Yea I stumbled upon that posting as well. Very odd, as that post is over 11 months old, and we've been making submissions since then. I guess its just luck of the draw on who is doing your verification.
So yea, we'll update those offending API's. I'll have someone from our support department contact you, and offer you a private/"untested" build, so that you can rebuild and re-submit your application.
Again, i apologize for this inconvenience.