how to package UIViewController? - ios

I have create a UIViewController, e.g DemoTableViewController, and want to reuse it in other project. Instead of copying source file of controller, I need to create a library to reuse it, however, after I create a static library containing DemoTableViewController, and set the class of a view controller in storyboard, there's a an error:
Unknown class DemoTableViewController in Interface Builder file.
what can I do?

In the custom class field on the right top, you can see that you have given it as DemoTableViewController instead of DemoViewController(Assuming that what you have mentioned in question as DemoViewController is the class name you have given to this custom class). Change that and then check. It should work.
If the above is not working, make sure you have copied the DemoTableViewController.h file to your current project and this library is added to target settings -> Linked frameworks and libraries.

Related

How to add a prefix to a lot of existing swift files and classes in Xcode

I'm working on a project and I created a lot of swift classes. As you know with swift you do not need to add a prefix in front of the class or file name; and so I didn't.
Now I was required to add a prefix to them (let's say "KK" in front of each file and class)
I was wandering if someone managed to do this with a single command, I would like to avoid renaming and refactoring each class one by one.
example:
a file called FridgeView.swift containing a class FridgeView
should be renamed KKFridgeView.swift and the class KKFridgeView
P.S. I know we do not need prefix in swift but it is a requirement of my company I really have no choice :)
Step One Click the Project Name
]1
Then you can find Class Prefix on you right Side
Add your prefix and then Create all you viewController and Class
It can be set from file inspection menu but it will only new files added into project. it will not impact already added files.

Can't find custom controller class in custom class dropdown Xcode 8.3.2

I just started developing for iOS and WatchOS and have encountered a small issue that is probably very simple but I can't find any solution for it.
The issue I'm having is that I'm trying to structure my files in my own way but when creating new controllers, I cannot find them in the Custom Class dropdown on the Interface.storyboard
For example, I renamed InterfaceController.swift to Controllers/InitialViewController.swift to better match what I'm trying to do with my project structure.
For some reason InterfaceController still is showing up on there and if I type in the fullname of the new class, it won't show up. I'm unable to get that class here.
Any help at all would be great, thanks!
Renaming your file will not change the class name. You will have to modify the class declaration inside the file.
class InitialViewController: UIViewController {
/* code for your class */
}
Also, putting your files inside folders (blue folder icon) or Xcode groups (yellow folder icon) will not affect the class name.

change the name of the First ViewController

When I create a new project in IoS, I get default ViewController class, called ViewController
I am using xcode7 and when I try changing the class name to ViewControllerSomething it tells me Xcode7 does not support that (yet).
My question, how do I modify the name of the class manually?
What I tried:
changed the file name
Changed the class name itself -> now I get a build warning
2016-01-28 13:17:41.877 TestPRJ[1400:491868] Unknown class
ViewControllerCategories in Interface Builder file.
Tried to modify any reference to ViewController in the Main.storyboard and in LaunchScreen.storyboard (opened as source code).
Now I get a build error:
/Users/itaymoav/Desktop/playworkspace/TestPRJ/TestPRJ/Base.lproj/LaunchScreen.storyboard:
The document "LaunchScreen.storyboard" could not be opened. Could not
verify document content.
After you manually rename the class:
Go to the storyboard which uses it (if it's a new project created from template it should be called Main.storyboard).
Make sure that scene is selected on the left panel (it should be called "View Controller Scene").
On the right panel go to the identity inspector (3rd icon) and under "Custom Class" select your new class name, it should be listed there.

Use of a class from a second target

As the IBDesignable attribute needs the designable class to be in a seperate target I created a second target which worked great in the designer. When I then tried to use the new class in my code I get the error
"Use of unresolved identifier 'CustomMarker'"
I have imported the second target in my main target -- import CustomViews -- and I can cmd+click the target name to see the main .h file that describes the target; where the class is included. The compiler still can't find the class in my code though.
Any thoughts?
I had the same issue. Fixed this by changing access modifier of the class to public.
#IBDesignable public class MyCustomView: UIView {
}
By default classes and methods will be at internal access level. If you want to use that out side of the target, you should mark it as public. Then only it will be the part of public interface(visible to outside of target)
second target must be of type "framework".
you must also link it in build phases like as an external framework. link binary with libraries must have a link to your customViews framework and embed framework must have that link too.
that should be enough.

