fluttercommunity / fluttercommunity/plus_plugins
[Question]: device_info_plus — Privacy Manifest declarations for iOS disk space APIs
- Dominant language
- Dart
- Stars
- 1.9k
- Forks
- 1.3k
- PR merge metrics
- No merged PRs in 30d
Description
### What is your question?
Could you help clarify whether the iOS disk-space retrieval in `device_info_plus 13.2.0` requires a required-reason API declaration in its Privacy Manifest? If there is existing guidance about this implementation, I would appreciate a pointer.
#### What I checked
In the package published on pub.dev:
- `FPPDeviceInfoPlusPlugin.m` calls `attributesOfFileSystemForPath:error:` inside `getDeviceInfo`, then reads free and total disk space from the returned dictionary using the `NSFileSystemFreeSize` and `NSFileSystemSize` keys.
- The bundled `PrivacyInfo.xcprivacy` has an empty `NSPrivacyAccessedAPITypes` array.
I also inspected an unsigned iOS Release build. The resulting `device_info_plus` framework contains references to the disk-space API, and its bundled manifest still has an empty `NSPrivacyAccessedAPITypes` array.
For context, my app obtains OS information through the Aptabase Flutter SDK. Aptabase does not include the disk-space values in its outgoing payload, but they are retrieved by the native plugin along with the OS information.
[Apple's required-reason API list](https://developer.apple.com/documentation/bundleresources/app-privacy-configuration/nsprivacyaccessedapitypes/nsprivacyaccessedapitype) lists `systemFreeSize` and `systemSize` under disk space. This implementation reads the values from the dictionary returned by `attributesOfFileSystemForPath:error:` instead. Am I understanding correctly that this retrieval method also needs a reason declaration? Is there a rationale or guidance for leaving the array empty in this case?
**I have not submitted this configuration to the App Store.** This question is based on source inspection and an unsigned Release build; I am not reporting an Apple warning or an App Review rejection.
I found #2751, but that discussion predates the disk-space retrieval added in #3536, so I thought this might be a separate question. Please let me know if I have overlooked an existing explanation or issue.
#### Environment
- device_info_plus: 13.2.0
- Flutter: 3.44.0
- Xcode: 26.6
- iOS Release build, unsigned
### Checklist before submitting a question
- [x] I searched issues in this repository and couldn't find such bug/problem
- [x] I searched the web for an explanation of this specific issue and could not find one
- [x] I searched Stack Overflow via a site-restricted web search and could not find an explanation of this specific issue
- [x] I read the README.md file of the plugin
- [x] I am using the latest version of the plugin
- [ ] All dependencies are up to date with `flutter pub upgrade`
- [ ] I did a `flutter clean`
- [ ] I tried running the example project
The unchecked items have not been performed. This is a question about the published native source and bundled manifest, rather than a runtime or build failure; I have left those items unchecked rather than claiming they were completed.
Contributor guide
Research direction
Inspect FPPDeviceInfoPlusPlugin.m and the bundled PrivacyInfo.xcprivacy, focusing on the attributesOfFileSystemForPath:error: call and the empty NSPrivacyAccessedAPITypes array. Compare that usage with Apple's required-reason API guidance and the history around #3536 and #2751. Done means documenting whether a declaration is required and updating the manifest or guidance if maintainers confirm a change.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- dart, flutter, ios
- Domain
- mobile, security
- Issue type
- Documentation
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100