Development – Tim Oliver https://timoliver.blog Wed, 01 Jan 2020 16:00:16 +0000 en-US hourly 1 https://wordpress.org/?v=6.5.2 5272524 Announcing iComics 2. https://timoliver.blog/2020/01/01/announcing-icomics-2/ https://timoliver.blog/2020/01/01/announcing-icomics-2/#respond Wed, 01 Jan 2020 15:54:56 +0000 https://timoliver.blog/?p=2025 Hi everyone! Happy New Year! I hope you had a fantastic start to this decade. I’m extremely excited at all the potential in 2020, and I hope you are too.

I was doing a little reflecting recently and I came to a bit of a scary realisation. I’ve been hacking away on iComics, my little comic reader app for nearly 10 years now.

It was 2010 when I bought the very first iPad. I was so impressed at the potential it brought to the table. A full-colour, high-powered computer screen shaped like a normal piece of paper. Compared to laptops and PCs, it could be comfortably held and operated at any angle; an absolute game-changer when it came to reading comic books.

Having decided my niche would be a DRM-free comic reader, in December 2011, I started working on a proof-of-concept of the app to see if it was possible. At the start of 2012, I announced my intention to build a comic reader app, and launched the first version in late 2012.

I’ve since been adding to it piece by piece ever since. And while it’s no where as near as good as I had hoped it to be, I think it’s been a huge success. Not only has it provided a platform many people have found really useful, the knowledge I gained in the process has allowed me to make iOS engineering my full time profession.

So I really can’t overstate this enough. Building iComics has been one of the best and most rewarding experiences in my life. And to all the people who took a chance on me and bought it: thank you so very much.

But. Now that we’re looking down the barrel of a new decade, I’d like to talk about what my plans for iComics are from here.

To be frank, the quality of the codebase in iComics is pretty dismal. I had been developing iOS apps for 2 years when I started working on the app, and looking back, I knew very very little about how to properly build iOS apps, and that shows in the foundations of the app.

In addition, iOS hardware was much more limiting. The first iPad was non-Retina, had a single core CPU, and only had 256MB of memory. Positively the stone ages by today’s standards! And because of that, I architected iComics in a such a way that it’s not taking advantage of the amazing CPUs we have today.

And on top of that, I started building the app back when iOS 5 was brand new. Back then, iOS was no where near as feature rich as it is now, and in order to achieve a lot of things we take for granted today (Such as state restoration between launches) were things I built myself. In these days, that code is completely un-necessary, and in all realism, completely inferior to the native solutions Apple has provided over the years.

So. I’ve been thinking about this for several years now, but I want 2020 to be the year in which I take everything I’ve learned from iComics and use it to start building an even better comic reader.

And for now, I’ve decided to call it iComics 2. It is my intention to make it the de-facto comic reader app for iOS. 😀

How will this affect iComics 1?

This won’t be a simple upgrade to iComics 1. It’s going to be a completely new app. For now, iComics 1 isn’t going anywhere, and I’m still working on an iOS 13 update to it right now.

But from now on, I want to start writing code with the mindset that it will be modular enough that it can be re-used in iComics 2 as well.

I don’t expect iComics 2 to reach feature parity for a long time, so I’m tentatively planning putting both on the App Store at the same time. Once iComics 2 has reached parity, I’ll take iComics 1 off the store.

How will it be written?

Ideally, I don’t want to re-invent the wheel too much. The idea this isn’t a complete rewrite, more that I can cherry-pick and re-use as much as I can from iComics 1.

I’ve been working for the past few years by making new components as separate modular libraries, and then dropping them into the codebase. This has been fantastic way to promote code quality, and clean separation of concerns. In order to share code between iComics 1 and 2, I’ll be doing this a lot more, and designing all of the interfaces with that in mind.

Which language will it be written in?

Every iOS developer who knows me knows I’m still a big proponent of Objective-C. I should write a blog post separately why this is, but the overall tl;dr is that I feel really experienced at Objective-C, and not so much in Swift. And so while Swift promises to be faster to develop for, and to yield safer, more stable code, I’m still convinced I can do a much better job at delivering quality software in Objective-C than Swift.

But that being said, I’ve been writing Swift for my day job for the past 3 years, and I’ve slowly started to see a lot of the big wins it has over Objective-C. Definitely the most appealing thing is the sheer amount of code you don’t have to write. A fantastic example of this was when Brad Larson rewrote GPUImage in Swift, and managed to achieve 75% less code, but maintain feature parity with the Objective-C freamework. That was super compelling right there!

But no matter what sort of benefits/deficit arguments I could make, the truth is that it’s a complete no-brainer to start any new projects in Swift.

BUT. On that note. Since I still want to share code between iComics 2 and the 100% Objective-C iComics 1, I’m going to have to offer a compromise.

The main app, and all of its business logic will be Swift. However any third party libraries I build that are intended to be used in both apps will continue to be Objective-C.

Monetization

iComics 1 has sold really well over the last few years. Far too well than it should have any right. I’ll definitely need to do a blog post at some point, but the app has definitely proved that up-front payments is still a viable business model on the App Store.

But as my goal for iComics 2 is to become the de-facto reader, I really feel the paywall needs to be completely removed. On the same note, I’ve discovered that a super cheap one-time payment isn’t really sustainable either.

So for now, I’m considering this. The app will be free while it’s not on feature parity with iComics 1. This will let people grab it and play with it super early, and begin to offer feedback. And if they like it, they can still buy a copy of iComics 1.

Once feature parity is met, I’m considering the tried and true method of having in-app ads, with the option of a yearly subscription to hide them. This is the model that Overcast made popular and I definitely believe that when done right, this is can be a really nice experience.

