From ba0222aef8890555a5266b550b368fe07f4506a8 Mon Sep 17 00:00:00 2001 From: Wojciech Nagrodzki <278594+wnagrodzki@users.noreply.github.com> Date: Thu, 9 Jan 2014 09:47:10 +0100 Subject: [PATCH] Visual Appearance --- Cocoa Programming Guidelines.pdf | Bin 0 -> 54481 bytes Cocoa Programming Guidelines.tex | 424 +++++++++++++++++++++++++++++++ 2 files changed, 424 insertions(+) create mode 100644 Cocoa Programming Guidelines.pdf create mode 100644 Cocoa Programming Guidelines.tex diff --git a/Cocoa Programming Guidelines.pdf b/Cocoa Programming Guidelines.pdf new file mode 100644 index 0000000000000000000000000000000000000000..71ba0d3a39b06d1263412ca86f8f44341d9e4a32 GIT binary patch literal 54481 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 F2P$~_G7D{0 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 JT-Qtw{9g^GQS$%* literal 0 HcmV?d00001 diff --git a/Cocoa Programming Guidelines.tex b/Cocoa Programming Guidelines.tex new file mode 100644 index 0000000..7217e53 --- /dev/null +++ b/Cocoa Programming Guidelines.tex @@ -0,0 +1,424 @@ +% XeLaTeX can use any Mac OS X font. See the setromanfont command below. +% Input to XeLaTeX is full Unicode, so Unicode characters can be typed directly into the source. + +% The next lines tell TeXShop to typeset with xelatex, and to open and save the source with Unicode encoding. + +%!TEX TS-program = xelatex +%!TEX encoding = UTF-8 Unicode + + +% Apple Documentation Style - Latex Template +% https://github.com/izydor86/AppleDocumentationStyleLatexTemplate +% Wojciech Nagrodzki 2013 + + +\documentclass[10pt]{extarticle} +\usepackage[margin=2cm]{geometry} % See geometry.pdf to learn the layout options. There are lots. +\geometry{a4paper} % ... or a4paper or a5paper or ... +\usepackage[parfill]{parskip} % Activate to begin paragraphs with an empty line rather than an indent +\usepackage{titlesec} +\usepackage{color} +\usepackage{hyperref} +\usepackage{verbatim} +\usepackage[framemethod=TikZ]{mdframed} +\usepackage{hyperref} +\usepackage{tabto} + + +% Define section, subsection and subsubsection font size and color +\definecolor{AllportsColor}{HTML}{0769AE} +\definecolor{VeniceBlue}{HTML}{045078} + +\titleformat*{\section} +{\huge} + +\titleformat*{\subsection} +{\color{AllportsColor}\LARGE} + +\titleformat*{\subsubsection} +{\color{VeniceBlue}\large\bfseries} + + +% Define the colors of table of contents +% This is helpful to understand http://tex.stackexchange.com/questions/110253/what-the-first-argument-for-lsubsection-actually-is +\definecolor{LochmaraColor}{HTML}{0C88CC} + +\makeatletter + +\renewcommand{\l@section}[2]{\vspace{14pt}\@dottedtocline{2}{0pt}{0pt}{\bfseries\textcolor{LochmaraColor}{#1}}{#2}} +\renewcommand{\l@subsection}[2]{\@dottedtocline{2}{0pt}{0pt}{\textcolor{LochmaraColor}{#1}}{#2}} +\renewcommand{\l@subsubsection}[2]{\@dottedtocline{2}{20pt}{0pt}{\textcolor{LochmaraColor}{#1}}{#2}} + +\renewcommand{\@dotsep}{10000} + +\makeatother + + +% Insert 22pt white space before roc title. \titlespacing at line 65 changes it by -22 later on. +\renewcommand*\contentsname{\hspace{22pt}Contents} + + +% Remove numbers before sections, it does not remove a spacing from the left side of section +% Look below to see how I remove them +\renewcommand\thesection{} +\renewcommand\thesubsection{} +\renewcommand\thesubsubsection{} + + +% Define a spacing for section, subsection and subsubsection +% http://tex.stackexchange.com/questions/108684/spacing-before-and-after-section-titles +\titlespacing*{\section} +{-22pt}{0pt plus 0pt minus 0pt}{40pt plus 0pt minus 0pt} +\titlespacing*{\subsection} +{-18pt}{42pt plus 64pt minus 0pt}{0pt} +\titlespacing*{\subsubsection} +{-13pt}{12pt plus 0pt minus 0pt}{0pt} + + +% Section begins on new page +\newcommand{\sectionbreak}{\clearpage} + + +% Line spacing +\linespread{1.3} + + +% Lists a code inside of a blue border +\definecolor{BaliHaiColor}{HTML}{7CA1B3} +\newenvironment{codelisting} +{\footnotesize\mdframed[middlelinewidth=0.5pt, middlelinecolor=BaliHaiColor, skipabove=15pt]\verbatim} +{\endverbatim\endmdframed\vspace{12pt}\normalsize} + + +% Lists text inside yellow border +\definecolor{GoldenDreamColor}{HTML}{F2D138} +\newenvironment{tiplisting} +{\small\mdframed[middlelinewidth=0.5pt, middlelinecolor=GoldenDreamColor, skipabove=15pt]{\textbf{Tip:}}} +{\endmdframed\vspace{12pt}\normalsize} + + +% Lists text inside a blue border +\definecolor{MatisseColor}{HTML}{236AB2} +\newenvironment{importantlisting} +{\mdframed[middlelinewidth=0.5pt, middlelinecolor=MatisseColor, skipabove=15pt]{\textbf{Important:}}} +{\endmdframed\vspace{12pt}} + + +% Hyperlinks +\hypersetup{ + colorlinks = true, + allcolors = {LochmaraColor}, +} + + +% Will Robertson's fontspec.sty can be used to simplify font choices. +% To experiment, open /Applications/Font Book to examine the fonts provided on Mac OS X, +% and change "Hoefler Text" to any of these choices. + +\usepackage{fontspec,xltxtra,xunicode} +\defaultfontfeatures{Mapping=tex-text} +\setromanfont[Mapping=tex-text]{Lucida Grande} +\setsansfont[Scale=MatchLowercase,Mapping=tex-text]{Gill Sans} +\setmonofont[Scale=MatchLowercase]{Menlo Regular} + + +\begin{document} + +\tableofcontents + +\section{Visual Appearance} + + +Hardly any software is maintained for its whole life by the original author. Writing code in unified way helps engineers to understand it more quickly. + + +\subsection{Class names are not prefixed usually} + +Prefixes are used only for classes that are to be shared between applications. + + +\subsection{Protocol names indicates behavior} +Most protocols group related methods that aren’t associated with any class in particular. This type of protocol should be named so that the protocol won’t be confused with a class. A common convention is to use a gerund (“...ing”) form: + +\begin{itemize} +\item NSLocking \tabto{3cm} Good +\item NSLock \tabto{3cm} Poor (seems like a name for a class) +\end{itemize} + +Some protocols group a number of unrelated methods (rather than create several separate small protocols). These protocols tend to be associated with a class that is the principal expression of the protocol. In these cases, the convention is to give the protocol the same name as the class. An example of this sort of protocol is the NSObject protocol. + + +\subsection{Header file follows a structure} + +Header should be kept as simple as possible. Declarations appears in it in the following order: + +\begin{enumerate} +\item Imports +\item Forward class declarations +\item Enumeration types +\item Constants +\item Notification names and its user info dictionary keys +\item Delegate protocol +\item Data source protocol +\item Class interface +\end{enumerate} + +The class interface has a fixed structure as well: + +\begin{enumerate} +\item Properties +\item Data source property +\item Delegate property +\item Class methods +\item Instance methods +\end{enumerate} + +Please pay attention to number of separating lines, it is also a rule. + +\begin{codelisting} +#import + +@class ExampleClass; + + +typedef NS_ENUM(NSInteger, Enumeration) { + EnumerationInvalid, + EnumerationA, +}; + +extern CGFloat const ExampleClassDefaultHeight; + +extern NSString * const ExampleClassWillPerformActionNotification; +extern NSString * const ExampleClassDidPerformActionNotification; +extern NSString * const ExampleClassActionNameKey; + + +@protocol ExampleClassDelegate + +- (void)exampleClass:(ExampleClass *)exampleClass didPerformAction:(Action *)action; + +@optional + +- (void)exampleClass:(ExampleClass *)exampleClass willPerformAction:(Action *)action; + +@end + + +@protocol ExampleClassDataSource + +- (NSInteger)exampleClassNumberOfActions:(ExampleClass *)exampleClass; + +@end + + +@interface ExampleClass : NSObject + +@property (strong, nonatomic) NSURL * initialProperty; +@property (weak, nonatomic) id dataSource; +@property (weak, nonatomic) id delegate; + ++ (id)exampleClassWithInitialProperty:(NSURL *)initialProperty; +- (id)initWithInitialProperty:(NSURL *)initialProperty; +- (void)performAction; + +@end +\end{codelisting} + + +\subsection{Implementation file is divided by pragma marks} + +Methods in implementation file appear in the same order they are declared in the header. They are grouped by pragma marks similar to following: + +\begin{codelisting} +#pragma mark - Public Properties +#pragma mark - Public Class Methods +#pragma mark - Public Instance Methods +#pragma mark - IBActions +#pragma mark - Overridden +#pragma mark - Private Properties +#pragma mark - Private Class Methods +#pragma mark - Private Instance Methods +#pragma mark - Protocols +#pragma mark - Notifications +\end{codelisting} + +When greater granularity is needed: + +\begin{codelisting} +#pragma mark - Overridden (UIView) +#pragma mark - Overridden (UIContainerViewControllerCallbacks) +#pragma mark - Overridden (UIViewControllerRotation) +\end{codelisting} + +\begin{tiplisting} +Create a code snipped to help you use the same pragma marks through all implementation files. +\end{tiplisting} + +\subsection{Property attributes are kept in order} +Attributes are kept in the same order through all property declarations. + +\begin{codelisting} +[assign | weak | strong | copy] + [nonatomic | atomic] + [readonly | readwrite] + [getter = ] +\end{codelisting} + +None of the attributes can be omitted with the exception of readwrite. + +\begin{codelisting} +@property (assign, nonatomic) CGFloat height; +@property (strong, nonatomic) UIColor * color; +@property (copy, nonatomic) NSString * name; +@property (weak, nonatomic) id delegate; +\end{codelisting} + +Getters for boolean properties should be renamed as follows. + +\begin{codelisting} +@property (assign, nonatomic, getter = isVisible) BOOL visible; +\end{codelisting} + + +\subsection{Protocols and constants are prefixed with class name} + +Protocols, notification names, enumeration types and other constants that refer to particular class are prefixed with the name of that class. + +\begin{codelisting} +typedef NS_ENUM(NSInteger, UITableViewStyle) { + UITableViewStylePlain, + UITableViewStyleGrouped +}; + +UIKIT_EXTERN NSString *const UITableViewIndexSearch; + +UIKIT_EXTERN const CGFloat UITableViewAutomaticDimension; + +@protocol UITableViewDelegate +... +\end{codelisting} + +\subsection{IBOutlets are declared privately} + +Outlets are defined as weak properties at the top of class extension, divided by one line from other properties. + +\begin{codelisting} +@interface PanelViewController () + +@property (weak, nonatomic) IBOutlet UIButton * infoButton; +@property (weak, nonatomic) IBOutlet UIButton * closeButton; +@property (weak, nonatomic) IBOutlet UILabel * descriptionLabel; + +@property (weak, nonatomic) UIView * overlayView; + +@end +\end{codelisting} + + +\subsection{Classes may have additional header file for subclasses} + +Private methods and properties are never exposed. To provide subclass access to them, they have to be declared in ForSubclassEyesOnly category. It should be placed in separate header file, named in the following manner: [Class Name] + Subclass.h. + +\begin{tiplisting} +UIGestureRecognizerSubclass.h is a good example of that approach. +\end{tiplisting} + + +\subsection{Methods return early, return often} + +Nesting makes code harder to read. + +\begin{codelisting} +- (BOOL)loginUser:(NSString *)user withPassword:(NSString *)password +{ + if (user.length >= 6) { + if ((password.length >= 8) { + // actual logging code + } + } + return NO; +} +\end{codelisting} + +Getting invalid cases out of he way first will keep the working code with one level of indentation, and ensure that all parameters are valid. This paradigm is called The Golden Path. + +\begin{codelisting} +- (BOOL)loginUser:(NSString *)user withPassword:(NSString *)password +{ + if (user.length < 6) return NO; + if (password.length < 8) return NO; + + // actual logging code +} +\end{codelisting} + +This approach has one more advantage, it is easier to add error handling later on. + +\begin{codelisting} +- (BOOL)loginUser:(NSString *)user withPassword:(NSString *)password error:(NSError **)error +{ + if (user.length < 6) { + if (error != NULL) + *error = [NSError errorWithDomain:ExampleDomain + code:1001 + userInfo:@{NSLocalizedDescriptionKey: @"User name must have..."}]; + return NO; + } + + if (password.length < 8) { + if (error != NULL) + *error = [NSError errorWithDomain:ExampleDomain + code:1002 + userInfo:@{NSLocalizedDescriptionKey: @"Password must have..."}]; + return NO; + } + + // logging in code +} +\end{codelisting} + +\subsection{Method are not bisected with conditionals.} + +Following method structure is not acceptable. + +\begin{codelisting} +- (void)method +{ + if (self.valueX == 10) { + // perform some actions + } + else { + // perform some other actions + } +} +\end{codelisting} + +Bisection can be removed by returning in the if statement. + +\begin{codelisting} +- (void)method +{ + if (self.valueX == 10) { + // perform some actions + return; + } + + // perform some other actions +} +\end{codelisting} + +In one case bisection is allowed. + +\begin{codelisting} +- (void)method +{ + if (self.valueX == 10) { + // perform some actions + } + else { + // perform some other actions + } + + // perform some actions no matter what +} +\end{codelisting} + + +\end{document}