14 Dinge, die ein iOS-Entwickler wissen muss

Mit Genehmigung des Autors poste ich die Übersetzung des Artikels von Norberto Gil Vasconcelos "14 muss für einen iOS-Entwickler bekannt sein" ( Link zum Original ). Zum Zeitpunkt der Veröffentlichung des Artikels war die Swift 3-Version relevant.

Als iOS-Entwickler (derzeit absolut abhängig von Swift) habe ich Anwendungen von Grund auf neu erstellt, Anwendungen unterstützt und in verschiedenen Teams gearbeitet. Während meiner gesamten Zeit in dieser Branche habe ich oft den Satz gehört: "Sie können es nicht erklären, dann verstehen Sie es nicht." Um zu verstehen, was ich jeden Tag genau mache, erstelle ich eine Liste dessen, was meiner Meinung nach für jeden iOS-Entwickler wichtig ist. Ich werde versuchen, jeden Moment so klar wie möglich zu erklären. [Bitte zögern Sie nicht, mich zu korrigieren, Ihre Meinung zu äußern oder Ihre Ergänzungen zu dieser Liste vorzuschlagen.]


Themen: [ Versionskontrolle | architektonische Muster | Ziel-C gegen Swift | Reagiere | Abhängigkeitsmanager | Informationsspeicherung | CollectionViews & TableViews | Benutzeroberfläche | Protokolle | Kurzschlüsse | Schemata | Tests | geolocation | lokalisierbare Zeichenfolgen ]


Hier ist meine Liste ohne weiteres in zufälliger Reihenfolge.

1 - Versionskontrolle


Herzlichen Glückwunsch, Sie werden akzeptiert! Extrahieren Sie den Code aus dem Repository und machen Sie sich an die Arbeit. Hör auf was?

Die Versionskontrolle ist für jedes Projekt erforderlich, auch wenn Sie nur Entwickler sind. Die am häufigsten verwendeten Systeme sind Git und SVN.

SVN basiert auf einem zentralen Versionskontrollsystem. Dies ist das Repository, in dem Arbeitskopien erstellt werden. Um darauf zugreifen zu können, benötigen Sie eine Netzwerkverbindung. Die Genehmigung von Änderungen erfolgt auf bestimmte Weise. Das System überwacht Änderungen durch Registrieren jeder Datei. Der vollständige Änderungsverlauf kann nur im Repository angezeigt werden. Arbeitskopien enthalten nur die neueste Version.

Gitverwendet ein verteiltes Versionskontrollsystem. Sie haben ein lokales Repository, in dem Sie arbeiten können. Eine Netzwerkverbindung ist nur für die Synchronisierung erforderlich. Wenn eine Arbeitskopie geändert wird, wird der Status des gesamten Verzeichnisses gespeichert, es werden jedoch nur die vorgenommenen Änderungen aufgezeichnet. Sowohl das Repository als auch die Arbeitskopien haben einen vollständigen Änderungsverlauf.

2 - Architekturmuster


Ihre Finger zittern vor Aufregung, Sie haben die Versionskontrolle herausgefunden! Oder liegt es am Kaffee? Nicht wichtig! Sie sind im Takt und die Zeit für die Programmierung ist gekommen! Nee. Worauf muss man noch warten?
Bevor Sie an der Tastatur sitzen, müssen Sie das Architekturmuster auswählen, an das Sie sich halten möchten. Wenn Sie das Projekt nicht gestartet haben, müssen Sie mit dem vorhandenen Muster übereinstimmen.
Bei der Entwicklung mobiler Anwendungen (MVC, MVP, MVVM, VIPER usw.) wird eine Vielzahl von Mustern verwendet. Ich werde einen kurzen Überblick über die am häufigsten in der Entwicklung für iOS verwendeten geben:

  • MVC — Model, View, Controller. Controller Model View, . View Controller , Controller . ? , View, (ViewController) . , MVC. MVC . ( !), , , Model, , . MVC , , iOS .


    MVC –
  • MVVMModel, View, ViewModel. ( ) View ViewModel, ViewModel , ViewModel, View - . ViewModel View, , .


    MVVM –


