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 before and after the launch.

I would include links and details to all the software and web services we used with the hope these will help other app developers to launch and market their products.

Sticker Keyboard Idea

Nikolay and I have a story on the App Store starting late 2009. We released a number of small apps and some of them did really well in the early times. We were one of the first guys to develop apps that have to do with photos and offer a high quality product.


Unfortunately the big companies and startups with seemingly infinite marketing budges have pushed us out of the competition in the Photography category. We didn’t release new apps for a while and each of us did his own stuff for a while.

In September 2014, Nikolay approached me with the idea to develop a custom keyboard for iOS 8 that would offer “stickers” to use instead of emojis while chatting.

In 2014 he has created few sticker sets for the popular social network LINE. Since he was one of the first artist to send sticker sets for the newly created LINE sticker marketplace he was enjoying steady “sticker” income. People could buy his sticker sets and use them while chatting in LINE like so:



What we then decided to do was to develop a custom sticker keyboard for iOS so that users could use his awesome stickers in any chat app not only in LINE.

After about a month of bouncing ideas back and forth (on the October 22nd, 2014) he sent over the first mockup of how this keyboard could look like:


Shortly after I saw the mockup I started coding. In an effort to keep things interesting for myself the project would be a pure Swift app, which would also help a bit with the rather unstable at the time Xcode 6.1

I was to write lots of code since I couldn’t use many libraries nor Cocoapods and that sounded like lots of fun.

Marketing on no budget

As mentioned previously we didn’t release new apps for a while so I decided that we are going to put some marketing efforts and try to make as big splash as we can.

Problem: We didn’t have any marketing budget.

So I was to find how much marketing can be done on no budget.

First website

It was December 5, 2014 – about 2 months from our scheduled launch date (I’m gonna talk about the launch date and timing in a later post).

The first thing to do on my marketing list was a website. We didn’t need anything complex at this point – in fact we needed just the simplest page with a single screenshot so that we can link to it from twitter and Facebook.

I put together a very simple HTML page with a nice framed screenshot, some social buttons, and a form to sign up to get notified when the app is live on the App Store.


Once we had something showing up on our web site I could start plugging the URL everywhere I’d even leave a smilie on the web.

Few things I did immediately after the page was online:

  • I changed the signature of all the 6 email addresses I use actively (e.g. personal email, business email, apps support email, email address for annoying newsletters, etc.)
  • I changed the URL of my Twitter account, Facebook account, and my GitHub account
  • I changes my website on Skype and Google
  • I changed my signature and profile URL in the two forums I sometimes write.

That’s not a lot – I’m not a social superstar or anything. But it’s a start – this got the name Doodle Doodle in front of the eyes of all my friends, family and business partners.


I used GoDaddy to buy the http://doodledoodle.io domain. “io” is kind of hot lately, so I went with it even though it’s a bit more expensive than other top level domains. (I don’t recommend GoDaddy for hosting but buying domains is relatively easy and painless.)

I have a little virtual server with Linode.com and I host all my websites there. I don’t need much – I usually just host small app websites and promo websites. But they can also provide if you need power check ‘em out.

I used Promotee (4,99$) to create the framed screenshot. It’s a very cool app that lets you very easily create shots of iPhones or iPads, which have particular screen contents.

I used MailChimp (free up to a point) to create a mailing list and get the code for the sign up form. It’s a very good free online service.

Finally I own the Coda 2 editor (99$) for a really long time and use it any time I need to put together some PHP, HTML and Javascript. I can only recommend it if you are looking for a web editor.

This was more or less the website I planned for so I went back to coding in Xcode and working on the app.

What’s next?

In the next post – we have a working keyboard prototype and we make efforts to get external beta testers on board. I’ll see you in couple of days.

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 […]

Book: iOS8 by Tutorials

As every year ever since iOS5 also this year the ray wenderlich tutorial team has prepared a book to teach you the new APIs in iOS8. Available at iOS8 launch the book goes in depth to unravel the mysteries of: Adaptive UI with Size Classes, Universal Storyboards, and more App Extensions Cloud Kit Xcode 6 […]