102

Ich verwende XCode 8 und testen mit iOS 10.2 Beta.iOS 10 Fehler [Zugriff] <private> bei Verwendung von UIImagePickerController

Ich habe die Frameworks Photos, PhotosUI und MobileCoreServices zum Projekt hinzugefügt.

Sehr einfache Code:

#import <Photos/Photos.h> 
#import <PhotosUI/PhotosUI.h> 
#import <MobileCoreServices/MobileCoreServices.h> 

@interface ViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate, PHLivePhotoViewDelegate> 

@property (strong, nonatomic) IBOutlet UIImageView *imageview; 

@end 

und Umsetzung:

- (IBAction)grab:(UIButton *)sender{ 
    UIImagePickerController *picker = [[UIImagePickerController alloc]init]; 
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    picker.allowsEditing = NO; 
    picker.delegate = self; 

    // make sure we include Live Photos (otherwise we'll only get UIImages) 
    NSArray *mediaTypes = @[(NSString *)kUTTypeImage, (NSString *)kUTTypeLivePhoto]; 
    picker.mediaTypes = mediaTypes; 

    // bring up the picker 
    [self presentViewController:picker animated:YES completion:nil]; 
} 

Sobald ich auf die Schaltfläche tippen, um die App stürzt mit sehr nutzlos Fehler:

[access] <private>

Das ist es. Nichts anderes.

Mit Break-Anweisungen scheint die App bei "presentViewController" abzustürzen.

Dies ist eine brandneue App und ich habe nichts anderes in der UI als die Grab-Taste.

Auch das Testen auf iOS 9.3 funktioniert einwandfrei. Fehle ich etwas, das in iOS 10 geändert werden könnte?

+0

Reinigen und dann bauen. Sollte sich nichts ändern, könnte es sich leicht um einen Fehler in Xcode 8 oder der iOS 10 Beta handeln, der von Apple in einem zukünftigen Update behoben wird. Ich finde oft, dass dies der Fall ist - wenn es die letzte Beta oder die GM-Version ist und es immer noch nicht funktioniert, dann wäre es an der Zeit, sich darum zu kümmern, es zu reparieren. –

+1

