
Create a Professional iOS App in Hours with Creo - massimosgrelli
https://medium.com/lombardstreet-io/create-a-professional-ios-app-in-hours-with-creo-255ecc8a6643?source=linkShare-af181dda9753-1536648484
======
gbanfalvi
> Pretty soon they understood that to get Creo the kind of user experience
> they desired, they had to rewrite one of the core modules of Apple developer
> stack: the UIKit.

> Read it again: entirely rewrite a core component created by some of the
> smartest programmers in the world, with no access to their source code.

They didn't though. Looking through their documentation[1], they subclassed
all (or some?) UIKit components and offer those instead of what UIKit offers –
which is what allows them to hook into each object's properties for their IDE
(I'd guess).

It's cool, and I understand why they did this given their offering (a drag-
and-drop IDE to create apps) – but they definitely didn't rewrite a massive,
complex, UI framework. Similarly, they blocked off a bunch of UIKit stuff that
could genuinely be useful. It looks like you can't provide your own collection
view layouts, for example.

[1]
[https://docs.creolabs.com/classes/CollectionView.html](https://docs.creolabs.com/classes/CollectionView.html)

~~~
creolabs
Hi, we completely rewrite the UIKit framework from the ground up. We started
from the abandoned Chameleon Project
([http://chameleonproject.org](http://chameleonproject.org)) several years ago
and we added tons of classes and improvements in order to be in sync with the
latest iOS versions from Apple.

We are able to execute most of the native iOS code directly on Mac, from
example this project works without a single code change on MacOS:
[https://github.com/chrismiles/CMUnistrokeGestureRecognizer](https://github.com/chrismiles/CMUnistrokeGestureRecognizer)
(so we have UIView, UIViewController, UIGestureRecognizer, UITouch,
UIBezierPath and much much more).

We also didn't block any customisations (like the custom collection view
layouts). We simply need more time in order to correctly expose all the
functionalities from a graphical user interface and in a coherent way for all
the users.

