0

We got rejected by Apple. Happens all the time right? But this time we are a bit stumped. The old ways of sussing this out aren't producing a clue to the solution.

From Apple:

  1. 5 PERFORMANCE: SOFTWARE REQUIREMENTS

Performance - 2.5.1

Your app uses or references the following non-public APIs:

transition:didComplete:

The use of non-public APIs is not permitted on the App Store because it can lead to a poor user experience should these APIs change.

This app has been around half a decade and over the years, mostly due to business needs, it has a lot of references to 3rd party SDKs. This is where we are focusing our attention, but the trail dries up quick and is turning into a massive removal of everything until we find the pieces that include this old code.

What we know is it is not a symbol, otool and nm don’t find anything. strings does locate a match (1 time in the debug build and 2 times in our final release build if that is a clue or makes a difference.) This would appear to be a call is UIKit so I assuming that would not be the case.

Does anyone have any suggestions on how to proceed?

We're going through every archive/lib/binary we can find referenced in the project and doing string searches. If that fails we are about to rip every SDK out and do a destructive binary search to find the guilty party... If there was a hot tip on how to solve this I am all ears!

Here is the command line output (strings, otool, and nm):

Dev-MBP:helloworld.app codemonkey$ otool -ov helloworld | grep -C 10 "transition:didComplete"
Dev-MBP:helloworld.app codemonkey$ nm helloworld | grep -C 10 "transition:didComplete"
Dev-MBP:helloworld.app codemonkey$ strings helloworld | grep -C 3 "transition:didComplete"
destinationLayout
prepareTransition:
performTransition:
transition:didComplete:
destinationViewController
sourceViewController
isViewTransition
--
--
destinationLayout
prepareTransition:
performTransition:
transition:didComplete:
destinationViewController
sourceViewController
isViewTransition
Dev-MBP:helloworld.app codemonkey$ strings helloworld | grep "transition:didComplete"
transition:didComplete:
transition:didComplete:
Dev-MBP:helloworld.app codemonkey$ 
batman
  • 1,937
  • 2
  • 22
  • 41
Hunter-Orionnoir
  • 2,015
  • 1
  • 18
  • 23

1 Answers1

0

The lib containing the string "transition:didComplete:" was coming from the 4.x Google Play Games libs for c++. We also found it in the latest 5.1.1.

The command/script I ran to find this string inside of a file is probably the most useful part of this answer:

Dev-MBP:helloworldproj codemonkey$ find . -type f | while read i; do grep 'transition:didComplete' "$i" >/dev/null; [ $? == 0 ] && echo $i; done

Run this from the root of your iOS project (assuming your frameworks you added are all under that directory)

We can now deliberate on the most efficient way to write this command. I've already had one suggestion:

From a friend:

Naturally, it could be improved upon. The -l option to grep does the same thing, so ...

find . -type f |
    while read i
    do
        grep -l 'transition:didComplete' "$i"
    done
Hunter-Orionnoir
  • 2,015
  • 1
  • 18
  • 23