Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Photos Framework crash: 'This application is not allowed to access Photo data.'

Tags:

App crashes if photo access permission is not granted and the object which asked for permission is about to deallocate.

Apple's sample code (for Photos framework) crashes too.

My app crashes with following stack trace:

*** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'This application is not allowed to access Photo data.'


*** First throw call stack:
(
    0   CoreFoundation                      0x000000010a324f65 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010c030deb objc_exception_throw + 48
    2   PhotoLibraryServices                0x000000011c1f7e2d -[PLPhotoLibrary initWithTransientContext:name:] + 1183
    3   Photos                              0x000000011bd6a445 __30-[PHPhotoLibrary photoLibrary]_block_invoke + 59
    4   libdispatch.dylib                   0x0000000110f5e49b _dispatch_client_callout + 8
    5   libdispatch.dylib                   0x0000000110f49e28 dispatch_once_f + 543
    6   Photos                              0x000000011bd6a404 -[PHPhotoLibrary photoLibrary] + 140
    7   Photos                              0x000000011bd3e5e8 -[PHCoreImageManager _cancelAndFlushPreheatItemsForAssets:CPLPrefetching:domain:operation:passingTestHandler:didCancelHandler:] + 174
    8   Photos                              0x000000011bd5900c -[PHImageManager dealloc] + 176
    9   libobjc.A.dylib                     0x000000010c044afe _ZN11objc_object17sidetable_releaseEb + 232
    10  MyApp                               0x000000010f271812 _TToFC12MyApp16PhotosDataSourceE + 66
    11  libobjc.A.dylib                     0x000000010c02f7bb _ZL27object_cxxDestructFromClassP11objc_objectP10objc_class + 127
    12  libobjc.A.dylib                     0x000000010c03a390 objc_destructInstance + 93
    13  libobjc.A.dylib                     0x000000010c03a3c3 object_dispose + 22
    14  MyApp                               0x000000010f271796 _TFC12MyApp16PhotosDataSourceD + 198
    15  MyApp                               0x000000010f2717c2 _TToFC12MyApp16PhotosDataSourceD + 34
    16  libobjc.A.dylib                     0x000000010c044afe _ZN11objc_object17sidetable_releaseEb + 232
    17  MyApp                               0x000000010f2668f2 _TToFC12MyApp25PhotoPickerViewControllerE + 178
    18  libobjc.A.dylib                     0x000000010c02f7bb _ZL27object_cxxDestructFromClassP11objc_objectP10objc_class + 127
    19  libobjc.A.dylib                     0x000000010c03a390 objc_destructInstance + 93
    20  libobjc.A.dylib                     0x000000010c03a3c3 object_dispose + 22
    21  UIKit                               0x000000010adb54b9 -[UIResponder dealloc] + 130
    22  UIKit                               0x000000010ad40721 -[UIViewController dealloc] + 1949
    23  UIKit                               0x000000010ad1c97b -[UIPresentationController .cxx_destruct] + 262
    24  libobjc.A.dylib                     0x000000010c02f7bb _ZL27object_cxxDestructFromClassP11objc_objectP10objc_class + 127
    25  libobjc.A.dylib                     0x000000010c03a390 objc_destructInstance + 93
    26  libobjc.A.dylib                     0x000000010c03a3c3 object_dispose + 22
    27  UIKit                               0x000000010ad185db -[UIPresentationController dealloc] + 56
    28  UIKit                               0x000000010b4a9046 -[_UIFullscreenPresentationController dealloc] + 56
    29  libobjc.A.dylib                     0x000000010c044afe _ZN11objc_object17sidetable_releaseEb + 232
    30  UIKit                               0x000000010ad1838c __destroy_helper_block_411 + 24
    31  libsystem_blocks.dylib              0x0000000110fdb6b1 _Block_release + 128
    32  UIKit                               0x000000010b568d9c -[_UIViewControllerTransitionContext .cxx_destruct] + 94
    33  libobjc.A.dylib                     0x000000010c02f7bb _ZL27object_cxxDestructFromClassP11objc_objectP10objc_class + 127
    34  libobjc.A.dylib                     0x000000010c03a390 objc_destructInstance + 93
    35  libobjc.A.dylib                     0x000000010c03a3c3 object_dispose + 22
    36  UIKit                               0x000000010b567825 -[_UIViewControllerTransitionContext dealloc] + 56
    37  UIKit                               0x000000010b568e51 -[_UIViewControllerOneToOneTransitionContext dealloc] + 79
    38  libobjc.A.dylib                     0x000000010c044afe _ZN11objc_object17sidetable_releaseEb + 232
    39  MyApp                               0x000000010d4818d2 block_destroy_helper + 66
    40  MyApp                               0x000000010d481988 _TPA__TFFC16MyApp31CustomShrinkAnimator17animateTransitionFS0_FPSo36UIViewControllerContextTransitioning_T_U0_FSbT_ + 152
    41  MyApp                               0x000000010d481a28 _TPA__TTRXFo_dSb_dT__XFo_iSb_iT__ + 120
    42  MyApp                               0x000000010d481aed block_destroy_helper8 + 13
    43  libsystem_blocks.dylib              0x0000000110fdb6b1 _Block_release + 128
    44  UIKit                               0x000000010ac5ee47 -[UIViewAnimationBlockDelegate .cxx_destruct] + 43
    45  libobjc.A.dylib                     0x000000010c02f7bb _ZL27object_cxxDestructFromClassP11objc_objectP10objc_class + 127
    46  libobjc.A.dylib                     0x000000010c03a390 objc_destructInstance + 93
    47  libobjc.A.dylib                     0x000000010c03a3c3 object_dispose + 22
    48  libobjc.A.dylib                     0x000000010c044afe _ZN11objc_object17sidetable_releaseEb + 232
    49  CoreFoundation                      0x000000010a228d4d -[__NSDictionaryI dealloc] + 141
    50  libobjc.A.dylib                     0x000000010c044afe _ZN11objc_object17sidetable_releaseEb + 232
    51  libobjc.A.dylib                     0x000000010c0450b8 _ZN12_GLOBAL__N_119AutoreleasePoolPage3popEPv + 488
    52  CoreFoundation                      0x000000010a2129c6 _CFAutoreleasePoolPop + 22
    53  CoreFoundation                      0x000000010a246941 __CFRunLoopRun + 2081
    54  CoreFoundation                      0x000000010a245e98 CFRunLoopRunSpecific + 488
    55  GraphicsServices                    0x0000000112598ad2 GSEventRunModal + 161
    56  UIKit                               0x000000010abb8676 UIApplicationMain + 171
    57  MyApp                               0x00000001082b470d main + 109
    58  libdyld.dylib                       0x0000000110f9392d start + 1
    59  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

Any pointers would be really appreciated.

like image 648
O Fenômeno Avatar asked Oct 21 '15 18:10

O Fenômeno


1 Answers

This is expected behaviour. Before you use any methods (like fetching, changing) of the Photos Framework, check the permission status to the Photo-Library. This is done by calling the authorizationStatus method of PHPhotoLibrary. If this method PHAuthorizationStatusNotDetermined,ask for permission using the requestAuthorization method. If authorizationStatushas a value of PHAuthorizationStatusDenied fall gracefully. The main point is to let requestAuthorization prompt for access to the Photo-Library and not the fetch methods directly.

like image 135
holtmann Avatar answered Sep 21 '22 21:09

holtmann