UIImagePickerControllerを使用する場合のiOS 10エラー[アクセス] <プライベート>


102

XCode 8を使用していて、iOS 10.2 Betaでテストしています。

Photos、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」でクラッシュするようです。

これは新しいアプリで、UIにはグラブボタン以外は何もありません。

また、iOS 9.3でのテストでは、これは正常に機能します。iOS 10で変更される可能性のあるものがないのですか?


クリーンしてからビルドします。変更がない場合は、Xcode 8またはiOS 10ベータのバグである可能性が高く、将来のアップデートでAppleによって解決される予定です。私はしばしばこれが事実であることを発見します-それが最後のベータ版またはGMリリースであり、それがまだ機能していない場合、それを修正することを心配する時でしょう。
ジョーダンスミス

1
うん

私はそれについて強調しません。これはベータ版です。ベータ版の問題である可能性が高くなります。リリースにかなり近づくまでXcode 7での開発をお勧めします。
ジョーダンスミス

わかりました!ありがとう@ジョーダン
プラノイC 16/07/17

@ジョーダンは、iOS 10の時点で新しい要件があるようです。ソリューションを参照してください:stackoverflow.com/a/38241350/1634905
Pranoy C

回答:


172

NSPhotoLibraryUsageDescriptionをplistに入れる必要があるかもしれません。お気に入り

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

ここですべての使用法の説明を確認してください。


1
どうしてこのリリース番号を見つけたの?
Pranoy C

1
iOSダウンロードWebサイトで、正しいUsageDescriptionキーで解決しました。
rockdaswift 2016

ありがとう、あなたの答えは問題をすぐに解決しました!これはiOS 10以降の新しい要件です。スタックオーバーフローへようこそ。
Pranoy C

本当にありがとう!NSAppleMusicUsageDescription(iTunes音楽ライブラリにアクセス)でやけどしました。
lifjoy 2016

4
@iomer問題を修正しました。info.plistにキーを追加しましたが、[プロジェクト]> [ターゲット]> [情報]にキーが表示されませんでした。そこで私もそこに追加し、Appleは私のバイナリを渡しました。これは、かつてFacebook IDでも発生していました。そこに表示されなかった理由がわかりません。
Raheel Sadiq 2016

132

iOS10では、カメラ、連絡先などのプライバシーに関わるデータにアクセスする前に、認証を要求する必要があります。そうしないと、アクセス時にアプリがクラッシュします。Xcodeは次のようにログに記録します。

このアプリは、使用法の説明なしでプライバシーに敏感なデータにアクセスしようとしたため、クラッシュしました。アプリのInfo.plistにはNSContactsUsageDescription、アプリがこのデータをどのように使用するかをユーザーに説明する文字列値を持つキーが含まれている必要があります。

これに対処するには?

という名前のプロジェクトでファイルを開きinfo.plist、右クリックしてとして開きSource Code、このコードを以下に貼り付けます。それともあなたが開くことができる info.plistようProperty List、デフォルトで[追加]ボタンをクリックし、Xcodeはあなたにタイピングしながら、補完を示唆与えるPrivacy - キーボードの助けを借りてを⬆️と⬇️。

との間でこの承認を要求する理由を説明してください。そうしない <string></string>、アプリが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>

機能しない場合は、バックグラウンド認証を要求してください。

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

またはに行くtarget -> Capabilities -> Background Modes -> open the background Modes

ここに画像の説明を入力してください

次に、プロジェクトをクリーンアップして実行します。

詳細については、iOS10AdaptationTipsを参照してください 。


2
私はどこにも写真を使用していませんが、アップルは私のアプリを拒否しています。私はすべてのポッドプロジェクトもチェックしています
Sadiq

@RaheelSadiqこの承認を求める理由をとの間で説明してください。そうしない<string> </string>、アプリがApple によって拒否されます。
ElonChan 2016年

23

アプリでカメラまたはフォトギャラリーを使用している場合、iOS 10で以下の画像に記載されているキーを追加する必要があります

.plist画像


14

新しいプライバシー設定をinfo.plistに追加する必要があります。

アプリがサービスにアクセスする必要がある理由を説明する値を追加することを忘れないでください。

ここに画像の説明を入力してください


9

iOS 10では、Appleはユーザーのプライベートデータタイプへのアクセス方法を変更しました。

アプリとその使用情報にプライバシー-フォトライブラリ使用説明キーを追加する必要がありますInfo.plist

詳細については、以下のGIFをご覧ください。

GIF

または経由で追加info.plistする場合は、NSPhotoLibraryUsageDescriptionキーを追加する必要があります。

以下の文字列をコピーして貼り付けますinfo.plist

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

詳細については、以下のGIFをご覧ください。

GIF


1
<key> NSCameraUsageDescription </ key> <string> Take the photo </ string>
Nasir Khan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.