Could not load NIB in bundle CocoaPods
Asked Answered
J

2

10

I've installed PSCarouselView from cocoapods to my project. And when I try to use this lib I'm getting runtime error. And the error says couldn't load nib file...

I've checked the library and saw that nib file registered properly. And also I've checked target membership and checkbox is checked. Then I check the podspec file and couldn't find any podspec about the lib and then I created a pod spec file for the lib. Using command below

pod spec create [PSCarouselView]https://github.com/DeveloperPans/PSCarouselView

Then I can check the podspec file and add the following commands;

    s.resources = "Resources/*.xib"

   s.resource_bundles = {
    'PSCarouselView' => [
    'Pod/**/*.xib'

Actually xib file copied to my project before I add this commands to podspec. I just tried desperately...

enter image description here

And xib file registered with the code showing below;

[self registerNib:[UINib nibWithNibName:@"PSCarouselCollectionCell" bundle:nil] forCellWithReuseIdentifier:@"PSCarouselCollectionCell"];

And Identifier also defined properly;

enter image description here

So now I'm quite desperate about how to solve this problem.

I'm sharing the error below;

MyTestApp[18232:1316081] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/adminuser/Library/Developer/CoreSimulator/Devices/464AB3F8-3C31-4473-AD1B-F554F3F59CDB/data/Containers/Bundle/Application/B4A5F964-A6E0-4357-878F-11A299FD1ACA/MyTestApp.app> (loaded)' with name 'PSCarouselCollectionCell''
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000101598d85 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010100cdeb objc_exception_throw + 48
    2   CoreFoundation                      0x0000000101598cbd +[NSException raise:format:] + 205
    3   UIKit                               0x00000001023dec89 -[UINib instantiateWithOwner:options:] + 499
    4   UIKit                               0x000000010289f553 -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] + 716
    5   UIKit                               0x000000010289febc -[UICollectionView dequeueReusableCellWithReuseIdentifier:forIndexPath:] + 169
    6   PSCarouselView                      0x0000000100b13b92 -[PSCarouselView collectionView:cellForItemAtIndexPath:] + 114
    7   UIKit                               0x000000010288e08f -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:] + 483
    8   UIKit                               0x0000000102891d96 -[UICollectionView _updateVisibleCellsNow:] + 4988
    9   UIKit                               0x0000000102896575 -[UICollectionView layoutSubviews] + 258
    10  PSCarouselView                      0x0000000100b13108 -[PSCarouselView layoutSubviews] + 328
    11  UIKit                               0x00000001020d1980 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703
    12  QuartzCore                          0x0000000105065c00 -[CALayer layoutSublayers] + 146
    13  QuartzCore                          0x000000010505a08e _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366
    14  UIKit                               0x00000001020c1205 -[UIView(Hierarchy) layoutBelowIfNeeded] + 1129
    15  UIKit                               0x00000001021f65c5 -[UINavigationController _layoutViewController:] + 1613
    16  UIKit                               0x00000001021f53b4 -[UINavigationController _layoutTopViewController] + 268
    17  UIKit                               0x00000001021f26bd -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] + 856
    18  UIKit                               0x000000010249cc2c -[UINavigationTransitionView _notifyDelegateTransitionDidStopWithContext:] + 422
    19  UIKit                               0x000000010249cfa2 -[UINavigationTransitionView _cleanupTransition] + 788
    20  UIKit                               0x00000001020a47ff -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 241
    21  UIKit                               0x00000001020a1706 +[UIViewAnimationState popAnimationState] + 314
    22  UIKit                               0x000000010249c8dd -[UINavigationTransitionView transition:fromView:toView:] + 2640
    23  UIKit                               0x00000001021f7651 -[UINavigationController _startTransition:fromViewController:toViewController:] + 3291
    24  UIKit                               0x00000001021f7c4d -[UINavigationController _startDeferredTransitionIfNeeded:] + 890
    25  UIKit                               0x00000001021f8d0b -[UINavigationController __viewWillLayoutSubviews] + 57
    26  UIKit                               0x00000001023a7503 -[UILayoutContainerView layoutSubviews] + 248
    27  UIKit                               0x00000001020d1980 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703
    28  QuartzCore                          0x0000000105065c00 -[CALayer layoutSublayers] + 146
    29  QuartzCore                          0x000000010505a08e _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366
    30  QuartzCore                          0x0000000105059f0c _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
    31  QuartzCore                          0x000000010504e3c9 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277
    32  QuartzCore                          0x000000010507c086 _ZN2CA11Transaction6commitEv + 486
    33  QuartzCore                          0x000000010507c7f8 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 92
    34  CoreFoundation                      0x00000001014bdc37 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    35  CoreFoundation                      0x00000001014bdba7 __CFRunLoopDoObservers + 391
    36  CoreFoundation                      0x00000001014b311c CFRunLoopRunSpecific + 524
    37  UIKit                               0x0000000102011f21 -[UIApplication _run] + 402
    38  UIKit                               0x0000000102016f09 UIApplicationMain + 171
    39  MyTestApp                           0x0000000100a598b2 main + 114
    40  libdyld.dylib                       0x0000000107d9a92d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 
Johppah answered 19/7, 2016 at 0:10 Comment(1)
if you are using pod as framework you might need to refer to bundle of framework. NSString resourceBundlePath = [[NSBundle mainBundle] pathForResource:@"Frameworks/PSCarouselView.framework/PSCarouselView" ofType:@"bundle"]; NSBundle bundle = [NSBundle bundleWithPath:resourceBundlePath];Noncontributory
F
12

If bundle with your .xib (YourView.xib in this example) is in a pods bundle, you can retrieve bundle in file owner UIView subclass this way.

let bundle = Bundle(for: self.classForCoder)

And then instantiate view:

nib.instantiate(withOwner: self, options: nil)
let nib = UINib(nibName: "YourView", bundle: bundle)

In case you want to subclass UIView loaded this way outside of pod module, better use what is below, because 'self.classForCoder' will give you bundle that your subclass is in.

 let bundle = Bundle(for: <FileOwnerUIViewSubclass>.classForCoder())
Falzetta answered 27/11, 2016 at 15:42 Comment(1)
Could you explain briefly what this code does, why it solves the problem, and where it should be used?Orinasal
B
6

You will need to include the bundle of the pod.

For example in my code (a collection view based currency symbol picker):

public class BGSCurrencyPickerVC: UIViewController,UICollectionViewDelegate {

public override func viewDidLoad() {
    super.viewDidLoad()

    // Register cell classes

    let podBundle = NSBundle(path: NSBundle(forClass: BGSCurrencyPickerVC.self).pathForResource("BLAMCurrencyPicker", ofType: "bundle")!)

    self.collectionView!.registerNib( UINib(nibName: "BGSCurrencyPickerCVCell", bundle: podBundle), forCellWithReuseIdentifier: "BGSCurrencyPickerCVCell")

For an example have a look at Collection View based swift cocoapod

Further example, Currency Picker cocoapod

For Swift 3:

    let podBundle = Bundle(path: Bundle(for: BLAMPaymentCVView.self).path(forResource: "BLAMPayment", ofType: "bundle")!)
Bohemia answered 8/9, 2016 at 13:56 Comment(2)
What do you type into the path for resource parameter? I don't quite understand that bit.Kobi
@Kobi the path for resource parameter is the pod name. In my example for Swift 3 that is "BLAMPayment". I'll add another example link that demonstrates this.Bohemia

© 2022 - 2024 — McMap. All rights reserved.