web-dev-qa-db-ja.com

UIImagePickerController使用時のiOS 10エラー[アクセス] <プライベート>

私は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で変更される可能性があるものが足りないのですか。

102
Pranoy C

あなたはあなたのplistにNSPhotoLibraryUsageDescriptionを入れる必要があるかもしれません。好き

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

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

172
rockdaswift

IOS 10では、Camera、Contactsなどのプライバシーに注意を要するデータにアクセスする前に、認証を要求する必要があります。そうしないと、アクセスしたときにアプリがクラッシュします。

このアプリは、使用法の説明がなくても機密情報にアクセスしようとしたためにクラッシュしました。アプリのInfo.plistには、アプリがこのデータをどのように使用するかをユーザーに説明する文字列値を含むNSContactsUsageDescriptionキーを含める必要があります。

これにどう対処するか?

プロジェクト内でinfo.plistという名前のファイルを開き、右クリックしてSource Codeとして開き、このコードをその下に貼り付けます。または、デフォルトでinfo.plistProperty Listとして開くことができます。追加ボタンをクリックしてください。Xcodeはキーボードの⬇️と⬇️を使ってPrivacy -とタイプしながら補完候補を提示します。

<string></string>の間に、あなたがこの承認を求める理由をあなたの説明を書くことを忘れないでください、さもなければあなたのアプリはアップルによって拒絶されるでしょう:

<!-- ???? 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に行きます。

enter image description here

それからあなたのプロジェクトをきれいにして、それを実行してください。

詳しくはこちらを参照してください。 iOS10AdaptationTips

132
ElonChan

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

.plist image

23
Pritesh

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

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

enter image description here

14
user4034301

IOS 10では、Appleはどのようなユーザのプライベートデータタイプにもアクセスする方法を変更しました。

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

詳しくは下記のGIFをご覧ください。

GIF

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

info.plistの下の文字列をコピーして貼り付けてください。

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

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

GIF

9