błąd iOS 10 [dostęp] podczas korzystania z UIImagePickerController

Używam XCode 8 i testuję z iOS 10.2 Beta.

Dodałem frameworki Photos, PhotosUI i MobileCoreServices do projektu.

Bardzo prosty kod:

#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

I realizacja:

- (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];
}
Gdy tylko dotknę przycisku, aplikacja zawiesza się z bardzo bezużytecznym błędem:

[access] <private>

To wszystko. Nic więcej.

Używając instrukcji break, aplikacja wydaje się zawieszać w "presentViewController".

To jest zupełnie nowa aplikacja i nie mam Wszystko inne w interfejsie oprócz przycisku chwyć.

Również, testowanie na iOS 9.3, to działa dobrze. Czy brakuje mi czegoś, co może zostać zmienione w iOS 10?

Author: Pranoy C, 2016-07-07

5 answers

Może być konieczne umieszczenie NSPhotoLibraryUsageDescription w pliście. Jak

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

Sprawdź wszystkie opisy użycia tutaj .

 172
Author: rockdaswift,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-07 11:00:49

W systemie iOS10, zanim uzyskasz dostęp do danych wrażliwych na prywatność, takich jak kamera, kontakty itp., musisz poprosić o autoryzację, w przeciwnym razie Twoja aplikacja ulegnie awarii po uzyskaniu dostępu do nich.Następnie Xcode loguje się w następujący sposób:

Ta aplikacja została zawieszona, ponieważ próbowała uzyskać dostęp do danych wrażliwych na prywatność bez opisu użycia. Informacje o aplikacji.plist musi zawierać klucz NSContactsUsageDescription z wartością łańcuchową wyjaśniającą użytkownikowi, w jaki sposób aplikacja wykorzystuje te dane.

Jak radzić sobie z to?

Otwórz plik w swoim projekcie o nazwie info.plist, Kliknij go prawym przyciskiem myszy, otwierając jako Source Code, wklej do niego poniższy kod. Możesz też otworzyć info.plist jako Property List domyślnie, kliknij przycisk Dodaj, Xcode poda ci sugestie podczas pisania Privacy - za pomocą klawiatury ⬆ ️ i⬇ ️.

Pamiętaj, aby napisać swój opis, dlaczego pytasz o tę autoryzację, między <string> i </string>, lub Twoja aplikacja zostanie odrzucona przez apple:

<!--  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>

Jeśli to nie działa, spróbuj zapytać dla autoryzacji tła:

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

Lub przejdź do target -> Capabilities -> Background Modes -> open the background Modes:

Następnie wyczyść swój projekt, uruchom go.

Przejdź do tutaj, aby uzyskać więcej informacji: iOS10AdaptationTips .

 132
Author: ElonChan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-17 08:23:48

W iOS 10 musisz dodać klucz wymieniony na poniższym obrazku, jeśli używasz aparatu lub galerii zdjęć w aplikacji

.plist image

 23
Author: Pritesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-19 06:19:28

Musisz dodać nowe ustawienia prywatności do informacji.plist.

nie zapomnij dodać wartości opisującej, dlaczego aplikacja musi uzyskać dostęp do usługi.

Tutaj wpisz opis obrazka

 14
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-09 17:43:40

W systemie iOS 10 firma Apple zmieniła sposób uzyskiwania dostępu do prywatnych typów danych użytkownika.

Należy dodać

Opis użycia biblioteki zdjęć Prywatności klucz do Info.plist aplikacji i ich informacji o użytkowaniu.

Aby uzyskać więcej informacji, zapoznaj się z poniższym GIF.

GIF

Lub jeśli chcesz dodać przez info.plist, musisz dodać NSPhotoLibraryUsageDescription.

Wystarczy skopiować i wkleić poniżej napis w info.plist.

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

Proszę znajdź poniższy GIF, aby uzyskać więcej informacji.

GIF

 9
Author: Ramkrishna Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-10 06:52:16