Skip to main content
gameduchy
Participant
March 31, 2018
Question

IOS is blocking AIR, rejected for months,due to AIR has API using IOPSCopyPowerSourcesInfo

  • March 31, 2018
  • 41 replies
  • 30556 views

Our mobile game uses FLash, and AIR 29 to make it work on IOS devices,

However, we can't upgrade our game since half year ago, and Apple review team finally told us the reason:

REJECTED:

Thanks for your resubmission.

Guideline 2.5.1 - Performance - Software Requirements

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

_IOPSCopyPowerSourcesInfo, _IOPSCopyPowerSourcesList, _IOPSGetPowerSourceDescription

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.

Continuing to use or conceal non-public APIs in future submissions of this app may result in the termination of your Apple Developer account, as well as removal of all associated apps from the App Store.

Next Steps

If you are using third-party libraries, please update to the most recent version of those libraries. If you do not have access to the libraries' source, you may be able to search the compiled binary using the "strings" or "otool" command line tools. The "strings" tool can output a list of the methods that the library calls and "otool -ov" will output the Objective-C class structures and their defined methods. These tools can help you narrow down where the problematic code resides. You could also use the "nm" tool to verify if any third-party libraries are calling these APIs.

Resources

For information on the "nm" tool, please review the "nm tool" Xcode manual page.

If there are no alternatives for providing the functionality your app requires, you can file an enhancement request.

Then we found it's in AIR sdk, even 29.

Then we replied:

The earlier letter said our app has the following non-public APIs:

"_IOPSCopyPowerSourcesInfo", "_IOPSCopyPowerSourcesList" and "_IOPSGetPowerSourceDescription".

We checked the ipa file with the tools you suggested.

"nm" and "oTool" found none.

The tool "strings" only found "IOPSCopyPowerSourcesInfo", "IOPSCopyPowerSourcesList" and "IOPSGetPowerSourceDescription" (non-underlined) referenced.

After searched the non-underlined version from the apple develop center, we thought they are public APIs.

However, we never called them.

These were found in the popular SDK Adobe AIR, and were alone there for years.

We haven't got any alternatives beyond Adobe AIR.

This topic has been closed for replies.

41 replies

Known Participant
April 27, 2018

Hi,

We're having the same issue. We're trying to upload a new version with AIR 29, but we need to test it before using adhoc compilation and it doesn't work. We have our customers waiting too. We need to test it carefully because we were using AIR 19 until now, because we had problems with StageWebView and new versions of AIR. So we need to test if StageWebView is fixed and for that we need adhoc compilation before we try to upload our app to the App Store.

Thank you for your efforts, Adobe Team. But we need you.

Best.

Participating Frequently
April 27, 2018

Not being able to do ad-hoc testing sucks, but testflight is a possibility?

Participating Frequently
April 26, 2018

Adobe team,

Can you update us on the status?

I have customers waiting...

andrey_b
Participant
April 25, 2018

Hello,

I have the same issue. Build app with Air sdk 29.0.0.122 and can't install it to test, i'm getting error ApplicationVerificationFailed.

How are you testing it if ad-hock doesn't work?

Flipline
Inspiring
April 25, 2018

I've just kept a version of .112 for building adhoc alongside the newer .122 version for appstore builds.  You can use a development profile and build instead of adhoc for testing, but I've always found there's a wild difference in performance between a development build and an adhoc build (at least for GPU apps, no idea for direct).  Since the adhoc performs the same as an appstore build it's usually the best option for us for fine-tuning performance on devices.

Participant
April 23, 2018

Hello,

My Air26 app has been rejected too, i have prepared a new one with the fixed Air sdk 29.0.0.122 and after checked files  'IOPSCopyPowerSourcesList' 'IOPSCopyPowerSourcesInfo' 'IOPSGetPowerSourceDescription' strings are correctly disapeared.

I just wait Apple validation now..

Thanks Adobe for your reactivity.

Participating Frequently
April 23, 2018

We got approved. Thanks Air Team!

Participating Frequently
April 23, 2018

We have passed Apple review with Air 29.0.0.122.

The distribution version (adhoc, distribution) could not be installed and tested on the device, but distribution version has been registered and passed Apple review.

Is not it possible to unpack the ipa file and check info.plist for the Air version used in the package?

Below is the information below.

<key> CTAirSdkVersion </key>

<string> 29.0.0.122 </string>

If you package it as version 112, it changes as follows.

<key> CTAirSdkVersion </key>

<string> 29.0.0.112 </string>

Known Participant
April 21, 2018

Accepted! Done!)

jprankard
Participating Frequently
April 20, 2018

niestudio​ I don't think Adobe will look into your issue until it's proven it's the right version as there is only 1 case of this failing.

Please can you check your strings file for the full adobe version number and post the results in this thread.

strings MyApp.app/MyApp | grep 29.0.0

You should get the build number either 29.0.0.112 or 29.0.0.122, FYI I also get IOS 29,0,0,113 in both versions too

Inspiring
April 20, 2018

I think the best command to check the build of AIR 29 would be:

strings MyApp.app/MyApp | grep -F 29.0.0

That way you only get strings with dot, not comma.

jprankard
Participating Frequently
April 20, 2018

OMA2kTo see if you have the private APIs in your compiled binary you can check it this way:

Generate .IPA

Change .IPA to .zip

Extract this zip

Then on a mac use the strings tool:

Either dump the file and search:
strings Payload/MyApp.app/MyApp > strings.txt

Then open strings.txt and search for 'PowerSources'

Or use grep to check the output, if it prints out the methods in the front page it has the private APIs in:

strings SJP_Pensions.app/SJP_Pensions | grep PowerSources

I've just ran this test as I was curious if Apple were checking this correctly. They are. The submission that failed had 'IOPSCopyPowerSourcesList/IOPSCopyPowerSourcesInfo' inside my .app, and those that passed didn't have references to these strings.

Inspiring
April 20, 2018

Hello. I've checked my approved IPA using the instructions you provided and I have NOT found any "PowerSources" string inside the "strings.txt" file created using the "strings" tool ("strings Payload/Xxxxxxx.app/Xxxxxxx >strings.txt").

niestudio : Are you sure you're using the correct version of AIR? (remember not all versions of AIR 29 contain the fix, it has to be AIR 29 Build 122). The text you underline in red in your screenshot just says "29.0" but it doesn't specify which build. Please check the settings in your IDE (Flash Builder, apparently) and make sure to use AIR 29 Build 122, currently publicly available: Download Adobe AIR SDK

Participant
April 20, 2018

We are also developer of adobe air apps for ios store and now we are confused , should we use this latest fixed Air 29.122 sdk or not for final release, I saw some people mentioning accepted and recent post says rejected

Since we had already tried 2 times, now the message says we will terminate your account etc.. and not sure we should take a risk

Can someone please help post exact instructions using FB for whom this was accepted

Mainly i am looking any changes to app-descriptor.xml, any compile time settings, sdk versions etc..

Thanks in advance and looking eagerly to Adobe to come-out with final solution quickly

-Amit