UIImagePickerController kullanılırken iOS 10 hatası [erişim] <özel>


102

XCode 8 kullanıyorum ve iOS 10.2 Beta ile test ediyorum.

Projeye Photos, PhotosUI ve MobileCoreServices çerçevelerini ekledim.

Çok basit 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

Ve uygulama:

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

Düğmeye dokunduğum anda, uygulama çok işe yaramaz bir hatayla çöküyor:

[access] <private>

Bu kadar. Başka hiçbir şey.

Break ifadeleri kullanıldığında, uygulama "presentViewController" da çöküyor gibi görünüyor.

Bu yepyeni bir uygulama ve kullanıcı arayüzünde tut düğmesinden başka hiçbir şeyim yok.

Ayrıca, iOS 9.3'te test edildiğinde bu iyi çalışıyor. İOS 10'da değiştirilebilecek bir şeyi kaçırıyor muyum?


Temizleyin ve ardından inşa edin. Değişiklik yoksa, gelecekteki bir güncellemede Apple tarafından çözülecek olan Xcode 8 veya iOS 10 beta sürümünde kolayca bir hata olabilir. Sıklıkla durumun böyle olduğunu görüyorum - son beta veya GM sürümü ise ve hala çalışmıyorsa, düzeltmek için endişelenmenin zamanı gelmiş demektir.
Ürdün Smith

1
evet, uygulamayı temizleyip sildikten sonra bile aynı sorun :(
Pranoy C

Bunun hakkında strese girmem. Bu bir Beta sürümü. Beta ile ilgili bir sorun olma ihtimali daha yüksektir. Yayınlanmaya çok daha yakın olana kadar Xcode 7 üzerinde geliştirmeyi öneririm.
Ürdün Smith

tamam mantıklı! teşekkür ederim @Jordan
Pranoy C

@Jordan, iOS 10'dan itibaren yeni bir gereksinim var gibi görünüyor. Çözüme bakın: stackoverflow.com/a/38241350/1634905
Pranoy C

Yanıtlar:


172

NSPhotoLibraryUsageDescription öğesini plistinize koymanız gerekebilir. Sevmek

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

Buradaki tüm kullanım açıklamalarını kontrol edin .


1
pardon bu sürüm numarasını nasıl buldunuz?
Pranoy C

1
İOS indirmeleri web sitesinde, doğru UsageDescription anahtarıyla çözdüm.
rockdaswift

teşekkür ederim, cevabınız sorunu hemen çözdü! bu, iOS 10'dan beri yeni bir gerekliliktir. Stack overflow btw'ye hoş geldiniz!
Pranoy C

Çok teşekkürler! NSAppleMusicUsageDescription (iTunes müzik kitaplığına erişirken) tarafından yazıldım.
lifjoy

4
@iomer sorunu çözdüm, anahtarı info.plist'e ekledim, ancak Project> Target> Info altında göremedim. Ben de oraya ekledim ve Apple benim İkili programımı geçti. Daha önce Facebook ID ile de başıma geldi. Neden orada gösterilmediğini bilmiyorum.
Raheel Sadiq

132

İOS10'da, Kamera, Kişiler vb. Gibi gizlilik açısından hassas verilere erişmeden önce, yetkilendirme istemelisiniz, aksi takdirde uygulamanız bunlara eriştiğinizde kilitlenir.

Bu uygulama, gizlilik açısından hassas verilere kullanım açıklaması olmadan erişmeye çalıştığı için kilitlendi. Uygulamanın Info.plist'i NSContactsUsageDescription, kullanıcıya uygulamanın bu verileri nasıl kullandığını açıklayan bir dize değerine sahip bir anahtar içermelidir .

Bununla nasıl başa çıkılır?

İsimli projenizdeki dosyayı açın info.plist, sağ tıklayın, farklı açarak Source Codebu kodu altına yapıştırın. Veya varsayılan info.plistolarak açabilirsiniz Property List, ekle düğmesine tıklayın, Xcode Privacy - klavye ⬆️ ve ⬇️ yardımıyla yazarken size önerileri tamamlar .

Açıklamanızı neden bu yetkiyi istediğinizi <string>ve arasında yazmayı unutmayın </string>, aksi takdirde uygulamanız apple tarafından reddedilir:

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

Çalışmazsa, arka plan yetkilendirmesini istemeye çalışın:

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

Veya şu adrese gidin target -> Capabilities -> Background Modes -> open the background Modes:

görüntü açıklamasını buraya girin

ardından Projenizi temizleyin, çalıştırın.

Daha fazla bilgi için buraya gidin: iOS10AdaptationTips .


2
Fotoğrafları hiçbir yerde kullanmadım ve apple uygulamamı reddediyor, herhangi bir fikriniz var mı? Tüm
bölme

@RaheelSadiq Neden bu yetkiyi istediğinizi açıklamayı unutmayın, <string> ve </string>, aksi takdirde uygulamanız apple tarafından reddedilecektir.
ElonChan

23

iOS 10'da, uygulamanızda kamera veya fotoğraf galerisi kullanıyorsanız, aşağıdaki resimde belirtilen anahtarı eklemeniz gerekir

.plist resmi


14

İnfo.plist'e yeni gizlilik ayarlarını eklemeniz gerekiyor.

Uygulamanın neden hizmete erişmesi gerektiğini açıklayan değeri eklemeyi unutmayın.

görüntü açıklamasını buraya girin


9

İOS 10'da Apple, herhangi bir kullanıcı özel veri türüne nasıl erişebileceğinizi değiştirdi.

Uygulamanızın ve kullanım bilgilerinin Gizlilik - Fotoğraf Kitaplığı Kullanım Açıklaması anahtarını eklemeniz gerekir Info.plist.

Daha fazla bilgi için lütfen aşağıdaki GIF'i bulun.

GIF

Veya yoluyla eklemek istiyorsanız, NSPhotoLibraryUsageDescriptioninfo.plist eklemeniz gerekir. anahtarını .

Sadece aşağıdaki dizeyi kopyalayıp yapıştırın info.plist.

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

Daha fazla bilgi için lütfen aşağıdaki GIF'i bulun.

GIF


1
ve ayrıca <key>NSCameraUsageDescription</key> <string> Fotoğrafı çek </string>
Nasir Khan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.