Organizational Research By

Surprising Reserch Topic

ib designable ibinspectable interface builder does not update

ib designable ibinspectable interface builder does not update  using -'ios,interface-builder,ibdesignable,ibinspectable'

I have the following set of code:


#import <UIKit/UIKit.h>

@interface CustomView : UIView

@property (nonatomic) IBInspectable UIColor *borderColor;
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;



#import "CustomView.h"

@implementation CustomView

- (void)setBorderColor:(UIColor *)borderColor {
    _borderColor = borderColor;
    self.layer.borderColor = borderColor.CGColor;

- (void)setBorderWidth:(CGFloat)borderWidth {
    _borderWidth = borderWidth;
    self.layer.borderWidth = borderWidth;

- (void)setCornerRadius:(CGFloat)cornerRadius {
    _cornerRadius = cornerRadius;
    self.layer.cornerRadius = cornerRadius;


(For Swift reference, this problem was also occurring with Swift code)


class CustomView : UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

    @IBInspectable var borderColor : UIColor = UIColor.clearColor() {
        didSet {
            self.layer.borderColor = borderColor.CGColor

    @IBInspectable var borderWidth : CGFloat = 0.0 {
        didSet {
            self.layer.borderWidth = borderWidth

    @IBInspectable var cornerRadius : CGFloat = 0.0 {
        didSet {
            self.layer.cornerRadius = cornerRadius

I added a UIView to a view controller on the storyboard and set its subclass to CustomView.

This adds the "Designables" row.  It is stuck on "Updating" and the tooltip says "Waiting for Target to Build".  It never changes from this status.

When I move to the attributes inspect, I am able to set these IBInspectable properties:

And once set, they also show up in the "User Defined Runtime Attributes":

However, the "Designables" status never moves beyond "Updating" with still the same tooltip (I've tried Cmd+B building several times, nothing changes).

Moreover, as I set the IBInspectable properties, I get a warning for each one:

  IBDesignables - Ignoring user defined runtime attribute for key path "borderColor" on instance of "UIView" ... this class is not key-value coding-compliant for the key borderColor.

Screenshot of the warnings generated:

I am familiar with the key-value coding-compliant issues and generally know how to solve them... but I don't understand how to solve this issue here.  According to the view's identity inspector, the view is a "CustomView" (not a regular "UIView", which doesn't have these properties).  And if the view weren't a "CustomView" then these designable properties wouldn't show up in the Attributes Inspector, right?  But when Interface Builder tries to apply these attributes to the view, it goes back to thinking the view's class is "UIView" and cannot apply the attributes.

Any help?  Please let me know if I've left out some important detail, but for what it's worth, I followed this tutorial exactly (other than ObjC vs Swift).  It's also worth noting that I followed this tutorial exactly on another machine and it worked like a charm (I intended to make this post last night but the computer I was on then didn't have this issue).

Based on comments, it has been suggest that perhaps the .m file isn't included and that might be causing the problem.  I thought surely I would have gone out of my way for this scenario to be the case, but I checked anyway.

When I first started attempting to do this, I was under the understanding that the IB_DESIGNABLE classes had to be part of a different UIKit framework.  So from this first screenshot, you can see that I set up a "CustomViews" framework, which has one class, CustomView.  You'll also see here that I also created a OtherView, which is identical to CustomView, except it's not in a separate framework.  The identical problem persists on the storyboard between both classes however.

Here we have a screenshot indicating that CustomView.m is included to be built with the CustomViews framework:

Meanwhile, the following screenshot indicates several things:

CustomViews.framework is appropriately included in the main project.
OtherView.m is also included as a compile source, so even if something is wrong with CustomView, OtherView should work, however it generates identical errors.
Main.storyboard and LaunchScreen.xib are showing up as red.  I have no idea why, and haven't the slightest clue as to why LaunchScreen.xib should (I haven't touched this file), though I can say after looking at other projects, Main.storyboard also shows up in red for those projects, and I'm not doing anything with IB_DESIGNABLE or IBInspectable there.

I have tried and retried this several times now.  It works every time on my computer at home--I can not reproduce the problem described in this question at home.  At work, it never works.  The problem described in this question happens every time.

Both computers are Mac Minis purchased new this year (not the new models, late 2012 model).  Both computers are running  OS X Yosemite 10.10.  Both computers are running Xcode Version 6.1.  At home, the build is (6A1052d).  This morning, I can confirm that both computers are running identical builds of Xcode.  

Others have suggested to me that it might be bad RAM.  That seems far fetched to me.  I've restarted the project multiple times, restarted the computer multiple times.  Seems to me if there were bad RAM on a computer approximately 6 months old, that I'd be seeing other problems, and that this problem would be less consistent.  But this exact problem persists despite numerous times restarting the entire project from scratch and full restarts on the computer.

It should be worth noting that if I actually compile and run this project, the custom view with the IBInspectable properties actually displays as I expect the storyboard to display it.  I imagine that this would be the case even with out the IB_DESIGNABLE and IBInspectable directives however, as these are created as User Defined Runtime Attributes.

asked Sep 15, 2015 by BWCKarolynjp
0 votes

Related Hot Questions

3 Answers

0 votes

Based on chrisco's suggestion to debug the selected view (which I had already done, but went to try again for good measure), I noticed a couple of other options at the bottom of the Editor menu.

  • Automatically Refresh Views
  • Refresh All Views

I clicked "Refresh All Views" and after Xcode had a bit of a think, suddenly the storyboard was displaying my view as expected (properly applying my IBInspectable properties).

enter image description here

I then went through the whole process again to confirm that this is the solution.

I created a new class, ThirdView. This class is identical to the others, again. I changed my view's class to ThirdView and got something slightly different this time:

enter image description here

Clicking "Show" to me to the warnings:

enter image description here

A new one this time:

Using class UIView for object with custom class because the class ThirdView does not exist.

This isn't really any more helpful than what already existed. Plus, now the other three warnings have doubled into 6 strangely.

Anyway, if I click "Refresh All Views" from the Editor drop down menu again, all the errors go away, and once again, the view properly displays.

Still, up to this point, everything I did was stuff I never messed with at home. At home, it just worked. So I turned on "Automatically Refresh Views" and created a "FourthView" to test--once again, identical to the first three.

After changing the view's class to "FourthView" the designables label said "Updating" for a short moment then finally said "Up to date":

enter image description here

So, I checked my computer at home. "Automatically Refresh Views" is turned on at the computer that was always working. It was turned off at the computer that wasn't. I don't ever remember touching this menu option. I can't even tell you for sure whether it existed before Xcode 6. But this option is what was making the difference.

TL;DR, if you're having the same problem described in the question, make sure "Automatically Refresh Views" is turned on (or manually "Refresh All Views" when you need an update in IB):

enter image description here

answered Sep 15, 2015 by WYGAlysauuur
0 votes

I have a few more details that may cause your IBDesignable classes to not be loaded.

Select your problematic storyboard/xib where your custom views ought to display.

In the navigator area, head to the Report Navigator in your XCode workspace/project.

In the Editor menu of XCode, hit (as mentioned by nhgrif), the "Refresh All Views" option. This will cause IB to launch a compile for a whole bunch of stuff that you, I'm certain, would not expect.

In the Report Navigator, Click on "By Group" to filter content and look at the "Interface Builder" section. You will see that for the sake of loading the custom IBDesignable views framework, it will compile LOTS of things. If any of these targets do NOT compile, such as (perhaps deprecated) unit test targets (even if they are totally unrelated to the code that loads these views or storyboard), then IB will fail at loading your dll.

In my case, IB tried to compile 8 targets, including 4 that where unit tests that had not been updated since recent refactoring changes we've been working on.

Most of the code changes/fixes I have done in order for IB to properly load and display my customs views where not related or even linked against these classes, nor would it ever load the storyboard in the course of running these unit tests. Yet, IB had a dependency on the whole workspace compiling for it to work.

answered Sep 15, 2015 by RubyeVHGjip
0 votes

Incase any one else comes up against the error IB Designables class does not exist, for the same reason as I did. Top answer was not my issue... but here is a slightly related problem...

There is a property hidden in the story board source code called customModule.

For example I had a class called ForwardArrow inside a separate framework that I accidentally added to my main target.

So the XML for some views ended up as customClass="ForwardArrow" customModule="MainTargetNameWasHere"

When I removed them from the main target in the build the story board did not update MainTargetNameWasHere to CustomViews which is the framework where it was located and started giving that no class found error.

So TLDR; Make sure that if your IBDesignable is in another framework that the customModule xml attribute in your story board is set to the right value. And if it isn't there at all add it.

Example from my source:

answered Sep 15, 2015 by PHJTia