Hey guys I’m trying out new mediums and wrote an article on Medium.com :]

Head over there to check it out and let me know if you prefer reading up over there than here!


Thanks, Marin

Go directly to the repo on GitHub: https://github.com/icanzilb/EasyAnimation

I like UIView.animateWithDuration:animations:... (and its variations). It has its shortcomings but on the whole I just love the fact that I need one line of code to create a cool animation in Swift.

In fact UIView.animateWithDuration:animations: is so easy to use and you’re so familiar with its syntax that you often want it to do just a bit more for you automatically. But it doesn’t and you need to import Bloated.framework by Beginner Ninja Coder in order to make a bit more advanced animations than what animateWithDuration:animations: allows you to.

I’ve been planning for a while to create an animation library to extend the built-in UIKit animation functions and I’m finally putting out the first beta version of it on GitHub. I’m calling it EasyAnimation.

EasyAnimation extends what UIKit offers in terms of animations and makes your life much easier because you can do much more without learning some perky new syntax.

Easy Layer Animations

EasyAnimation allows you to animate your layers straight from animateWithDuration:animations:. No more CABasicAnimation code for you. Just adjust the properties of your layers from within the animations block and EasyAnimation will take care of the rest.

If before you had to create the following CABasicAnimation:

With EasyAnimation you can simply say:

And that’s all :)

Let’s have a look at another example:

As you can see the CABasicAnimation code grows very quickly – animate two more properties and you end up with 40 lines of code.

EasyAnimation solves this quick and easy:

Layer Spring Animations

CABasicAnimation doesn’t provide you with built-in support for spring animation, while UIKit does. Bummer :)

EasyAnimation adds spring animation support to layer properties (via the included RBBAnimation lib):

You can mix view and layer properties in the spring animation block – EasyAnimation will pick the proper spring animation for both views and layers:

Animation Sequences

One thing the built-in UIKit animation methods are coming really short at is animation sequences. To build a chain of animation isn’t all that easy – you need to nest animations within completion blocks or use the half-baked UIKit keyframe animations. I’d rather – neither.

EasyAnimation makes it very easy to chain animations in a sequence:

Yes – that works, give it a try in your project :]

This code will animate the view along a rectangular path – first downwards, then to the right, then up, then to the initial point where the animation started.

What a perfect opportunity to repeat the animation and make the animation run continuously! Add options parameter to the last animateWithDuration… in the chain and turn on the .Repeat option.

This will make the whole chain (e.g. the 4 animations) repeat continuously.

If you want to pause between any two animations in the chain – just use the delay parameter and it will all just work.

How to get EasyAnimation?

The easiest way is to install it as a Cocoapod:

Alternatively you can get the source and ready more about EasyAnimation at its GitHub page:


As always – please leave a comment or contact me on Twitter: @icanzilb

Enjoy EasyAnimation!

Part 1 and Part 2

The beta tester team

At the end of the previous blog post things didn’t look too good – we could not find enough beta testers and I was a bit low.

Finding beta testers was very important for me – I needed constructive feedback and also make the app as stable as possible. iOS 8 itself was a wreck at that time and especially keyboard extensions were plagued by constant crashes, freezes, and strange bugs (more about those in a future post) so I wanted to make sure that we do everything that’s in our power to make a great product to compensate for Apple’s own mess.

On December 8th, 2014 I was talking to Ray Wenderlich and he asked whether my email attracted enough people to beta test. I said we could do with more and he was kind enough to propose to tweet about this matter.

This is what he blasted to his 37,000+ followers:

The tweet got 3 favorites and 3 retweets within the next hour or so. To be honest I expected a bigger response but lucky for us people also started messaging me in Twitter because they wanted to participate in the Doodle Doodle beta.

When we got few more people signed Ray tweeted:

The beta tester team spread from Canada, to the Nederlands, from Italy to Malaysia. Most important – we had testers owning each device and screen resolution in multiple configurations which was great!

The first beta version

When I agreed with each beta tester over email how the beta testing is going to go I also asked them for their device UDIDs.

The easiest way to explain beta testers how to get their UDID is to send them to this handy website – http://get.udid.io/. They only need to open this page on their device, install the provisioning profile allowing the page to get their UDID and then they can automatically send the UDID over to your email. Nice.

UDID page: http://get.udid.io/

Once I had all UDIDs and made sure that our prototype more works than not I’ve made a special build for the beta testers and sent it around.

Here’s how the start screen of that first beta looked like:


The beta version was programmed to expire after 1 month. We didn’t want old betas to linger around on users’ devices. The beta testers would anyways have all betas send to them and upon launch a promo code to claim the app from the App Store for free.

For the beta test I (naturally) wanted to go with Apple’s new TestFlight distribution service. I’ve used TestFlight before for distributing over-the-air test builds so I thought it would be a great idea to give Apple’s version a try.

Note: Apple already killed TestFlight’s app by the time I’m writing this.

It turned out Apple made a what used to be a simple process a complicated off-putting procedure. What I didn’t know was that to distribute beta builds through TestFlight you need to go through Apple’s review process. For whatever reason Apple both wanted to allow you to send around unfinished apps but also restrict you in this.

I said NO and turned back to another service we’ve used in the past. HockeyApp (recently acquired by Microsoft) works in a very similar way to TestFlight and as a security/safety bonus is made by a company in Germany. (Therefore you can trust them with your stuff.)

HockeyApp http://hockeyapp.net/ is a paid online service (starting at 10$/month), which you can cancel monthly. I just cancel my subscription when I don’t have active beta testing campaigns and then re-start it when need to send adhoc builds again. Simple, plain website that just works – I recommend it.

