iOS 14 Privacy Permissions: Photo Library, Camera & Microphone, Location, Local Network, Wi‑Fi Address, IDFA, and Clipboard Adaptation
This article explains the new iOS 14 privacy permission model and provides detailed adaptation guidance for photo‑library limited access, camera/microphone usage indicators, precise location handling, local‑network authorization, Wi‑Fi address randomisation, IDFA tracking restrictions, and clipboard access notifications.
1 Photo Library
The iOS 14 update introduces a "Limited Photo Library Access" mode that lets users select specific photos for an app, replacing the previous all‑or‑nothing approach. When the user chooses PHAuthorizationStatusLimited , developers should set PHPhotoLibraryPreventAutomaticLimitedAccessAlert to YES in Info.plist to avoid repeated alerts, and can present the picker via [[PHPhotoLibrary sharedPhotoLibrary] presentLimitedLibraryPickerFromViewController:self]; .
1.3 PHPicker
Apple recommends using PHPickerViewController instead of the deprecated UIImagePickerController . PHPicker runs in a separate process, supports multi‑selection, filtering by media type, and provides delegate callbacks. Example usage:
- (IBAction)button:(id)sender {
PHPickerConfiguration *configuration = [[PHPickerConfiguration alloc] init];
configuration.filter = [PHPickerFilter videosFilter]; // filter type
configuration.selectionLimit = 0; // 0 = unlimited selection
PHPickerViewController *pickerVc = [[PHPickerViewController alloc] initWithConfiguration:configuration];
pickerVc.delegate = self;
[self presentViewController:pickerVc animated:YES completion:nil];
}
- (void)picker:(PHPickerViewController *)picker didFinishPicking:(NSArray
*)results {
[picker dismissViewControllerAnimated:YES completion:nil];
if (!results || !results.count) return;
NSItemProvider *itemProvider = results.firstObject.itemProvider;
if ([itemProvider canLoadObjectOfClass:UIImage.class]) {
__weak typeof(self) weakSelf = self;
[itemProvider loadObjectOfClass:UIImage.class completionHandler:^(id _Nullable object, NSError * _Nullable error) {
if ([object isKindOfClass:UIImage.class]) {
__strong typeof(self) strongSelf = weakSelf;
dispatch_async(dispatch_get_main_queue(), ^{ strongSelf.imageView.image = (UIImage *)object; });
}
}];
}
}2 Camera and Microphone
iOS 14 shows a green dot for camera usage and an orange dot for microphone usage in the status bar. Users can view which app is accessing these sensors via the Control Center. Code that triggers these indicators includes creating an AVAudioRecorder for audio recording and configuring an AVCaptureDeviceInput with an AVCaptureSession for camera capture.
// Audio recorder (microphone indicator)
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:recorderPath settings:nil error:nil];
[recorder record];
// Camera input (camera indicator)
AVCaptureDeviceInput *videoInput = [[AVCaptureDeviceInput alloc] initWithDevice:videoCaptureDevice error:nil];
AVCaptureSession *session = [[AVCaptureSession alloc] init];
if ([session canAddInput:videoInput]) {
[session addInput:videoInput];
}
[session startRunning];3 Location
iOS 14 adds a precise‑location toggle. When disabled, apps receive only an approximate location. Developers can request temporary precise‑location permission via new CLLocationManager methods and must declare usage strings in Info.plist under NSLocationTemporaryUsageDescriptionDictionary . The new PHAccessLevel parameter also affects authorization status handling.
4 Local Network
Local Network access now requires explicit user permission when an app uses Bonjour, mDNS, or other local‑network services. The required usage description and a list of services must be added to Info.plist . This protects users from silent network scanning while still allowing legitimate use cases such as AirPlay or smart‑home devices.
5 Wi‑Fi Address
Starting with iOS 14, the system randomises the Wi‑Fi MAC address for each network connection, preventing persistent tracking via the hardware address. Developers can also set a private Wi‑Fi address manually, which changes daily and is not tied to the device.
6 IDFA
The Identifier for Advertisers (IDFA) tracking permission is now disabled by default. Apps must add NSUserTrackingUsageDescription to Info.plist and request permission through ATTrackingManager.requestTrackingAuthorizationWithCompletionHandler before accessing the IDFA.
#import
#import
- (void)requestIDFA {
if (@available(iOS 14, *)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
NSString *idfa = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
// use idfa
}
}];
} else {
// iOS 13 fallback
}
}7 Clipboard
When an app reads the clipboard, iOS 14 shows a banner notification. To avoid the banner, apps can use the new UIPasteboardDetectionPattern APIs, which only detect whether the clipboard contains a URL without exposing the full content. Direct clipboard reads still trigger the notification.
8 Summary
iOS 14’s privacy upgrades demonstrate Apple’s commitment to data minimisation, on‑device intelligence, security protection, and user transparency, giving developers clear guidelines for adapting to the new permission model.
Beike Product & Technology
As Beike's official product and technology account, we are committed to building a platform for sharing Beike's product and technology insights, targeting internet/O2O developers and product professionals. We share high-quality original articles, tech salon events, and recruitment information weekly. Welcome to follow us.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.