Skip to content
This repository has been archived by the owner on Jan 12, 2019. It is now read-only.

Card.io cause Non-public API usage #201

Closed
davidgu90 opened this issue May 5, 2016 · 8 comments
Closed

Card.io cause Non-public API usage #201

davidgu90 opened this issue May 5, 2016 · 8 comments
Labels

Comments

@davidgu90
Copy link

I got some trouble when I try to upload my app to AppStore.

Apple reject the app with these error message:

Non-public API usage:

The app references non-public selectors in MyAppiOS: cardNumber, cardType, libraryVersion, navigationBarStyle, navigationBarTintColor, preload, setCardNumber:, setNavigationBarTintColor:
Deep searching told me that the Card.IO is causing the problem, indeed it has all the above selectors.

The same code was uploading successfully. What can be the cause of such behavior?

@bluk
Copy link
Contributor

bluk commented May 5, 2016

I would ask Apple to be more specific and to make sure they're not incorrectly identifying private API usage. The card.io methods you listed are not private system API.

I seem to recall incorrect builds causing some problems (e.g. wrong architectures; wrongly linked libraries/frameworks), but nothing specific for non-public API usage. If anyone has any suggestions, please leave a comment.

@dgoldman-pdx
Copy link
Member

It's Apple's mistake.

We used to see a similar issue from time to time a few years ago -- apparently card.io contained some identifiers which happened to match non-public Apple identifiers, and Apple's screening tests caught these as false-positives.

In your case today, Apple's problem would seem to be a different one. It seems unlikely that they'd be complaining because an app contains an identifier like libraryVersion!

@eversunsoft
Copy link

Would Cardio consider change the name of references non-public selectors so to avoid conflict with Apple's mistake?

@bluk bluk added the question label May 8, 2016
@bluk
Copy link
Contributor

bluk commented May 8, 2016

@eversunsoft I think you should ask Apple to review their process to help eliminate false positives or get an understanding of what the real issue is. Names like libraryVersion, cardNumber, preload, etc. are probably so common that if it isn't card.io, you'll encounter it with other dependencies.

If you really want to change the names, you can try to the fork the library, rename them, and build the library for yourself (build instructions are included with the source) but again, I would stress that this really should be something Apple either fixes or better explain what the issue is. Given that, I'll close this issue. If there are more details about this issue, please leave a comment, and we can reopen.

@bluk bluk closed this as completed May 8, 2016
@marlonconstante
Copy link

I have the same problem when trying to submit my Xamarin.iOS application in the Apple Store. There are at least 2 more developers unable to update the version: https://components.xamarin.com/view/cardioios

Could give special attention to solve this problem?

@jasonblood
Copy link

jasonblood commented Sep 14, 2016

So we also started getting rejected for private api usage. paypal/PayPal-iOS-SDK#456

I did what was recommended here and argued the point to Apple but got this response.

Thank you for your reply and patience during extended review. Our team has re-reviewed this app to ensure our findings were accurate, we found this app contains references to the following selectors:
presentCardIOPaymentViewControllerForNavigationController:forDelegate:]


To proceed with normal review it would be appropriate to check these locations to ensure your app is free of using Private APIs, if these selectors are your own code it would be appropriate to revise the implementation to statically call this method or rename the selector to avoid this concern on your submission.

We look forward to reviewing your revised binary.

Thank you,

App Store Review

They don't seem to really care that it is a name collision. Its hard for us to argue against Apple also because my argument is. Paypal told me its not a private API (I fully believe it but I can't back up the statement). Unfortunately Apples review process is so inconsistent because we have been using this version for our last couple of releases ! Is it any way possible to change the method name. It will hopefully save some developers some time in the future also because at this stage for us anyway we want to get this release out and its at the stage where we would have to remove Paypal as an option from the app or at least stop using the SDK :(

@bluk
Copy link
Contributor

bluk commented Sep 14, 2016

We are looking into trying to mitigate some of the collisions. Hopefully it isn't because of that specific method that they named in the email though since that's pretty unique to this project.

@jasonblood
Copy link

@bluk the one we initially got flagged for was. setNavigationBarTintColor I am not really sure why they flagged presentCardIOPaymentViewControllerForNavigationController:forDelegate:] because you can't get much more unique than that.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

6 participants