I’m also debating that in addition to subscriptions, offering a one-time “lifetime” in-app purchase for those who hate subscriptions.

Will it be open source?

I believe open source is a fantastic way to let people contribute, to have 100% transparency, and to serve as a learning tool for others.

That being said, since I am hoping on monetising this thing, I don’t want the source code to be so permissive that anyone could release their own product based on it without my permission.

As such, I’m exploring releasing it under the Patron License where it’d be free to use personally, but you’d be obligated to pay me if you wanted to build your own product out of it. 🙂

The name

Let’s be real here. iComics as a name is terrible. ^_^; Not even Apple names their new products in that format anymore.

I originally picked it because the original name I wanted was taken, and I considered it a “pledge” to make the quality of the software as good as Apple’s. However that kind of backfired to a horrifying degree in that the quality of the app has dropped, and also many would argue that the quality of Apple’s software has also dropped.

But thankfully. In the giant 32-bit app purge of 2017, the name I originally wanted became free again. And I was able to snap it up. 😀

So on that note, I won’t reveal the name just yet, but it will 100% have a different name than iComics 2 by launch.

Keeping track of progress

I haven’t done a great job these past few years of keeping people up-to-date on the app. Between being super busy with work, and wanting to just code, writing blogs and making YouTube videos is just too much effort.

So instead, this year, I’m going to go back to just Instagram and Twitter. Ideally, I’ll try and find a way to link updates to directly inside the app.

I’ll also try my hardest to set up regular Twitch streams in case anyone wants to watch. 🙂


So hopefully we’ll see how this goes this year. For now, I need to focus on the iOS 13 update to iComics, but I’ll keep everyone up to date on what I’m doing as much as I can.

In any case, if you have any suggestions or feedback, please let me know.

Have a great year! Hopefully it’ll be a blast!

]]>
https://timoliver.blog/2020/01/01/announcing-icomics-2/feed/ 0 2025
iComics v1.4.5 is live on the App Store! https://timoliver.blog/2018/12/09/icomics-v1-4-5-is-live-on-the-app-store/ https://timoliver.blog/2018/12/09/icomics-v1-4-5-is-live-on-the-app-store/#respond Sun, 09 Dec 2018 05:05:41 +0000 https://timoliver.blog/?p=1913 Hi everyone!

In case you missed the memo, iComics v1.4.5 was approved by Apple and released on the App Store earlier this week!

The updated contains the following updates:

  • Support for the new iPad Pro, iPhone XR, iPhone XS Max devices that came with iOS 12.
  • Added the ability to sort comic collections alphabetically.
  • The ability to turn comic pages with your Apple Pencil. 😀
  • General updates and improvements for compatibility with iOS 12.

To commemorate the occasion, I created a small developer update video on YouTube.

Like I said in the video, my main focus now will be back to my file kit library.

In addition to that, I’ve also got a lot of other R&D projects in development for iComics 2 (Like loading images faster, and handling absolutely massive collection sizes) that I’ll be looking at over the Christmas holidays.

Thanks again to everyone who participated in the beta. Enjoy! 😀

]]>
https://timoliver.blog/2018/12/09/icomics-v1-4-5-is-live-on-the-app-store/feed/ 0 1913
iComics 2018! (No, it’s not dead!) https://timoliver.blog/2018/10/11/icomics-2018-no-its-not-dead/ https://timoliver.blog/2018/10/11/icomics-2018-no-its-not-dead/#respond Wed, 10 Oct 2018 17:26:48 +0000 http://timoliver.blog/?p=1886 G’day! It’s been a while, but the reports of my death are greatly exaggerated. Mostly. 🤣

I’ll go into more depth in this post, but for starters, here’s a video I produced for the occasion. 😁

I’ve been toying with the idea of making dev videos for a while now. I had a lot of fun producing this one, especially because I’d never tried Final Cut Pro before. But on that same note, I had no idea what I was doing the whole time (and I’m sure it shows). Let me know if you want more. 😜

So to follow up what I said in the video, since basically the end of 2017, everything got completely crazy. My job at Realm ended, I did some contracting from October and I did some overseas job interviews at the same time. And eventually I ended up moving to Japan. And while moving to Japan has been awesome, it also basically meant was all this time has been spent getting set up: finding an apartment, furnishing the apartment, setting up a home office etc. 😰

It’s been nearly a year, but I’m finally back in a position where I can work on iComics. I’m so excited. 😁

So like I said in my video, I want to start streaming my work on Twitch. My apartment has a lovely gigabit connection, (something my fellow Australians would absolutely kill for) and I want to make sure it gets proper use. 😃

The absolutely first thing I have to do is get iComics running on iOS 12, so it looks nice and shiny on iPhone XS Max. I plan to stream that this weekend if I can. My Twitch channel is timXD. Please feel free to follow if you want to watch. 🙏

After that, my plan is to return to TOFileKit. While the repo might look empty, I’ve already done a lot of the work in iComics, so I mainly need to start pulling it out and seeing what breaks.

To parrot my video one last time, I’m really happy how this app has let me come. I know it deserves a lot better love than I’ve given it now. Hopefully from now I can make that happen.

See you again soon! 🙂


If you’re curious about where I got the Attack on Titan comic books up there, they were available as a Humble Bundle pack a little while ago. I highly recommend keeping an eye on Humble Bundle. There’s some fantastic things that appear on it! 😀

]]>
https://timoliver.blog/2018/10/11/icomics-2018-no-its-not-dead/feed/ 0 1886
iComics v1.4 Released https://timoliver.blog/2017/12/14/icomics-v1-4-released/ https://timoliver.blog/2017/12/14/icomics-v1-4-released/#comments Thu, 14 Dec 2017 08:45:59 +0000 http://timoliver.blog/?p=1861 tl;dr: iComics v1.4 with support for iPhone X and the new iPad Pro is out! I’m also planning to give streaming iComics dev another try. Follow me here.

