Steps to have a framework approved by Apple - ios

Say I have created a framework and want to publish it to github. In what circumstances will this framework be rejected by Apple / won't be allowed to publish to github...? Also, when will my framework be accepted by Apple..? Or is there any step as such at all...?
I have referred this (https://www.raywenderlich.com/5109-creating-a-framework-for-ios) link and this (Steps in creating custom frameworks) also. Though the first one showed how to make a framework it didn't tell when a framework will be accepted or rejected. The second one also didn't help...

Apple doesn't approve or reject frameworks. You can publish anything you want on GitHub.
Apple reviews apps. People can use your framework in their apps if they like. If your framework does something wrong (say, uses private API) then those people may get their app rejected.

Frameworks are not published on App Store. So there is no point on its rejection.
Its Apps which can get rejected because of some framework. And people will stop using your framework, if apple rejects app because of something wrong in it.

Related

IOS application got rejected for App Store Review Guideline 2.5.1

 We have just got a rejection on an AppStore application commiting.
 Here is the message that Apple gave:
 Apple said we use NEVPNManager in an unapproved manner. but I am sure that
our code do not use any function of NEVPNManager. Then, I thought that must
be some 3rd party SDK use NEVPNManager, However, after checking our project
setting, I am sure we don't link "NetworkExtension.framework" and don't open
"NetExtension" capabitity, so there is no way to use NEVPNManager.
 I am very confused about this, so I want to get some advice about this problem.
appstore-guidelines-software-requirements
networkextension-nevpnmanager

App is rejected using non-public API LSApplicationWorkspace

My iOS App is rejected from Apple Store review with the following issue:
Your app uses or references the following non-public APIs:
LSApplicationWorkspace, defaultWorkspace
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.
But I can find any code about these APIs. Anyone know which part will contain these APIs ?
My blindfold shot in the dark (edit: not sure why it matters that it's dark if I'm blindfold): Make sure that if you have any testing related pods or libraries, that they are not included in the target you use for deployment. Calabash for example probably does make use of private APIs to get work done that'd not be possible otherwise, but it's not meant to be on the app you release.
We experienced the same error. Calabash is referencing LSApplicationWorkspace. After excluding references to Calabash for release builds, the app was not rejected from review any longer.

iTunesConnect app has one or more issues - Non-public API usage

I received the below email shortly after I submit my app to the AppStore from XCode Organizer. My app contains the framework in this GitHub (https://github.com/wujianguo/iOSAppsInfo), I use it to create shortcuts to the rest of the users installed applications, and ONLY for that purpose.
Is there a different way of getting a list of all installed apps so I can create shortcuts or will all methods be instantly rejected as below?
Dear developer,
We have discovered one or more issues with your recent delivery "shortcut-app". To process your delivery, the following issues must be corrected:
Non-public API usage:
The app references non-public selectors in Xxxx xxxx: _applicationIconImageForBundleIdentifier:format:scale:, allInstalledApplications, appTags, applicationProxyForIdentifier:, localizedShortName, openApplicationWithBundleID:
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.
If you think this message was sent in error and that you have only used Apple-published APIs in accordance with the guidelines, send the app's nine-digit Apple ID, along with detailed information about why you believe the above APIs were incorrectly flagged, to appreview#apple.com. For further information, visit the Technical Support Information page.
Once these issues have been corrected, you can then redeliver the corrected binary.
Regards,
The App Store team
This library uses private API which you cannot use especially when you submit the app to apple, as they will reject it like this.
I am not aware of another way to get installed apps, but in order for apple to accept uploading the app, you must stop using this library, specially this method.

When publishing an Apple app, can a third party get access before published?

I am publishing my first iOS app to the App Store. However, the company that hired us wants to see the app work before we publish. Is there a way under the $99 developers plan to allow them to see the app work on a real iPhone?
For completeness there is another way. Although I've used TestFlight very happily for years, it can prove to be too complicated for some testers!
If your app has been approved by Apple (but you've set release date in the future), you can give people promo codes (which you can get from iTunesConnect) and they can download the unreleased app. This is great for getting your app to reviewers.
From iOS Developer Library:
Promo codes apply to a specific app version, so when users redeem
promo codes for a version of an app that hasn't been released yet,
they download the prerelease version.
https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/ProvidingPromoCodes.html
Obviously in your case, you probably want to get your client's approval before even submitting to Apple, therefore #Anil's answer is better for you.
This is possible through multiple platforms.
iOS 8
As mentioned above, refer to the following link:
http://blog.thebetafamily.com/2014/09/10/testflight-beta-testing-ios-8/
iOS 7 and below
Test Flight - https://www.testflightapp.com (Acquired by Apple and available on iOS8 as described above)
Hockey App - http://hockeyapp.net
Test Flight is free and simple to use. All you need to do is upload the certificate and it'll take care of the rest. Test Flight used to support other OS like Android. But after the acquisition, I think it only supports iOS.
Hockey App is also simple. But only supports certain numbers of builds or projects for the free version. Hockey App provides direct update during the app launch if a new build has been uploaded.

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