after successfully uploading my app to appstore connect, i get this email from apple:
Dear Developer,
We identified one or more issues with a recent delivery for your app,
"Tamata" 2.0.0 (8). Please correct the following issues, then upload
again.
ITMS-90683: Missing Purpose String in Info.plist - Your app's code
references one or more APIs that access sensitive user data. The app's
Info.plist file should contain a NSPhotoLibraryUsageDescription key
with a user-facing purpose string explaining clearly and completely
why your app needs the data. Starting Spring 2019, all apps submitted
to the App Store that access user data are required to include a
purpose string. If you're using external libraries or SDKs, they may
reference APIs that require a purpose string. While your app might not
use these APIs, a purpose string is still required. You can contact
the developer of the library or SDK and request they release a version
of their code that doesn't contain the APIs. Learn more
(https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
Best regards,
The App Store Team
i am not collecting any user data related to pictures/images, heres my info.plist:
whats the problem?
Probably one of the third-party library, that you have in you dependencies, has code that can fire request for photos. There are two ways to handle that:
Put NSPhotoLibraryUsageDescription to your info.plist, and have hope that some library not fire request for gallery. User won't see permission dialog, until request for photos wouldn't fire.
Find this library and change it for another lib, that doesn't have request for photos. To find out what lib can fire request, search phrase Gallery or Photo on every lib in .pub-cache directory and try to localize request for that permission. In AndroidStudio, on the Project view, you can navigate all libs in External Libraries tabs and perform search by ctrl+shift+F.
Related
I have a REST api that list me all files in a bucket. I show this list in a webview on a ios device.
It's not possible to make this file public.
So to my question, how can i access the files in my ios app?
My idea is, i create a read stream in my api that open a read stream to the file in the gcloud bucket.
Is there a better way to do this?
The canonical way to expose a private file is to used signed URLs. Basically, your iOS app would request access to a file from your app. If your app decides to grant this access, it generates a URL, signs it with a private key, and then provides that signed URL to the iOS app. The app then fetches the URL provided like any other URL, the body of which will be the object's contents.
Signed URLs have some nice security advantages. They can only be used for exactly one thing, and they're only valid for a few minutes (you can configure exactly how long they're valid).
The signing logic is a little tricky, but the gcloud libraries have functions to sign URLs for you.
Documentation is here: https://cloud.google.com/storage/docs/access-control/signed-urls
I'd like to drive more downloads and engagement using Twitter. Right now I can have people post install links but it just takes them to the app store and I lost all the contextual data about them. Anyone know how to send the tweet information and deeplink data from twitter through the app store into the app?
Austin from Branch here. The technology you're referring to is Contextual Deeplinking, and Branch is a leader in the space.
You can use Branch to create deeplinks that work through install by dropping in the SDK inside your app and then signing up and putting in some credentials on the dashboard.
The iOS and Android SDKs allow users to share deeplinks over Twitter that will retain context through install, so people clicking on those links who don’t already have your app installed will be prompted to download, and then continue to the original link content in your app after the download finishes. The tech works by embedding params in a simple data dictionary behind a short URL, dropping this as a cookie on the BNC servers, then using some clever matching, they fingerprint and find the right user to pull down this data from within the app (hence the need for their SDK inside the app).
This should help improve engagement with new users. And Branch provides tracking for the clicks/installs coming from those tweeted links (and from all other links created with our SDK), so you’ll know exactly where your new users are coming from.
More details: https://dev.branch.io
Since opening Settings.app with a prefs:// URL no longer works in iOS 5.1+, I'm wondering if I can launch Settings using private APIs?
NOTE: Not for the app store.
Using Private APIs
GitHub Project iOS-Runtime-Headers
Here are iOS Objective-C headers as derived from runtime introspection.
The headers were generated using RuntimeBrowser for iPhone.
Of specific interest to the Settings app, take a look at the Preferences.Framework.
I've never worked with this directly, but there seems to be other SO questions on the topic:
iOS Private API Documentation
Does anybody know how I can find the the headers for IOS5 Iphones/ipod. Jailbreak development
Get a screenshot while App is in background? (Private APIs allowed)
More...
Using URLs
According to this answer on SO, it is no longer possible to manually launch the Settings app using URLs.
Asked Apple through my developer account if there is a way to programmatically launch the WiFi Settings dialog. Here is the response:
"Our engineers have reviewed your request and have concluded that there is no supported way to achieve the desired functionality given the currently shipping system configurations."
If, however, you are using the native Twitter or Facebook SDK, then a dialog will appear asking the user to login if they are not. More information from this SO question, with example image below.
I don't have a particular answer. However, I would build on previous answer about Facebook or Twitter. I think, it make sense to disassemble Twitter or Social framework and find where this dialog is shown. If you will find this place, you can check the code behind "Settings" button.
There should be some API which switches to Preferences. However, it could be that code which does it lives in some service component which has entitlement, which you won't be able to get.
I'd like to be able to send invitation in an email to a specific "event" happening inside my iOS app. So I figured I'd need to use custom URL. That's fine.
But I'd also like to be able to handle the user that doesn't have the app installed yet, to be taken to a mobile Safari and to the webpage with installation instructions for the app.
What would be the best way to do it?
I could try the following:
In the email I send a link to a http://www.example.com/joinevent/?id=foo
User is taken to a Safari webpage that sends a redirect to mycustomscheme://joinevent/?id=foo
If the user doesn't have the app installed this redirection won't work and he stays in the Safari - I could then handle the displaying of installation instructions probably.
But this approach doesn't seem "natural" for me. Is there a better/more native way to do it?
Try http://rdrct.it
It is a web service that allows you to achieve exactly this functionality very easily.
Full disclosure - I created rdrct.it
Here's the basics:
Login to the site, create a project for your particular app. Choose a unique code (this could be the name of your app).
You'll then be provided with a URL in the form: http://rdrct.it/uniqueCode
Once you've done that, you need to register the app's ID in the app store, and also details about the custom URL scheme. Tick "Auto-redirect" - what it will then do is try to open the app, and if that fails, it will automatically send the user to the app store.
If the app is opened, then the querystring is also passed to the app, so in your example case, the device will have been served: mycustomscheme://joinevent/?id=foo
It also works across multiple device types, so if you have the app available for Blackberry, Android or Windows Phone, then it will also do the same for those depending on which device type the user is using.
Like I said, I created it, but it should solve your problem.
If you are using Distimo to track you app analytics, they provide a shortlink to your apps that can be used also used to track conversions. It shows a custom page depending on the device used to access. This is especially convenient if you have the same app published in the AppStore, Google Play, Amazon, etc.
I'm trying to prompt the user (once, I record it) to upgrade the iphone app if it is out of date. I've found a few sites that explain how to get the link to your app in the app store once it is already there. Here's one for example.
The problem is, all these guides require the app to be in the store before you can get the ID to link to it. This is a new app. Is it impossible to figure out what your app ID (and link) will be before submitting your code? Therefor it is impossible for your first version to have an upgrade link embedded?
You can link to http://itunes.com/app/App_Name, if your app's name is unique.
Your other option would be to fetch the update notice with an HTTP request instead of building the wording into the app. That'd let you present any message with wording you could determine on your web server, not in the code itself.