I have a problem with a flutter app, whenever I call GCKCastContext.sharedInstance().presentCastDialog() the cast device popup shows, it says to check settings to make sure that Local Network Access is on, but there is no popup to request NSLocalNetworkUsageDescription permission from the user and never appears.
I am using 'google-cast-sdk', '~> 4.7.0'
I've already added com.apple.developer.networking.wifi-info to the Entitlements.
Also added the necesary fields into Info.plist
<key>NSBonjourServices</key>
<array>
<string>_googlecast._tcp</string>
<string>_CC1AD845._googlecast._tcp</string>
</array>
<key>NSLocalNetworkUsageDescription</key>
<string>App uses the local network to discover Cast-enabled devices on your WiFi network.</string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>App uses Bluetooth to discover nearby Cast devices.</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>App uses Bluetooth to discover nearby Cast devices.</string>
<key>NSMicrophoneUsageDescription</key>
<string>App uses microphone access to listen for ultrasonic tokens when pairing with nearby Cast devices.</string>
I am using CC1AD845 for NSBonjourServices because that's the Default Media Receiver Application ID.
It is a bit strange because the NSBluetoothAlwaysUsageDescription popup shows and that NSLocalNetworkUsageDescription doesn't show in settings and at all in the app.
Does anyone have any tips what I should do next in order for the NSLocalNetworkUsageDescription request dialog to appear?
I have added the following code in the Info.plist
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAppleMusicUsageDescription</key>
<string>Play using while you are hiking</string>
<key>NSCameraUsageDescription</key>
<string>Please Allow the app to access the device camera</string>
<key>NSMicrophoneUsageDescription</key>
<string>Please Allow the app to access the device microphone</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Privacy - Please Allow the app to handle your photos</string>
</dict>
I am creating the archive in Xcode and re distributing and still getting the error Missing Purpose String in Info.plist"
As on Apple documentation for NSAllowsArbitraryLoads
Important
You must supply a justification during App Store review if you set the key’s value to YES, as described in Provide Justification for Exceptions. Use this key with caution because it significantly reduces the security of your app. In most cases, it’s better to upgrade your servers to meet the requirements imposed by ATS, or at least to use a narrower exception.
I am trying to upload a new version of our app on the App Store Connect. In our old version we are already using push notification and hence, the certificate for Apple Push Services is already active and added in the Apple Developer Portal (as shown in the screenshot below). When we uploaded our previous version of the app to App Store Connect, there was no issue. However, now when I am trying to upload our new version of the app to App Store Connect using Xcode, there is no error shown in the Xcode side and uploading is successful (as shown in the screenshot below).
When I go back to the App Store Connect to check my uploaded build version so that I can submit it for review, it is saying that the build is being processed (as shown in the screenshot below). After sometime I receive an email from the App Store Connect mentioning that our build version has the following issues (detailed email is provided at the end of this question):
ITMS-90683: Missing Purpose String in Info.plist
ITMS-90078: Missing Push Notification Entitlement
For our app's latest build version it is mentioned that ITMS-90683 error for Info.plist (shown below) is missing description for NSContactsUsageDescription, NSCalendarsUsageDescription, NSAppleMusicUsageDescription, NSMotionUsageDescription, NSSpeechRecognitionUsageDescription, NSLocationAlwaysUsageDescription & NSLocationWhenInUseUsageDescription. However, in our app, which is built with Flutter framework, we are not using any of these permissions specifically.
My Questions are as follows:
How can I fix the ITMS-90683 error when I am not using any of these
permissions explicitly in our app such that the build version can be
uploaded for review successfully?
Since, the Apple Push Services' certificate is already added to Apple Developer portal how can I fix the ITMS-90078 and submit the app for review?
Info.plist content:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>AppName</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSCameraUsageDescription</key>
<string>Need to upload image</string>
<key>NSMicrophoneUsageDescription</key>
<string>Need to upload image</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Need to upload image</string>
<key>UILaunchStoryboardName</key>
<string>Launch Screen2</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
</dict>
</plist>
Any help is much appreciated. Thank you in advance!
Screenshot of "Signing & Capabilities" of my project:
Screenshot of successful upload of the build version from Xcode:
Screenshot of the App Store Connect where the new build version is being processed:
Screenshot of Apple Developer Portal with Apple Push Services Certificate enabled, which is used by previous version fo the app:
Email from App Store Connect regarding the error:
Dear Developer,
We identified one or more issues with a recent delivery for your app,
[APP NAME] 2.0.1 (4). 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 NSContactsUsageDescription 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).
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 NSCalendarsUsageDescription 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).
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 NSAppleMusicUsageDescription 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).
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 NSMotionUsageDescription 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).
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 NSSpeechRecognitionUsageDescription
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).
Though you are not required to fix the following issues, we wanted to
make you aware of them:
ITMS-90078: Missing Push Notification Entitlement - Your app appears
to register with the Apple Push Notification service, but the app
signature's entitlements do not include the "aps-environment"
entitlement. If your app uses the Apple Push Notification service,
make sure your App ID is enabled for Push Notification in the
Provisioning Portal, and resubmit after signing your app with a
Distribution provisioning profile that includes the "aps-environment"
entitlement. Xcode does not automatically copy the aps-environment
entitlement from provisioning profiles at build time. This behavior is
intentional. To use this entitlement, either enable Push Notifications
in the project editor's Capabilities pane, or manually add the
entitlement to your entitlements file. For more information, see
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#//apple_ref/doc/uid/TP40008194-CH6-SW1.
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 NSLocationAlwaysUsageDescription 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).
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 NSLocationWhenInUseUsageDescription
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
How can I fix the ITMS-90683 error when I am not using any of these permissions explicitly in our app such that the build version can be uploaded for review successfully?
This part of app review doesn't care if you're actually using these features. All they check is whether the app has code to do so (which yours obviously does) and comes with the required purpose strings. To solve this, you basically have two options:
figure out which pieces of code/library/whatever you have in your app that brings this baggage along, and get rid of it, or
live with the baggage and provide the required purpose strings.
Since, the Apple Push Services' certificate is already added to Apple Developer portal how can I fix the ITMS-90078 and submit the app for review?
The problem is not with the certificate, but with the app's entitlement, which you're not showing. Make you you have the push notification entitlement enabled in your app.
I try to use cordova Background Geolocation to send my position to a server in background. But when i put my app in background after some time it stop working. So I tried BackgroundFetch service https://github.com/christocracy/cordova-plugin-background-fetch but doesn't work: the error is:
You've implemented -[<UIApplicationDelegate> application:performFetchWithCompletionHandler:], but you still need to add "fetch" to the list of your supported UIBackgroundModes in your Info.plist.
how can i add fetch to the list of your supported UIBackgroundModes in my Info.plist?
Just do it as it is. Find the Info.plist in your project and add a pair of key/value like this,
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
</array>
Once you did it, rebuild it and the warning will disappear.
I'm using an app called "Stickam", which is live audio/video recording and upload over 3G. The app is perfect for my purpose except for lacking LED torch (flashlight) mode. I have a tweak installed which allows me to toggle on torch via settings and leave it on while I use other apps (i.e., Safari, Appstore) but when I start a Stickam broadcast, the torch turns off.
I'm using a file browser on the iPhone with basic text editing and file manipulation ability to examine the iOS file structure and the apps. I don't want to edit Stickam, just override it's setting by pasting in Stickam's
var/mobile/Applications/FA037A73-C483-43D6-8AE8-7E69CD57EBDD/Library/Preferences/.GlobalPreferences.plist, a reference to torch's location and trigger.
Similar to:
<dict>
<key>cell</key>
<string>PSSwitchCell</string>
<key>default</key>
<false/>
<key>alternateColors</key>
<true/>
<key>defaults</key>
<string>com.ravirajm.torch</string>
<key>key</key>
<string>torchenabled</string>
<key>label</key>
<string>Enable Torch</string>
<key>PostNotification</key>
<string>com.ravirajm.torch/prefs</string>
</dict>
Doesn't seem like it would work. What ideas do you have on how to do this?
You can't modify another developer's app bundle at all unless the device is jailbroken.