07th July 2018

I’m very glad to announce that Text Case is now released, and is live on the App Store!

Text Case is a simple utility that allows you to convert any text into various different formats.

It comes packed with an action extension that lets you select text anywhere in iOS, tap the Share button, and then you’ll find the “Convert Text” action. This will show you a preview of all available formats, and a simple tap on one of those will copy it to your clipboard, and you’ll be returned to the original app.

The available formats are currently:

  • Title Case
  • URL Encoded
  • Uppercase
  • Lowercase
  • Capitalise
  • Reversed
  • Mocking Spongebob (This one is for fun)

More formats will be added in the future!

Download Text Case on the App Store!

08th June 2018

Just a small update.

After putting a task in Slate off for at least a few months, I’ve got a big chunk of work out of the way, which makes future development so much easier.

Basically, when I first started developing the different sections (Timeline, Mentions, Discover, and Favourites), the code was completely split, and usually badly copied across classes.

I’ve done some work with protocols and inheritance, and now the before mentioned 4 parts of the app are using 99% the same code, except from the slight change in context. For example Mentions is exactly the same, other than a title change, and a few letters in the API endpoint.

As with most other people, WWDC is taking up a lot of time for me. So I think after I do just a tiny bit more work on composing posts, I’ll send another build out. I have composing working in my current build, but my 2 minimum requirements for the next public beta is a minimal version of Markdown formatting, and also replying to posts.

27th April 2018
Permalink

Brent Simmons:

Say you write an iOS app, and now you want to write the Mac version.

Assuming there’s a data model, maybe a database, some networking code, that kind of thing, then you can use that exact same code in your Mac app, quite likely without any changes whatsoever.

I agree with Brent here. I’ve never really understood the argument that AppKit is that difficult to understand, so that’s why people don’t port native apps over. Surely the underlying logic of the app is the hard part, and linking the functionality to the interface is the easier part?

I would say I’m more of an iOS developer, simply because I’ve spent more time on it. But I’ve also made a few Mac applications. Sure, a resizing window is a bit more complex than a relatively fixed screen size, and some the interface elements are names slightly differently.

It’s just different, for both sets of people. But not as difficult as it may seem.

16th April 2018

It’s time for v0.2!

The second public version of Slate is on it’s way to all current beta testers. And it’s so much better than v0.1.

I’ve been doing a lot of refinement recently, to the way things are parsed, to even how images are cached, and how the views are dynamically built.

One major feature, that may not even seem impressive, is inline images. I removed this from the posts because they were causing the app to really slow down, due to the image downloading happening synchronously with the HTML parsing. However, I now extract these from the content, hide them from appearing in the main text, and then control them myself.

This allows me to set the layout depending on the number of images, and then load them asynchronously in the background.

They’re slightly styled at the moment, with rounded corners, and a background if they aren’t an exact square. But the next step is to maybe allow for a preference on preview sizes and also to be able to tap and view the image full screen.

Of course, this version also brings the new themes, which I wrote about in the last development log. And as I keep developing the app, I’m sure these will be fine-tuned.

If you want to be part of the beta, all I require is an email address to send the TestFlight invite to. Feel free to email me, or find me on Twitter or Micro.blog.

You can keep up to date with the development of Slate, in it’s own category.

15th April 2018

Just a small update today. But Slate, now has three full themes!

You can choose from Light, Dark, and Black. And it changes live when you toggle between them!

I’ve noticed a few issues coming my image caching system, which is what I’ll be focusing on next. After that is sorted, I’ll have to get inline images working properly, which is the last thing I have planned for this beta build!

Just a reminder: The beta is completely open, and all I require is an email address to send the TestFlight invite. Feel free to email me, or find me on Twitter or Micro.blog.

23rd January 2018

As you may or may not know, I’ve been building my own iOS app for Manton Reece’s Micro.blog.

A short description of Micro.blog, if you aren’t already familiar:

A new social network and publishing platform for independent microblogs, created by Manton Reece.

Development is going well, and I’m nearly ready to announce the first beta version, but I thought I’d write about the current progress, and what you can expect to see in the first beta version. This development log will hopefully become a regular thing as I add more features to the app.

b0.1 – Read Only

The codename for this version is “Read Only”, and that stems from the fact that it will not have any ability to write posts. That is something I want to spend a lot of time getting right, and shouldn’t hold back a beta version from being released.

Right now, there are 5 main sections in the app:

  • Timeline
  • Mentions
  • Favourites
  • Discover
  • Profile

The first four are pretty much the same, except they present different lists of posts. But they are what you’d imagine.

On each post in these lists, at the minute you see the name and username of the author, the posts content (of course), and the date. Each post also has a favourite/unfavourite button in the top-right corner. Swiping right to left on these cells, will show you the full conversation relevant to this post.

I currently also do some basic link detection in posts, and if there’s a @ mention with a link to their Micro.blog profile, it will navigate to their profile page. Anything else at the minute will launch inside a Safari View inside the app.

