Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS11 WKWebview crash due to NSInvalidUnarchiveOperationException

With ObjectiveC I am developing a SingleView app targeting iOS 11 having one view controller/view. In the Main.storyboard on top of the view I've dropped a WebKit View (WKWebView).

I am seeing a crash in both the Simulator and on an iPhone 6 running iOS 11.0.1 :

Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named WKWebView'

Do I need anything else to have it working ? Looks like it's unable to instantiate WKWebView upon waking from storyboard.

Other details:

  • Xcode version 9.0 9A235
  • When I remove the WKWebView from the Storyboard the crash goes away
  • App Base SDK - latest iOS (iOS 11); Deployment target 11.0
  • Using the WebView(deprecated) -- UIWebView, it works
  • I did not attempt to instantiate it manually

Crash stack:

2017-11-06 18:38:27.765519+0200 XYZZMap[15689:1093338] *** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named WKWebView' *** First throw call stack: (     0   CoreFoundation                      0x00000001056d01cb __exceptionPreprocess + 171     1   libobjc.A.dylib                     0x0000000105032f41 objc_exception_throw + 48     2   CoreFoundation                      0x0000000105744b95 +[NSException raise:format:] + 197     3   UIKit                               0x000000010692d2c0 UINibDecoderDecodeObjectForValue + 323     4   UIKit                               0x000000010692d5db UINibDecoderDecodeObjectForValue + 1118     5   UIKit                               0x000000010692d172 -[UINibDecoder decodeObjectForKey:] + 89     6   UIKit                               0x00000001062f866b -[UIView initWithCoder:] + 969     7   UIKit                               0x000000010692d43d UINibDecoderDecodeObjectForValue + 704     8   UIKit                               0x000000010692d172 -[UINibDecoder decodeObjectForKey:] + 89     9   UIKit                               0x00000001066dd1a7 -[UIRuntimeConnection initWithCoder:] + 178     10  UIKit                               0x000000010692d43d UINibDecoderDecodeObjectForValue + 704     11  UIKit                               0x000000010692d5db UINibDecoderDecodeObjectForValue + 1118     12  UIKit                               0x000000010692d172 -[UINibDecoder decodeObjectForKey:] + 89     13  UIKit                               0x00000001066dc3a4 -[UINib instantiateWithOwner:options:] + 1262     14  UIKit                               0x00000001063f8d07 -[UIViewController _loadViewFromNibNamed:bundle:] + 383     15  UIKit                               0x00000001063f9610 -[UIViewController loadView] + 177     16  UIKit                               0x00000001063f9941 -[UIViewController loadViewIfRequired] + 195     17  UIKit                               0x00000001063fa19e -[UIViewController view] + 27     18  UIKit                               0x00000001062cdd17 -[UIWindow addRootViewControllerViewIfPossible] + 122     19  UIKit                               0x00000001062ce41f -[UIWindow _setHidden:forced:] + 294     20  UIKit                               0x00000001062e12bf -[UIWindow makeKeyAndVisible] + 42     21  UIKit                               0x0000000106255015 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 4711     22  UIKit                               0x000000010625a245 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1720     23  UIKit                               0x0000000106615c6c __111-[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:]_block_invoke + 924     24  UIKit                               0x00000001069e33ef +[_UICanvas _enqueuePostSettingUpdateTransactionBlock:] + 153     25  UIKit                               0x0000000106615865 -[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:] + 249     26  UIKit                               0x00000001066160c3 -[__UICanvasLifecycleMonitor_Compatability activateEventsOnly:withContext:completion:] + 668     27  UIKit                               0x0000000106f73c11 __82-[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:]_block_invoke + 262     28  UIKit                               0x0000000106f73aca -[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:] + 444     29  UIKit                               0x0000000106c61b9c __125-[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:]_block_invoke + 420     30  UIKit                               0x0000000106e5cc3e _performActionsWithDelayForTransitionContext + 100     31  UIKit                               0x0000000106c61998 -[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:] + 231     32  UIKit                               0x00000001069e2a4c -[_UICanvas scene:didUpdateWithDiff:transitionContext:completion:] + 392     33  UIKit                               0x0000000106258ac6 -[UIApplication workspace:didCreateScene:withTransitionContext:completion:] + 523     34  UIKit                               0x0000000106821523 -[UIApplicationSceneClientAgent scene:didInitializeWithEvent:completion:] + 369     35  FrontBoardServices                  0x000000010b539158 -[FBSSceneImpl _didCreateWithTransitionContext:completion:] + 338     36  FrontBoardServices                  0x000000010b541c4d __56-[FBSWorkspace client:handleCreateScene:withCompletion:]_block_invoke_2 + 235     37  libdispatch.dylib                   0x00000001096b643c _dispatch_client_callout + 8     38  libdispatch.dylib                   0x00000001096bbaf4 _dispatch_block_invoke_direct + 592     39  FrontBoardServices                  0x000000010b56d672 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 24     40  FrontBoardServices                  0x000000010b56d328 -[FBSSerialQueue _performNext] + 464     41  FrontBoardServices                  0x000000010b56d897 -[FBSSerialQueue _performNextFromRunLoopSource] + 45     42  CoreFoundation                      0x00000001056732b1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17     43  CoreFoundation                      0x0000000105712d31 __CFRunLoopDoSource0 + 81     44  CoreFoundation                      0x0000000105657c19 __CFRunLoopDoSources0 + 185     45  CoreFoundation                      0x00000001056571ff __CFRunLoopRun + 1279     46  CoreFoundation                      0x0000000105656a89 CFRunLoopRunSpecific + 409     47  GraphicsServices                    0x000000010be609c6 GSEventRunModal + 62     48  UIKit                               0x000000010625bd30 UIApplicationMain + 159     49  XYZZMap                             0x00000001047274bf main + 111     50  libdyld.dylib                       0x0000000109732d81 start + 1     51  ???                                 0x0000000000000001 0x0 + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException 

