~~Title: Objective-C Style~~ Alle unsere Objective-C Klassen verwenden einen einheitlichen Style. ==== Protokolle ==== Für Protokolle verwenden wir folgenden Style: /* * Copyright 2018 SIB Visions GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * * * History * * dd.MM.yyyy - [XX] - creation */ /*! @protocol Foo @abstract Protocol implemented by Bar. @discussion That's what they do. */ @protocol Foo #pragma mark - #pragma mark Required /*! @method requiredMethod: @abstract Validates the specified item. @param pItem The item to be validated. */ - (void)requiredMethod:(id) pItem; /*! @method anotherRequiredMethod: @abstract Applies validation rules. */ - (void)anotherRequiredMethod; #pragma mark - #pragma mark Optional @optional /*! @method anOptionalMethod: @abstract Checks optional things. */ - (void)anOptionalMethod; /*! @method anotherOptionalMethod: @abstract Checks another optional things. */ - (void)anotherOptionalMethod; @end Folgende Regeln werden durch diese Vorlage definiert: * Zuerst werden die erforderlichen Methoden definiert * danach alle optionalen Methoden * Gruppierung mit #pragma mark ... * Im Header erstellen wir bei wichtigen Änderungen einen Hinweis mit Zeitstempel und Autor * Dokumentation für die Protokoll Deklaration und alle Methoden ==== Interfaces ==== Für Interfaces (.h files) verwenden wir folgenden Style: /* * Copyright 2018 SIB Visions GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * * * History * * dd.MM.yyyy - [XX] - creation */ #import "Bar.h" /*! @class Foo @abstract Foo provides a UI element. @discussion A Foo object is a simple view that can do two things: Jump, Run. */ @interface Foo : Bar { #pragma mark - #pragma mark Instance variable declarations @private /*! @var value the value of foo. */ float value; } #pragma mark - #pragma mark Property declarations /*! @property value the value property. */ @property float value; #pragma mark - #pragma mark Initialization /*! @method initWithString: @abstract Creates a new foo with string representation of width and height. @param pString the width and height @result a new Foo instance. */ - (id)initWithString:(NSString *)pString; #pragma mark - #pragma mark Method declarations /*! @method concatWidth:height: @abstract Concatenates the width and height. @param pWidth the width. @param pHeight the height. @result the string representation. */ + (NSString *)concatWidth:(float)pWidth height:(float):pHeight; /*! @method setWidth:height: @abstract Sets the foo width and height. @param pWidth the width. @param pHeight the height. */ - (void)setWidth:(float)pWidth height:(float)pHeight; @end Folgende Regeln werden durch diese Vorlage definiert: * Gruppierung mit #pragma mark ... * Im Header erstellen wir bei wichtigen Änderungen einen Hinweis mit Zeitstempel und Autor * Dokumentation für die Klassen Deklaration, ALLE Methoden, Properties und Variablen ==== Klassen ==== Für Klassen (.m files) verwenden wir folgenden Style: /* * Copyright 2018 SIB Visions GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * * * History * * dd.MM.yyyy - [XX] - creation */ #import "Foo.h"; @implementation Foo #pragma mark - #pragma mark Properties @synthesize value; #pragma mark - #pragma mark Initialization - (id)initWithString:(NSString *)pString { ... } #pragma mark - #pragma mark Method declarations + (NSString *)concatWidth:(float)pWidth height:(float):pHeight { ... } - (void)setWidth:(float)pWidth height:(float)pHeight { ... } @end Folgende Regeln werden durch diese Vorlage definiert: * Gruppierung mit #pragma mark ... * Im Header erstellen wir bei wichtigen Änderungen einen Hinweis mit Zeitstempel und Autor ==== Unit Tests ==== Als Testing Framework kommt OCUnit zum Einsatz. Für Unit Tests verwenden wir folgenden Style: /* * Copyright 2018 SIB Visions GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * * * History * * dd.MM.yyyy - [XX] - creation */ #import "Foo.h" @implementation FooTest #pragma mark - #pragma mark Internal methods #pragma mark - #pragma mark Test methods /*! @abstract Tests the init method. */ - (void)testInit { ... } @end Folgende Regeln werden durch diese Vorlage definiert: * Gruppierung mit #pragma mark ... * Jede Test Klasse endet mit "Test" * Jede Test Methode beginnt mit "test" * Im Header erstellen wir bei wichtigen Änderungen einen Hinweis mit Zeitstempel und Autor * Dokumentation für die Klassen Deklaration und alle Test Methoden