Install instructions

One last point to mention about the first build – just before sending the email announcement to all beta testers I figured out that probably not all of them knew how to install the keyboard on their iPhone.

I mean – Apple has made the procedure unreasonably complicated and scary – and actually not so many end users know how to do it. It’s just not intuitive – it’s almost as if users are not supposed to install keyboards.

So I threw in a PS to the first beta version email. If you are writing something similar to the user of your app check how detailed the write up is – don’t assume any user knows anything about iOS or iPhone :)

PS: How to enable a custom keyboard on iOS?

1) Install the app

2) Open the iOS Settings app

3) Select General -> Keyboard -> Keyboards -> Add New Keyboard … -> Doodle Doodle

4) This will add “Doodle Doodle Ext – Doodle Doodle” to the list of installed keyboards

5) Tap “Doodle Doodle Ext – Doodle Doodle” and switch “Allow Full Access” to ON

6) Choose “Allow” – we need this permission to be able to copy the emoticons to the clipboard

Now you can open Messages or Facebook Messager and when in a text field press the little “globe” key to cycle through your installed keyboards. One of them is the Doodle Doodle keyboard – tap an emoticon to copy it to the clipboard, and then tap into the message text field to paste it. Enjoy!

What’s next?

In the next days the issue of the installation instructions kept bothering me. If an experienced iOS user has difficulty finding how to install and enable keyboards what would the novice users do? And having the users not being able to install the keyboard would have totally resulted in a disaster.

So I came up with a different way to explain the process to the actually app users. More about this in the next post.

Part 1 and Part 2

2. Beta stage and testers

Beta testing

As soon as we had a somewhat working prototype of the keyboard I started thinking of getting some beta testers. We had two reasons to reach out for external beta testers:

  • iOS keyboards are universal by definition so you really have to support all devices, and me and Nikolay didn’t own all those devices to test with.

  • Beta testers are great advocates for the app if they enjoy it and on no budget we really needed each app advocate we could get.

  • Finally I wanted to have the app checked by somebody who’s not friends and family. Friends and family love you – you should never ask for their opinion about your products. That’s why people you don’t know are more likely to give it to you straight so you can get straight to fixing stuff.

So I sent an email to a list of around 100 people, colleagues of mine, who are also developers asking if anyone would like to beta test with us.

From this email I got two responses from people who wanted to participate in the beta – around 1-2% (which is the “normal” conversion for any call for action).

Follows the email attached in full, it may help you if you need to write a call for beta testers yourself:

Hey everyone, I’m sending this personal inquiry to the chat mail list – I hope you don’t mind.


Me and my designer are working on an iOS8 Keyboard app (http://doodledoodle.io) – we aim to release mid – January and we are looking for 5-6 people who would like to test drive few beta versions during the holidays.

If you chat regularly (Apple Messages, WhatsApp or LINE) and would love to use a keyboard with 200+ hand drawn emoticons just write to my email: support [at] underplot.com and we’ll add you to the adhoc list.

I’m looking for feedback from people with different devices that I don’t have like 6+, 6, and assorted iPads. I won’t be able to test with more than 6 people so the adhoc list will work on a first come first served basis.

Additionally – if you know any bloggers, reviewers, or press that would be interested in covering such kind of keyboard app – please, please – do let me know :]


Thank you all, very best, Marin

Getting more beta testers – Twitter, LinkedIn, Facebook

I of course wanted to have more testers – 2 were not enough. But how? Since I’m not a super star developer it’s difficult to get through to people.

Same day that I sent the email I also tested how people would respond on social networks.

December 5th, 2014 I posted on twitter:

I re-posted the same text on Facebook, LinkedIn and Google+.

As a follow up on December 6ht, 2014 I posted a short call for beta testers on Twitter:

The results – out of 1,200 followers on all my social networks I got 3 favorites on Twitter, 1 retweet, 1 like on LinkedIn, 1 like on Facebook.

Looking at those numbers it became clear to me that I won’t achieve much this way. If my social circle didn’t even favorite or like those posts what would be when I really needed visibility at launch time? What really became obvious to me at that point is that casual social friends I had on the social networks are just that – casual social network friends – not my own personal marketing machine.


Twitter, LinkedIn, and Facebook are free to use, but you get pretty much what you pay for. If you use those for personal networking your contacts most probably won’t be of much help when you want to launch a marketing campaign. Not because they don’t like you but because that’s not what your contacts joined these networks to do.

What’s next?

In the next post – we finally find enough people to test drive our keyboard and send around our first public beta.

1. How the Doodle Doodle idea shaped up and our first marketing effort – the website About this blog series In February 2015 we launched a pair of paid and free custom keyboards for iOS (http://doodledoodle.io) . We were to promote and do our app marketing ourselves and this blog series describes what we did […]

I just wanted to wish you all a Happy New Year! I have high hopes for 2015 and I hope it will be a great year for all of us :] Workwise I have a number of project cooking which I will be posting about at length shortly. I’m working on: An awesome workshop for […]

  This is just a quick reminder that the iOS8 Feast is ending this Wednesday. On the 22nd of October our big giveaway will happen and raywenderlich.com will give prizes of $12,000 value to a number of participants. Getting part and increasing your chances of winning is very easy just re-tweet the giveaway announcement!     […]

Marin’s honest speaking advice

Before I started speaking at conferences I carefully read through a lot of advices on the Internet, and it really seems like lots of people wanted to give some on their blog. There was even somebody who created a while ago a site about speaking advices (http://speaking.io) It’s been a while though and after I […]