In case you missed it, I updated iComics to v1.4 and shipped it late last month. Sorry it took so long, but hopefully it fixed a lot of the issues people were having.

While a bit of an incremental update, iComics v1.4 fixed a lot of stuff under the hood:

  • It now renders properly on both the new iPhone X, and the new 10.5″ iPad Pro.
  • It integrates with the new Files app, which should fix the download issue with comics being unelectable in the Google Drive app.
  • Fixed an issue where the app would crash if you tried to save a copy of a page to the Camera Roll (Sorry about that one!)
  • Updated all of the third party dependencies, notably Realm, in order to improve stability and performance.
  • Tweaked Realm’s settings in order to mitigate a crash that was occurring on devices with smaller RAM pools.
  • Fixed all of the broken links in iComics, including the App File Sharing tutorial and the link to this blog.

Please give the new version of iComics a try and let me know what you think. 🙂

Why iComics Development is so Slow

I’m very sorry that development of the app has been going slowly. I basically took a hiatus this year in order to 100% focus on the work at my company. While I don’t regret dedicating all of my time to the company, I am a bit disappointed in myself that I didn’t fix a lot of the issues people were reporting in iComics sooner. My circumstances recently drastically changed, and so I’m hoping that will now let me spend a lot more time on it. Thanks for your understanding. 🙂

The Future of iComics

I’ve been working on this app for a while, and it’s starting to show. All of the architectural considerations were made during the era of the iPad 1, where iOS devices were single core, and had very limited RAM. I’m no where near done with this app, but it’s gotten to the point where it’s very tricky to add new features, and the code is very unpleasant to look at.

My current plan for the app is to finish up adding a custom file downloading system. I spent the last year two years compiling libraries to allow integration with FTP, SFTP, SMB, and WebDav, and designing a UI system that can interoperate with those protocols, and as well as the public APIs of Dropbox, Box, Google Drive and Microsoft OneDrive.

I recently decided that I’m going to pull all of that code out of iComics and treat it as a separate module. ‘Downloading files’ is a very generic feature, and so I feel like this is one that should be done separately, in such a way that it could be reused in any other app that needs generic file handling. To that end, I’ve created the GitHub repo TOFileKit and will be working on open-sourcing all of the work I’ve done in there, open source.

Once this work is done, and iComics has the full file downloading support, I plan to release one more version, before I cut loose and re-implement a whole new app and engine from scratch. iComics 2.0. 🙂

Streaming Development of iComics

In order to make progress of iComics more transparent, as well as to allow anyone who’s interested to see how it works, as well as motivating myself better, I’m planning on starting to stream iComics development sessions. It’s something I’ve been wanting to do for a while, but until recently, I hadn’t put the time into learning how to do it. XD

With Twitch finally enabling creative non-game related streams, and with the recent release of the Justin.tv usernames, I’m going to properly get into Twitch streaming now.

If you’re interested, feel free to follow me at http://twitch.tv/timxd

As aways, thanks for using iComics! Have a happy holiday and see you next year!

 

]]>
https://timoliver.blog/2017/12/14/icomics-v1-4-released/feed/ 2 1861
WWDC Week 2016 https://timoliver.blog/2016/07/04/wwdc-week-2016/ https://timoliver.blog/2016/07/04/wwdc-week-2016/#respond Mon, 04 Jul 2016 08:36:31 +0000 http://www.timoliver.com.au/?p=1771 And WWDC 2016 is now officially behind us! What an absolutely crazy week it’s been.

For the third year in a row, I sadly did NOT get a ticket to WWDC (Next year Gadget! Next year.), but thanks to the nature of my work, it’s always still absolutely worth the trip out here anyway to join in on the alternative conferences happening during the week, as well as the festivities during the evening. 

The Keynote Viewing

For those who didn’t get a ticket to see the keynote live, there are MANY great places around SF to watch its live-stream. Hands-down, I think AltConf is arguably the best because they show the keynote in an actual movie theatre, which obviously means the comfort and quality is pretty much unrivalled.

But this year, I flaked on the AltConf viewing because I was extremely lucky to get into the viewing being held at Twitter HQ, located literally behind the Bill Graham Civic Auditorium. I’d say that’s as close as you could get! The Twitter office is absolutely beautiful and the viewing room was much bigger and well catered than I was expecting.

The Twitter Office

Watching the keynote at Twitter was excellent. Thankfully, I lined up pretty early at their office, so I managed to get a seat right up the front. 😀

WWDC-2016-At-Twitter-HQ

I met a few Twitter engineers the day before and they said that they actually hand-curated the invite list for the viewing party. So I feel I need to extend a huge ‘thanks’ to those folks for letting me attend. 😀

Layers Conference

Another conference that runs during WWDC is one called Layers. In a week of conferences about code, Layers aimed to be a very different experience in focusing on the design side of the equation.

I was tempted, but I wasn’t really sure if it would be the sort of thing I, as a developer should attend. To see if I could any input on the matter, I decided to ask on arguably the largest WWDC 2016 Slack. Of all the people I was expecting to get an answer from, I think Marco Arment himself was literally the last! XD

Marcoammentlayers.png

That was more than enough for me. I bought a ticket right after that. Thanks for that Marco!

Layers-Conf

Layers was absolutely fantastic. I had a wonderful time. The topics of the talks were incredibly broad, and a great deal of them opened up my view on certain topics that I had never considered before. Very profound and very enlightening.

