WWDC 2017: A developer’s wish list
WWDC 2017 is right around a corner so I want to write down some of my wish list as a developer.
Support UIEdgeInsets property on IBInspectable
The IBInspectable property mechanic is using the `User-Defined Runtime Attributes` which is in the Interface Builder for a long time but haven’t supported UIEdgeInsets yet. Since there are many API and mechanisms those are using UIEdgeInsets especially in the custom UIView subclass so I think it will be great for Interface Builder to support this feature.
Support UIControl based property on IBInspectable
For now, we can only be able to configure some of UIControl based properties (e.g. title, image etc.) but we can’t do that on the custom properties. This means we still need to do that in the code. I think this ability will help a lot UI developers and also the UI library maintainers.
Ability to scroll in UIScrollView view in a canvas
We can scroll the long long UITableView in Interface Builder for some time but I don’t know why Xcode still haven’t supported this feature for other UIScrollView yet and we tend to have a long UIScrollView more than UITableView, right?
UILayoutGuide was introduced in iOS 9 and I think this is a great API but we still can’t add a UILayoutGuide into a view in Interface Builder. I understand that UIStackView should solve many cases that require UILayoutGuide but we still need this for those remaining cases
Localized strings on a IBInspectable property
Xcode still doesn’t support localization on IBInspectable sting properties yet. This makes IBInspectable feature a lot less charming for app development.
Selector based segue
prepare(for:sender:) is the single point of contact for inter-controllers communication. This method implementation can be huge in some cases and also makes the code maintainance a lot harder. I think the
Selector based segue can help this. It’s not a new concept in iOS,
Unwind Segue already uses this mechanism. The only concern of me if the iOS support this is that how can we separate the normal segue methods from the unwind segue methods.
Ability to add/manage unarranged UISackView’s subviews
We can manage only the arranged subview for UIStackView in Interface Builder. In some circumstances, we need to add/manage its unarranged subviews (e.g. we need a view to display a background color) so this feature will be useful to developers.
A better theming support (UIAppearance replacement/successor)
Theming is one thing that Android is better than iOS. Although we have
UIAppearance but it’s still far behind in terms of usability and features. I still think UIAppearance was a great addition to UIKit in iOS 5 but it has a lot of limitations and hasn’t been improved since its introduction, it’s hard to use, hard to adapt, cannot declare values as variables and doesn’t work together with IBDesignable views in Interface Builder.
I think iOS need a new theming system API that is easier to use and works great with Interface Builder. The new system should be file based instead of code based like the UIAppearance, this will eliminate a lot of the current’s system constraints and be a solid foundation in the future. And tool support since day one will be great.
Support for integrating a custom animation into the UIView animation APIs
UIViewPropertyAnimator is a great new API in iOS 10. For now, it and the
UIView animation API only support for a subset of predefined
animatable properties but not support for custom animatable properties. If we need to use these API on the custom animatable properties, we need to implement some magic by ourselves. Please, Apple, implement the support for animating custom animatable properties into these APIs, please.
An ability declare a custom UILayoutGuide property on a UIView
layoutMargin and its companion
layoutMarginGuide are great addition to Auto Layout APIs in iOS 8 but up until now, developers cannot declare a similar property to this. There are a lot of useful cases if developer can have a custom
UILayoutGuide based properties (for example the
UITableViewCell’s separator insets layoutGuide property
Auto Layout based UITableViewCell and separator insets don’t work well together. We need to explicitly set the separator insets (either by Interface Builder or code) and since the layoutMargins adapt to the view’s size class and it will need developer to update the cell’s separator insets for every table view. So to make Auto Layout works great with the separator insets, I think UIKit should support an ability to set UITableViewCell’s separator insets via constraint.
Adopting Auto Layout in UITableView’s table header/footer views
We can see the UITableView’s table header/footer views hacks all over the the place in the Auto Layout based app code base.
Better custom font support and integration
Custom fonts are a crucial component for many app now but custom Font and Dynamic Type don’t work together seamlessly currently. We need to implement some code to bridge between those two. A new mechanism for bridging/registering a custom font with the iOS’s Dynamic Type system will be a very useful for many app developers.
A macOS’s NSGridView counterpart, A UIStackView sibling, Apple introduced NSGridView for macOS last year at WWDC 2016. NSGridView helps developer to implement a complex but yet common UI more easy and I think it would be great if we get
UIGridView in iOS too.
Xcode & Developer Tool
Ability to localize assets in Asset Catalog
I don’t know why we still can’t localize assets in Asset Catalog yet. Please, Apple, support this feature please.
Faster build time and especially auto complete on Swift code
Faster is always better, right?
Loading a custom framework support in Playground
Playground is a great tool to library/framework developers for demonstrating theirs library/framework. The problem is that you need to do some workaround to use a Playground for this purpose. An out-of-the-box support would be a lot helpful for developers and will help developers to adopt Playground more.
An ability to open the simulator in full screen side-by-side with Xcode
Please, macOS, please let me open both Xcode and Simulator side by side in Full Screen. I know I will see the black strip but I think that’s better than having to switch screens back and forth.