Für ein tieferes Verständnis und Informationen zu anderen Mustern empfehle ich, den folgenden Artikel zu lesen .

Dies scheint nicht so viel zu sein, aber gut strukturierter und organisierter Code kann viele Kopfschmerzen verhindern. Der große Fehler, den jeder Entwickler irgendwann macht, besteht einfach darin, das gewünschte Ergebnis zu erzielen und sich zu weigern, den Code zu organisieren, weil er fälschlicherweise glaubt, dass dies Zeit spart. Wenn Sie nicht einverstanden sind, hören Sie sich den alten Benji an:
Jede Minute, die Sie mit der Organisation Ihres Geschäfts verbringen, spart Ihnen eine Stunde

- Benjamin Franklin

Unser Ziel ist es, intuitiven und einfach zu lesenden Code zu erhalten, der einfach zu verwenden und zu warten ist.

3 - Objective-C gegen Swift


Wenn Sie entscheiden, in welcher Programmiersprache Sie Ihre Anwendung schreiben möchten, sollten Sie wissen, über welche Funktionen die einzelnen Programme verfügen. Wenn möglich, bevorzuge ich Swift. Warum? Um ehrlich zu sein, hat Objective-C gegenüber Swift nur sehr wenige Vorteile. Die meisten Beispiele und Tutorials sind in Objective-C geschrieben, und Swift nimmt mit jedem Update Anpassungen an den Paradigmen vor, was entmutigend sein kann. Diese Probleme werden jedoch irgendwann verschwinden.

Im Vergleich zu Objective-C macht Swift in vielerlei Hinsicht einen Sprung. Es ist leicht zu lesen, es sieht aus wie natürliches Englisch, und da es nicht auf C basiert, können Sie traditionelle Konventionen aufgeben. Für diejenigen, die Objective-C kennen, bedeutet dies, dass keine Semikolons mehr vorhanden sind und Methodenaufrufe und Ausdrucksbedingungen nicht in Klammern eingeschlossen werden müssen. Es ist auch einfacher, Ihren Code zu pflegen: Swift benötigt nur eine .swift-Datei anstelle von .h- und .m-Dateien, da Xcode und der LLVM-Compiler Abhängigkeiten erkennen und inkrementelle Builds automatisch ausführen können. Im Allgemeinen müssen Sie sich weniger Gedanken über das Erstellen von standardisiertem Code machen, und Sie werden feststellen, dass Sie mit weniger Zeilen dieselben Ergebnisse erzielen können.

Immer noch im Zweifel? Swift ist sicherer, schneller und kümmert sich (größtenteils!) Um die Speicherverwaltung. Wissen Sie, was in Objective-C passiert, wenn Sie eine Methode mit einer nicht initialisierten Zeigervariablen aufrufen? Nichts. Der Ausdruck wird inaktiv und übersprungen. Es klingt großartig, weil es nicht zum Absturz der Anwendung führt, aber eine Reihe von Fehlern und instabilem Verhalten verursacht, weshalb Sie über einen Berufswechsel nachdenken sollten. Ernsthaft. Die Idee, ein professioneller Hundewanderer zu werden, funkelte in neuen Farben. Gleichzeitig arbeitet der Swift-Zähler mit optionalen Werten. Sie erhalten nicht nur eine bessere Vorstellung davon, was nil sein kann, und können Bedingungen festlegen, um die Verwendung von nil-Werten zu verhindern, sondern auch einen Laufzeitabsturz, wenn nil optional weiterhin verwendet wird, was das Debuggen vereinfacht.Mit ARC (Automatic Reference Counting) können Sie Ihren Speicher in Swift besser verwalten. In Objective-C funktioniert ARC nicht mit prozeduralem C oder einer API wie Core Graphics.

4 - Reagieren oder nicht reagieren? (das ist hier die Frage)


