iOS 10 lỗi [access] <private> khi sử dụng UIImagePickerController


102

Tôi đang sử dụng XCode 8 và thử nghiệm với iOS 10.2 Beta.

Tôi đã thêm các khung Ảnh, PhotosUI và MobileCoreServices vào dự án.

Mã rất đơn giản:

#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

Và thực hiện:

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

Ngay sau khi tôi nhấn vào nút, ứng dụng bị treo với lỗi rất vô ích:

[access] <private>

Đó là nó. Không có gì khác.

Sử dụng câu lệnh break, ứng dụng có vẻ như bị lỗi tại "presentViewController".

Đây là một ứng dụng hoàn toàn mới và tôi không có bất kỳ thứ gì khác trong giao diện người dùng ngoài nút lấy.

Ngoài ra, thử nghiệm trên iOS 9.3, điều này hoạt động tốt. Tôi có thiếu thứ gì đó có thể được thay đổi trong iOS 10 không?


Làm sạch và sau đó xây dựng. Nếu không có thay đổi, có thể dễ dàng là lỗi trong Xcode 8 hoặc iOS 10 beta sẽ được Apple giải quyết trong bản cập nhật trong tương lai. Tôi thường thấy đây là trường hợp - nếu đó là bản beta cuối cùng hoặc bản phát hành của GM và nó vẫn không hoạt động, thì đây sẽ là lúc bạn phải lo lắng về việc sửa chữa nó.
Jordan Smith

1
vâng, cùng một vấn đề ngay cả sau khi làm sạch và xóa các ứng dụng :(
Pranoy C

Tôi sẽ không căng thẳng về nó. Đây là bản phát hành Beta. Rất có thể đó là sự cố với bản beta. Tôi khuyên bạn nên phát triển trên Xcode 7 cho đến khi phát hành gần hơn nhiều.
Jordan Smith,

ok có ý nghĩa! cảm ơn bạn @Jordan
Pranoy C

@Jordan có vẻ như có một yêu cầu mới đối với iOS 10. Hãy tham khảo giải pháp: stackoverflow.com/a/38241350/1634905
Pranoy C

Câu trả lời:


172

Bạn có thể cần đặt NSPhotoLibraryUsageDescription vào danh sách của mình. Giống

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

Kiểm tra tất cả các mô tả sử dụng ở đây .


1
xin lỗi làm thế nào bạn tìm thấy số phát hành này?
Pranoy C

1
Trong trang web tải xuống iOS, tôi vừa giải quyết bằng khóa UsageDescription chính xác.
rockdaswift 07/07/16

cảm ơn bạn, câu trả lời của bạn giải quyết vấn đề ngay lập tức! đây là một yêu cầu mới kể từ iOS 10. Chào mừng bạn đến với Stack tràn btw!
Pranoy C

Cám ơn rất nhiều! Tôi đã bị cháy bởi NSAppleMusicUsageDescription (truy cập thư viện nhạc iTunes).
lifejoy

4
@iomer, tôi đã khắc phục sự cố, tôi đã thêm khóa vào info.plist, nhưng tôi không thấy nó trong Project> Target> Info. Vì vậy, tôi cũng đã thêm vào đó và Apple đã thông qua Binary của tôi. Nó cũng đã xảy ra với tôi một lần trước đây với ID Facebook. Không biết tại sao nó không được hiển thị ở đó.
Raheel Sadiq

132

Trong iOS10, Trước khi bạn truy cập vào dữ liệu nhạy cảm về quyền riêng tư như Máy ảnh, Danh bạ, v.v., bạn phải yêu cầu cấp quyền, nếu không ứng dụng của bạn sẽ gặp sự cố khi bạn truy cập chúng. Khi đó Xcode sẽ ghi lại như sau:

Ứng dụng này đã gặp sự cố vì cố gắng truy cập dữ liệu nhạy cảm về quyền riêng tư mà không có mô tả sử dụng. Info.plist của ứng dụng phải chứa một NSContactsUsageDescriptionkhóa có giá trị chuỗi giải thích cho người dùng cách ứng dụng sử dụng dữ liệu này.

Làm thế nào để đối phó với điều này?

Mở tệp trong dự án của bạn có tên info.plist, nhấp chuột phải vào nó, mở dưới dạng Source Code, dán mã này bên dưới vào nó. Hoặc bạn có thể mở info.plistnhư Property Listtheo mặc định, nhấp vào nút thêm, Xcode sẽ cung cấp cho bạn những gợi ý hoàn trong khi đánh máy Privacy - với sự giúp đỡ của bàn phím ⬆️ và ⬇️.

Hãy nhớ viết mô tả lý do bạn yêu cầu ủy quyền này, giữa <string></string>, nếu không ứng dụng của bạn sẽ bị apple từ chối:

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

Nếu nó không hoạt động, hãy thử yêu cầu ủy quyền nền:

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

Hoặc truy cập target -> Capabilities -> Background Modes -> open the background Modes:

nhập mô tả hình ảnh ở đây

sau đó làm sạch Dự án của bạn, chạy nó.

Truy cập vào đây để biết thêm thông tin: iOS10AdaptationTips .


2
Tôi không sử dụng ảnh ở đâu và apple đang từ chối ứng dụng của tôi, có ý kiến ​​gì không ?. Tôi cũng kiểm tra tất cả các dự án nhóm
Raheel Sadiq

@RaheelSadiq Hãy nhớ viết mô tả của bạn tại sao bạn yêu cầu ủy quyền này, giữa <string> </string>hoặc ứng dụng của bạn sẽ bị apple từ chối.
ElonChan

23

trong iOS 10, bạn cần thêm khóa được đề cập trong hình ảnh bên dưới nếu bạn đang sử dụng máy ảnh hoặc thư viện ảnh trong ứng dụng của mình

.plist hình ảnh


14

Bạn cần thêm các cài đặt quyền riêng tư mới vào info.plist của bạn.

Đừng quên thêm giá trị mô tả lý do tại sao ứng dụng cần truy cập dịch vụ.

nhập mô tả hình ảnh ở đây


9

Trong iOS 10, Apple đã thay đổi cách bạn có thể truy cập vào bất kỳ loại dữ liệu riêng tư nào của người dùng.

Bạn cần thêm khóa Mô tả sử dụng Thư viện ảnh - Quyền riêng tư vào ứng dụng của bạn Info.plistvà thông tin sử dụng của chúng.

Để biết thêm thông tin, vui lòng tìm GIF bên dưới.

GIF

Hoặc nếu bạn muốn thêm qua info.plistthì bạn cần thêm khóa NSPhotoLibraryUsageDescription .

Chỉ cần sao chép và dán chuỗi bên dưới vào info.plist.

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

Vui lòng tìm GIF bên dưới để biết thêm thông tin.

GIF


1
và cả <key>NSCameraUsageDescription</key> <string> Chụp ảnh </string>
Nasir Khan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.