10. Oktober 2018

Bibliotheken über CocoaPods einbinden

CocoaPods ist ein Werkzeug, um externe Bibliotheken in Xcode-Projekte einzubinden. Damit können eine Vielzahl von Open-Source-Bibliotheken in eigenen Projekten hinzugefügt werden und Teilkomponenten der eigenen Anwendung in separate Module ausgelagert werden. Es ist inspiriert von der Ruby-Paketverwaltung mittels gems und Bundler und selbst als Ruby-gem implementiert. Die Projektabhängigkeiten werden mit einer Podfile-Datei im Projekt beschrieben, zum Beispiel:

target 'Example' do
  pod 'MBProgressHUD'
  pod 'Reachability'
end

Durch den Aufruf von pod install werden automatisch die Quellen aller Bibliotheken heruntergeladen und das Xcode-Projekt so eingerichtet, dass die Bibliotheken in einem separaten Pods Projekt gebaut werden und über ein Framework in das Hauptprojekt eingebunden werden:

Bei der ersten Installation werden dabei die Versionsnummern in einer Datei Podfile.lock festgeschrieben:

PODS:
  - MBProgressHUD (1.0.0)
  - Reachability (3.2.0)

Damit wird erreicht, dass bei einem späteren Aufruf von pod install dieselbe Version der Bibliothek verwendet wird, selbst wenn zwischenzeitlich Updates veröffentlicht wurden. Updates von Pods können mittels pod update explizit veranlasst werden. Dadurch wird das Podfile.lock aktualisiert und die neuen Versionen werden installiert - das bedeutet, man legt selbst den Zeitpunkt fest, zu dem man aktualisierte Versionen von Bibliotheken in das Projekt übernimmt.

Verwendung über CocoaPods App / Kommandozeile

Es bietet sich an, die CocoaPods App zu verwenden, die eine komplette Ruby-Installation enthält - somit wird keine Installation von Ruby-gems notwendig:

Add Pod Editor

Alternativ kann cocoapods über die Kommandozeile installiert und verwendet werden:

Tutorial 1: CocoaPods einbinden

  1. Laden Sie den Start-Stand von dem Flashcards-Beispielprojekt: Flashcards.zip.

  2. Laden Sie die CocoaPods App von https://cocoapods.org/app.

  3. Starten Sie die App und verwenden Sie New Podfile from Xcode Project um ein Podfile für das Flashcards-Projekt anzulegen:

    CocoaPods New Podfile

  4. Suchen Sie auf cocoapods.org nach MBProgressHUD und kopieren Sie die Pod-Abhängigkeit unter Installation Guide:

    Link für Cocoapod kopieren
  5. Fügen Sie die Abhängigkeit im CocoaPods-Editor für das Podfile für das Flashcards-Target hinzu:

    Add Pod: CocoaPods App Editor
  6. Schließen Sie in Xcode das Flashcards-Projekt mit File » Close Project.

  7. Lassen Sie das Xcode-Projektes für die Verwendung von CocoaPods einrichten sowie die angegebenen Pods installieren:

    Install
  8. Öffnen Sie den erstellen Flashcards.xcworkspace in Xcode und verwenden ab jetzt immer diesen Workspace statt Flashcards.xcodeproj:

    CocoaPods: xcworkspace statt xcodeproj

  9. Prüfen Sie, dass sowohl Flashcards als auch Pods mit Inhalten im Project Navigator angezeigt wird (ist dies nicht der Fall, liegt dies wahrscheinlich daran, das eines der Projekte noch geöffnet ist - schließen sie diese und öffnen Sie den Workspace erneut):

    CocoaPods-Projekt in Xcode eingebunden

  10. Bauen und starten Sie die App testweise um die Konfiguration zu überprüfen.

Tutorial 2: MBProgressHUD für Aktivitätsanzeige verwenden

  1. Importieren Sie MBProgressHUD in DownloadsTableViewController.swift und verwenden Sie die Methode addStateObserver für die Resource um eine Aktivitätsanzeige mittels des MBProgressHUD zum implementieren:

    import UIKit
    import MBProgressHUD
    
    // ...
    
    class DownloadsTableViewController: UITableViewController {
    
        // ...
    
        override func viewDidLoad() {
            super.viewDidLoad()
            let resource = backend.allSets
            resource.addStateObserver(owner: self) { (state) in
        switch(state) {
        case .loading:
            MBProgressHUD.showAdded(to: self.view, animated: true)
        default:
            MBProgressHUD.hide(for: self.view, animated: true)
        }
    }
            // ...
        }
        
    }
  2. Starten Sie die App und testen Sie die Aktivitätsanzeige:

    Aktivitätsanzeige mit MBProgressHUD

Tutorial 3: Git-Versionskontrolle für Projekte mit CocoaPods

Tipp: Um mit Projekte mit Pods zu versionieren, empfiehlt es sich einen Git-Client wie SourceTree zu verwenden und eine .gitignore-Datei anzulegen, um Dateien zu exkludieren, die nicht von der Versionskontrolle erfasst werden sollen.

  1. Öffnen Sie das Terminal, zum Beispiel über eine Spotlight-Suche:

    Terminal via Spotlight öffnen

  2. Wechseln Sie mit cd in den Projektordner. Dies erreichen Sie am einfachsten, indem Sie den Projektordner vom Finder in das Terminal ziehen. Mit Show in Finder können Sie den Xcode-Projektordner im Finder anzeigen. Achten Sie dabei darauf, den übergeordneten Flashcards-Ordner zu verwenden:

    Drag Folder From Xcode To Terminal Drag Folder From Xcode To Terminal

  3. Legen Sie eine .gitignore-Datei an, die bewirkt, dass nur tatsächliche Projektdateien in das Git-Repository committet werden. Folgendes Kommando lädt eine beispielhafte .gitignore-Datei für Xcode-Projekte und fügt Sie dem Projekt hinzu:

    curl -L -s https://www.gitignore.io/api/xcode,osx >> .gitignore
    git add .gitignore
  4. Durch einen Bug in Xcode werden standardmäßig entwicklerspezifische Dateien committet. Diese sollten manuell entfernt werden:

    git rm -rf *.xcodeproj/xcuserdata *.xcodeproj/project.xcworkspace/xcuserdata
  5. Laden und installieren Sie SourceTree von sourcetreeapp.com. Hinweis: Beim ersten Start wird eine Registrierung notwendig, um eine kostenfreie Lizenz für die Software zu erhalten.

  6. Fügen Sie den Flashcards-Ordner per Neues Repository » Existierendes lokales Repository hinzufügen hinzu:

    Sourcetree Added Repo
  7. Öffnen Sie das Repository mit einem Doppelklick. SourceTree wird die Versionshistorie und alle Änderungen in dem Projekt anzeigen - committen Sie die Änderungen hier:

    Sourcetree Flashcards

  8. Committen Sie die Änderungen an dem Projekt: „23.3. Aktivitätsanzeige mit MBProgressHUD“.