Functional Reactive Programming (FRP) ist ein neuer Hit. Es soll die Kompilierung von asynchronen Operationen und Ereignis- / Datenströmen vereinfachen. Für Swift ist dies eine allgemeine Abstraktion der Berechnung, die über die Observable-Schnittstelle ausgedrückt wird.

Dies lässt sich am einfachsten mit einem kleinen Code veranschaulichen. Nehmen wir an, Baby Timmy und seine Schwester Jenny möchten eine neue Spielekonsole kaufen. Timmy bekommt jede Woche 5 Euro von ihren Eltern, das gilt auch für Jenny. Jenny verdient jedoch weitere 5 Euro, wenn sie am Wochenende Zeitungen ausliefert. Wenn beide jeden Cent sparen, können wir jede Woche überprüfen, ob die Konsole verfügbar ist! Jedes Mal, wenn sich der Wert ihrer Ersparnisse ändert, wird ihr Gesamtwert berechnet. Wenn dies ausreicht, wird die Nachricht in der Variablen isConsoleAttainable gespeichert. Wir können die Nachricht jederzeit überprüfen, indem wir sie abonnieren.

// 
let timmySavings = Variable(5)
let jennySavings = Variable(10)

var isConsoleAttainable =
Observable
.combineLatest(timmy.asObservable(), jenny.asObservable()) { $0 + $1 }
.filter { $0 >= 300 }
.map { "\($0)    !" }

//  
timmySavings.value = 10
jennySavings.value = 20
isConsoleAttainable
   .subscribe(onNext: { print($0) }) //   

//  
timmySavings.value = 100
jennySavings.value = 200
isConsoleAttainable
   .subscribe(onNext: { print($0) }) // 300    !

Dies ist nur ein Beispiel dafür, was mit FRP gemacht werden kann. Sobald Sie es beherrschen, eröffnet es eine ganz neue Welt von Möglichkeiten, bis hin zur Übernahme einer anderen Architektur als MVC ... Ja, ja! MVVM!
Sie können sich zwei Hauptbewerber für den Titel des Chief Swift FRP ansehen:


5 - Abhängigkeitsmanager


CocoaPods und Carthage sind die gängigsten Abhängigkeitsmanager für Cocoa Swift- und Objective-C-Projekte. Sie vereinfachen die Implementierung und Aktualisierung der Bibliothek.

CocoaPods verfügt über viele Bibliotheken, die mit Ruby erstellt wurden und mit dem folgenden Befehl installiert werden können:

$ sudo gem install cocoapods

Nach der Installation möchten Sie eine Poddatei für Ihr Projekt erstellen. Sie können den folgenden Befehl ausführen:

$ pod install

oder erstellen Sie eine benutzerdefinierte Poddatei mit dieser Struktur:

platform :ios, '8.0'
use_frameworks!

target 'MyApp' do
pod 'AFNetworking', '~> 2.6'
pod 'ORStackView', '~> 3.0'
pod 'SwiftyJSON', '~> 2.3'
end

Nach der Erstellung ist es Zeit, Ihre neuen Module zu installieren:

$ pod install

Jetzt können Sie den .xcworkspace Ihres Projekts öffnen. Vergessen Sie nicht, Ihre Abhängigkeiten zu importieren.

Karthago ist im Gegensatz zu CocoaPods ein dezentraler Abhängigkeitsmanager. Dies hat den Nachteil, dass es für Benutzer immer schwieriger wird, vorhandene Bibliotheken zu finden. Andererseits erfordert dieser Ansatz weniger Supportarbeit und vermeidet Störungen aufgrund zentraler Speicherung.

Weitere Informationen zur Installation und Verwendung finden Sie im GitHub-Projekt .

6 - Datenspeicher


