iOS 10 error [akses] <private> saat menggunakan UIImagePickerController

102

Saya menggunakan XCode 8 dan menguji dengan iOS 10.2 Beta.

Saya telah menambahkan kerangka kerja Foto, PhotosUI, dan MobileCoreServices ke proyek.

Kode yang sangat sederhana:

#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

dan implementasi:

- (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];
}

Segera setelah saya mengetuk tombolnya, aplikasi macet dengan kesalahan yang sangat tidak berguna:

[access] <private>

Itu dia. Tidak ada lagi.

Menggunakan pernyataan break, aplikasi tampaknya mogok di "presentViewController".

Ini adalah aplikasi baru dan saya tidak memiliki apa pun di UI selain tombol ambil.

Juga, pengujian pada iOS 9.3, ini berfungsi dengan baik. Apakah saya melewatkan sesuatu yang mungkin berubah di iOS 10?

Pranoy C
sumber
Bersihkan lalu bangun. Jika tidak ada perubahan, dengan mudah bisa menjadi bug di Xcode 8 atau iOS 10 beta yang akan diselesaikan oleh Apple di pembaruan mendatang. Saya sering menemukan ini masalahnya - jika itu beta terakhir, atau rilis GM dan masih tidak berfungsi, maka akan menjadi waktu yang tepat untuk memperbaikinya.
Jordan Smith
1
ya, masalah yang sama bahkan setelah membersihkan dan menghapus aplikasi :(
Pranoy C
Saya tidak akan stres tentang itu. Ini adalah rilis Beta. Kemungkinan besar ini adalah masalah dengan versi beta. Saya sarankan mengembangkan di Xcode 7 hingga lebih dekat dengan rilis.
Jordan Smith
ok masuk akal! terima kasih @Jordan
Pranoy C
@ Jordan sepertinya ada persyaratan baru pada iOS 10. lihat solusi: stackoverflow.com/a/38241350/1634905
Pranoy C

Jawaban:

172

Anda mungkin perlu memasukkan NSPhotoLibraryUsageDescription di plist Anda. Suka

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

Periksa semua deskripsi penggunaan di sini .

rockdaswift
sumber
1
maaf, bagaimana Anda menemukan nomor rilis ini?
Pranoy C
1
Di situs web unduhan iOS, saya baru saja menyelesaikannya dengan kunci UsageDescription yang benar.
rockdaswift
terima kasih, jawaban Anda langsung menyelesaikan masalah! ini adalah persyaratan baru sejak iOS 10. Selamat datang di Stack overflow btw!
Pranoy C
Terima kasih banyak! Saya dibakar oleh NSAppleMusicUsageDescription (mengakses perpustakaan musik iTunes).
Selamat menikmati
4
@iomer saya memperbaiki masalah, saya memang menambahkan kunci di info.plist, tetapi saya tidak dapat melihatnya di bawah Proyek> Target> Info. Jadi saya menambahkan di sana juga, dan Apple melewati Biner saya. Itu pernah terjadi pada saya sebelumnya juga dengan ID Facebook. Tidak tahu mengapa tidak ditampilkan di sana.
Raheel Sadiq
132

Di iOS10, Sebelum Anda mengakses data sensitif privasi seperti Kamera, Kontak, dan sebagainya, Anda harus meminta otorisasi, atau aplikasi Anda akan mogok saat Anda mengaksesnya, lalu Xcode akan masuk seperti:

Aplikasi ini ngadat karena berusaha mengakses data sensitif privasi tanpa deskripsi penggunaan. Info.plist aplikasi harus berisi NSContactsUsageDescriptionkunci dengan nilai string yang menjelaskan kepada pengguna bagaimana aplikasi menggunakan data ini.

Bagaimana cara mengatasinya?

Buka file dalam proyek Anda bernama info.plist, klik kanan, buka sebagai Source Code, tempel kode di bawah ini. Atau Anda dapat membuka info.plistsebagai Property Listdefault, klik tombol add, Xcode akan memberikan menyarankan penyelesaian sementara mengetik Privacy - dengan bantuan keyboard ⬆️ dan ⬇️.

Ingatlah untuk menulis deskripsi Anda mengapa Anda meminta otorisasi ini, antara <string>dan </string>, atau aplikasi Anda akan ditolak oleh 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>

Jika tidak berhasil, coba minta background authorization:

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

Atau buka target -> Capabilities -> Background Modes -> open the background Modes:

masukkan deskripsi gambar di sini

lalu bersihkan Proyek Anda, jalankan.

Buka di sini untuk informasi lebih lanjut: iOS10AdaptationTips .

ElonChan
sumber
2
Saya tidak menggunakan foto di mana pun, dan apel menolak aplikasi saya, tahu ?. Saya juga memeriksa semua proyek pod
Raheel Sadiq
@RaheelSadiq Ingatlah untuk menulis deskripsi Anda mengapa Anda meminta otorisasi ini, antara <string> dan </string>, atau aplikasi Anda akan ditolak oleh apple.
ElonChan
23

di iOS 10 Anda perlu menambahkan kunci yang disebutkan pada gambar di bawah ini jika Anda menggunakan kamera atau galeri foto di aplikasi Anda

gambar .plist

Pritesh
sumber
14

Anda perlu menambahkan pengaturan privasi baru ke info.plist Anda.

Jangan lupa untuk menambahkan nilai yang menjelaskan mengapa aplikasi perlu mengakses layanan.

masukkan deskripsi gambar di sini


sumber
9

Di iOS 10, Apple telah mengubah cara Anda mengakses tipe data pribadi pengguna.

Anda perlu menambahkan kunci Privacy - Photo Library Usage Description ke aplikasi Anda Info.plistdan informasi penggunaannya.

Untuk informasi lebih lanjut, silakan temukan GIF di bawah ini.

GIF

Atau jika Anda ingin menambahkan lewat info.plistmaka Anda perlu menambahkan NSPhotoLibraryUsageDescription kunci .

Cukup salin dan tempel string di bawah ini info.plist.

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

Silakan temukan GIF di bawah ini untuk informasi lebih lanjut.

GIF

Ramkrishna Sharma
sumber
1
dan juga <key>NSCameraUsageDescription</key> <string> Ambil foto </string>
Nasir Khan