[ Note: This is a guest blog post written by Frank Gregor (@TheCocoaNaut on twitter), an OS X- and iOS developer based in Austria, about his Mac app Review Times ] Review Times Icon

Once upon a time… No, only fairytales start that way. And this is no fairytale. It is a “true story”, like, I’m sure, many other developers have experienced one way or another. (-:

Some time around Christmas 2014, I stumbled upon a tweet, linking to appreviewtimes.com. Many of you may know about this website already. It gives you the average time Apple is currently taking to review apps for submission on the iOS and Mac App Stores.

I thought, hey, that would make a nice little Mac tool. So I asked a couple of developers on Twitter what they thought of such an app. The response I got was great. Without exception, everyone I asked wanted something like that. I had had some free time on my hands, so the idea manifested.

I wanted to build a small app that would live exclusively in the menu bar and offered a Today Widget. The information I would display in the app I would get from appreviewtimes.com. So I contacted Dave Verwer (@daveverwer on twitter), founder of Curated and publisher of the well-known iOSDevWeekly newsletter. He was the contact listed for the Shiny Development team, who are the creators of appreviewtimes.

I asked Dave if they perhaps already had such an app available or in development, and if that wasn’t the case, if they’d mind if I developed the app and used their data for it:

Hey Dave,

I found you as contact for Shiny Development, the maker of App-Review-Times. So I think it would be a great thing to have a little OS X tool that shows in an app extension the current review times via Notification Center. I’m building exactly such a tool and I have to grab and parse the website to get all the needed data.

So, to make things easier for development: Would it be possible to get all that raw data (iOS & OS X) as JSON or XML? Would be really great! (-;

Cheers, phranck

Dave answered promptly:

Hi Frank

I’m afraid that we don’t have either JSON or XML feeds of the information.

Please feel free to scrape the HTML though, as long as you include a link back to the original site.

Thanks Dave

Great! Now nothing stood in the way of me selling this App on the App Store (though I would learn better later). I got to work and within two days, I had a working prototype.

The fact that this app would run as a menu bar tool was very beneficial to me. I had been working on a piece of open source code, which does exactly that: place an icon in the menu bar and display a popover when clicked. This gave me a very good reason to further develop and improve the open source code.

Screenshot of Review Times Popover

Now was the time to tweet some screenshots, to whet the appetite of potential customers. It worked well. I received a lot of inquiries about what the app was about. This way, I got my first beta testers.

Review Times Today Widget

All in all, about three to four weeks went into developing the app and I believed the app was ready. I needed a nice icon that should really catch the eye. I made the acquaintance of Dan (@derpixeldan on twitter) and he created something truly wonderful at an unbeatable price… (-;

Around Mid-January, I submitted the app to the Mac App Store. Excitedly I waited for the notification on my iPhone that the review process had begun. About three weeks later, I received the message I longed for.

It didn’t take long and the review team contacted me again. But this message wasn’t what I had hoped for. My app got rejected! The reason Apple gave me was

…featuring speculative information about Apple products/services…

which I didn’t find reasonable at all. I was shocked. Every developer who ever received a “Rejected” notice knows this feeling of unease. I was annoyed and angry at the same time. Why in the world… ?!?! Did I go about this entire thing too naively?

Appstore Rejection

If you are familiar with Apple, you know they like to have control. And speculative information – like the average time it may take for Apple to review an app until submission to the App Store, shown by an app by some developer – well, that was completely out of their control. So Apple showed me, who’s boss.

That took the wind out of my wings in respects to this tool. I didn’t want to get into a discussion with Apple, it wouldn’t have lead anywhere anyway. I vented on twitter and let the whole thing rest for a couple of days – until, again on twitter, I received inquiries about what had happened to the app and how I would proceed with it. There were two possible options for me: 1) publish it as open source code 2) sell it outside of the Mac App Store from my website

On Twitter, I asked for input.

Since previously, people had stated their interest in paying for this app, I decided to go with option 2. After some research and testing how to best implement selling it from my website, I came to the conclusion that I should use Paddle. Their integration into an app is absurdly easy to do and they have first-class support.

All said and done, it took three more days of coding and testing and then everything was ready. I built a one-page website, wrote to many Mac-Blogs and magazines (none of whom replied!) and announced the release on twitter. Since so many developers wanted this tool, I was preparing for incredible sales-days… (-:

Poppycock. Virtually nothing happened. I sold a couple of copies, but all in all it went very, very slowly. Even after two months – with heavy-duty tweeting about it – I didn’t even make up for the cost of the icon. Reality had its grip on me again. So I had to act. Without thinking about it too long, I deleted all license- and purchase-handling code and released the app for free from my website.

Now everyone can download and install the app from http://reviewtimes.cocoanaut.com. Since then, I’ve had about 1-2 downloads a day.


Frank Gregor (@TheCocoaNaut on twitter) is an OS X- and iOS developer based in Austria. Among others, he is responsible for the Mac apps Review Times, Nekrologger and the iOS app f4analyse.

Read more

Glimpses App Icon

Glimpses 2.0 for Mac

After a lot of hard work, I’m very happy to finally be able to announce the immediate availability of Glimpses 2.0 (formerly known as Briefly) on the Mac App Store.
The app has undergone some major changes, and I wanted that to be reflected in the app- name and icon (wonderful work by the very talented Alexander Käßner).

What Does Glimpses Do?

Still Motion videos typically show photos for not much longer than the fraction of a second.
Glimpses is designed to let you create these videos with just a few clicks, with stunning results.

The app produces high-quality video with a resolution of up to 4K and lets you add a soundtrack to make your video really sing.

Glimpses with soundtrack selection

What’s New?

– Soundtracks: Glimpses 2.0 makes it much easier to add multiple soundtracks. It also lets you select the parts of the soundtracks you really like to make your Still Motion video really shine.
– Face Detection: Glimpses analyses your photos for faces and places the photos in your video accordingly for much nicer and more personal results.
– 4K Resolution: Going beyond 1080p, Glimpses now renders your videos with a resolution of up to 4K.
– Projects: You can now save your projects. Up until now, the app only remembered the last used photos and soundtrack.

… as well as many more, minor improvements (like improved support for panorama photos) and fixes.

Details

Soundtracks

Soundtracks are a vital part of a Still Motion video. Glimpses makes it so much easier to add and edit one or several soundtracks.
With its new selection feature, you can select just the part of a song you like best that should be used for your video.

If a soundtrack is too short, you can either loop it or add another one. The order of appearance can be changed at any time.
Should a soundtrack be longer than your video, Glimpses will automatically fade it out at the end without you having to do anything.

Face Detection

In earlier versions, Glimpses used to center your photos within the video’s frame.
Glimpses 2.0 is much smarter and analyses your photos for faces and if detected, moves them into the video’s frame, resulting in much nicer and more personal videos.

Briefly without and with face detectionA still from a video created with Briefly 1.5.2 (top) compared to the same video created with Glimpses 2.0 (below)

Resolutions and Video Settings

With cameras getting better and better, it was only logical to include new resolutions in Glimpses 2.0 – the app now goes beyond 1080p and adds support for 2K and 4K resolutions. You can set the resolution manually or let Glimpses decide, based on the smallest photo.

Glimpses Video SettingsGlimpses Video Settings

A photo’s duration can be set from 0.1 seconds up to 4 seconds in 0.1-second-increments, an improvement that allows for more fine-grained control over the resulting video. Glimpses can also automatically do it for you, based on the duration of the soundtracks you selected.

Pricing and Availability

Glimpses is available exclusively on the Mac App Store (click) for the introductory price of $9.99 for a limited time (about 60% off), after which the price will revert to $24.99.
A free, 15-day trial can be downloaded from the website (click) (direct download). If you’re from the media and would like to get more info about the app, please download the press kit (click), thank you.

Glimpses Website: http://eternalstorms.at/glimpses
Glimpses on the Mac App Store: https://itunes.apple.com/app/glimpses/id637565340?mt=12
Glimpses Demo Download: http://eternalstorms.at/glimpses/Glimpses.zip
Glimpses on Twitter:https://twitter.com/GlimpsesApp
Glimpses Press Kit: http://eternalstorms.at/press/Glimpses-2-Press-Kit.zip
Glimpses on Product Hunt: https://www.producthunt.com/posts/glimpses

Thank you for your time, I hope you enjoy this great new version of Glimpses 🙂

If you have any feedback or questions, please be sure to let me know via twitter (click) or eMail (click). I’m looking forward to hearing from you.

Read more

Welcome to the slightly belated 2nd edition of ‘What I…’
Due to the weekend and a lot of last-minute polishing that had to happen for Briefly 2.0, I had to delay this post a little 😉

Now, without further ado, here’s What I…

… Did

Transloader 2.2 (click)
I released Transloader 2.2 (for iOS, the Mac app remains unchanged for now) and it received a very nice response with a sponsorship on TekRevue, the release on ProductHuntBeautiful Pixels, and many others.

Received Eternal Storms Software & charity:water T-Shirts (click)
After a long wait, they finally arrived and they look awesome 🙂

Open Source: Animate a determinate NSProgessIndicator (click)
A category on NSProgressIndicator that makes it easy to animate its -doubleValue.

Briefly 2.0
I finished up Briefly 2.0 and submitted it to the Mac App Store, it will be available on June 8th.
Alexander Käßner, the designer who worked on the UI of the app, did a wonderful job and I can’t wait to be able to finally release it next week.

The functionality of the app was completed two, three weeks ago, so these last weeks went into making the app really shine, fixing bugs, polishing the interface and animations and testing all around.

… Downloaded

Sword of Xolan IconSword of Xolan (click)
Sword of Xolan is an action platformer game that includes the juice of pixel art style. Xolan is a young and brave man who fight for justice no matter what the cost.
A pretty awesome game and at $0.99 an absolute steal. Very entertaining and well worth the money.

 

Lara Croft: Relic Run IconLara Croft: Relic Run (click)
Lara Croft: Relic Run is the all new action adventure for nostalgic Lara Croft fans. When a shadowy conspiracy threatens the world, only Lara Croft is equipped to unearth the truth.
It’s not much different from other endless runners, but it’s well done with a couple of nice animations.

… Read

Beat Detection Algorithms (click)
Working on Briefly 2.0, I had this idea of automatically timing photos based on the beat of a given audio file. It didn’t make it into the upcoming release, but perhaps in a future upgrade. This is non-trivial stuff 😉

‘Big Indie’ Kickstarters are Killing Actual Indies (click)
An interesting article about how ‘Big Indies’ asking for less than they actually need kill actual indies who ask for what they need by ‘devaluating’ game development.

MacDevWeekly #9 (click)
a curated collection of OS X developer code, resources and tools – Issue #9 features NSView-ESSViewCategory by yours truly – a category on NSView to easily create zoom-transitions between two NSViews.

… Watched

My girlfriend is a fan of mangas and animes, so we watched

Nisekoi DVDNisekoi (click)
“Nisekoi follows high school students Raku Ichijo, the son of a leader in the yakuza faction Shuei-Gumi, and Chitoge Kirisaki, the daughter of a boss in a rival gang known as Beehive.”
It’s very funny, my girlfriend and I laughed throughout so if you’re a fan of anime and looking for a laugh, I suggest you give it a try 🙂

… Ate

Butter ChickenIndian Butter Chicken
We’re totally into indian food and butter chicken might be our absolute favorite.

… Went to See

View from the south tower of St. Stephen's CathedralView from the south tower of St. Stephen’s Cathedral in Vienna, Austria
My girlfriend and I haven’t been up there in the longest time, so we decided to walk up the 343 steps – the view was definitely worth it.

Read more

I’m not sure if I’m imagining things, but I believe at some point before OS X Yosemite, a determinate NSProgressIndicator was able to animate to its new doubleValue, not just “jump” to it.

In an effort to have that animation again, I wrote a little category on NSProgressIndicator that does exactly that, using NSAnimation.

Progress bar animation using ESSProgressIndicatorCategory

NSProgressIndicator and Animation

NSProgressIndicator has a method called -startAnimation:. However, as the documentation states, this has no effect on determinate progress indicators.
Calling progressIndicator.animator.doubleValue = 5.0; doesn’t animate either. So with options that come with the class, we’re stuck.

As I try not to reinvent the wheel for something that’s already solved, I did some googling around, but that didn’t yield any results, either.
What became clear, though, was that there’s a lot of confusion about what -startAnimation: actually does.

NSProgressIndicator+ESSProgressIndicatorCategory

Not finding a solution on the internet, I decided to write my own, as I figured it wouldn’t take a lot of time (it didn’t).

I definitely didn’t want to subclass NSProgressIndicator and override any drawing methods.
That would have a) taken an unjustified amount of time and b) been a huge pain in the neck for sure.

