You seem to be using an old version of RoboVM? Which version are you on?
NSAttributedString has been changed in the latest versions and doesn't have a constructor that takes a dictionary any longer.
Anyway, CTFont and UIFont are toll-free bridged which means that you can simply cast a CTFont to a UIFont in Obj-C. In Java with RoboVM you can (provided that you are on a recent version of RoboVM) call the .as() method on the CTFont:
UIFont uiFont = ctFont.as(UIFont.class)
You don't want to do this in a tight loop as it uses reflection under the hood to do the "casting".
If you are on an older version of RoboVM the .as() method isn't available. You should then be able to do something like
UIFont uiFont = (UIFont) NSObject.Marshaler.toObject(UIFont.class, ctFont.getHandle() , 0);
Once you have a UIFont you can add it to the dictionary.