Non-public API usage...

So I’ve finally managed to get my game to build in AppStore mode. Yay! Uploaded it to iTunes Connect… got this back:

To process your delivery, the following issues must be corrected:

Non-public API usage:
The app references non-public selectors in [My Game]:
achievementDelegate, composeViewDelegate, finished, gameCenterDelegate,
leaderboardDelegate, setAchievementDelegate:, setComposeViewDelegate:,
setGameCenterDelegate:, setLeaderboardDelegate:, setMovieControlMode:,
setShowExistingMatches:, setTurnBasedMatchmakerDelegate:, setViewState:,
showExistingMatches, turnBasedMatchmakerDelegate, viewState

If method names in your source code match the private Apple APIs listed above,
altering your method names will help prevent this app from being flagged in
future submissions. In addition, note that one or more of the above APIs may
be located in a static library that was included with your app. If so, they must be removed.

Now, as far as I am aware, I have not leveraged anything outside Xamarin iOS and the Monogame framework. Is there anything in Monogame that may reference these APIs, and if so, does anyone know what I need to do to prevent this from being a problem, or what I need to remove to fix this?

Alternatively, does anyone know what sort of C# code these things may correlate to, so I can check my code and find out where I have (inadvertently) referenced these non-public APIs?


There was a recent change in this area:

However, I cannot find references to these in MonoGame, so this might be a Xamarin.iOS.

You can find out where those selectors are used with this:

You can use the strings command-line tool
to search for strings in the third-party library, and then grep for the
selectors to see which binding contain which selector:
strings /path/to/third/party/binding.dll | grep artwork

Okay, I’ll admit right now that I know next to nothing about Unix - I can just about move back and forth through a folder structure and list the files there, and that’s where my knowledge ends.

I fired up the terminal, and navigated to the folder which I had given for my project to output to in Xamarin studio - for some reason, it had completely different contents to when I look at it in Finder, but I’m sure I had the right path… unless there’s some more Unix voodoo (like what happened with the “strip” files) happening here.

I then typed in “strings | grep artwork” - then closed the terminal window after about 10 minutes of nothing happening and no new command prompt coming up.

Next, I opened up a new terminal window, navigated back to my output folder and tried “strings Monogame.Framework.dll | grep artwork”. A couple of seconds later, a new command prompt appeared, and nothing else happened.

What am I doing wrong?

That’s just what a xamarin guy wrote to a similar problem on their forums. I haven’t used it myself. You should replace artwork with a selector you are looking for, like achievementDelegate.

Fixed it - turns out that it was a linker issue, I had “link none” selected. Switched to “link SDK” and it uploaded.

Thanks again to all for the help!