The solution to me then was to use NSAnimation.

The goal was to have one method to call that sets the new doubleValue and animates to it nicely:

New method to animate a progress indicator's doubleValueThe category’s – (void)animateToDoubleValue: method

It calls a subclass of NSAnimation named ESSProgressBarAnimation with the new value and starts the animation.

initialization of the NSAnimation subclassInitializing the NSAnimation subclass ESSProgressBarAnimation

We save the original doubleValue of the progressindicator, set the duration and animationCurve and set the animation’s animationBlockingMode to NSAnimationNonBlockingThreaded so that when there’s a mouse event, for example, the animation doesn’t stop.

NSAnimation's setCurrentProgress method

When an NSAnimation object’s -startAnimation method is called, it automatically calls -setCurrentProgress: on itself until currentProgress is 1.0, meaning the animation has ended (currentProgress ranges from 0.0 to 1.0). The value is based on the duration and the animationCurve.
In this overridden method, we calculate the delta between the new and the initial doubleValue of the progressIndicator, multiply it by currentProgress and send it to the progressIndicator. That’s it.

How To Use NSProgressIndicator+ESSProgressIndicatorCategory

Add the category’s .h and .m files to your project, import it where you need it and update your progress indicator’s doubleValue by calling -animateToDoubleValue: with the doubleValue you desire to animate to.

The Source Code

The repository (a sample OS X app) is available on Github.

It was developed (and tested) on OS X Yosemite 10.10.3 using Xcode 6.3.1 but should work on earlier versions of the operating system.

More source code is available here (or directly on my github profile page) if you’re interested. If you have any questions or feedback regarding my open source projects, please be sure to mail or tweet me – I’m looking forward to your feedback!

Enjoy!

Read more