Yep, das gleiche Problem auch nach dem Löschen und Löschen der App :( –

+0

Ich würde nicht darüber betonen. Es ist eine Beta-Version. Wahrscheinlichkeiten sind eher, dass es ein Problem mit der Beta ist. Ich würde vorschlagen, auf Xcode 7 bis viel zu entwickeln näher zu veröffentlichen –

Antwort

173

Möglicherweise müssen Sie die NSPhotoLibraryUsageDescription in Ihr Plist einfügen. Wie

<key>NSPhotoLibraryUsageDescription</key> 
<string>$(PRODUCT_NAME) uses photos</string> 

prüfen alle Nutzungs Beschreibungen here.

+1

Entschuldigung, wie haben Sie das gefunden? Release-Nummer? –

+1

In der iOS-Download-Website, habe ich gerade mit dem richtigen UsageDescription-Schlüssel gelöst. – rockdaswift

+0

danke, Ihre Antwort löste das Problem sofort! Dies ist eine neue Anforderung seit iOS 10. Willkommen bei Stack Overflow BTW! –

131

In iOS10, Bevor Sie die Privatsphäre sensible Daten wie die Kamera, Kontakte zuzugreifen, und so weiter, müssen Sie für die Genehmigung bitten, oder Ihre Anwendung abstürzt, wenn Sie them.Then Xcode Zugriff protokolliert wie:

This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSContactsUsageDescription key with a string value explaining to the user how the app uses this data.

Wie geht man damit um?

Öffnen Sie die Datei in Ihrem Projekt mit dem Namen , klicken Sie mit der rechten Maustaste darauf, öffnen Sie als Source Code, fügen Sie diesen Code unten ein. Oder Sie können als Property List standardmäßig öffnen, klicken Sie auf die Schaltfläche Hinzufügen, Xcode gibt Ihnen die Vorschläge zur Fertigstellung während der Eingabe Privacy - mit Hilfe der Tastatur ⬆️ und ⬇️.

Denken Sie daran, Ihre Beschreibung zu schreiben, warum Sie sich für diese Genehmigung bitten, zwischen <string> und </string> oder Ihre Anwendung wird von Apple abgelehnt werden:

<!-- Photo Library --> 
<key>NSPhotoLibraryUsageDescription</key> 
<string>$(PRODUCT_NAME) photo use</string> 

<!-- Camera --> 
<key>NSCameraUsageDescription</key> 
<string>$(PRODUCT_NAME) camera use</string> 

<!-- Microphone --> 
<key>NSMicrophoneUsageDescription</key> 
<string>$(PRODUCT_NAME) microphone use</string> 

<!-- Location --> 
<key>NSLocationUsageDescription</key> 
<string>$(PRODUCT_NAME) location use</string> 

<!-- Location When In Use --> 
<key>NSLocationWhenInUseUsageDescription</key> 
<string>$(PRODUCT_NAME) location use</string> 

<!-- Location Always --> 
<key>NSLocationAlwaysUsageDescription</key> 
<string>$(PRODUCT_NAME) always uses location </string> 

<!-- Calendars --> 
<key>NSCalendarsUsageDescription</key> 
<string>$(PRODUCT_NAME) calendar events</string> 

<!-- ⏰ Reminders --> 
<key>NSRemindersUsageDescription</key> 
<string>$(PRODUCT_NAME) reminder use</string> 

<!-- Contacts --> 
<key>NSContactsUsageDescription</key> 
<string>$(PRODUCT_NAME) contact use</string> 

<!-- Motion --> 
<key>NSMotionUsageDescription</key> 
<string>$(PRODUCT_NAME) motion use</string> 

<!-- Health Update --> 
<key>NSHealthUpdateUsageDescription</key> 
<string>$(PRODUCT_NAME) heath update use</string> 

<!-- Health Share --> 
<key>NSHealthShareUsageDescription</key> 
<string>$(PRODUCT_NAME) heath share use</string> 

<!-- ᛒ Bluetooth Peripheral --> 
<key>NSBluetoothPeripheralUsageDescription</key> 
<string>$(PRODUCT_NAME) Bluetooth Peripheral use</string> 

<!-- Media Library --> 
<key>NSAppleMusicUsageDescription</key> 
<string>$(PRODUCT_NAME) media library use</string> 

<!-- Siri --> 
<key>NSSiriUsageDescription</key> 
<string>$(PRODUCT_NAME) siri use</string> 

<!-- HomeKit --> 
<key>NSHomeKitUsageDescription</key> 
<string>$(PRODUCT_NAME) home kit use</string> 

<!-- SpeechRecognition --> 
<key>NSSpeechRecognitionUsageDescription</key> 
<string>$(PRODUCT_NAME) speech use</string> 

<!-- VideoSubscriber --> 
<key>NSVideoSubscriberAccountUsageDescription</key> 
<string>$(PRODUCT_NAME) tvProvider use</string> 

Wenn es funktioniert nicht, versuchen, für den Hintergrund stellen Zulassung:

<key>UIBackgroundModes</key> 
<array> 
    <!-- something you should use in background --> 
    <string>location</string> 
</array> 

Oder gehen Sie zu target -> Capabilities -> Background Modes -> open the background Modes:

enter image description here

dann reinigen Sie Ihr Projekt, führen Sie es aus.

Hier finden Sie weitere Informationen: iOS10AdaptationTips.

+2

zurück, die ich Fotos nirgends verwendete, und Apple lehnt meine APP, irgendeine Idee ab ?. Ich überprüfe alle Pods Projekte auch –

+0

@RaheelSadiq Denken Sie daran, Ihre Beschreibung zu schreiben, warum Sie für diese Autorisierung fragen, zwischen '' und '', oder Ihre App wird von Apple abgelehnt. – ElonChan

24

in iOS 10 müssen Sie den Schlüssel im Bild unten erwähnt hinzufügen, wenn Sie die Kamera oder Foto-Galerie verwenden in Ihrer App

.plist image

14

Sie müssen das die neuen Datenschutzeinstellungen in dem Sie info.plist .

Vergessen Sie nicht, den Wert hinzuzufügen, der beschreibt, warum die App auf den Dienst zugreifen muss.

enter image description here

10

In iOS 10 hat Apple verändert, wie Sie private Datentypen alle Benutzer zugreifen kann.

Sie müssen die Datenschutz - Foto-Bibliothek Verwendung Beschreibung Schlüssel zu Ihrer App Info.plist und ihre Nutzungsinformationen hinzufügen.

Für weitere Informationen finden Sie die folgenden GIF.

GIF

Oder wenn Sie über info.plist hinzufügen möchten, dann müssen Sie NSPhotoLibraryUsageDescription Schlüssel hinzuzufügen.

Kopieren Sie einfach und fügen Sie unterhalb Zeichenfolge in .

<key>NSPhotoLibraryUsageDescription</key> 
<string>Take the photo</string> 

finden Sie das untenstehende GIF für weitere Informationen.

GIF

+1

und auch NSCameraUsageDescription Machen Sie das Foto