And if that wasn’t all, the food at Layers. Oh my god. The food was so incredibly good and in such vast quantities. There was spring rolls, chicken sandwiches, cotton candy, popcorn, a dedicated snack station, AND a dedicated hangover remedy station. My expectations of conference catering will never be the same again. Layers took that bar and raised it as high as it could go!

Finally, to top it all off. At the end of day one, John Hodgkin, the comedian probably most famous for playing PC in the Get a Mac ad campaign came and entertained us for the early evening. It was absolutely hilarious and I really hope a recording of it is officially published at some point.

John-Hodgman-Layers

Massive props go to the main organisers of Layers, Jessie Char and Elaine Pow. Thanks again for putting on such an amazing conference.

The Talk Show Live at WWDC 2016

I kind of got a ticket for the Talk Show 2015 by dumb luck last year. John Gruber tweeted a batch of tickets had become free at 3pm Australia time, to which most of America was asleep. So I got one easily.

Since the guest last year was Phil Schiller, I just knew that the tickets were going to be in crazy demand. But I was still determined to get one. Since the initial announcement that tickets would go live ‘at some point’, I kept the page open, and was able to snap up a ticket an hour or so after they initially went live.

This year’s guests were doubly amazing than last year. Mainly because it was not just Phil Schiller this time, but also Hair Force One himself, Craig Federighi.

The-Talk-Show-WWDC-2016

I absolutely love attending the Talk Show Live. While the WWDC keynote is a very carefully crafted affair, aimed more at customers than actual developers, the Apple executives come to the Talk Show completely unprepared, and happy to talk about the proper development logistics and inner workings of the new operating systems they announced. It’s way more fascinating than the keynote itself.

It was an absolutely amazing evening on that merit alone, but I was also happy I had the chance to meet up with Marco Arment and personally thank him for the Layers recommendation.

I don’t know if I’ll get a ticket to the Talk Show again next year (Or if the guests will even be as good! It’s going to be hard to top that again!), but in any case, I’m incredibly grateful I got in this time.

AltConf 2016

I almost sort of randomly fell into attending AltConf in 2015. Realm had volunteered to help produce the video recordings of the talks that year and I had put my name forward in helping to set-up/clean-up the necessary AV equipment since my Aussie jet lag made it easy for me to get up in the wee hours of the morning. XD

Having such an absolutely fantastic time at AltConf last year, I didn’t hesitate to register a ticket for this time.

AltConf-2016

If you didn’t get a WWDC ticket, attending AltConf alone is worth the trip. The quality of the speakers are always the best of the best, and the fact it’s run inside a literal movie theatre means the seating is ridiculously comfortable. 🙂

Realm 1.0 Launch Party

A few weeks before WWDC, my company reached a very important milestone. The iOS/OS X version of our little product that my team has been beavering away on reached the appropriate level of stability and feature-completeness that we christened it the official version 1.0 and released it to the masses. To celebrate, we had a huge launch party at the company headquarters.

Realm-1-0-Launch-Party

It was an excellent evening. I got to meet and chat with many Realm users, as well as many people new to Realm but eager to try it out. And I also even met an iComics user too just to round things out. Here’s hoping the version 2.0 launch party will be just as epic. XD

WWDC Itself

I always approach WWDC with bated breath. What will it mean for the work myself and my colleagues do? How much mad scrambling are we going to have to do to support the new operating systems?

Thankfully this year was somewhat quiet. Definitely good in terms of the new features we received, but still rather quiet from a developer perspective.

  • macOS Sierra – For the longest time after Mac OS 9, I used to call it Mac OS X. So I’m very happy the name has gone back in that direction. As for the features, I’m very much looking forward to Siri and remote unlock on my MacBook Pro.
  • watchOS 3 – Oh god yes. I can’t wait hard enough for this. It’ll make the third party apps on my watch actually feel usable. 😀
  • tvOS 10 – Not too much here, but the option to set the UI to a light or dark mode is very intriguing.
  • iOS 10 – I’m going to miss slide to unlock, but aside from that, nothing new on my end! I’m a bit sad it didn’t get a dark theme like tvOS though.

I WAS slightly scared for a moment when I heard that iOS 10 was going to be a lot more strict with regards to connecting to non-HTTPS servers. I’m working on that in iComics at the moment, and I was scared I’d have to abandon that. Thankfully, apparently that’s not the situation, and I’ll just need to make the case when I submit the feature.

The fact that the videos at WWDC were all streamed this time was great. These days, there’s really not much point in attending the conference unless you actually have a legit question to ask in the labs. Literally everything else is online right after that.

Conclusion

It was a great week. It was a fantastic week.

I learned a tonne. I got to try new things. I got to meet many of my Twitter heroes in person. I got to try new food. I got recognised far more than I thought I would. And I made a bunch of new friends.

Honestly, even if I don’t get a ticket for WWDC next year, if every year was just like this one, then I would be absolutely fine with that. 🙂

See you at WWDC 2017. Hopefully! XD

 

]]>
https://timoliver.blog/2016/07/04/wwdc-week-2016/feed/ 0 1771
iComics – December 2015 https://timoliver.blog/2015/12/13/icomics-december-2015/ https://timoliver.blog/2015/12/13/icomics-december-2015/#comments Sun, 13 Dec 2015 11:20:33 +0000 http://www.timoliver.com.au/?p=1678 Hi everyone! I can’t believe 2015 is already nearly over! Jeez!

I thought I’d do a reeeeally quick update on where we’re at with iComics, and what the current goal is. 🙂

iOS 9 Crash Panic

The release of iOS 9 was a little more exciting than I anticipated. In that I had to literally drop everything and scramble for a little bit there. XD

