agile animation clean software cocoa collection view design pattern engineering interview ios oop operating system optimization presentation software engineering solid swift swiftc transition view controller