Thanks!

like image 991
dmind Avatar asked Nov 06 '17 17:11

dmind


People also ask

Is WKWebView same as Safari?

You can think of WKWebView as a stripped-down version of Safari. It is responsible to load a URL request and display the web content. WKWebView has the benefit of the Nitro JavaScript engine and offers more features. If you just need to display a specific web page, WKWebView is the best option for this scenario.

What browser is WKWebView?

Loading a Web Page in WKWebView It's part of the WebKit framework and WKWebView uses the same browser engine as Safari on iOS and Mac. Adding a web view to your app is as simple as adding a UIView or UIButton to your view controller in Interface Builder.

What is iOS WKWebView?

A WKWebView object is a platform-native view that you use to incorporate web content seamlessly into your app's UI. A web view supports a full web-browsing experience, and presents HTML, CSS, and JavaScript content alongside your app's native views.

Could not instantiate class named WKWebView because no class named WKWebView was found?

How to Resolve “Couldn't instantiate class named WKWebView” Error When Using WebKit. @IBOutlet var webView: WKWebView. When accessing the web view, the app quit and showed the error above. To resolve the error, all you need is add the WebKit framework to your Xcode project.


2 Answers

NSInvalidUnarchiveOperationException when loading the nib / storyboard means there an object in the nib / storyboard that the runtime doesn't understand. This is because the framework that defines that kind of object is missing.

So, in this case, you need to link your app target against the WebKit framework so that the app understands what a WKWebView is when it is decoded from the storyboard.

Here's a screen shot showing the app target's Build Phases when this is correctly configured:

enter image description here

like image 136
matt Avatar answered Oct 03 '22 06:10

matt


Select Target -> General -> Linked framework and libraries -> click on + symbol below -> search for webKit.Framwork -> add.

like image 24
ram880 Avatar answered Oct 03 '22 07:10

ram880