This document provides an introduction and guidelines for architecting iOS apps. It discusses goals of software architecture like comprehensible code that can adapt to changes. It recommends thinking in domains rather than objects, and following principles like single responsibility and encapsulation. Practical tips include avoiding massive view controllers, defining expressive APIs, using view objects, and being wary of inheritance. The document emphasizes dividing code into logical units with narrow interfaces to reduce dependencies.