When iOS 9 hit, the number of 1-star reviews for iComics shot up very sharply, citing that the app simply would not start on ONLY SOME of the users’ devices, even after deleting/re-installing.

Having NEVER EVER seen this on any of my own devices, I was at an absolute loss to try and figure out how to fix this bug. Thankfully, one of iComics’ users, an amazingly awesome chap named Cameron Cool came forward with his iPad Air 2, and let me use him as a guinea pig with a new beta build of the app.

After a few hours of testing, this was the crash log I ended up with.

After scratching my head for several hours, I finally managed to trace the issue down to this block of code:

In a nutshell, iComics uses an OpenGL API to work out what the maximum supported image size of the GPU for that particular device is.

What I didn’t realise was that the ‘setCurrentContext’ call ABSOLUTELY MUST be set back to nil when you’re finished, otherwise it will interfere with other parts of iOS down the line. This was apparently already happening to a small degree on iOS 8, but it GOT SO MUCH WORSE on iOS 9.

In any case, Apple were kind enough to allow me an expedited review in order to release a new version fixing that issue, and the reception to the app has been extremely positive ever since.

Major thanks to Cameron for his help. I absolutely would not have been able to fix this issue without him. 🙂

iPad Pro Support

I’d been hoping for a jumbo iPad to happen for a long time; ever since the announcement of an ‘Air’ iPad implied as much. So I was absolutely over the moon when Apple announced it alongside the new iPhone. When they came out a day early, the Apple guys at the main store here in Perth told me I was quite possibly the first guy in the city to actually buy one from them. XD

Just in case it wasn’t obvious, these things are big. Hilariously big.

iPad Pro vs iPad mini. XD

A photo posted by Tim Oliver (@timoliver) on

When the iPad Pro was released, iComics was already configured to display at the native resolution (instead of being upscaled LIKE SO MANY OTHER APPS RIGHT NOW), but there were still a few elements that weren’t taking proper advantage of the new size (Such as the comic panels in the ‘list’ view mode). The latest version of iComics I’ve released has fixed this.

Now that the iPad Pro is out there, there’s two features I REALLY want to add to iComics:

  • Split-screen support
  • Dual-page spread in landscape mode

Sadly, both of those features are going to require some pretty extensive refactoring of the logic of the app, but it’s something I’m already planning down on paper to implement. 🙂

Downloading Comics from Cloud Services

I received another review requesting this feature very recently. 🙂

I mentioned this in my last blog post, but since it’s something people really, REALLY want, I better touch on it again. XD

Yes. I’m working on it. Slowly but surely. XD Here’s the latest photo I’ve put up of it so far. This should give you a good indication of the services I want to support. 🙂

Making progress on the download system UI. Slowly but surely. 🙂

A photo posted by iComics (@icomicsapp) on


 

At the moment, I’m playing with the API interfaces for Dropbox, Google Drive, OneDrive and Box. Ideally, I want to run all of their web authentication processes through a web browser interface I can control, so I can add 1Password integration to it (Something no other comic reader has done so far. 😉 )

I want this system to look and feel as nice as it possibly can, and that’s going to require a lot of custom UI code and background execution, not to mention security concerns in keeping users login credentials safe. I’ve made a lot of headway on it, but there’s still a long way to go. In any case, please let me assure you that I am indeed working on it, and it’s going to be awesome when it’s done. 😀

I’m hoping to work on it very heavily over the Christmas holidays, in order to free up 2016 for bigger and better features. 🙂

Streaming on Twitch

A little while back, Twitch brought out Twitch Creative, a new set of guidelines where it’s now possible to stream ‘the creation of things, but not explicably related to video games’. I’m quite excited about this, and I’m now considering streaming some iComics development on Twitch.

If that sounds interesting to you, feel free to follow my new Twitch account so you’ll be alerted the next time I go live. 🙂

Conclusion

Overall, it’s been a crazy year. I hope everyone had a great 2015, and I hope iComics was of use to you.

Merry Christmas, take care, and see you next year! 🙂

(The photo for this post is iComics running on my iPad Pro, displaying the comic Scott Pilgrim #1. Scott Pilgrim may be purchased DRM-free on Comixology, but I bought my copy from Humble Bundle. 🙂 )

]]>
https://timoliver.blog/2015/12/13/icomics-december-2015/feed/ 2 1678
TOCropViewController – An open source image cropper for iOS https://timoliver.blog/2015/06/21/tocropviewcontroller-an-open-source-image-cropper-for-ios/ https://timoliver.blog/2015/06/21/tocropviewcontroller-an-open-source-image-cropper-for-ios/#comments Sun, 21 Jun 2015 05:31:14 +0000 http://www.timoliver.com.au/?p=1568 Over the years, I’ve built up a pretty crazy list of features that I want to add to iComics. One feature on that list that’s been kicking around since pretty much day 1 has been the ability to crop page images.

Photo cropping as a native feature is not new to iOS. It was originally introduced in iOS 5 wayyy back in 2011, and was touted during the unveiling of the iPhone 4S.

iPhone-4S-Cropper

Since then, it’s only gotten WAY cooler in iOS 8.

iPhone-6-Cropper

I’ve wanted the ability to crop page images in iComics for mainly two reasons: to make comic thumbnails more configurable, and to make posting small portions of comic pages to social media possible. I’m also considering persistent image editing down the line as well, but that still requires a bit of research.

Sadly, Apple has never made the cropping feature of the Photos app accessible to third party apps. As a result of this, a LOT of third party cropping libraries have popped up over the years to get around the solution. Most notably, Katsumi Kishikawa, one of my colleagues from Realm released quite possibly the best iOS 5-styled cropper library on GitHub.

PEPhotoCropper

