我刚刚遇到了同样的问题。但是(至少据我所知)仅在我的应用程序的调试版本中。我没有办法修复它。但似乎 storekit 正在尝试连接到某个 Apple 服务器,并且有时该连接需要很长时间。
在尝试建立连接时,整个主队列被冻结。什么都没有通过。
我做了一些系统日志。在某些时候,我看到了这种情况:
Mar 4 18:17:37 RetepV StoreKitUIService(CFNetwork)[14436] <Notice>: Task <F9F9DB85-B649-43CC-A3D6-B8E931BF9ADA>.<27> resuming, QOS(0x19)
Mar 4 18:17:37 RetepV StoreKitUIService(CFNetwork)[14436] <Notice>: Task <F9F9DB85-B649-43CC-A3D6-B8E931BF9ADA>.<27> {strength 0, tls 4, ct 0, sub 0, sig 1, ciphers 0, bundle 1, builtin 0}
Mar 4 18:17:37 RetepV StoreKitUIService(CFNetwork)[14436] <Notice>: TIC Enabling TLS [29:0x280586a00]
Mar 4 18:17:37 RetepV StoreKitUIService(CFNetwork)[14436] <Notice>: TIC TCP Conn Start [29:0x280586a00]
Mar 4 18:17:37 RetepV StoreKitUIService(libnetwork.dylib)[14436] <Notice>: [C29 Hostname#68464834:443 tcp, url hash: 11d80191, tls] start
Mar 4 18:17:37 RetepV StoreKitUIService(libnetwork.dylib)[14436] <Notice>: nw_connection_report_state_with_handler_locked [C29] reporting state preparing
Mar 4 18:17:37 RetepV StoreKitUIService(CFNetwork)[14436] <Notice>: Task <F9F9DB85-B649-43CC-A3D6-B8E931BF9ADA>.<27> setting up Connection 29
.
然后发生了很多与连接 C29 无关的事情。而我第一次看到 C29 再次弹出是 31 秒后:
Mar 4 18:18:08 RetepV StoreKitUIService(libnetwork.dylib)[14436] <Notice>: nw_endpoint_flow_protocol_connected [C29.1 IPv4#9566630f:443 in_progress channel-flow (satisfied)] Transport protocol connected
.
我已经观察到我的应用被冻结了大约 30 秒。
我不知道如何解决这个问题,它只是 1 行的 API 调用。这是只有 Apple 必须解决的问题。可以将应用程序冻结一段未知时间的 API 函数并不好。
编辑:
注意:我的 requestReview 调用始终在主线程上进行。