webentwicklung-frage-antwort-db.com.de

iOS 10-Fehler [Zugriff] <privat> bei Verwendung von UIImagePickerController

Ich benutze XCode 8 und teste mit iOS 10.2 Beta.

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

Sehr einfacher 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 tippe, stürzt die App mit einem unbrauchbaren Fehler ab:

[access] <private>

Das ist es. Nichts anderes.

Bei break-Anweisungen scheint die App bei "presentViewController" abzustürzen.

Dies ist eine brandneue App und ich habe nichts anderes in der Benutzeroberfläche als die Schaltfläche "Greifen".

Beim Testen unter iOS 9.3 funktioniert dies ebenfalls einwandfrei. Vermisse ich etwas, das in iOS 10 geändert werden könnte?

102
Pranoy C

Möglicherweise müssen Sie die NSPhotoLibraryUsageDescription in Ihre Liste aufnehmen. Mögen

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

Überprüfen Sie alle Verwendungsbeschreibungen hier .

172
rockdaswift

Bevor Sie in iOS 10 auf datenschutzrelevante Daten wie Kamera, Kontakte usw. zugreifen, müssen Sie nach der Autorisierung fragen. Andernfalls stürzt Ihre App ab, wenn Sie darauf zugreifen. Anschließend wird Xcode wie folgt protokolliert:

Diese App ist abgestürzt, weil versucht wurde, auf datenschutzrelevante Daten ohne Verwendungsbeschreibung zuzugreifen. Die Info.plist der App muss einen NSContactsUsageDescription -Schlüssel mit einem Zeichenfolgenwert enthalten, der dem Benutzer erklärt, wie die App diese Daten verwendet.

Wie gehe ich damit um?

Öffnen Sie die Datei in Ihrem Projekt mit dem Namen info.plist, Klicken Sie mit der rechten Maustaste darauf und öffnen Sie sie als Source Code. Fügen Sie diesen Code darunter ein. Oder Sie können info.plist Standardmäßig als Property List Öffnen und auf die Schaltfläche "Hinzufügen" klicken. Xcode zeigt Ihnen die vorgeschlagenen Vervollständigungen an, während Sie Privacy - Mit Hilfe der Tastatur ⬆️ und ⬇️ eingeben.

Denken Sie daran, Ihre Beschreibung zu schreiben, warum Sie diese Autorisierung zwischen <string> Und </string> Anfordern. Andernfalls wird Ihre App von Apple abgelehnt:

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

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

<!-- ???? Write To Image Gallery>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>$(PRODUCT_NAME) save phots in gallry</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 nicht funktioniert, fragen Sie nach der Hintergrundautorisierung:

<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

bereinigen Sie dann Ihr Projekt und führen Sie es aus.

Weitere Informationen finden Sie hier: iOS10AdaptationTips .

132
ElonChan

in iOS 10 müssen Sie den im folgenden Bild genannten Schlüssel hinzufügen, wenn Sie eine Kamera oder eine Fotogalerie in Ihrer App verwenden

.plist image

23
Pritesh

Sie müssen die neuen Datenschutzeinstellungen zu Ihrer info.plist hinzufügen.

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

enter image description here

14
user4034301

In iOS 10 hat Apple geändert, wie Sie auf private Datentypen eines Benutzers zugreifen können.

Sie müssen den Datenschutz - Verwendungsbeschreibung der Fotobibliothek Schlüssel zu den Info.plist Und den Verwendungsinformationen Ihrer App hinzufügen.

Weitere Informationen finden Sie im unten stehenden GIF.

GIF

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

Kopieren Sie einfach den folgenden String und fügen Sie ihn in info.plist Ein.

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

Bitte finden Sie das unten stehende GIF für weitere Informationen.

GIF

9