         }
     }
     
-    func setValue(_ value: Any?, forKeyPath keyPath: String) {
+    public func setValue(_ value: Any?, forKeyPath keyPath: String) {
         #if TARGET_INTERFACE_BUILDER
             guard let subview = value as? UIView else { return }
             SubviewsCopier.store(subview: subview, forKeyPath: keyPath, of: view)

        #endif
    }
    
    func prepareForInterfaceBuilder() {
        if nonPrivateSubviews.count == 1 {
            // Used as a reference container
            view.backgroundColor = .clear


public struct IBNibLoader<NibLoadableView: NibLoadable> where NibLoadableView: UIView {
    
    public func awakeAfter(using aDecoder: NSCoder, _ superMethod: @autoclosure () -> Any?) -> Any? {
        guard nonPrivateSubviews.isEmpty else { return superMethod() }
        
        let nibView = type(of: view).fromNib()
