1. Batterie abklemmen
  2. Unterbodenverkleidung abschrauben (6 8er Schrauben)
  3. Massekabel abschrauben, Schraube zur Seite legen, siehe #
  4. Getriebeinöleinfüllschraube (Inbus 14) öffnen um sicherzugehen das man das neue Öl einfüllen kann
  5. Getriebeölablassschraube öffnen, Öl ablaufen lassen
  6. Schraube mit neuer Dichtung wieder rein (60nm)
  7. Getriebequerträger abschrauben, zwei 13er in der Mitte + 2 17er an den Seiten
  8. Motor kippt leicht nach hinten
  9. Tachowelle abschrauben (8er)
  10. Kupplungsnehmerzylinder abschrauben (Kupplung muss dann nicht entlüftet werden, 2 Schrauben)
  11. Kardanwelle abschrauben und leicht zusammenschieben (3Schrauben)
  12. Wenn die Hardyscheibe mit gewechselt wird, alle 6 Schrauben entfernen
  13. Schaltgestänge aushaken + Markieren
  14. 10x Getriebeschrauben lockern
  15. Getriebe unterbauen / Getriebeheber
  16. Nach hinten rausziehen und wegheben
  17. Öleinfüllschraube öffnen und ATF III einfüllen bis es seitlich rauskommt, ca 1,7l
  18. Öleinfüllschraube mit neuer Dichtung einschrauben (60nm)
  19. Ausrücklager austauschen, einfach abziehen und wieder einlegen
  20. Getriebestirnseite reinigen (Bremsenreiniger)
  21. Kupplungskorb abschrauben 6x 8er Imbus
  22. Korb und alte Scheibe abnehmen
  23. Neue Scheibe richtigherum rein, Korb dran und zwei Schrauben mit der Hand eindrehen
  24. Kupplungsscheibe mit Dorn zentrieren
  25. Dorn drinlassen und alle Imbus Schrauben über Kreuz anziehen (25nm)
  26. Dorn abziehen
  27. Evtl. Motorseite reinigen (Bremsenreiniger)
  28. Nehmerzylinder über das Getriebe legen
  29. Getriebe wieder reinheben, von hinten einschieben, nicht verkanten
  30. Schrauben wieder eindrehen und Festziehen
  31. Kardanwelle wieder Montieren (45nm)
  32. Restlicher Einbau wie vorher rückwärts

Attention: Application ID changes with every Appstart since iOS 8

do {
    let documentsURL = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
    let docs = try FileManager.default.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: [], options:  [.skipsHiddenFiles, .skipsSubdirectoryDescendants])
    let images = docs.filter{ $0.pathExtension == "xxx" }
    print(images)
} catch {
    print(error)
}
    //Delete Image from Notification
    if lentItems.imageURL == nil {
        //no image to delete
    } else {
        let fileManager = FileManager.default
        do {
            try fileManager.removeItem(atPath: lentItems.imageURL!)
        } catch {
            print("Could not delete Image: \(error)")
        }
    }
    do {
        let attachment = try UNNotificationAttachment(identifier: "bild", url: imageURL, options: nil)
        content.attachments = [attachment ]
    } catch {
        print("Attachment could not be loaded" )
    }
    // Create a URL
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
    let imageURL = documentsURL?.appendingPathComponent("\(String(describing: title)).png")


    // save image to URL
    if thumbnailData == nil {
        print("No Picture")
    } else {
        let notificationImage = UIImage(data: thumbnailData as! Data) // or wherever you have your UIImage
        do {
            try UIImagePNGRepresentation(notificationImage!)?.write(to: notificationImageURL!)                    
        } catch {
            print("Couldnt save image" )
        }
    }

In viewDidLoad:

//Dissmiss Keyboard
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
view.addGestureRecognizer(tap)

Function:

//Dismiss Keyboard
@objc func dismissKeyboard() {
    view.endEditing(true)
}
    //MARK: Contacts

    func checkContactsStatus() {
        let status = CNContactStore.authorizationStatus(for: .contacts)
        if status == .denied || status == .restricted {
            presentSettingsActionSheet()
            return
        }
    }

   //Ask for Contact Permissions
    func presentSettingsActionSheet() {
        let alert = UIAlertController(title: "Permission to Contacts", message: "This app needs access to contacts in order to ...", preferredStyle: .actionSheet)
        alert.addAction(UIAlertAction(title: "Go to Settings", style: .default) { _ in
            let url = URL(string: UIApplicationOpenSettingsURLString)!
            UIApplication.shared.open(url)
        })
        alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))
        present(alert, animated: true)
    }

    func contactPicker(_ picker: CNContactPickerViewController,
                       didSelect contactProperty: CNContactProperty) {

    }

    func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
        // You can fetch selected name and number in the following way

        // user name
        let userName:String = contact.givenName
        let surName:String = contact.familyName
        let fullName:String = userName + " " + surName
        print(fullName)
        contactTextField.text = fullName

//         user phone number
//        let userPhoneNumbers:[CNLabeledValue<CNPhoneNumber>] = contact.phoneNumbers
//        let firstPhoneNumber:CNPhoneNumber = userPhoneNumbers[0].value

        // user phone number string
//        let primaryPhoneNumberStr:String = firstPhoneNumber.stringValue
//        print(primaryPhoneNumberStr)
    }

    func contactPickerDidCancel(_ picker: CNContactPickerViewController) {

    }

    func chooseContact() {
        let contactPicker = CNContactPickerViewController()
        contactPicker.delegate = self
        contactPicker.displayedPropertyKeys =
            [CNContactGivenNameKey
                , CNContactPhoneNumbersKey]
        self.present(contactPicker, animated: true, completion: nil)
    }

Info.plist

<key>NSContactsUsageDescription</key>
<string>This app requires contacts access to function properly.</string>
import Foundation
import CoreData

class CoreDataStack {
    var container: NSPersistentContainer {
        let container = NSPersistentContainer(name: "todos")
        container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
        container.loadPersistentStores { (description, error) in
            guard error == nil else {
                print("Error: \(error!)")
                return
            }
        }
        return container
    }

    var managedContext: NSManagedObjectContext {
        return container.viewContext
    }
}

If embedded in Navigation Controller:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
if let rootViewController = window?.rootViewController as? UINavigationController {
    if let viewController = rootViewController.viewControllers.first as? ViewController {
        let url = alert["imgurl"] as? NSString
        viewController.loadImage(url as String)
    }
}
}

If not embedded in Navigation Controller:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    if let rootViewController = window?.rootViewController as? ViewController {
        rootViewController.loadImage()
    }
}
let alert = UIAlertController(title: "Title", message: nil, preferredStyle: .alert)
alert.addTextField { (textField) in
        textField.placeholder = "Name"
    }

let action = UIAlertAction(title: "Save", style: .default) { (_) in 
}

let cancel = UIAlertAction(title: "Cancel", style: .cancel) { (action: UIAlertAction) in
    }

alert.addAction(action)
    alert.addAction(cancel)

present(alert, animated: true, completion: nil)