Initially, I was looking forward to using this one in iComics. But sadly, when iOS 7 hit, I was forced to put that feature on the back burner while I redesigned my app. When I finally had the app ready, iOS 8 had come around, and the cropper’s design both started looking dated, and was behaving strangely on my iPhone 6 Plus. Katsumi’s told me that he does want to upgrade the cropper at some point, but sadly simply hasn’t had the time lately.

As a result of all of that, I decided that it might be worth to write a new cropper from scratch after all; something designed from the start to match what users were already expecting on iOS 8. After a quick proof-of-concept, I started writing some code in March this year, and posted the finished library to GitHub two weeks ago:

TOCropViewController-WWDC

Named TOCropViewController, the goal of this library was to provide the ability to crop a UIImage object and either return it to an object, or immediately share it. It was designed with the iOS 8 Photos app in mind, taking advantage of the system translucency and springy iOS 7 animations. As a few extra niceties, it also allows rotating images in 90-degree chunks and aspect-locking the crop box.

In terms of how everything actually works, here’s a 3D breakout of what layers comprise the view:

 

TOCropViewController BreakdownFor most normal cropping implementations, it makes sense to simply have 4 views overlaying the image, creating the square ‘hole’ in the middle denoting which region will be cropped. Since having to do that with both the translucent layer, and the dimming layer was looking to be quite complex, I opted to try a new approach: place a copy of the image above the layers, clipped to a view that was denoting the cropping region, and then automatically line up the foreground image with the background image. This ended up working flawlessly, creating the illusion that there is a ‘hole’ in the middle of the view, and minimising the amount of views on screen needed to create that effect.

In any case, this was definitely one of the harder views I’ve worked on. There were a LOT of alignment issues involving the crop box and the floating point precision of the scroll view, so I spent a fair bit of time simply making sure float values were being clipped to integer values properly throughout the class.

Now that the view is finished, I’m very happy with the results and can’t wait to get it up and running in iComics as soon as I can. If you’re also writing iOS software and would like to use this library, it’s available on GitHub under the MIT license.

Enjoy!

 

]]>
https://timoliver.blog/2015/06/21/tocropviewcontroller-an-open-source-image-cropper-for-ios/feed/ 39 1568
iComics – State of the Union – May 2015 https://timoliver.blog/2015/05/25/icomics-state-of-the-union-may-2015/ https://timoliver.blog/2015/05/25/icomics-state-of-the-union-may-2015/#comments Mon, 25 May 2015 15:26:17 +0000 http://www.timoliver.com.au/?p=1543 Sorry about the last update being so long ago!

2015 has been absolutely ridiculous for me so far (In a truly good way, that is!).

Thanks to a talk I did on integrating Realm into iComics last year, I’ve started working for Realm, remotely from Perth. This has been an absolutely amazing experience so far, having learned a HUGE deal about how companies operate in Silicon Valley, as well as integrating with a team that operates in multiple time zones. The fact that this all came about as a result of my work on iComics is something I still haven’t managed to process yet. Truly awesome.

In any case, now all of the main excitement has started settling down (Although not for long I’ll wager!), I’ve been looking at the next batch of features and upgrades that iComics needs. Since I’ve been getting quite a few emails asking about updates to the app, it seems a bit of a status update is already long overdue. Here’s some of the major points on we’re were at right now. 🙂

Version 1.2.5 released to the App Store

Version 1.2.5 was released in April to the App Store (After a rather prolonged 2 week review by Apple). It featured an iOS 8 Today widget, a couple of smaller features that users requested (Including reversible comic sorting, as well as disabling iCloud backups), and some general library updates and bug fixes. Since then, over 13,000 users have downloaded the update, and the response has been for-the-most-part, positive (More on that later).

iComics was made free on Free Comic Book Day

As has sort of become tradition at this point, iComics was made free for the weekend of Free Comic Book Day to help celebrate comic books, and to allow anyone who had been on the fence about getting the app a chance to get it. Around 27,000 people grabbed it while it was free, which was an amazing turnout.

 

Certain Users Have Been Experiencing Instability in v1.2.5

This one has me a bit worried. I’ve been receiving emails from various users that the app has started becoming less stable than previous versions. This seems to manifest as the app crashing at very reliable points in its operation; especially when hot-jumping between comics. Sadly, I’ve been unable to replicate it on any of my own devices (Isn’t that always the case? ^_^; ), so I’m having a Dickens of a time trying to find out what’s specifically happening. This would probably seem to imply it’s some crazy threading-issue that only happens in a specific set of conditions. The best kind of bug. ^_^:

In any case, I’ve been planning to do a complete rewrite of the section of the app that handles loading the comic page data out of the archive files to make it more efficient on more recent iOS hardware (That code was originally written specifically to be gentle to 1st gen iPads!), but it looks like I should think about doing that sooner rather than later.

In any case, if you’ve been experiencing that problem, rest assured your concerns have been heard!

Doing Away With iTunes Document Sharing

Now that collections have now been added to iComics, the number one feature that people have been requesting is an easier way to get comics onto their iOS devices. Up until now, the main supported way has been to plug the device into a Mac/PC and manually copy the comic files to the device by drag-dropping them into iTunes. Additionally, I recently added access to iCloud Drive so it was possible to download files from your cloud accounts that way as well.

Yes. I know. Both of these methods are really lame. 🙁

While both are the officially sanctioned ways of getting content onto your devices, iTunes Document Sharing is slow and requires direct PC access, and iCloud Drive can only do one file at a time, while also having the audacity of making you wait for the file to copy with no visible visual cue.

