iTunesConnect Export compliance questions - Does my ios application contain encryption? - ios

I am about to submit my first iOS application to the AppStore and I am faced with several questions about export compliance.
There are two points that made me wonder whether my application contains encryption or not?
I am using AdMob for advertising (banners etc.)
I ask users to rate my app. If they say OK, then I use this code;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:kAppStoreAddress]];
I am confused what to answer on export compliance questions...

Related

How to remove the HomeKit API from within your binary

I received this rejection message from apple in the resolution center:
Guideline 2.5.1 - Performance - Software Requirements
Your app uses public APIs in an unapproved manner, which does not comply with guideline 2.5.1 of the App Store Review Guidelines.
Specifically, it would be appropriate to remove the HomeKit API from within your binary and resubmit your application for review.
Since there is no accurate way of predicting how an API may be modified and what effects those modifications may have, Apple does not permit unapproved uses of public APIs in App Store apps.
the app code I'm using is open sourced
https://github.com/SuperMarcus/NineAnimator
I need help on how to remove the HomeKit API from within the binary.
First remove it from the Signing and Capabilities:
Then try to run your code again.
If you where using a HomeKit API anywhere in code, Xcode will show you where it is.

Open Settings Programmatically iOS 10

I am able to open Settings > iCloud using following method,
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:#"App-Prefs:root=CASTLE"]];
Question: Is this legal? Will Apple reject the application? Because I cannot find any legitimate source for this method to open iCloud Settings.
Apple has stopped allowing redirection to the public schema like Prefs so from now on the application will not be able to redirect to the settings other than the self-settings.
See the link for more detail
It is not supported officially and you can follow along this SO Thread
and this answer in particular. Hope it clear out the issue. The settings would open but as it is not officially supported there may a rejection due to this issue.
Based on experience, Apple will decline reviewing your app in case you use ":root=" non-public url Scheme
Apple Review Team Message:
Your app uses the "prefs:root=" non-public URL scheme, which is a private entity. 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.

is it possible to list out all the applications that are installed in the iPhone device in a tableview with icon?

I want to collect the applications which are installed in the device and i want to list that with icons of applications.
Apple's provacy concerns have always extended to an app querying what other apps are on the devices, but as of iOS 9 Apple have removed the ability to do so unless explicitly declared.
In the past a developer could use the method - canOpenURL: defined on UIApplication and passed in a URL known to be handled by another app to see if the user had that app on their phone. Whilst this would not be viable for getting a comprehensive list of the apps on a user's phone, it would serve to know if specific apps were there.
iOS 9 introduced the concept of whitelisting URL schemes, meaning that if you were going to query this you would have to explicitly state it in the .plist.
For a guide on how this works I recommend this article: http://www.dysonapps.com/blog/2015/9/13/developing-for-ios-9-canopenurl
The short answer is no, you cannot get a list of the other apps on a device.

inapp purchase inside extensions in iOS 8

Would it be possible to add inapp purchase inside extensions in iOS 8?
For example, a custom keyboard may have free and pro versions based on inapp purchase.
Thanks a lot in advance.
The custom keyboard requires a container app anyhow, it would probably be a good idea to do it there. You could likely have UI on your keyboard interface to link to the app via openURL: directing users on how to purchase the "Pro" version. With that said, you can tell which APIs are not accessible if they are annotated with the NS_EXTENSION_UNAVAILABLE_IOS macro. You can see this on [UIApplication sharedApplication] as an example. If none of the StoreKit APIs you need to perform the purchase are marked as unavailable, it's likely that you'll be able to get it done within the extension.

Does this app use the Advertising Identifier (IDFA)? - AdMob 6.8.0