Beginnen wir mit dem einfachsten Weg, Daten für Ihre Anwendungen zu speichern. NSUserDefaults , so genannt, weil es normalerweise zum Speichern der Standardbenutzerdaten verwendet wird, die beim ersten Laden der Anwendung angezeigt werden. Aus diesem Grund ist es einfach und benutzerfreundlich gestaltet, dies impliziert jedoch auch einige Einschränkungen. Eines davon ist der Objekttyp, den diese Methode akzeptiert. Sein Verhalten ist der Eigenschaftsliste (Plist) sehr ähnlich, die dieselbe Einschränkung aufweist. Hier sind sechs Arten von Objekten, die sie speichern können:

  • NSData
  • NSDate
  • NSNumber
  • NSDictionary
  • Nsstring
  • NSArray

Aus Gründen der Kompatibilität mit Swift kann NSNumber die folgenden Typen akzeptieren:

  • UInt
  • Int
  • Schweben
  • Doppelt
  • Bool

Objekte können wie folgt in NSUserDefaults gespeichert werden (Erstellen Sie zunächst eine Konstante, in der der Schlüssel für das gespeicherte Objekt gespeichert wird):

let keyConstant = "objectKey"

let defaults = NSUserDefaults.standardsUserDefaults()
defaults.setObject("Object to save", objectKey: keyConstant)

Um ein Objekt aus NSUserDefaults zu lesen, haben wir folgende Möglichkeiten:

if let name = defaults.stringForKey(keyConstant) {
   print(name)
}

Es gibt verschiedene praktische Methoden zum Lesen und Schreiben in NSUserDefaults, die bestimmte Objekte anstelle von AnyObject empfangen.

Der Schlüsselbund ist ein Passwortverwaltungssystem und kann Passwörter, Zertifikate, private Schlüssel oder persönliche Notizen enthalten. Der Schlüsselbund verfügt über zwei Ebenen der Geräteverschlüsselung. Die erste Ebene verwendet den Sperrbildschirm-Sperrcode als Verschlüsselungsschlüssel. Die zweite Ebene verwendet einen Schlüssel, der auf dem Gerät generiert und gespeichert wird.

Was bedeutet das? Dies ist nicht ganz besonders sicher, insbesondere wenn Sie kein Kennwort auf dem Sperrbildschirm verwenden. Es gibt auch Möglichkeiten, auf den in der zweiten Ebene verwendeten Schlüssel zuzugreifen, da dieser auf dem Gerät gespeichert ist.

Die beste Lösung ist die Verwendung Ihrer eigenen Verschlüsselung. (Speichern Sie den Schlüssel nicht auf dem Gerät.)

CoreData- Dies ist ein von Apple entwickeltes Framework, mit dem Ihre Anwendung objektorientiert mit der Datenbank interagiert. Dies vereinfacht den Prozess, indem die Codemenge reduziert und das Testen dieses Abschnitts entfällt.

Sie sollten CoreData verwenden, wenn Ihre Anwendung persistente Daten benötigt. Dies vereinfacht das Speichern erheblich und ermöglicht es Ihnen, keine eigene Art der Kommunikation mit der Datenbank zu erstellen / zu testen.

7 - CollectionViews & TableViews


Fast jede Anwendung verfügt über eine oder mehrere CollectionViews und / oder TableViews. Wenn Sie wissen, wie sie funktionieren und wann Sie die eine oder andere verwenden müssen, können Sie in Zukunft komplexe Änderungen in Ihrer Anwendung vermeiden.

TableViews zeigen eine Liste von Elementen in einer einzelnen Spalte vertikal an und sind nur durch vertikales Scrollen begrenzt. Jedes Element wird durch eine UITableViewCell dargestellt, die vollständig angepasst werden kann. Sie können nach Abschnitten und Zeilen sortiert werden.

CollectionViews zeigen auch eine Liste von Elementen an, können jedoch mehrere Spalten und Zeilen enthalten (z. B. ein Raster). Sie können horizontal und / oder vertikal gescrollt werden, und jedes Element wird durch eine UICollectionViewCell dargestellt. Wie UITableViewCells können sie nach Wunsch angepasst und nach Abschnitten und Zeilen sortiert werden.