Because both official methods are terrible, I’m looking at re-rolling the whole implementation myself. This would include proper API access to the major popular cloud storage (Dropbox, Google Drive, Box, OneDrive etc) and local network (SMB, WebDav, WiFi) services, and a proper UI implementation to allow multiple selection of files.

So far, I’ve already more or less finished the UI implementation, and it’s going to look something like this. 🙂

TODocumentPickerViewController

 

Obviously, this is going to be a huge, complex system, and I haven’t even figured out how it’s all going to slot into the app. It’s going to require a careful design consideration to ensure it’s interface is ‘generic’ enough for future services, and needs to be able to work properly in the background, even if the user decides to close the app. And it has to feel and look nice too. XD

Either way, to everyone who’s emailed me about this, or has been wondering about it, rest assured; it’s coming. 🙂

Finally, I plan to open-source as much of this as I can, so no other poor developers will have to go through the same thing. XD

A Potential Redesign of the Comic Library UI for v2.0

A little while back, I was really happy to discover that iComics made it to AppAdvice’s List of Best Comic Readers.

 

That being said, I was a bit disheartened to see that the reviewer found the app ‘confusing’ without any extra context on that. But after reading that, I stopped to take a step back and look at the app, and I’m beginning to agree.

The problem in iComics’ present design is that the ‘Collections’ menu, arguably the most important point of origin, is behind a hamburger menu, a design element that’s now been eschewed by Facebook and even Apple. Even when I was building the app, when importing new comics in, sometimes it wasn’t visible that it was necessary to go to the hamburger menu in order to actually proceed. In short, the app is not conforming to traditional app design, and it’s unsurprising certain users are getting confused.

As a result of that, not now, but definitely down the line, I want to redesign how iComics organizes collections, and subsequently displays lists of comics in order to make the app more intuitive and less daunting to new users. Right now, I’m looking at the official Podcasts app, as well as the newly redesigned Music app in iOS 8.4 as design inspiration.

I have no idea what they meant by ‘blurry text isn’t sharpened’. That could be in reference to PDF files, which is fair since I needed to take that functionality out due to memory issues (I’ll be putting it back in later!).

Handling Scalability for Massive Comic Collections

To add further weight behind the decision of a redesign, I’ve had several users telling me that they use their iPads as dedicated iComics devices, and that they’ve literally filled every nook and cranny of the device’s storage with comics.

We’re talking literally thousands of comic files here. Thousands. Blimey.

As humbling and awesome as that is to hear, I’m also really nervous about how well the app performs with handling that sheer number of objects. This also highlights some pretty epic bottlenecks in the app’s visual design, such as the collections column being too thin, and the comics menu taking a very long time to scroll. Aside from that, the efficiency of the system that handles loading the thumbnails for each comic might not be up to that as well.

I’ve very obviously underestimated the power level of some of iComics’ more hardcore users in terms of the app’s visual and structural architecture. As such, if and when I get the chance to do a complete redesign, I’ll also be taking those considerations into any new layouts. This would include things like full-screen and possibly nested collections menus, scroll-bars for extra large lists, more efficient thumbnail handling, more efficient sorting options, and a much more aggressive cache-cleaning solution.

The Upcoming Version 1.3

I was aiming to try and make v1.3 the version that featured all of the new comic downloading functionality, but given that that is still a fair while away, for the time being, I’m going to make v1.3 more of an incremental update. One feature I’ve been slowing working on these past few months is a custom cropper UI (Mirroring the cropping tool in Photos.app on iOS 8) to allow users to either set up thumbnails for comics more accurately (For example, if the comic’s original cover image features the spine) or post sections of pages on social media.

TOCropViewController

 

Apart from that, v1.3 will also have a few bug fixes, including fixing the broken zoom-lock bug. 🙂

No ETA, but the cropper is VERY nearly finished, so it shouldn’t be too much longer.

Possible YouTube Series

While the majority of the reviews I get for iComics are resoundingly positive 5-star reviews, and I absolutely appreciate each one of them, every now and then, I also get some real humdinger 1-star reviews.

iComics One Star Review

Ideally, it’d be swell if I could reach out to these guys privately and try and work out why they don’t like the app. Sadly, Apple haven’t provided any mechanism for this, so unless they come forward themselves, there’s absolutely nothing I can do.

As such, in the interests of letting these guys know that their review was indeed heard, I’m considering starting a small YouTube series where I can provide an open-letter style reply to each of these reviews, and let them know what I plan to do about it. 🙂

If you think this is a terrible idea, let me know. XD


 

So that’s the current state of pretty much everything in iComics-land right now. Hopefully this puts everything in perspective and answers any questions you may have had.

If you’ve got any other questions, or would like me to elaborate on any of these points, feel free to post a comment below, or shoot me an email. 🙂

Thanks! Hope you enjoy iComics! 🙂

]]>
https://timoliver.blog/2015/05/25/icomics-state-of-the-union-may-2015/feed/ 7 1543
Zoom to a point in a UIScrollView (2015 Edition) https://timoliver.blog/2015/03/31/zoom-to-a-point-in-a-uiscrollview-2015-edition/ https://timoliver.blog/2015/03/31/zoom-to-a-point-in-a-uiscrollview-2015-edition/#comments Tue, 31 Mar 2015 13:16:07 +0000 http://www.timoliver.com.au/?p=1527 A long, LONG time ago, I wrote a blog post on zooming to a point in UIScrollView. Even today, 3 years later, zooming to a point still isn’t a default feature of UIScrollView, and so with that functionality still being in hot demand, that original post has ended up becoming one of the most active links on my blog.

