Based on https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api?language=objc

I don't think there is localization involved. It looks like you supply two pre-defined constants, and whichs refers to an API or a set of APIs and a reason. So you don't describe the reason
yourself.

This will probably make it really easy to manage and merge manually tbh but I do agree that we should avoid using edit/config-file directives to do this. The app's xcprivacy can
probably be easy to built up on prepare.

I like Erisu's idea but I do find it a bit odd to put in in package.json when plugin and app configurations still for the most part lives in plugin.xml/config.xml.

On 2023-10-28 4:44 a.m., Niklas Merz wrote:
I did not dig deep into the documentation and the details about that but
I would like to add two things to consider:

1. Internationalization: Are there any strings that are shown to the
user like "NSLocationAlwaysAndWhenInUseUsageDescription"? For this we
had no simple way to show that in the users language. Looks like there a
predefined types [1] so this should be no issue.

2. The app developer should be able to overwrite the plugins values. If
a plugin defines APIs and purposes the app developer might want to
overwrite the default values because they are using the API for just a
specific purpose or they are using only a subset of the APIs the plugin
implements.

Erisus idea sounds like a good start. edit-config will cause trouble
really quickly I suppose.


[1]
https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests#4250556

On October 28, 2023, Erisu <er...@apache.org> wrote:
IMO, I think we should store the information in "package.json" and
build up the data before injecting into plist.

I personally think we should avoid "edit-config" or "config-file" at
all costs. It has always been error prone and a pain-point for us.

The structure below is just an idea. This structure can be added to
both plugins' and app's "package.json".

==
{
  "cordova": {
  "id": "cordova-plugin-statusbar",
  "platforms": [
  "android",
  "ios"
  ],
  "ios-privacy": {
  "NSPrivacyCollectedDataTypes": ["..."],
  "NSPrivacyAccessedAPITypes": ["..."],
  "NSPrivacyTracking": true
  }
  }
}
==

During the "cordova prepare" step, we would extract all "ios-privacy"
settings.

We would merge together all data sets.

Filter the "NSPrivacyCollectedDataTypes" and
"NSPrivacyAccessedAPITypes" to extract out the unique items.

And if any one plugin or the app has defined "NSPrivacyTracking" as
"true", it remains "true".

The reason we would allow the same structure to be defined in the
app's "package.json" is so that app developers could manually review
and define these values for the plugins that are unmaintained.


On Oct 28, 2023, at 12:15, Darryl Pogue <dvpdin...@gmail.com> wrote:
I looked into this a bit yesterday, and think there are a few ways
we might
be able to handle this (none of them ideal).
For background, Apple is requiring apps to include a xcprivacy plist
file
that has declarations about what privacy-impacting APIs they use
(i.e.,
APIs that could be used for fingerprinting) and what data sharing
and
tracking they do.
For apps that consume 3rd party SDKs, Apple is making it possible
for the
SDK providers to embed their xcprivacy plist as part of a framework
bundle.
Apps that use the framework will inherit the privacy declarations of
their
SDK frameworks in addition to their own declarations.
Separately, but at the same time, Apple is introducing code signing
to
framework bundles to help app developers better trust that their
frameworks
came from trusted/consistent sources.
What does this mean for Cordova?
--------------------------------
If we take the simplest interpretation: nothing. Cordova is not
distributed
as a framework or SDK bundle, it is source code that's included in
the app
(both CordovaLib and any installed plugins). Therefore, Cordova
itself
technically doesn't need to provide any privacy plists and it's up
to the
app developer to handle all the declarations based on how they're
using
Cordova.
However, that kinda sucks for app developers, who might not know if
a
particular plugin uses privacy-impacting APIs (such as
NSUserDefaults, or
file system access). The problem for us is that because plugins are
not
distributed as framework bundles, we cannot provide xcprivacy plist
files
for each plugin and rely on Apple automatically merging them.
Suggestions for now
-------------------
1. Add a blank PrivacyInfo.xcprivacy plist file to the Cordova iOS
template
as a resource.
2. Add a (mostly blank, but accurate) PrivacyInfo.xcprivacy plist
file to
CordovaLib as a resource, so that it's available for anyone
consuming
CordovaLib from Swift Package Manager or as a framework (unclear to
me how
this impacts Cocoapods...)
3. I guess our best option right now is to have plugins that need to
make
declarations do so via <edit-config> into the xcprivacy plist, which
is
going to be super prone to conflicts if multiple plugins need to add
the
same declarations :(
I really don't like the idea of relying on edit-config/config-file
injection behaviour to manage this plist, because it's almost
guaranteed to
cause conflict issues when adding/removing plugins, but I don't have
better
ideas at the moment. It doesn't seem feasible to change things such
that
each plugin ends up as a framework bundle, since that would be a
major
architectural change (although perhaps one that needs to happen?)
If we have specific questions for Apple where we need clarification
or
recommendations, I can reach out to someone there and see if we can
get any
help.
~Darryl On Fri, Oct 27, 2023 at 8:28 AM Jesse <purplecabb...@gmail.com>
wrote:
Has anyone looked at privacy manifests for iOS apps?
…
As you may know, in June, Apple announced new features to help
users
understand developers’ privacy and data collection and sharing
practices.
These new features include privacy manifests and signatures, which
we
encourage all third-party SDKs to adopt to provide transparency to
users
and help secure the software supply chain. Third-party SDKs that
impact
user privacy will be expected to include a privacy manifest and
signature,
and starting in Spring 2024, new and updated apps that include
these
third-party SDKs will need to include their manifest and signature
to
submit to the App Store

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org
For additional commands, e-mail: dev-h...@cordova.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org
For additional commands, e-mail: dev-h...@cordova.apache.org

Reply via email to