Beide haben ähnliche Funktionen und verwenden wiederverwendbare Zellen, um die Mobilität zu verbessern. Die Wahl, was Sie benötigen, hängt von der Komplexität ab, die Sie auf der Liste haben möchten. CollectionView kann zur Darstellung jeder Liste verwendet werden und ist meiner Meinung nach immer die beste Wahl. Stellen Sie sich vor, Sie möchten eine Kontaktliste einreichen. Die Liste ist einfach. Sie können sie mit einer einzelnen Spalte implementieren, sodass Sie eine UITableView auswählen. Alles arbeitet! Nach einigen Monaten entscheidet Ihr Designer, dass die Kontakte in einem Rasterformat und nicht in einer Liste angezeigt werden sollen. Die einzige Möglichkeit, dies zu tun, besteht darin, die Implementierung von UITableView in die Implementierung von UICollectionView zu ändern. Ich versuche zu sagen, dass Ihre Liste zwar einfach ist und eine UITableView möglicherweise ausreicht, wenn die Wahrscheinlichkeit einer Designänderung hoch istEs ist am besten, diese Liste mit einer UICollectionView zu implementieren.

Unabhängig davon, welche Wahl Sie treffen, ist es eine gute Idee, eine generische TableView / CollectionView zu erstellen. Dies erleichtert die Implementierung und ermöglicht die Wiederverwendung großer Codemengen.

8 - Storyboards VS Xibs VS Programmierbare Benutzeroberfläche


Jede dieser Methoden kann separat zum Erstellen einer Benutzeroberfläche verwendet werden, aber nichts hindert Sie daran, sie zu kombinieren.

Storyboards bieten eine breitere Ansicht des Projekts, die den Designern gefallen wird, sodass Sie den Ablauf der Anwendung sowie deren Fenster sehen können. Der Nachteil ist, dass durch das Hinzufügen weiterer Fenster die Verbindungen verwirrender werden und die Ladezeit des Storyboards zunimmt. Zusammenführungsprobleme treten viel häufiger auf, da sich die gesamte Benutzeroberfläche in einer einzigen Datei befindet. Sie werden auch viel schwieriger zu lösen.

Xibsbieten visuelle Sicht auf Fenster oder Teile eines Fensters. Die Vorteile sind die einfache Wiederverwendung, weniger Zusammenführungskonflikte als bei Storyboards und die einfache Anzeige des Inhalts jedes Fensters.

Durch die Programmierung der Benutzeroberfläche haben Sie mehr Kontrolle darüber und können die Häufigkeit von Zusammenführungskonflikten verringern. Wenn sie auftreten, können sie leichter entfernt werden. Der Nachteil ist weniger Visualisierung und zusätzlicher Zeitaufwand für das Schreiben.

Die obigen Ansätze zum Erstellen einer Benutzeroberfläche variieren stark. Aber meiner subjektiven Meinung nach ist die beste Option eine Kombination aller drei. Mehrere Storyboards (jetzt können wir zwischen Storyboards wechseln!), Mit Xibs für jedes visuelle Objekt, das nicht das Hauptfenster ist, und schließlich ein wenig Programmierung für zusätzliche Steuerung, die in bestimmten Situationen erforderlich ist.

9 - Protokolle!


Im Alltag existieren Protokolle, damit wir in einer bestimmten Situation wissen, wie wir reagieren sollen. Angenommen, Sie sind ein Feuerwehrmann und es ist ein Notfall aufgetreten. Jeder Feuerwehrmann muss ein Protokoll befolgen, das die Anforderungen für eine erfolgreiche Reaktion festlegt. Gleiches gilt für Protokolle in Swift / Objective-C.

Ein Protokoll definiert eine Skizze von Methoden, Eigenschaften und anderen Anforderungen für bestimmte Funktionen. Es kann von einer Klasse, Struktur oder Aufzählung übernommen werden, die dann die tatsächliche Implementierung dieser Anforderungen hat.

Hier ist ein Beispiel für das Erstellen und Verwenden eines Protokolls:

Für mein Beispiel benötige ich eine Aufzählung, in der die verschiedenen Arten von Materialien aufgeführt sind, die zum Löschen eines Feuers verwendet werden.