Sadly, over the years, I started receiving reports from various people using that sample code that in a lot of different scenarios, that code was actually broken. While it would work fine if the scroll view was completely zoomed out (Which was fine for iComics’ needs), if you were zoomed in at all, then the resulting zoom behavior would be incorrect. Not only that, I discovered a unique scenario in iComics where if the scroll view’s content size was of a particular shape and VERY slightly zoomed in (To a decimal fraction amount), then that code would utterly break, and the scroll view content would fly off-screen.

As a result of that catastrophic error, this year, I decided to delete that original zooming code, and rewrite the lot from scratch. Not only would this fix the broken functionality, but it also made a new feature of iComics v1.2.5, where tapping multiple times results in different zoom levels, possible.

This time, the zoom code is smart enough to realize when it’s zoomed in, and to compensate accordingly. I also incorporated iOS 7’s new animation API, so it ‘feels’ a lot smoother too than the ‘linear’ animation of the previous code.

As always, this code is in the public domain. No attribution is required, but please let me know if you do end up using it. 🙂

]]>
https://timoliver.blog/2015/03/31/zoom-to-a-point-in-a-uiscrollview-2015-edition/feed/ 11 1527
iComics v1.1 Post-mortem https://timoliver.blog/2014/12/30/icomics-v1-1-post-mortem/ https://timoliver.blog/2014/12/30/icomics-v1-1-post-mortem/#respond Tue, 30 Dec 2014 15:30:20 +0000 http://www.timoliver.com.au/?p=1508 So it’s been about a month and a half since iComics v1.1 shipped, and v1.2 is in review with Apple right now. I was so busy getting it ready to ship that I clean forgot about 2 important milestones for the app: On September 25th, the app has been on the App Store for TWO years now, and on November 1st, its codebase has been around for three years. Blimey! XD

In any case, now’s as good a time as any to reflect on how v1.1’s development went, what went well, and what sucked about it.

To be absolutely frank, I’m not thrilled about how long v1.1 took. All in all, the app ended up going 521 days; very close to a year and a half without any updates. Absolutely unacceptable for an app trying to stay relevant on the App Store, and I wasn’t surprised at all when a bunch of users had told me they’d jumped ship to other readers in the interim (Though a few told me they jumped back after the update).

In any case, there are a few things I want to highlight.

The iOS 7 redesign

Not going to tiptoe lightly on this one. Apple suddenly dropping a completely new system design basically derailed iComics’ development. Compiling the app under the iOS 7 SDK yielded a completely broken UI mess, and with Apple imposing a restriction that apps had to ship with the iOS 7 SDK pretty soon after release, it wasn’t possible to push out an update until the lot was completely redesigned and reimplemented. Design aesthetics aside, the reimplementation of a lot of core system ‘assumptions’ as well, including things like how apps interact with the status bar, and the order of system calls when the device plays a rotation animation meant a great deal of the old code had to be heavily modified or even scrapped to get the app ‘feeling’ like it did in iOS 6 under iOS 7.

A lot of other apps with heavily customized iOS 6 designs, like Tweetbot took the chance to use iOS 7 as a new starting point for themselves; rebuilding the apps from scratch with the new UI and shipping as a completely separate version. I was tempted to do the same for iComics, but I eventually decided that v1.0 wasn’t feature-rich enough to warrant ditching it and making users pay again. Unfortunately, this also meant things like keeping compatibility with the old version was also a challenge.

In the end, I think it was the right thing for Apple to redesign iOS when they did (I still don’t agree with a lot of the design choices in iOS 7/8. Also, most of the system icons still look like ass. XD), but it did make my job significantly harder for a while there.

Heavy reliance on custom elements

Given recent events, I’m changing my mind on this one.

I have a bit of a nasty habit of reinventing the wheel a lot. If there are no third party code bases that I find satisfactory, or if I even find Apple’s own implementation of certain code unsatisfactory, I’ll often go out and write my own from scratch. Some prime examples inside iComics include TOWebViewController and TOGridView respectively. Writing my own libraries is certainly advantageous as it gives me 100% over how the elements behave, which lets me craft the overall experience of the app to my complete satisfaction.

The downside however, is the sheer amount of time it takes to build and test said libraries. Both of those libraries mentioned above took literally weeks to implement. And when iOS 8 came out, both required additional fine-tuning then as well. At this point, I definitely think they’re the right libraries for the job. TOGridView is, in my opinion far more performant that UICollectionView, and TOWebViewController has also shipped in other apps at this point. But admittedly, I could have easily just gone with stock Apple controls, or another web controller off GitHub and the app would have been finished earlier. I guess the question is, I would certainly notice the difference in quality, but would the users notice?

That being said, like I mentioned above, since iOS 8 came out, I’m starting to lean towards writing custom controls than using Apple’s a lot more often. When iOS 8 dropped, a LOT of UI code, specifically involving layering view controllers (that iOS 8 reimplemented) that worked fine in iOS 7 broke horrendously in iOS 8. Popup bubbles wouldn’t dismiss, or presenting a full-screen view controller would run really slowly as the background controllers weren’t removed. I flagged all of these as bugs with Apple, which are still open in Apple’s bug tracker tooth’s day. Ultimately, I was able to solved these issues only by stopping my reliance on the Apple controls I was using and recycling some code from iComics v1.0. Not the greatest solution, and certainly something Apple shouldn’t be proud of. Hopefully those bugs will get addressed in iOS 9.


 

Either way, with all that said and done, I’m REALLY happy iComics v1.1 is shipped and out the door. People seem to be enjoying it, and the revenue stream has been slowly increasing (REALLY good to hear), so it was definitely not for naught.

Once v1.2 is approved, I’ll have to start looking at v1.3. But I’m still not sure what to add first…. 🙂

]]>
https://timoliver.blog/2014/12/30/icomics-v1-1-post-mortem/feed/ 0 1508