Xcode AX查找问题-仅发生在真实的设备上

sxpgvts3  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(209)

bounty还有2天到期。此问题的答案有资格获得+200声望奖励。daniel想要引起更多关注这个问题:我想至少知道是什么导致了“未知客户端”错误,这到底是什么意思,哪个客户端被称为“未知客户端”?

此错误不会导致应用程序崩溃,但值得关注。我一直无法确定为什么会发生这种情况,尽管我已经发现只有当我调用present(picker, animated: true)时才会发生这种情况,其中pickerUIImagePickerController()。我已经添加了所有必要的权限到我的info.plist,甚至创建了一个小的测试应用程序来重现这个错误。
使用任何模拟器时都不会发生这种情况,我只能找到另一个关于这样的错误的SO帖子,尽管that post也没有回答。
我制作的测试应用程序由一个简单的故事板组成,它有一个按钮来调用UIImagePickerController() present函数,然后是一个imageView来接受这张照片。
下面是ViewController.swift的代码:

import UIKit

class ViewController: UIViewController {
    @IBOutlet var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    @IBAction func setPicture(_ sender: Any) {
        let picker = UIImagePickerController()
        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
            picker.delegate = self
            picker.sourceType = .photoLibrary
            picker.allowsEditing = true
            present(picker, animated: true)
        }
}
extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
           imageView.image = image
        }
        picker.dismiss(animated: true, completion: nil)
    }
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }
}

我将在下面的控制台中包含我看到的完整错误:

2021-01-21 09:40:00.160241-0500 Outdoorist[2480:608042] [AXRuntimeCommon] Unknown client: Outdoorist
2021-01-21 09:40:07.259911-0500 Outdoorist[2480:608307] [AXRuntimeCommon] AX Lookup problem - errorCode:1100 error:Permission denied portName:'com.apple.iphone.axserver' PID:2483 (
    0   AXRuntime                           0x00000001a3f9eeac 0C4A28F7-3959-3709-8C05-A1A91EED978B + 347820
    1   AXRuntime                           0x00000001a3f4dfb8 _AXGetPortFromCache + 548
    2   AXRuntime                           0x00000001a3f4f610 AXUIElementPerformFencedActionWithValue + 460
    3   UIKit                               0x00000001ce67823c 737C2677-858F-3820-AD45-0EBAABC788BB + 852540
    4   libdispatch.dylib                   0x0000000102e8bce4 _dispatch_call_block_and_release + 24
    5   libdispatch.dylib                   0x0000000102e8d528 _dispatch_client_callout + 16
    6   libdispatch.dylib                   0x0000000102e945ac _dispatch_lane_serial_drain + 748
    7   libdispatch.dylib                   0x0000000102e95234 _dispatch_lane_invoke + 452
    8   libdispatch.dylib                   0x0000000102ea0a5c _dispatch_workloop_worker_thread + 1456
    9   libsystem_pthread.dylib             0x00000001ce3935a4 _pthread_wqthread + 272
    10  libsystem_pthread.dylib             0x00000001ce396874 start_wqthread + 8
)
2021-01-21 09:40:07.260672-0500 Outdoorist[2480:608307] [AXRuntimeCommon] AX Lookup problem - errorCode:1100 error:Permission denied portName:'com.apple.iphone.axserver' PID:2483 (
    0   AXRuntime                           0x00000001a3f9eeac 0C4A28F7-3959-3709-8C05-A1A91EED978B + 347820
    1   AXRuntime                           0x00000001a3f4dfb8 _AXGetPortFromCache + 548
    2   AXRuntime                           0x00000001a3f4f610 AXUIElementPerformFencedActionWithValue + 460
    3   UIKit                               0x00000001ce67823c 737C2677-858F-3820-AD45-0EBAABC788BB + 852540
    4   libdispatch.dylib                   0x0000000102e8bce4 _dispatch_call_block_and_release + 24
    5   libdispatch.dylib                   0x0000000102e8d528 _dispatch_client_callout + 16
    6   libdispatch.dylib                   0x0000000102e945ac _dispatch_lane_serial_drain + 748
    7   libdispatch.dylib                   0x0000000102e95234 _dispatch_lane_invoke + 452
    8   libdispatch.dylib                   0x0000000102ea0a5c _dispatch_workloop_worker_thread + 1456
    9   libsystem_pthread.dylib             0x00000001ce3935a4 _pthread_wqthread + 272
    10  libsystem_pthread.dylib             0x00000001ce396874 start_wqthread + 8
)
2021-01-21 09:40:07.261213-0500 Outdoorist[2480:608307] [AXRuntimeCommon] AX Lookup problem - errorCode:1100 error:Permission denied portName:'com.apple.iphone.axserver' PID:2483 (
    0   AXRuntime                           0x00000001a3f9eeac 0C4A28F7-3959-3709-8C05-A1A91EED978B + 347820
    1   AXRuntime                           0x00000001a3f4dfb8 _AXGetPortFromCache + 548
    2   AXRuntime                           0x00000001a3f4f610 AXUIElementPerformFencedActionWithValue + 460
    3   UIKit                               0x00000001ce67823c 737C2677-858F-3820-AD45-0EBAABC788BB + 852540
    4   libdispatch.dylib                   0x0000000102e8bce4 _dispatch_call_block_and_release + 24
    5   libdispatch.dylib                   0x0000000102e8d528 _dispatch_client_callout + 16
    6   libdispatch.dylib                   0x0000000102e945ac _dispatch_lane_serial_drain + 748
    7   libdispatch.dylib                   0x0000000102e95234 _dispatch_lane_invoke + 452
    8   libdispatch.dylib                   0x0000000102ea0a5c _dispatch_workloop_worker_thread + 1456
    9   libsystem_pthread.dylib             0x00000001ce3935a4 _pthread_wqthread + 272
    10  libsystem_pthread.dylib             0x00000001ce396874 start_wqthread + 8
)