enum ExtinguisherType: String {

   case water, foam, sand

}

Als nächstes werde ich ein Notfallprotokoll erstellen.

protocol RespondEmergencyProtocol {

   func putOutFire(with material: ExtinguisherType)

}

Jetzt werde ich eine Feuerwehrmannklasse erstellen, die dem Protokoll folgt.

class Fireman: RespondEmergencyProtocol {

    func putOutFire(with material: ExtinguisherType) {

       print("Fire was put out using \(material.rawValue).")

    }

}

Fein! Und jetzt benutzen wir unseren Feuerwehrmann.

var fireman: Fireman = Fireman()

fireman.putOutFire(with: .foam)

Das Ergebnis sollte folgendes sein: „Feuer wurde mit Schaum gelöscht.“

Protokolle werden auch bei der Delegierung verwendet. Dadurch können Klassen oder Strukturen bestimmte Funktionen an eine Instanz eines anderen Typs delegieren. Es wird ein Protokoll mit delegierten Verantwortlichkeiten erstellt, um sicherzustellen, dass deren Funktionalität vom entsprechenden Typ ist.
Ein kleines Beispiel!

protocol FireStationDelegate: AnyObject {

func handleEmergency()

}

Die Feuerwehr delegiert an die Notfallmaßnahmen des Feuerwehrmanns.

class FireStation {
   weak var delegate: FireStationDelegate?

   func emergencyCallReceived() {
      delegate?.handleEmergency()
   }
}

Dies bedeutet, dass der Feuerwehrmann auch das FireStationDelegate-Protokoll einhalten muss.

class Fireman: RespondEmergencyProtocol, FireStationDelegate {

   func putOutFire(with material: ExtinguisherType) {
      print("Fire was put out using \(material.rawValue).")
   }

   func handleEmergency() {
      putOutFire(with: .water)
   }

}

Alles, was getan werden muss, ist, dass der Feuerwehrmann bei Anrufen als Delegierter der Feuerwache ernannt wird und die empfangenen Notrufe bearbeitet.

let firestation: FireStation = FireStation()
firestation.delegate = fireman
firestation.emergencyCallReceived()

Als Ergebnis erhalten wir: "Feuer wurde mit Wasser gelöscht."

10 - Kurzschlüsse


Es wird nur um schnelle Schließungen gehen. Sie werden hauptsächlich verwendet, um einen nachfolgenden Block oder Funktionen höherer Ordnung zurückzugeben. Endgültige Blöcke werden, wie der Name schon sagt, verwendet, um einen Codeblock auszuführen, nachdem die Aufgabe abgeschlossen ist.
Closures in Swift ähneln Blöcken in C und Objective-C.

Closures sind erstklassige Objekte *, sodass sie verschachtelt und übergeben werden können (wie Blöcke in Objective-C).

In Swift sind Funktionen ein Sonderfall von Verschlüssen.

Quelle - fuckingswiftblocksyntax.com **

Diese Ressource ist ein großartiger Ort, um die Abschlusssyntax zu lernen.

* Erstklassige Objekte - Objekte, die ohne Einschränkungen verwendet werden können: einer Variablen zuweisen, von einer Funktion übergeben / zurückgeben, während der Programmausführung erstellen / zerstören usw. Weitere Details . (im Folgenden - ca. Übersetzer)
** Die Seite funktioniert nicht, aber es gibt noch Bilder in der Wayback-Maschine, ein Beispiel .


elf - Planen


Kurz gesagt, Schaltkreise sind eine einfache Möglichkeit, zwischen Konfigurationen zu wechseln. Beginnen wir mit den grundlegenden Informationen. Der Arbeitsbereich enthält verschiedene verwandte Projekte. Ein Projekt kann verschiedene Ziele haben - die Ziele bestimmen das zu montierende Produkt und die Montagemethode. Ein Projekt kann auch verschiedene Konfigurationen haben. Das Schema in Xcode definiert die Sammlung von Zielen für die Assembly, die während der Assembly verwendete Konfiguration und die Sammlung der auszuführenden Tests.