In the profile page, for yourself, or other users, you currently only see the name, username, photo, and also the number of people you are following. You cannot see how many followers you have in any case. Tapping the following will show a list of all of these users.

The app currently supports both methods of authentication, app token, and also by requesting an email that contains a link to open the app.

I started on a side menu as well, which at the minute simply shows the version number. But this will be expanded heavily in the future.

What Else

Of course one thing I need to add, is the ability to log out! It will be placed in the side menu.

I also want to expand the profile pages, by adding the bio, and also a link to their website. And also, features surrounding the user that I want to add, is the ability to tap on a users image to open their profile, and also the ability to follow and unfollow a user.

Finally, I need to make some icons for the overall app (most likely a quick draft for beta purposes), the different tabs, and also one for the menu.

Screenshots

03rd January 2018

This is just something small in Swift/iOS that I find pretty handy, so I thought I’d share it just in case it can help.

So, the problem is that creating data that has to be presented in a UITableView can be somewhat complex, especially if you have multiple columns. This solution is geared towards quickly creating dummy data, but I think it could be expanded into an overall DataSource solution.

Anyway, we’ll start with the current way of managing sections. Usually, you would have some kind of enum that would correspond to a section integer, and also however many arrays of data for the number of sections. You would then either use the section enum to find the correct array. Or maybe you’d use a 2d array, and then use it as the index.

It just doesn’t see very Swift to me. In Swift, everything is simple, easy to read, and is pretty easy to write. So I thought I’d come up with a slight abstraction.

My first idea was to just make two structs, one for a Section, and another for a Table:

struct Section {
    var title: String
    var items: [String]
}

struct Table {
    var sections: [Section]
}

You could then go ahead, create individual sections, and add them to one table. Easy.

Example Data

Animals:

  • Cats
    • Tiger
    • Lion
    • Lynx
  • Bears
    • Grizzly
    • Black
    • Polar

Example Code

let catSection = Section(title: "Cats", items: ["Tiger", "Lion", "Lynx"])
let bearSection = Section(title: "Bears", items: ["Grizzly", "Black", "Polar"])

let animalTable = Table(sections: [catSection, bearSection])

I just find that a bit more readable.

It also makes the number of sections and rows a bit simpler:

let numberOfSections = animalTable.sections.count
let numberOfRows = animalTable.sections[0].items.count

However, you can add this functionality to the Table struct Which makes it much, much better.

Here is the definition of the ComplexTable struct:

struct ComplexTable {
    var sections: [Section]
    
    func numberOfRows(forSection section: Int) -> Int {
        if sections.count > section {
            return sections[section].items.count
        } else {
            return 0
        }
    }

    func numberOfSections() -> Int {
        return sections.count
    }
}

Which would make it this easy to get the row and section counts:

let numberOfSections = complexAnimalTable.numberOfSections()
let numberOfRows = complexAnimalTable.numberOfRows(forSection: 0)

So there you go.

It’s nothing big, and it won’t win many programming awards. But it’s a small piece of code that will certainly help me when I’m just messing around with tables, or I want a really clean and simple way to store small amounts of organised data.

01st November 2017

I finally got around to checking out the code for one of my apps, Qwiki.

Qwiki is a menu bar application, that lets you search and read Wikipedia articles. It can also open them in the browser, share differently formatted links, etc. But this isn’t an advertisement.

After updating it to 1.3 last year, I had other projects, university, and finding a job to do. So it got pushed right to the side. But I decided recently I wanted to modernise it, and maybe even look at adding new features.

That time hasn’t come yet, but I have spent the past few days going over the code, cleaning a few things up, migrating it to Swift 4, etc.

So in the mean time I fixed a couple of bugs, like when keyboard and mouse input get mixed up, escape key not always working, some design tweaks, and also added a preference to keep Qwiki open unless manually dismissed.

Now it’s been sent to Apple, I’ll have a few days off, and probably work updating another one of my apps. But in the very near future I plan on going back to Qwiki, and seeing what real features I can add!

If you have any ideas at all about Qwiki, then i’d be really happy to heat them. Even if it’s pure criticism, it all helps.

Check out the Qwiki website, or find it on the Mac App Store.

29th October 2017

Just over a week ago, I really wanted to set a plain colour background to my iPad. I had a quick look on the App Store, but nothing just did the feature I wanted. So I ended up starting my own mini project.

It took a few hours to make, and I had to make it support iPhone, iPad, and all the sizes they both come in. In the end it was probably as simple as the implementation could be, but that’s what I wanted myself.

The app can be broken down into 5 elements – three sliders for the hue, saturation, and brightness, followed by a save/share button so you can save the image or do whatever you want with it. Then there’s the background of the app, which shows the currently selected colour. So you literally get to see a live preview of the wallpaper.

Shortly after making this app, I thought back to my post on clearing out my current selection of apps on the App Store. But like I said in that post, some apps don’t require much maintenance, and I this app will fit in to that category. So although I do plan on keeping it up to date, you can see yourself how simple that will be.

Of course, I couldn’t charge for an app this simple. So it is available for free on the App Store!