我将非常感谢任何帮助解决这个问题或如何避免它。
我使用Xcode 12.3版本,如果这是任何相关的。

tpxzln5u

tpxzln5u1#

你描述的问题在iOS 16.4.1上是可重现的,并且已经存在了很长时间。无论您的iPhone的辅助功能配置如何,都会发生这种情况。这是操作系统中的错误,而不是您的代码。然而,它本身并没有伤害,也没有你能做的修复。
未知的客户端Outdoorist仅仅意味着正在运行的应用程序Outdoorist没有特权(间接)与Accessibility Runtime对话。
iOS的工作方式(实际上,基于达尔文的系统,iOS就是一个例子)是不同的进程通过发送Mach消息相互协调。在进程之间的边界上应用了安全性,因为不是每个进程都有“权限”在特定端口号上与另一个进程通信。
特别是在这里,你的程序不允许,通过一个帮助函数,要求可访问性运行时执行一些动作。
图像拾取器是特殊的;它被沙箱化,远离您的实际应用程序,以减轻不良应用程序访问用户私人照片的安全风险。可能苹果没有在操作系统中正确配置它来与无障碍运行时协作。

我们是怎么知道的?

在下面的解释中,我调用了我的示例应用程序understand-ax-crash,因为当时我不明白问题出在哪里。(其实不是崩溃)
当您在选择器中选择“选择”时,您会注意到日志消息,并且可以将消息的来源设置为断点(按地址),然后可以重复这些步骤。当第二次按下“选择”时,我们会看到问题所在的上下文。

在这里,我们可以看到线程4,间接地从您的应用中启动,发出了失败的请求(ax-remoteview-unregister-queue)。
这将是可访问性运行时,服务于拒绝此请求的Mach端口com.apple.iphone.axserver。断点只会从我们停止执行的地方转储线程回溯。
我们看到控制台出现故障。

在分解中进一步查看,可以详细了解产生此错误的步骤。
你唯一能做的就是向苹果报告这个问题。

相关问题