My first client app built with Swift 2, Film Camp, is now in the App Store! After multiple intense months of collaboration, coding and user testing, I can say I've learned a lot. It was so much fun to build software on a team and an enlightening experience to be a solo developer.
It all started when I met Craig, who found me through Code Fellows. He was a serial entrepreneur who intended to experiment with app creation as a new venture. He told me that he wanted an app that could knit videos together, and before he decided to hire me, I sent him a prototype that did just that. Apparently that is a good way to get hired.
Craig had two other people on the project: Aaron, his co-founder and project manager, and Jonah, an experienced film-making teacher who would develop curriculum and influence feature design. For 6 weeks, we sprinted to a minimum viable product. On Mondays, we would meet and brainstorm. I'd code all week, and on Fridays, we would demo the current prototype to kids. This cycle was great for rapid iteration based on feedback! Getting a chance to debug the app during user sessions was a ton of fun!
Early on, the app design came solely from a donated half day with my friend, a professional designer, Mathew Weintrub. We learned the hard way that it is good to have an app fully designed from the beginning, because later on we had Josh with Adjust Creative fully flesh out the design of the app. His new design improved the app tremendously; however, it was a significant amount of extra work for me to implement what he came up with after having built it to the prior design.
The technical challenges faced in this app were many. I mostly relied on dogged determination to find solutions with documentation and Google. This gave me a renewed appreciation for blogs and tutorials created by the amazingly talented iOS community. As a new developer I do not know what I'd do without other developers sharing their wisdom freely online, and I must pay it forward soon.
Though it's exciting and fun to be a lone wolf developer, I suspect that my skills will grow faster when I am around other people with equal or greater development skill. Even if they don't work in the same stack, it is valuable to try and explain your thought process to someone who can question it. This challenge improves thinking by having to communicate it, and can result in the realization, sooner rather than later, that one's approach is flawed. I'm greatly looking forward to getting involved in larger projects and finding opportunities to be a mentee and mentor.
Film Camp is built with the latest Apple frameworks in Swift 2. Photos Framework is used to store the videos a user creates, to the device and AVKit, in tandem with AVFoundation, allow composing and previewing of media before it is merged into a video. I used NSCoding to persist data so that a project is continually saved and not lost when the app is exited. Swifty Dropbox and Social Framework allow a user to post videos to Dropbox and Facebook.
One of the most challenging tools I worked with was AVFoundation. Using time ranges, I had to knit together multiple 9 second audio clips with multiple 3 second video clips and a 30 second music track. This lead to me getting stuck for multiple days because there was a glitch in the Framework that would not let me merge the audio as multiple pieces without it breaking the video. After trying it a myriad of different ways I had to come up with my own solution, albeit less efficient, that involved exporting all the shorter audio clips into their own merged track before composing everything.
I think working with AVFoundation was my favorite part because I was able to improve my algorithms for composition of media items to be more general solutions which taught me how to write more elegant code. There were other quagmires like having to figure out how to share video with Facebook which has a lot of security hoops to jump through and a two part breakdown requirement for sending video. Challenges were what made this project the most rewarding in the end and I look forward to embracing the struggle with new future ones.