ionic 5 push notifications One signal ITMS-90683: Missing Purpose String in Info.plist - ionic-framework

He tried to follow the docs, but I don´t know that I have done.
Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain an 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.

According to the Apple Developer Guidelines, the generated Info.plist file should contain a proper message for the user that tells why your app needs the data.
In your config.xml file, add the following lines outside of tag
<edit-config file="*-Info.plist" mode="merge" target="NSLocationAlwaysUsageDescription">
<string>Need location access to find things nearby</string>
</edit-config>

Related

I am getting Missing Purpose String but i have added that in info.plist The Missing Purpose String is "NSNearbyInteractionAllowOnceUsageDescription"

The Error I am getting on email from Apple App Store while I am publishing my app to Apple App Store Testflight from my mac , although I am unable to see my build on testflight forum.And the email from Apple App Store is as under.
Dear Developer,
We identified one or more issues with a recent delivery for your app, "IDTAG Nearby Interaction" 1.0 (1.0). 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 NSNearbyInteractionAllowOnceUsageDescription 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).
I have already the below strings into my Info.plist
<key>Privacy - Nearby Interaction Allow Once Usage Description</key>
<string>Nearby Interaction app uses our u1 chip for better experience to show other peers location.</string>
<key>Privacy - Nearby Interaction Usage Description</key>
<string>Nearby Interaction app uses our u1 chip for better experience to show other peers location.</string>
According to Apple Documentation
( Nearby Interaction Allow Once Usage Description ) will be deprecated in iOS 15. That's why I have already added ( Privacy - Nearby Interaction Usage Description ) in my project but still I am having the above mentioned issue in my project by Apple store.

Do I need to set metadata in app when publish app to app store

I'am in phase of setting my app for my first app submit to app store.
I saw this:
Before you submit your application, it is a good idea to have your
application’s metadata at hand. This includes (1) your application’s
name, (2) the version number, (3) the primary (and an optional
secondary) category, (4) a concise description, (5) keywords, and (6)
a support URL.
My question is do I need to set this metadata somewhere in my xcode project and where?
Well the Meta data is all the data including (1) your application’s name, (2) the version number, (3) the primary (and an optional secondary) category, (4) a concise description, (5) keywords, and (6) a support URL etc which you should know for uploading an app to the Apple Store. You will have to use this information while uploading.
Supplying information to the App store can be done once you have collected all the data.
I think you should go through this tutorial on how to submit an App to the Apple store.
EDIT :
The Metadata has nothing to do with the xcode project or the .plist file whatsoever. You DONT have to do anything with it. This information you have to enter in the website of the Apple store when they ask for it .

How do iOS processes get their name?

Is there a default way iOS names
Them? I'm trying to find some sort of pattern to link them to an app name/bundleID so I can retrieve that apps information from the App Store search API. From what I've seen many apps process names are simply their name (eg Dropbox, Skype) but I figure someone has a better idea
In the Info.plist of the App, the relevant key-pair name is CFBundleExecutable.
The default value is set to the Xcode project name (naturally, eg "Dropbox", "Skype", etc). Look at any app's Info.plist via Xcode or by opening up a packaged app.
Documentation for ${EXECUTABLE_NAME}: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html#//apple_ref/doc/uid/TP40003931-CH3-SW71
Source: I built iHasApp, an app-detection framework, so I spent a lot of time looking into what you're interesting in doing.

Mac app store helper tool Sandboxing

My app consist of two executables
the main app executable
small console app to process some files, this executable is on Resources folder (no root privileges required)
The thing is that I don't know how to submit this app to appstore, I get the following response from apple
Invalid Signature - the main app bundle appname at path appname.app is signed but the signature is invalid. The following error(s) were reported from codesign:
a sealed resource is missing or invalid
In architecture: i386
If I remove helper app, it bypasses this error, but app won't work at all. Anyone knows a good way or example on how to embed a helper app and sign it corectly to appstore??
Apple docs are not clear on this.
You need to sign both main app and helper console tool
Signing .app is documented so I describe you how to codesign the helper.
Create by hand an entitlements file and add it to helper project (you can copy the one from main app and removing not necessary entitlements keys)
Create an Info.plist as documented at Adding an Info.plist to Single-File Tools (this step should be not mandatory but if you find the helper crash try to add it)
If main app launches the helper tool you should need to add
com.apple.security.inherit
this is described in Enabling App Sandbox Inheritance
If main app interacts with helper in some other manner maybe you need XPC communication or if you are lucky it will be sufficient to use App Group
Something like
<key>com.apple.security.application-groups</key>
<array>
<string>$(TeamIdentifierPrefix)my.package</string>
</array>
Take a look at AppSandboxLoginItemXPCDemo
From my experience TeamIdentifierPrefix must be empty on development environment and set to your team id when you submit to MAS, please handle with care my considerations on TeamIdentifierPrefix (i.e. try yourself)

How to use another app's settings

What code could I use in an iPhone app to get and set the settings of another app I wrote? (preferably using NSUserDefaults)
You're not going to be able to pull this off with NSUserDefaults.
The Keychain, while somewhat cumbersome in its C-ness and much more limited than the NSUserDefaults API, might allow you to accomplish this. If you can serialize whatever you need to share between your apps into a few strings, it might be worth trying.
From iPhone OS 3.x Release Notes:
It is now possible for you to share Keychain items among multiple applications you create. Sharing items makes it easier for applications in the same suite to interoperate more smoothly. For example, you could use this feature to share user passwords or other elements that might otherwise require you to prompt the user from each application separately.
Sharing Keychain items involves setting up the proper entitlements in your application binaries. Using Xcode, you must create an Entitlements property list file that includes the supported entitlements for your application. The process for creating this file is described in iPhone Development Guide. For information about the entitlements you can configure, see the description for the SecItemAdd function in Keychain Services Reference.
Accessing shared items at runtime involves using the Keychain Services programming interface with the access groups you set up during development. For information about how to access the Keychain, see Keychain Services Programming Guide.
Here's Buzz Anderson's Simple iPhone Keychain Code. You could use it to store key/value pairs as strings in the keychain. It's not much, but perhaps better than nothing. See Apple's Keychain Programming Guide for more.
You simply cannot do that. Each application is installed into its own folder and is given its own, unique user id. The file containing these settings is in the other application's folder and its permissions are set to that of the other application. The only way to access the data is to use the same application identifier as the other application, in which case installing your application would overwrite the old application.
EDIT:
This solution was given when the question was asking to do this using NSUserDefaults, specifically. For the updated question, the keychain approach or the server approach provided are both reasonable.
You can have one app send the data to your server, then the other app can get the data from your server.
You can't do this using NSUserDefaults but it can be done.
You could use a shared clipboard. It wouldn't be secure, but both apps could read and write from the same clipboard. You just need to create an application specific UIPasteboard. Check out the UIPasteboard class reference on Apple's developer site for more info.
--Mike
You should definitely have a look at UIPasteboard, as suggested – you can create a new pasteboard for use by the applications you are creating (though nothing will stop other apps using them, but people are faily unlikely to). A UIPasteboard is persistent through a power cycle / reboot – it will exist until the creating application is deleted.
You could also have a look at the SwapKit libary (which looks very cool):
http://infinite-labs.net/swapkit/