102

我正在使用XCode 8並使用iOS 10.2 Beta進行測試。iOS 10錯誤[訪問] <private>使用UIImagePickerController時

我已經添加了照片,PhotosUI和MobileCoreServices框架項目。

非常簡單的代碼:

#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 

和實施:

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

只要我輕點按鈕,該應用程序崩潰非常無用的錯誤:

[access] <private>

而已。沒有其他的。

使用break語句時,應用程序似乎在「presentViewController」中崩潰。

這是一個全新的應用程序,我除了抓取按鈕外沒有任何其他用戶界面。

此外,在iOS 9.3上測試,這工作正常。我是否錯過了iOS 10中可能更改的內容?

+0

清潔,然後建立。如果沒有變化,可能很容易成爲Xcode 8或iOS 10 beta中的一個bug,Apple將在未來更新中解決該問題。我經常發現這種情況 - 如果它是最後一個測試版,或者是通用版發佈,但它仍然無法正常工作,那麼就是時候擔心修復它了。 –

+1

是的,同樣的問題,即使在清理和刪除應用程序後:( –

+0

我不會強調它,這是一個測試版本,機會更可能是測試版本的問題,我建議在Xcode 7上開發,直到很多 –

回答

173

您可能需要將NSPhotoLibraryUsageDescription放入您的plist中。 像

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

檢查所有使用說明here

+1

對不起,您是如何找到這個發佈號碼? –

+1

在iOS下載網站中,我剛剛解決了正確的UsageDescription項。 – rockdaswift

+0

謝謝,您的答案馬上解決了問題!這是一個新的要求自iOS 10以來。歡迎來到Stack overflow btw! –

131

在iOS10,您訪問諸如照相機,通訊錄隱私敏感數據之前,等等,你必須要求的授權,或者當您訪問them.Then Xcode中會記錄您的應用程序會崩潰,如:

This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSContactsUsageDescription key with a string value explaining to the user how the app uses this data.

如何處理?

打開項目中名爲info.plist的文件,右鍵單擊它,打開爲Source Code,將下面的代碼粘貼到它。或者您可以打開info.plist默認爲Property List,點擊添加按鈕,Xcode會在鍵盤⬆️和⬇️的幫助下輸入Privacy -時爲您提供完成提示。

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

<!-- Camera --> 
<key>NSCameraUsageDescription</key> 
<string>$(PRODUCT_NAME) camera use</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> 

如果沒有作品,試圖索要背景:

記住你爲什麼問這個授權來寫你的描述,<string></string>,或者您的應用程序之間將會被蘋果拒絕授權:

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

還是去target -> Capabilities -> Background Modes -> open the background Modes

enter image description here

然後清理您的項目,運行它。

回到這裏以獲取更多信息:iOS10AdaptationTips

+2

我用照片無處,蘋果拒絕我的應用程序,任何想法?我也檢查所有的豆莢項目 –

+0

@RaheelSadiq記得寫你的描述爲什麼你要求這個授權,''和''之間,否則你的應用程序將被蘋果拒絕。 – ElonChan

24

iOS中10,你需要,如果你正在使用相機或照片庫應用程式中加入下面的圖片中提到的關鍵

.plist image

14

您需要添加新的隱私設置,你的Info.plist 。

不要忘記添加描述爲什麼應用程序需要訪問服務的值。

enter image description here

10

在iOS系統10,蘋果已經改變了你如何可以訪問任何用戶隱私數據的類型。

您需要添加隱私 - 照片庫使用說明您的應用程序的關鍵Info.plist及其使用信息。

欲瞭解更多信息,請找到下面的GIF。

GIF

或者,如果你想通過info.plist添加,那麼你需要添加NSPhotoLibraryUsageDescription關鍵。

只需在info.plist下面複製並粘貼字符串即可。

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

請在下方找到GIF以獲取更多信息。

GIF

+1

以及 NSCameraUsageDescription拍照

相關問題