Atelier Clockwork

iTunes Search Wrapper: Week 1

Progress So Far:

I’ve implemented the entire search API, I’m contemplating adding the API that allows direct lookup by item ID, but not until after I’ve implemented real user interfaces around the other search lookups.


The documentation for parsing results is. . .lacking. The list of possible keys returned isn’t complete so I’ve implemented a fallback that throws any extra keys into a dictionary for now, but I want to come up with a better and more comprehensive solution at some point.

Command Line Utility

I had the fun learning experience that it’s not really possible to use a dynamic framework in a command line app, so I’m just including the code directly in the CLI target. It’s not as elegant as I’d like, but it works. More importantly, the core of the thing is working. I need to add a list of all of the acceptable flags, but it returns search data.

As a matter of fact, right now it returns too much data. I need to decide how it’s going to take the giant collection of information and return it as useful output, including deciding what’s useful output.

Up Next:

Mac App

The CLI is great for testing the engine, and will probably be the chunk of the project that I use the most as a part of other workflows, but I still want to make a decent UI that exposes all of the possible search options to the user and lets you navigate the results. I’d like to be able to cross over between AppKit and UIKit and this seems like a decent project to test that out.


I need to read the extension API documentation to see if I can do anything useful with this, but much like building a real Mac app, I’d like to try out extensions.

At a glance, adding affiliate data to links with the new API should be relatively simple. Once I have full to nearly full API coverage and the data parser works to the standards that I’m happy with, I’ll consider adding affiliate links as an option.

Lessons Learned

Building a real project in Swift is interesting. It’s forcing me to rethink a lot of habits I’ve developed in other languages because of how different the tools are. I now miss optionals when I’m working in other languages, and I feel like I’m just starting to scratch the surface of the power of generics. I’m now very much looking forward to sitting down and reading Functional Programming in Swift to help me learn more about thinking in functional blocks when possible.