Discuss how to secure user data, respect user data preferences, support iCloud Private Relay and Mail Privacy Protection, replace CAPTCHAs with Private Access Tokens, and more.

Privacy Documentation

Posts under Privacy tag

163 Posts
Sort by:
Post not yet marked as solved
0 Replies
142 Views
We are using Chrome Browser (Customer request) to scan QRCode and each time we are ask for Camera permission. It does not do that for Safari. I saw some places that it can be set on each web page by accessing Chrome setting directly and not the apple setting for Chrome. (Never found the setting for the camera in chrome) Thank you very much for the help (Event if it is not possible at this point to do that) Regards Christian
Posted
by Chris00.
Last updated
.
Post not yet marked as solved
3 Replies
278 Views
So I am developing an app that will need to use a bunch of random faces like the one attached. I just want to know if this is ok in legal standpoint and that I won't have any trouble pushing the app to appstore later.
Posted
by Victorha.
Last updated
.
Post marked as solved
4 Replies
636 Views
We recently added the ability for a user to delete their account as per the 5.1.1 guidelines. Our app was later rejected because the account we provide for logging in was deleted by an Apple reviewer. We can create a new account that reviewers can use to sign in, but how do we prevent this from happening again? I understand the desire to verify account deletion, but if reviewers are constantly deleting the account used for approval, we'll be in an endless cycle of rejections. What should we do?
Posted Last updated
.
Post marked as solved
3 Replies
264 Views
Hi, I wanted to know what level of NSFileProtection is provided by default in iOS in the user's documents directory of application container. Basically, if I am creating a file in this location - NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); What level of protection among NSFileProtectionType is provided? `
Posted Last updated
.
Post not yet marked as solved
1 Replies
201 Views
I'm trying to build a simple Mail Extension using Compose session handler for the Mac Catalyst App. The idea is to open a ComposeViewController on App Icon click from Mail Toolbar ( when the user adds the app extensions for the app from Mail Preference ). I'm using core data in a shared group and I want to show the list of the email address that the user has added from the app to the ComposeViewController. But on the extension window in the Mail, it shows : Permissions for “MyDemoApp”: • Email Contents Can read sensitive information from emails including the message subject and recipients. This applies to all outgoing messages. Since my Compose-Mail-Extension does not read subject/recipients in the Compose window, My app should not ask this permission from users. Is there any way to omit permissions which my app is not using?
Posted Last updated
.
Post not yet marked as solved
6 Replies
344 Views
The problem is that I have added the string privacy - camera usage description to the info.plist file and it does not appear when using the camera, what could be happening? , I have restarted the xcode several times and I have simulated the application several times and it still does not appear. If someone can help, thank you very much in advance.
Posted
by Matracon.
Last updated
.
Post not yet marked as solved
1 Replies
165 Views
I would like to develop a relationship with my app users, and recently updated my app to collect Contact Info (via the App Privacy section). I know that if a user declines to share that information I obviously won't receive it, but for those users who do agree to it, am I able to see the email address (and any other info shared) of my purchasers somewhere?
Posted
by jslusser.
Last updated
.
Post not yet marked as solved
4 Replies
3.5k Views
When I run an app that uses location services on the Xcode 13.1 simulator for iOS 15 the location privacy settings are missing. If you go to the settings on the simulator under privacy the section for location services is missing. The exact same thing on a physical iPhone running iOS 15.0 does show the location settings under privacy in the settings app. Where did the settings for location privacy go? In order to test using the simulator a developer needs to be able to turn those settings on and off, like turning off precise location to see how an app responds.
Posted
by Bussa.
Last updated
.
Post not yet marked as solved
6 Replies
621 Views
Since the end of 2021, I have been getting reports from my users that my app Timing (https://timingapp.com) no longer records window titles and file paths for the apps they use, despite Accessibility permissions having been granted. The problem manifests itself such that sometimes (see below on the conditions I was able to identify), the "Timing Tracker" app is shown and appears checked in "Security & Privacy" System Preferences, and calling AXIsProcessTrustedWithOptions() with options @{ (__bridge id) kAXTrustedCheckOptionPrompt : (id) kCFBooleanFalse } returns true. However, any of my actual Accessibility code (e.g. obtaining a process's windows) only returns nil (or empty arrays) when the problem is occurring. Any pointers as to what could be the reason or what I could investigate would be very appreciated, as I really am at a loss here. Here are a few additional things to note that may or may not be related to the issue at hand: My use of the Accessibility API usually works fine and has been working fine for quite a while; only recently has it started to sporadically stop working for some users. The app consists of a "main" app, with a helper contained therein that actually performs the Accessibility requests. In the "Security & Privacy" System Preferences, the helper (called "Timing Tracker") is shown and appears checked (i.e. Accessibility permissions seem to be granted). This only seems to affect the Accessibility API; Automation (i.e. Apple Events) continue to function if the user has granted permission for them. It appears that these issues occur more frequently after the app gets updated and the helper restarts itself because it has detected changes to its application bundle, but it appears that's not the only cause for this issue (i.e. it also happens without a recent app update having taken place). The helper uses the following code to relaunch itself: - (void)relaunchWithDelay:(NSTimeInterval)delay { // $N = argv[N] // Sleep until our own process has been killed, then sleep for another 15 seconds, then relaunch the app. NSString *killArg1AndOpenArg2Script = [NSString stringWithFormat:   @"/bin/kill $1; (while /bin/kill -0 $2 >&/dev/null; do /bin/sleep 1; done; /bin/sleep %lf; /usr/bin/open \"$3\") &",   delay]; // NSTask needs its arguments to be strings NSString *ourPID = [NSString stringWithFormat:@"%d",                                               [NSProcessInfo processInfo].processIdentifier]; // this will be the path to the .app bundle, // not the executable inside it; exactly what `open` wants NSString *pathToUs = [NSBundle mainBundle].bundlePath; NSArray *shArgs = @[ @"-c", // -c tells sh to execute the next argument, passing it the remaining arguments. killArg1AndOpenArg2Script, @"", // $0 path to script (ignored) ourPID, // $1 in restartScript ourPID, // $2 in restartScript pathToUs ]; // $3 in restartScript NSTask *restartTask = [NSTask launchedTaskWithLaunchPath:@"/bin/sh" arguments:shArgs]; [restartTask waitUntilExit]; // wait for killArg1AndOpenArg2Script to finish NSLog(@"*** ERROR: %@ should have been terminated, but we are still running", pathToUs); assert(false && "We should not be running!"); } I am unsure whether this invocation somehow relaunches the helper in a state that temporarily strips it of its TCC/Accessibility permissions. According to user reports, this can usually be fixed either relaunching the helper, rebooting the Mac, or (in some cases) unchecking the helper in the "Security & Privacy" System Preferences. (It seems like which of these escalating steps is required for the fix varies from user to user.) I have heard reports of this from both macOS 11 and macOS 12 (not sure whether it also occurs on macOS 10.15). Given reports of some TCC vulnerabilities having been fixed recently, I wonder whether some of the fixes could trigger a denying of Accessibility permission to my app. I still haven't been able to reproduce the issue myself, but have received plenty of credible reports that this is actually happening. As mentioned above, rebooting the Mac usually seems to fix the problem, which makes this particularly hard to investigate and debug. The app itself has been around since at least 2017, yet these problems seem to have only started occurring (or at least became much more frequent) towards the end of 2021. I do not recall any substantial chances to the relevant code paths recently. The app is not sandboxed; it is correctly signed and notarized with Developer ID. Hardened Runtime is enabled; the only Hardened Runtime entitlement requested is "Apple Events". I do have changed the Organization name of my Apple Developer account in 2021, but I don't think that's related, because the designated requirement (csreq) stored in tcc.db for Accessibility with my app is anchor apple generic and identifier "info.eurocomp.TimingHelper" and (certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = NDB5JK3DZG). This seems to be appropriate, and does not include the organization name itself. My Organization's Team ID (NDB5JK3DZG) has not changed.
Posted
by Daniel A..
Last updated
.
Post marked as solved
8 Replies
3.5k Views
Hello, everyone.My name is Matt, I'm the developer of Eternal Storms Software.I recently released a freeware app: SiriMote, outside of the Mac App Store.The reason I could not release it on the Mac App Store is that it uses CGEventPost to simulate keypresses (for example, when the play/pause button is pressed on the Siri Remote, the Play/Pause media key (on the F8 key) of the Mac's keyboard is pressed), and CGEventPost is ignored inside the sandbox.So I was wondering - is there a way to do this inside the sandbox?I guess an alternative would be using the Scripting Bridge, but then I would have to specifically communicate with particular apps. The nice thing about CGEventPost is that any app that responds to the media keys can be used with SiriMote.I'd love a more open approach, like CGEventPost.Any hints appreciated!Thank you kindly,Matt
Posted Last updated
.
Post not yet marked as solved
3 Replies
531 Views
We have a network copy utility which reads from an external volume (specifically camera media). We'd like to grant it external volume access at installation time, preferably without having to find and insert media. But triggering an 'external volumes' dialog (and hence adding an entry to Security / Files and Folders) seems to require accessing an actual external volume. In contrast Full Disk Access can be granted preemptively, but it's a huge security hazard - it would give the copy utility unrestricted access to the entire machine. Is it possible to grant 'external volume' access when you don't (yet) have an external volume connected ?
Posted
by willcor.
Last updated
.
Post not yet marked as solved
1 Replies
349 Views
Hello, I'm trying to submit my game to the app store, but I get rejected with the message: The package I use is iOS 14 Advertising Support package: I use the sample scene from the package with little adjustments: [ContextScreenManager.cs] using UnityEngine; using System; using System.Collections.Generic; #if UNITY_IOS using UnityEngine.iOS; #endif using System.Collections; using UnityEngine.SceneManagement; namespace Unity.Advertisement.IosSupport.Samples { /// <summary> /// This component will trigger the context screen to appear when the scene starts, /// if the user hasn't already responded to the iOS tracking dialog. /// </summary> public class ContextScreenManager : MonoBehaviour { /// <summary> /// The prefab that will be instantiated by this component. /// The prefab has to have an ContextScreenView component on its root GameObject. /// </summary> public ContextScreenView contextScreenPrefab; void Start() { #if UNITY_IOS Debug.Log("IOS detected"); // check with iOS to see if the user has accepted or declined tracking var status = ATTrackingStatusBinding.GetAuthorizationTrackingStatus(); Version currentVersion = new Version(Device.systemVersion); Version ios14 = new Version("14.5"); if (status == ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED && currentVersion >= ios14) { var contextScreen = Instantiate(contextScreenPrefab).GetComponent<ContextScreenView>(); // after the Continue button is pressed, and the tracking request // has been sent, automatically destroy the popup to conserve memory contextScreen.sentTrackingAuthorizationRequest += () => Destroy(contextScreen.gameObject); } #else Debug.Log("Unity iOS Support: App Tracking Transparency status not checked, because the platform is not iOS."); #endif StartCoroutine(LoadNextScene()); } private IEnumerator LoadNextScene() { #if UNITY_IOS var status = ATTrackingStatusBinding.GetAuthorizationTrackingStatus(); while (status == ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED) { status = ATTrackingStatusBinding.GetAuthorizationTrackingStatus(); yield return null; } #endif SceneManager.LoadScene(1); yield return null; } } } and [ContextScreenView.cs] using UnityEngine; namespace Unity.Advertisement.IosSupport.Components { /// <summary> /// This component controls an iOS App Tracking Transparency context screen. /// You should only have one of these in your app. /// </summary> public sealed class ContextScreenView : MonoBehaviour { /// <summary> /// This event will be invoked after the ContinueButton is clicked /// and after the tracking authorization request has been sent. /// It's a good idea to subscribe to this event so you can destroy /// this GameObject to free up memory after it's no longer needed. /// Once the tracking authorization request has been sent, there's no /// need for this popup again until the app is uninstalled and reinstalled. /// </summary> public event Action sentTrackingAuthorizationRequest; public void RequestAuthorizationTracking() { #if UNITY_IOS Debug.Log("Unity iOS Support: Requesting iOS App Tracking Transparency native dialog."); ATTrackingStatusBinding.RequestAuthorizationTracking(AuthorizationTrackingReceived); sentTrackingAuthorizationRequest?.Invoke(); #else Debug.LogWarning("Unity iOS Support: Tried to request iOS App Tracking Transparency native dialog, " + "but the current platform is not iOS."); #endif } private void AuthorizationTrackingReceived(int status) { Debug.LogFormat("Tracking status received: {0}", status); } } } Why do I get rejected? Is it because I display the example screens from the package? Anyone had similar problems? Glad for any help, thanks!
Posted
by MosiGames.
Last updated
.
Post not yet marked as solved
1 Replies
272 Views
I'm not sure if this is the right place to post about this, so if it is not please direct me to where the right place would be. My mom complained about poor battery life on her iPhone 12 running the latest iOS at the time of this post (15.4.1). I noticed her phone was showing the blue indicator behind the time meaning an app was actively using its location. I clicked it and the Shopkick app opened. I made sure location access for the app was set to while using the app. I even changed it to ask each time and when i went back into the app give it location access once then left surely enough the blue status bar indicator reappeared. According to the App Privacy report on her phone the app was accessing the location of her phone once per minute and the only thing I could do was to set location access for the app to never or uninstall the app. I then restored a test iPhone (SE First Generation) with iOS 15.4.1 downloaded the Shopkick app, signed in and gave it the permissions it wanted including location access by tapping "Allow Once" and after opening and closing the app twice it did the same thing on that phone. I'm not sure if this is a problem with iOS or the developers of the Shopkick app are doing something to get around Apple's location permissions. I should add that background app refresh for app was off for all phones tested. This is also still a problem on iOS 15.5 Beta 3 (it doesn't seem to happen every time). However, on my iPhone 13 Pro Max running an older version of iOS 15, the app continues to receive my location only until I close it from the app switcher making me assume it's an iOS issue. Attached is an App Privacy Report (trimmed to fit the size limit) from the test device left overnight with the app force closed, background app refresh off, and location services for the app set to while using the app which shows the app receiving location info once per minute which I don't think is supposed to happen under those conditions unless i'm missing something. Thanks in advance! log-file
Posted
by Mighty_.
Last updated
.
Post not yet marked as solved
0 Replies
175 Views
Hi all We have recently had an issue with using a single sign on login concept in a submission which was flagged under Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage and we are wondering what the development best practices were in this circumstance. The reason being was because if the user did not already have an account, we provided a button which then loaded the 3rd parties registration form in a web frame. However the system we are using requires the users address and phone number for various reasons, although our app does not use that data at all - therefore we were told we are breaking the guidelines. Our app is not collecting, or storing any of this information (or even has visibility to it), and it is all covered in both ours, and the third parties privacy policies, however it seems that we are still violating the clause. My question to other developers and Apple support - is how is this dealt with in other apps that use larger SSO systems such as iCloud, Google and Facebook? If you use one of those for login, they require various fields, and personal data, which is then may not be used within apps themselves, however they seem not to violate the same policy, or at least may not have been flagged to do so. Our system is in context of holiday park bookings and this is an outline of the two processes that may happen: User already has account User books holiday on holiday parks booking system (The SSO Controller) This process includes the registration process so user will have email and password Before, or during the users holiday they download our app, and use this same username and password to add their booking information to our app User does not already have an account User books holiday in person, or over the phone They do not have a web account - but want to still download and use our app If they wish to login with their booking they need to then create an account on the booking system (SSO) - which for CRM and payment reasons, requires the users address and phone numbers Our app provides a button to load the registration in a web frame, and once the user is registered can then login to the app This second circumstance is the issue we are having, and for now have had to remove this to comply. Only people who originally booked their holiday online now being able to login with their booking. There are potentially other avenues we can explore with the booking system, but before we roadmap more development time for these, I was hoping the community, or Apple themselves could point us towards best practices, or documentation for this, and how others have dealt with it
Posted Last updated
.
Post not yet marked as solved
2 Replies
360 Views
Hi everyone, in an email that came to me directly from apple, which refers to the aforementioned guidelines, the following is shown in the figure: Now in my app, the login is done directly on a third IdP, so I wanted to understand if the issue of user cancellation falls into this case or not, since as I said it is a user on a third IdP (ex Google, Microsoft, Private IdP etc.), and therefore the rule only applies to those apps that allow registration directly within it and not on an external IdP. I hope I was clear. Thank you
Posted
by Pampua84.
Last updated
.
Post not yet marked as solved
5 Replies
273 Views
I have a signed, notarized app that makes use of a privileged helper. In macOS 11 and 12, as noted in several places in the documentation, there was/is an increasing requirement for the user to grant permission for things over prior macOS releases. This is great, I'm on board. I've found that the privileged helper now needs the broad "Full Disk Access". How do I get the Finder to ask the user permission for this? My helper has the special text sections called "__info_plist" and "__launchd_plist" and I tried putting what I think should go into them in those but I didn't have any luck. Is there another section I need to know about or did I just mess something else up? I'm not using Xcode or Swift or ObjectiveC, everything is C++/C and the command line tools. My helper and Application use XPC to communicate with each other. Thanks! (after my helper fails it does show up in the Full Disk Access list, if you check that pref and try again it all works, I don't want my users to ever have to do that)
Posted
by essexs.
Last updated
.
Post not yet marked as solved
0 Replies
238 Views
Hey developer community / CloudKit fans, I'm making an application that utilizes CloudKit's identity system to provide my users a 'social' aspect of the app as well as their own identity. When filling out my App Privacy label, I'm torn if I should disclose Contact usage or not. https://developer.apple.com/documentation/cloudkit/ckcontainer/1640421-discoverallidentities Right now, I'm leaning to not specifying Contacts collection. Here are my thoughts: Data Collection defined by Apple, paraphrased, is transmitting data off device for longer than needed for the request. How Apple implements the function of the CloudKit identity lookup is outside of our control as developers, however, it is reasonable to expect that Apple would not save your contact address book in CloudKit and the data does not live in CloudKit longer than it needs to. I don't access the Contacts app or API in the implementation. Apple in fact use your contacts under the hood to service this request according to the documentation, however to the user, there is no contacts permission / access prompt for the application itself. The app doesn't get access to the full contacts db. When you receive a CKUserIdentity, the contacts identifier is just that, a lookup identifier string. I'm not going further than just displaying the information on the user identity. I could back link the identifier to a contacts record, but I don't need to. If I did that, even then I would say no, because the operation all happens locally on device. Does your app use CKUserIdentities? How did you answer the App Privacy question for Contacts? If you have strong feelings one way or another, I'd love to hear your perspective.
Posted
by edorphy.
Last updated
.
Post not yet marked as solved
6 Replies
1.8k Views
For my customers using Catalina, they're correctly asked once if my software can access files in their Documents folder, and then the issue is laid to rest.But for me - I have two copies of the executable, the release build in my Applications folder, and the debug build I'm continuing to update. Whenever I switch from one of these to the other, I get the "*.app" would like to access files in your Documents folder prompt again.Are other developers experiencing this? Why is it that having two copies of the same app causes this problem? How do I make it stop?My app is called "Paisley", and it's loading a document from the ~/Documents/Paisley/ directory at startup. let docsDir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last _defaultDocumentsDirectory = docsDir!.appendingPathComponent("Paisley")Then I "let data = try Data(contentsOf: _defaultDocumentsDirectory.appendingPathComponent("UserData.xml"))"
Posted Last updated
.