I'm currently uploading my App to the App Store and Apple is asking me if this app users IDFA. I'm using the latest Admob SDK or 6.8.0 and I don't know if it uses IDFA or not, and if it does which check boxes should I hit X.X
Image http://i.gyazo.com/a7d36f95ac0cc066e5654517d4ec2f3f.png
I'm having the same issue here and I was a bit afraid of checking the last box, since I have no idea what the 3rd party SDK will do with the data collected and if they will respect the Limit Ad Settings.
But I found a post by a Google Admob programmer, Eric Leichtenschlag, on their forums:
The Google Mobile Ads SDK and the Google Conversion Tracking SDK utilize Apple's advertising identifier introduced in iOS 6 (IDFA). While each developer is responsible for how they access device data, the SDKs use IDFA under the guidelines laid out in the iOS developer program license agreement, including Limit Ad Tracking.
Including Limit Ad Tracking. This is what the last box is all about. So you must check the that box if you use AdMob. If you use other SDK I strongly recommend checking if they respect the guidelines as well.
Since I run only ads (Google AdMob), I checked the first (Serve ads...) and last box (I, ___, confirm...). App was approved and released, no issues.
Source: https://groups.google.com/forum/#!topic/google-admob-ads-sdk/BsGRSZ-gLmk
If you are lazy to check on each third party SDK if they use or not the IDFA you can use this command:
fgrep -R advertisingIdentifier . (don't forget the dot at the end of the command)
Go to your project/workspace folder and run the command to find which files are using the advertising identifier.
Then you just have to look in the guidelines of those SDKs to see what you need to do about the IDFA.
I recently submitted an app to Apple's App Store. My app was built using iOS 12, Xcode 10, and Swift 4.2. My app uses Google AdMob for the sole purpose of showing Interstitial Ads. When prompted these question, this is what I did:
1) Does this app use the Advertising Identifier (IDFA)? ANSWER: YES
a) Serve advertisements within the app - CHECKED
b) Attribute this app ... - NOT CHECKED
c) Attribute an action ... - NOT CHECKED
I, (my name), confirm that this app ... - CHECKED
My app was accepted and "Ready for Sale" in less than 24 hrs.
You can track all calls to [ASIdentifierManager advertisingIdentifier] with symbolic breakpoint in Xcode:
Yes, it does. From the AdMob page:
The Mobile Ads SDK for iOS utilizes Apple's advertising identifier (IDFA). The SDK uses IDFA under the guidelines laid out in the iOS developer program license agreement. You must ensure you are in compliance with the iOS developer program license agreement policies governing the use of this identifier.
If you have Google analytics or Facebook api in you app, you need to check all of them to make sure it works!
Edit: This is an old answer - see comments or other answers for an exact answer.
In app store connect now if we are using ads in our app then we will answer as yes to Does this app use the Advertising Identifier (IDFA)?
further 3 questions will be asked as
if your using just admob then check the first one and leave other two unchecked. Other two options (2nd , 3rd ) will be checked if your using app flyer to show ads.
all options are explained with detail here
BTW, Yandex Metrica also uses IDFA.
./Pods/YandexMobileMetrica/libYandexMobileMetrica.a
They say on their GitHub page that
"Starting from version 1.6.0 Yandex AppMetrica became also a tracking instrument and uses Apple idfa to attribute installs. Because of that during submitting your application to the AppStore you will be prompted with three checkboxes to state your intentions for idfa usage. As Yandex AppMetrica uses idfa for attributing app installations you need to select Attribute this app installation to a previously served advertisement."
So, I will try to select this checkbox and send my app without actually no any ads in it.
It seems many indie developers like me are desperately looking for an answer to these questions for years. Strangely, even after 5 years this question was asked, it seems the answer to this question is still not clear.
As far as I can see, there is not any official statement in Google AdMob documentation or website about how a developer can safely answer these questions. It seems developers are left on their own in the mystery about answering some legally binding questions about the SDK.
In their support forums they can advice questioners to reach out to Apple Support:
Hi there,
I believe it would be best for you to reach out to Apple Support for
your concern as it tackles with Apple Submission Guidelines rather
than our SDK.
Regards, Joshua Lagonera Mobile Ads SDK Team
Or they can say that it is out of their scope of support:
Hello Robert,
On this forum, we deal with Mobile Ads SDK related technical concerns
only. We would not be able to address you question as this is out of
scope for our team.
Regards, Deepika Uragayala Mobile Ads SDK Team
The only answer I could find from a "Google person" is about the 4th question. It is not in the AdMob forum but in the "Tag Manager" forum but still related. It is like so:
Hi Jorn,
Apple asks you about your use of IDFA when submitting your application
(https://developer.apple.com/Library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/SubmittingTheApp.html).
For an app that doesn't display advertising, but includes the
AdSupport framework for conversion attribution, you would select the
appropriate checkbox(es). In respect to the Limit Ad Tracking
stipulation, all of GTM's tags that utilize IDFA respect the limit ad
tracking stipulations of the SDK.
Thanks,
Eric Burley Google Tag Manager.
Here is an Internet Archive link in case they remove this page.
Lastly, let me mention about AdMob's only statement I've seen about this issue (here is the Internet Archive link):
The Mobile Ads SDK for iOS utilizes Apple's advertising identifier
(IDFA). The SDK uses IDFA under the guidelines laid out in the iOS
developer program license agreement. You must ensure you are in
compliance with the iOS developer program license agreement policies
governing the use of this identifier.
In conclusion, it seems most developers using AdMob simply checks 1st and 4th checkmarks and submit their apps without being completely sure about what Google exactly does in its SDK and without any official information about it. I wish good luck to us all.

Resources