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>
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?
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 .
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 .
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
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.
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.
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.
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