ChatGPT解决这个技术问题 Extra ChatGPT

Xcode 6 Bug: Unknown class in Interface Builder file

I upgraded to Xcode 6 beta 4 and now my App continuously crashes with the message

Unknown class X in Interface Builder file.

It crashes because supposedly Xcode can't find my custom classes that I have linked in my Storyboard but it shows that they are linked correctly in the Xcode interface.

I'm positive everything is linked correctly. My only other option may be to delete the entire storyboard file and start from scratch because it might be corrupted somehow.

Edit: I would also like to add that I tried cleaning, reseting simulator, messing with build phases etc. None of that works.

@ImreKelényi You are right. This happened to me again recently after doing what you just described.
It was typo for me, debug it to the Control element, till when it comes, select; View Controller > identity inspector > Custom Class > Class. delete that if that class is not defined.
PLEASE NOTE! This "error" can stem from different origins. If the accepted answer does not work for you then move down and try the next answer. The correct answer for my situation was the 5th answer.

T
Top-Master

I resolved this issue as I was typing the question. I figured I'd answer my question and leave it here for anyone else who may face this issue when using Xcode 6 beta 4.

To resolve this issue, you need to select each of your custom class objects in Storyboard (this includes any custom views, even the custom view controllers themselves).

Then with those objects selected, open the identity inspector and under "Custom Class" you should see the Module option. Finally:

Click inside the Module text box, and press enter.

Or (update 2022), check the "Inherit Module From Target" option.

That's it! The current module for all of my custom objects must have been internally incorrectly set somehow in Xcode 6 beta 4. But there was no visual indication of this in the inspector.

Note that if pressing enter inside the Module text box doesn't work, try selecting the arrow to the right and manually select your current module, then clear the text box and press enter. You can also try pressing enter inside the class text box (although this usually is to resolve a different issue).

https://i.stack.imgur.com/7u8bd.png


For me, clicking inside "Module" and pressing enter did not work consistently, but selecting the "Class" field (and pressing enter) always did the job.
For me, the target was set correctly, but the class still didn't show up in IB. I noticed, though, that the "Location" of the file showed a path "Relative to Project" instead of "Relative to Group". Removing the file reference AND the group and re-adding it in the project root worked for me.
Wow. Thanks for this, I don't think I would have got there otherwise. This fixed an issue that started happening after I added @objc(...) to one of my Swift classes.
This issue is still present in XCode 7.2. This solution worked.
This is still an issue in Xcode 8.3.1... such a shame
n
noɥʇʎԀʎzɐɹƆ

Sometimes Xcode missed customModule="AppName" customModuleProvider="target"

To fix it, open storyboard as source code and replace this line:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">

to this:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
 customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

Actually in my case i had to remove customModuleProvider, then the error went away.
Guillermo, still happening in Xcode as of end of March!
@MaciejSwic Removing the customModuleProvider did it for me as well, thank you!
what about for xib files?
Still happening... it's things like this that make me want to cry :(
u
user1760527

I had this problem after renaming a swift class. Solved it by using the @objc directive:

@objc(ForumTopicListViewController) class ForumTopicListViewController

