When creating Titanium module for iOS platform, sometimes we need to include xib (NeXT Interface Builder) file. But if we include the file just like that, then we will face this error
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/username/Library/Application Support/iPhone Simulator/6.1/Applications/<app id>/myiosmodule.app> (loaded)' with name 'MyView''
To fix, we need to include a compiled xib file known as nib file. To compile it, you need to include it in a native iOS project & build it.
Update: Easier way to compile xib to nib file is using ibtool
$ ibtool MPAdBrowserController.xib --compile MPAdBrowserController.nib
Compile xib to nib file
For example here, I’m create mopub module for iOS
- Open Xcode, create new project, and choose ‘Single View Application’
- Add xib file to the project
- Make sure it is included in the ‘Copy Bundle Resource’ list, then click ‘Run’ button to launch the sample app in simulator
- After it runs on simulator, using Finder go to /Users/username/Library/Application Support/iPhone Simulator/6.1/Applications/<app id>/test.app, then see package content
- You’ll find the nib file there. Put this nib file into /assets/ folder of TItanium module. Then you need to edit the path to load nib file in initWithNibName method.
In case you can’t edit the source Objective-C file, you have to put the nib file into /Resources/iphone/ folder of the app project