iOS 11 在使用 UNUserNotificationCenter 时因 bundleProxy 崩溃!= nil 错误 [英] iOS 11 crashing with bundleProxy != nil error on using UNUserNotificationCenter
问题描述
以下代码行是我们的应用突然开始在 iOS 11/11.0.1/11.0.2/11.1.1/11.2.2 上对某些用户崩溃的地方:
The following line of code is where our app has suddenly started to crash on iOS 11 / 11.0.1 / 11.0.2 / 11.1.1 / 11.2.2 for some users:
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
我们在 didFinishLaunchingWithOptions
中得到了这个.崩溃报告说:
We've got this in didFinishLaunchingWithOptions
. The crash report says:
Fatal Exception: NSInternalInconsistencyException
Invalid parameter not satisfying: bundleProxy != nil
Fatal Exception: NSInternalInconsistencyException
0 CoreFoundation 0x1869b3d38 __exceptionPreprocess
1 libobjc.A.dylib 0x185ec8528 objc_exception_throw
2 CoreFoundation 0x1869b3c0c +[NSException raise:format:]
3 Foundation 0x187342c24 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]
4 UserNotifications 0x18fcc973c -[UNUserNotificationCenter initWithBundleProxy:]
5 UserNotifications 0x18fcc950c __53+[UNUserNotificationCenter currentNotificationCenter]_block_invoke
6 libdispatch.dylib 0x186339048 _dispatch_client_callout
7 libdispatch.dylib 0x18633c710 dispatch_once_f$VARIANT$mp
8 UserNotifications 0x18fcc94ac +[UNUserNotificationCenter currentNotificationCenter]
它显然来自 iOS.还有其他人遇到同样的错误吗?知道发生了什么吗?
It's coming from iOS clearly. Any one else experiencing the same error? Any idea what's going on?
推荐答案
我不确定这是否适用于每个人,但我已经为我的用例找到了它.我创建了一个 iOS 应用程序使用的框架.该框架使用 UNUserNotificationCenter
来设置警报.似乎出于某种原因,当从框架内部使用此代码时,捆绑包"没有正确初始化.有时有效,有时无效.这个 bundleProxy
听起来像是通知框架所依赖的某种代理.由于代码是从框架内部执行的,因此可能在运行时找不到此捆绑包并且系统返回 nil.在尝试从捆绑包位置不正确的框架加载资源时,我通常会遇到此问题.
I'm not sure if this is going to work for everyone, however I've figured it out for my use case. I had created a framework that the iOS app used. This framework was using UNUserNotificationCenter
to setup alerts. It seems for some reason, the 'bundle' does not get correctly initialised when this code is used from inside a framework. Sometimes it works, sometimes it doesn't. This bundleProxy
, by the sound of things, is some kind of a proxy that the notification framework relies on. Since the code is executing from inside of a framework, perhaps this bundle is not found at runtime and the system returns nil. I've had this issue in general when trying to load resources from the Framework where the bundle location isn't correct.
无论如何,我的解决方案是在启动时在应用程序的委托中存储对 [UNUserNotificationCenter currentNotificationCenter]
的引用,然后将其传递给任何想要使用它的方法.当应用程序完成启动时,如果调用代码是应用程序的二进制文件本身,则此 proxy
似乎可以正确加载.这似乎已经为我解决了.
Any way, the solution for me was to store a reference to [UNUserNotificationCenter currentNotificationCenter]
in the app's delegate at launch, and then pass this to any method that wanted to use it. By the time the app has finished launching, this proxy
seems to load correctly if the calling code is the app's binary itself. This seems to have fixed it for me.
这篇关于iOS 11 在使用 UNUserNotificationCenter 时因 bundleProxy 崩溃!= nil 错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!