This fixed it for me, I had @objc class X and changing to @objc(X) class X worked.
You can also try to delete your derived data see stackoverflow.com/questions/24039932/…
Had this problem after renaming the default ViewController class from the Single View project template. I wonder what magic was used so that the @objc() directive was not needed for the 'original' ViewController class...
I goes the opposite side. I had specified the module name in Storyboard file but also added @objc directive.
Did NOT work for me. :( Neither is the solution of Module name working.
M
Muhammad Nayab

Project with Multiple Targets

In my case I am working on Project with multiple Targets and the issue was "inherit from Target" was unchecked. Selecting "inherit from target" solved my problem

https://i.stack.imgur.com/g6qUI.png


Thanks for posting this. Solved the issue I was seeing very quickly.
I had a similar situation. (XCode 9.4.1) I created an iOS app called FilesTestA, with a custom UIView called MxFileView (which consisted of MxFileView.swift and MxFileView.xib). Then I added another target: a Today widget ("FilesTestAWidget"). Solution for using MxFileView in the widget: (1) class = "MxFileView"; (2) check "Inherit Module from Target" (or uncheck it and manually enter "FilesTestAWidget"); (3) in the app target, make sure that both MxFileView.swift and MxFileView.xib include FilesTestAWidget in their Target Membership.
This happened to me on a new project from the default template in Xcode 10.1 (a single iOS app target, and 2 test targets). The checkbox was unchecked for all of my custom view controllers (and so the placeholder text was "None"). After going through and checking the checkbox for every custom view controller in my storyboard, the problem was resolved.
m
mavericks

This worked for me..

Check your compiled source, whether that file(e.g; ViewController.m) is added or not, in my case ViewController file was not added so it was giving me the error..

https://i.stack.imgur.com/MqOOq.png


@CarmenA You only ever add '.m' files to Compile Sources. This really is the correct (& only) solution for some.
I tried several of the other solutions with no luck. This did the trick. For some odd reason one target was missing the one source file that was giving me fits.
for me too.. Happened because of some get conflict resolution
j
jovanjovanovic

This can happen in any Xcode above 6.0. It happened to me after renaming some ViewController classes in Swift project (but I guess it will happen with Obj-C too). You just have to open the interface builder, go to Identity Inspector of ViewController that had its class renamed, select class and press Enter. That will reassign renamed class to selected ViewController and also reset Module Value which gets lost after renaming the class.

Update for Xcode 8.1 (probably 8.0 too):

Xcode 8.1 just crashes. Simply and annoyingly just crashes and doesn't print anything. I was chasing that phantom crash for an hour just to find out that it was this very same thing - unassigned class in IB. If you're getting some phantom crashes, double check IB for unassigned classes first.


thanks for this. it appears that following your suggestion causes Xcode to update the module (under the class in IB) from None to Current. i'm thinking the issue is that simply entering the name w/out hitting enter fails to trigger a module update by Xcode.
This worked for me. I inadvertently renamed a controller class, so it obviously no longer existed when the view controller was loaded.
A
Arnab

Enabling Inherit Module From Target took the correct target module. That solved the issue.

https://i.stack.imgur.com/bCh1r.png


Confirm. This helped me solving the issue.
I usually have this issue when I convert a view controller from Objective-C to Swift. I retype the last letter and press Enter. Should do the trick as well.
F
Furqan Khan

Sometimes the controller you are providing loses its target membership from the current application. In that case, pressing enter on the "Module" field will do nothing. Go to the controller and make sure that it has target membership set to the current app.


This was the problem for me as well - multiple targets lead to the class file accidentally not being included in the target I was building.
I merged files and misses this in one of my targets, great answer
Good one, merge pbx broke the target membership values.
T
Tamara

My answer: set custom Module equal to the custom Pod name (in my example - custom class name) like on the screenshot attached

This solution is for a specific case: for custom views classes from Pod (or Carthage) framework.

Infrastructure: XCode8, Swift3

https://i.stack.imgur.com/l4fij.png


r
roy

Selecting the proper Module for my Custom Class I solved this problem .

Here it is :

https://i.stack.imgur.com/h00Oh.png


O
Orlin Georgiev

I fixed it by doing exactly the opposite of what ChikabuZ suggested (thanks for pointing it out, though). In the storyboard file, find this:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

and replace it with this:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController">

I can't believe how many hours I'm losing getting around bugs in the Swift compiler and Xcode 6


G
George Maisuradze

I faced this problem in Xcode 8, to resolve it I had to modify storyboard in the text editor.

In general, look up for your control and remove customModule and customModuleProvider from control entity.

Did a trick for me.


Hah! Nice hack :)
r
rcmstark

I had the same problem.

In my case, Xcode wasn't adding my custom class to: Target > Build Phase > Compile Sources.

So I recommend you to verify if your CustomClass.m is there.

https://i.stack.imgur.com/VorFX.png

I hope this helps you.


This is what happened to me, and fortunately found my way out! I was coming here to answer but you were first. Thanks!!!
M
Mike Zriel

You need to check the box "Inherit Module From Target" Checkbox

https://i.stack.imgur.com/ddHdi.png


V
Vinay Jain

I faced this issue in Xcode 6.1 when I removed Main.storyboard , the LaunchScreen.xib file and the default ViewController classes from my project.

I fixed it by deleting the Launch Screen File and Main Interface entries from Info.plist


J
Jayprakash Dubey

Check if your class has right Target Membership.


V
VBaarathi

I googled everywhere for this. None of the answers work for me until i met 1 dude who asked me to move my project folder to desktop. It just worked automatically. Apparently if you have you project folder to deep in many folders, XCODE actually breaks.