Lila zeigt ein mögliches Muster.

12 - Tests


Wenn Sie sich die Zeit nehmen, Ihre Anwendung zu testen, sind Sie auf dem richtigen Weg. Dies ist natürlich kein Allheilmittel. Sie können nicht jeden Fehler beheben und auch nicht garantieren, dass Ihre Anwendung frei von Problemen ist. und doch denke ich, dass die Vorteile die Nachteile überwiegen.

Beginnen wir mit den Nachteilen des Unit-Tests:

  • Erhöhte Entwicklungszeit;
  • Erhöhen Sie die Codemenge.

Vorteile :

  • Die Notwendigkeit, modularen Code zu erstellen (um das Testen zu vereinfachen);
  • Offensichtlich werden die meisten Fehler vor der Veröffentlichung erkannt.
  • Vereinfachung der Unterstützung.

In Kombination mit dem Dienstprogramm Tools verfügen Sie über alles, um die Anwendung flexibel zu gestalten und fehlerfrei und abgestürzt zu arbeiten.

Es gibt viele Tools, mit denen Sie Ihre Anwendung testen können. Je nachdem, was Sie verfolgen möchten, können Sie eine oder mehrere davon auswählen. Möglicherweise sind die am häufigsten verwendeten Tools Lecks , Zeitprofiler und Zuordnungen .

13 - Geolokalisierung


In vielen Anwendungen erfordern einige Funktionen das Auffinden eines Benutzers. Es wäre also schön, eine allgemeine Vorstellung davon zu haben, wie der Standort für iOS funktioniert.

Es gibt ein Framework namens Core Location, mit dem Sie auf alles zugreifen können, was Sie benötigen:

Mit dem Core Location Framework können Sie den aktuellen Standort oder die Bewegungsrichtung eines Geräts bestimmen. Das Framework verwendet verfügbare Hardware, um die Position und Richtung des Benutzers zu bestimmen. Sie können die Klassen und Protokolle dieses Frameworks verwenden, um Ereignisse in Bezug auf Standort und Richtung zu konfigurieren und zu planen. Sie können Core Location auch verwenden, um Bewegungen in geografischen Regionen zu verfolgen. In iOS können Sie auch die Entfernung zum Bluetooth-Beacon * bestimmen.

* Soweit ich weiß, geht es um die iBeacon- Technologie

Cool, nicht wahr? Lesen Sie die Apple-Dokumentation und das dortige Beispiel, um die Funktionen des Frameworks besser zu verstehen.

14 - Lokalisierbare Zeichenfolgen


Was sollte in jeder Anwendung implementiert werden? Auf diese Weise können Sie die Sprache abhängig von der Region ändern, in der sich das Gerät befindet. Auch wenn Ihre Anwendung nur in einer Sprache verfasst ist, müssen möglicherweise in Zukunft neue hinzugefügt werden. Wenn der gesamte Text mit lokalisierbaren Zeichenfolgen eingegeben wird, müssen Sie lediglich die übersetzte Version der Datei Localizable.strings für die neue Sprache hinzufügen.

Die Ressource kann der Sprache über den Dateiinspektor hinzugefügt werden. Um eine Zeichenfolge mit NSLocalizedString zu erhalten, müssen Sie Folgendes schreiben:

NSLocalizedString(key:, comment:)

Um der lokalisierbaren Datei eine neue Zeile hinzuzufügen, muss dies leider manuell erfolgen. Hier ist eine Beispielstruktur:

{
"APP_NAME" = "MyApp"
"LOGIN_LBL" = "Login"
...
}

Nun eine andere Sprache (Portugiesisch), die lokalisierte Datei:

{
"APP_NAME" = "MinhaApp"
"LOGIN_LBL" = "Entrar"
...
}

Es gibt sogar Möglichkeiten, den Plural zu implementieren.

Teilen Sie immer mit, was Sie gelernt haben.

- Meister Yoda

Hoffe dieser Artikel war hilfreich!

All Articles