由于缺少NSPhotoLibraryAddUsageDescription,应用程序崩溃报告,但我的应用程序从未使用过任何照片。

5

我看到几个崩溃报告显示

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY

终止原因:TCC,此应用程序崩溃是因为它尝试访问隐私敏感数据而没有使用说明。 应用程序的Info.plist文件必须包含一个NSPhotoLibraryAddUsageDescription密钥,其中包含一个字符串值,向用户解释应用程序如何使用这些数据。
非常有趣,特别是因为我的应用程序无论出于任何原因都不会接近照片库。那么这到底是怎么回事呢?TCC又是什么?
我很愿意添加此密钥,但我没有任何解释为什么需要它,因此我无法提供任何有意义的文本!
问题仅发生在iOS 12.1上,虽然这可能并没有什么意义,因为你不能证明不存在。我当然怀疑是iOS的错误,并将报告此问题,但我想知道是否有其他人看到了这种奇怪的现象。
以下是更典型的崩溃报告的一部分:
由线程3触发。
Thread 2 name:
Thread 2:
0   libsystem_kernel.dylib          0x000000019ffe3f0c semaphore_wait_trap + 8
1   libdispatch.dylib               0x000000019fe32f8c _dispatch_sema4_wait$VARIANT$mp + 24 (lock.c:134)
2   libdispatch.dylib               0x000000019fe33a10 _dispatch_semaphore_wait_slow + 136 (semaphore.c:132)
3   AssetsLibraryServices           0x00000001ade2d140 __79-[PLPrivacy _isPhotosAccessAllowedWithScope:forceHandler:accessAllowedHandler:]_block_invoke_2 + 412 (PLPrivacy.m:183)
4   AssetsLibraryServices           0x00000001ade138b4 __pl_dispatch_async_block_invoke + 36 (PLDispatchHelpers.m:23)
[skipping the rest]

Thread 3 Crashed:
0   libsystem_kernel.dylib          0x000000019ffeddf8 __abort_with_payload + 8
1   libsystem_kernel.dylib          0x000000019ffe7838 abort_with_payload_wrapper_internal + 100 (terminate_with_reason.c:71)
2   libsystem_kernel.dylib          0x000000019ffe7868 abort_with_payload + 12 (terminate_with_reason.c:93)
3   TCC                             0x00000001a32aea70 __CRASHING_DUE_TO_PRIVACY_VIOLATION__ + 204 (TCC.c:372)
4   TCC                             0x00000001a32ae9a4 __TCCAccessRequest_block_invoke.77 + 708 (TCC.c:508)
5   TCC                             0x00000001a32b2a90 __tccd_send_message_block_invoke + 276 (TCC.c:220)
[skipping the rest]

似乎有东西试图将照片添加到照片库中。在堆栈跟踪中是否有其他线索,可以确定它在崩溃发生时所在的代码位置? - Paulw11
@Paulw11 我认为没有,但我相信我已经找到了这种情况可能发生的用例。奇怪的是,不是我(应用程序)在添加,而是用户在有效地执行进程外操作;这个权限不应该被需要。我认为这是iOS中的一个错误。 - matt
我在想它是否是这样的情况;用户分享图像或其他内容到他们的照片库中,正如你所说,这对于你的应用程序来说不应该是一个隐私问题。 - Paulw11
1
当使用UIActivityViewController并且用户按下保存到照片库时,同样会发生这种情况!! - Prashant Tukadiya
1个回答

6
我成功地重现了崩溃!原因是我的应用包含一个Web视图。如果用户在该Web视图中点击一张图片,将会出现一个“保存”菜单项。如果用户点击“保存”,我们需要获得授权;如果Info.plist中没有隐私字符串,那么此时我们就会崩溃(如果有,则会弹出授权对话框)。
在我看来,这是iOS的一个bug。我从未打算让用户这样做;这只是Web视图的一个功能。因此,从Web视图保存到照片库的行为实际上是一个外部过程;是用户在执行操作,而不是我的应用程序。用户不应该需要授权;是用户点击了图片,然后点击了保存按钮。没有任何一种情况可以在没有用户多次故意操作的情况下发生,这些操作都不直接涉及我的应用程序。我将向苹果报告此问题。

请问您能提供一下您所提交的错误报告的URL吗? - NovaJoe
@NovaJoe 这是雷达#46224031。但这对你没有任何好处;你无法看到苹果的漏洞库内部。 - matt
简直不敢相信我在这上面花了多长时间……我肯定所有的权限都覆盖了,但我从来没有想到过这个。 - m_katsifarakis
1
请注意,这个问题仍然存在,并且仍然让人们(比如我)感到疯狂。这一切都与webview中的权限有关。我们不应该对这些权限负责。我不希望我的用户觉得我们的应用程序做了更多的事情。苹果需要解决这个问题。 - eResourcesInc
为了避免其他人尝试这个方法,我在输入字段中添加了capture="filesystem",但它仍然导致应用程序崩溃。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接