I got this problem in Xcode 7 beta 5 again since I got it in Xcode 6 before. This time, this method works for me.
In visual studio there is a similar problem. But over there, we get a clear warning message saying the path is too long and things cannot be added or edited. Not sure if its the same thing with XCODE, but after that episode i keep all my projects either in documents or desktop and never had this problem again. I even gave this advice to someone using Xamarin Studio and it also worked for them...
A
ARWIN

These steps work for me.

1) Clear Derived Data. 2) Remove .h and .m files 3) Create .h and .m files Again


This worked for me as well. I even made it work without clearing derived data.
This was worked for me, thanks a lot Arwin, But still I am not getting that why it's raising such error because I did not modify anything in the class or in IB before
W
Wraithseeker

I solved this by opening my storyboard file as source code and using command-F to search for my unknown class and delete the custom class associated with it.


C
Community

What @gfrs said is correct, you need to set the Module. However I once ran into an issue that my class wasn't listed in the Class dropdown. Eventually I removed the swift file, re-started Xcode and re-created the file. Finally the class was listed and could be used in Storyboard.

Also have a look at this answer, which looks like to solve the 'real' problem I encountered.


Removing and re-adding class file worked for me. Thanks!
T
Teng Long

I solved this problem by typing in the Module name (unfortunately the drop list will show nothing...) in the Custom Class of the identity inspector for all the View controller and views.

You may also need to indicate the target provider. To achieve this objective you can open the storyboard in sourcecode mode and add the "customModuleProvider" attribute in both ViewController and View angle brackets.


i
ibrahimyilmaz

My solution (Xcode 8.1 Swift 3.0):

Unknown class xxx in Interface Builder file.

Open StoryBoard as Source Code and search for xxx. Remove attribute which contains value xxx. Build and Run.


WTF? This was absolutely necessary for me, thank you. I had to delete the customModule="" customModuleProvider=""
If we try to publish an application to the app store that contains an error like this, the application is refused without thought.
I disagree. I just submitted a build that I had to modify this way to TestFlight and it's ready for Beta Testing... we shall see what happens on the actual app store, but it's an IB bug IMO. Thanks!
R
Rostyslav Druzhchenko

In my case, I added a flag -ObjC to Other Linker Flags in project settings to make it work. Also I tried with -all_load flag and it worked well too.

https://i.stack.imgur.com/dPvya.png


p
pkamb

In my case, the class referenced in the Storyboard / xib did not have Target Membership set.

To fix, give that class's .h and .m files the same Target Membership as your other classes.

https://i.stack.imgur.com/NQlvR.png


This was my problem, but while trying various solutions I caused the problem that Epic Byte's answer fixes. You must have your source code in the target you are building, but also in IB you need to set the view controller to be part of the current target.
Target membership was my problem also, looked everywhere, but thanks to this answer I could solve it.
D
DenisKirillov

My solution was to remove @objc from Custom class definition.


Some example with explanation would be great.
p
patrickS

I had the same problem with Xcode Version 6.1 (6A1052d). I think the problem appears if you renamed your App / Xcode Project.

My solution was to add the module name in the interface builder manually.


C
Community

I faced the problem when I ported the storyboard from Swift project to Objective-c project, noticing vvkuznetsov's answer, it turned out the two project using same identifier. I "Product -> Clean" and tap Enter key on the Module and Class text field. the issue went away.


J
Jignesh Kalantri

I fixed this along the lines of what Laura suggested but I didn't need to recreate the files.

Using XCode 4, in the Project Navigator, select the .m file that contains the class that it is complaining about

Go to View->Utilities->Show File Inspector (this will show the File Inspector to the right, with that .m-file info)

Open the Target Membership section and make sure that your target is selected for this .m-file

When I added my .m file to my project, it didn't add it to my default target for some reason and that caused me to get the error you mentioned.


S
Scooter

My issue was user error. I had a generic UIView in my storyboard and in the Custom Class section of the Identity Inspector I had accidentally changed the name from UIView to gibberish.

All it took to fix was to change it back to UIView.


I did the same thing, but I had accidentally added the Custom View Controllers name to the ViewControllers root view's custom class section. So I was looking to see why View Controller wasn't able to be found when it was the root view the whole time.
C
Community

What only worked for me is actually adding the module name to the xib file...

Sooo, the xib files look like this:

mymodule.MyViewController.xib (Module being the name of the proyect, usually)

HORRIBLE solution in my opinion, but that is supposedly how Apple wants us to do it now.

This question shows 3 possible work arounds back in beta 4 ... apparently Apple has not been very helpful in this situation according to some because they call it "Working as intended."


关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now