Unknown class info in Interface Builder file

like in the title i got a crazy massage and i cannot handle with it
Unknown class info in Interface Builder file.
Every time I run my Project some crazy bugs will appear or some bars disappear. Did anyone know what to do?
Try this, in order:
Product->Clean in Xcode
Delete the app from the simulator or device
Restart Xcode
(Build &) Run again
If this doesn't help, you likely have a reference to a class in the nib or storyboard that you have to manually find and remove.
The warning may be because you have assigned a removed/deleted custom class name for one of the UIView subclass. In order to fix such scenarios,
Open interface builder class as Source Code by right clicking on it (Open As -> Source Code).
Find your unknown class name in the source file. And handle accordingly.
It worked for me.
See my answer to https://stackoverflow.com/a/29013058/784318
I did run into this problem today using Swift.
I changed a class Model.h + Model.m to a Model.swift.
This object was used in Interface Builder with the class = Model.
As soon as I replaced the object the class could no longer be loaded.
What I had to do was to change the class reference in IB from:
Class = Model
Module =
to
Class = Model
Module = <TARGETNAME>
You'll find the <TARGETNAME> in the build settings. It is also the name that shows up in your generated Swift-Header: #import "TARGETNAME-Swift.h"
I have solved this problem (while using Swift 4 / Xcode 10.1) by going to Custom Class panel, checking 'Inherit Module From Target' (right below Class & Module row).
I have got the same issue with Lottie library.
Unknown class AnimationView in Interface Builder file.
It can happens if your class view is in an other module.
To resolve this, go in your IB file (Xib or storyboard) / Show the identity inspector and set correctly the module :
I tend to see these types of errors when you change the name of your view and view controller classes after customizing a view or controller in Interface Builder to that class. I'd go through your views and controllers in your nib or storyboard to see if your custom classes still exist and match accordingly.
You'll run into issues with IB files when you rename or delete the underlying code without updating the IB file. A similar issue occurs when deleting or changing the name of IBOutlets after linking them to an object in Interface Builder. You'll still have the reference in Interface Builder unless you delete it explicitly.
Lastly, you can look at the IB file as a text file. It's an xml document, where you'll see all the class references. You can see if there are any classes there that may not exist in your project anymore.
This also happens if you deleted ClassName.m from Build Phases/Compile Sources
I'll restate the problem, with a bit of context from my end, then provide the solution:
I have created a custom Swift framework, and imported the framework project into the workspace. Then, I made the framework a target dependency to my Swift application. Finally, I referenced a class from the framework in Interface builder.
I kept getting the class not found error, and I noticed in the debugger it had the output class was the mangled/unmangled ObjC counterpart ..
The solution:
Simply add your framework header to your ObjC bridging header:
#import <MazKit/MazKit-Swift.h> // In my case, MazKit
Now, the symbols are exported, and you can verify that by cmd + click on the header itself, and you'll see the mangled/unmangled class names.
Project -> General -> Deployment Info -> Main Interface <- clear this field.
It seems you have deleted file Main (Storyboard) but you still have reference to it in project properties.
It could be that the file was not copied over in the build process. Goto the Build Phases Tab and check the copy Bundle resources to see if the file is there. If not add to the project clean and rebuild to see if that fixes your issue. This has helps me.
I had renamed one of my TableViewCell Class. Nothing worked other than checking the Inherit Module From Target checkbox.
Open the xib file > Goto Identity Inspector while it is selected > Check the checkbox (also make sure the Class name is correct).
Done!

Resources