App Stürzt im Simulator und auf dem iPad (Debug) nicht ab, aber über TestFlight stürzt die App auf dem iPad ab

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • App Stürzt im Simulator und auf dem iPad (Debug) nicht ab, aber über TestFlight stürzt die App auf dem iPad ab

    Hallo Forum,

    zur Zeit sitze ich an einem Übungsprojekt, das ich für einen Freund aus dem Hobby heraus erstellen möchte. Es geht darum eine App zum Prüfen von Baumschinen zu erstellen. Ich habe die App in Xcode mit Swift5 geschrieben.
    Ich habe es ausgiebig getestet im Simulator und auf dem iPad im Entwicklermodus. Hier bekam ich keinerlei Fehler oder Abbrüche. Nun wollte ich den TestFlight Modus mal versuchen von dem ich gelesen habe. Nun habe ich die App hoch geladen und installiert. In einem View wird dann eine Unterschrift gesetzt und als jpg abgespeichert. Beim Bestätigen der Unterschrift stürzt die App vollständig ab. Nun habe ich leider keinen Debug Modus um Meldungen zu sehen.
    Die gleiche Funktion habe ich bei einer iPhone App auch programmiert und dort ohne Probleme.
    Nun wie gehe ich vor um den Fehler zu finden? Suche schon seit 2 Tagen mein Problem was das verursacht und muss mich leider ans Forum hier wenden.

    Im Anhang der Code vom View. Es wurde einmal RealmSwift und TouchDraw importiert wie im anderen Projekt auch schon.

    Quellcode

    1. import UIKit
    2. import RealmSwift
    3. import TouchDraw
    4. class SignatureViewController: UIViewController {
    5. @IBOutlet weak var touchDrawView: TouchDrawView!
    6. var signatureImage: UIImage?
    7. var checklistFromSegue: ChecklistClass?
    8. var checklist: ChecklistClass?
    9. override func viewDidLoad() {
    10. super.viewDidLoad()
    11. touchDrawView.clearDrawing()
    12. touchDrawView.setWidth(3.0)
    13. if let checklist = checklistFromSegue {
    14. loadChecklistFromSegue(with: checklist)
    15. }
    16. }
    17. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    18. if segue.identifier == "PDFIdentifierSegue" {
    19. let navigationController = segue.destination as? UINavigationController
    20. let pdfViewController = navigationController?.viewControllers.first! as! PDFViewController
    21. pdfViewController.checklistFromSegue = checklist
    22. }
    23. }
    24. func loadChecklistFromSegue(with checklist: ChecklistClass) {
    25. self.checklist = checklist
    26. self.navigationItem.title = "\(checklist.inventoryNumber) | \(checklist.manufacturer) | \(checklist.machine) | \(checklist.type)"
    27. }
    28. @IBAction func deleteSignatureButtonHandler(_ sender: UIBarButtonItem) {
    29. touchDrawView.clearDrawing()
    30. }
    31. @IBAction func saveSignatureButtonHandler(_ sender: UIButton) {
    32. if touchDrawView.exportStack().count > 0 {
    33. self.signatureImage = touchDrawView.exportDrawing()
    34. let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    35. let fileName = "\(checklist!.inventoryNumber)_\(DateClass.getCurrentFormattedDateWithoutPoints())_\(checklist!.id)Signature.jpg"
    36. let fileURL = documentsDirectory.appendingPathComponent(fileName)
    37. if let data = self.signatureImage?.jpegData(compressionQuality: 1.0) {
    38. try! data.write(to: fileURL)
    39. checklist?.signature = fileURL.absoluteString
    40. self.performSegue(withIdentifier: "PDFIdentifierSegue", sender: self)
    41. } else {
    42. AlertView.showAlertView(with: "Fehler beim Unterschreiben", and: "Es trat ein unerwarteter Fehler auf. Bitte versuchen sie es nochmal.", in: self)
    43. }
    44. } else {
    45. AlertView.showAlertView(with: "Unterschrift", and: "Das Prüfprotokoll kann nur nach einer Unterschrift erstellt werden.", in: self)
    46. }
    47. }
    48. }
    Alles anzeigen
  • Ohne näher einzusteigen: Schau mal in Richtung "Speichern der Unterschrift": Bei einen TestFlight-Deployment unterscheidet sich z. B. der genutzte Documents-Folder bzgl. Lokation und Pfadkomponenten. Ich habe mir angewöhnt, nur mit standardisierten Pfaden zu arbeiten...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MyMattes schrieb:

    Ohne näher einzusteigen: Schau mal in Richtung "Speichern der Unterschrift": Bei einen TestFlight-Deployment unterscheidet sich z. B. der genutzte Documents-Folder bzgl. Lokation und Pfadkomponenten. Ich habe mir angewöhnt, nur mit standardisierten Pfaden zu arbeiten...

    Mattes
    Ich habe die andere App zum testen auch in den TestFlight gesetzt mit der gleichen Programmierung. Dort wurde kein Abbruch der App herbeigeführt.
    Mit folgendem Befehl befinde ich mich doch im normalen Documents-Folder:

    Quellcode

    1. let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!

    Mit dem zweiten Befehl vergebe ich nur den Namen und hat mit dem Pfad nichts mehr zu tun:

    Quellcode

    1. let fileName = "\(checklist!.inventoryNumber)_\(DateClass.getCurrentFormattedDateWithoutPoints())_\(checklist!.id)Signature.jpg"
    Kann sein das ich ganz falsch gerade denke und gar nicht im richtigen Pfad bin. Oder der View der mittels prepare aufgerufen wird verursacht das problem. Diese Funktion wird anschließend aufgerufen nach dem speichern.
  • Anhand von diesem Beispiel habe ich mein Dokumenten Pfad gewählt:


    Quellcode

    1. func getDocumentsDirectory() -> URL {
    2. let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    3. let documentsDirectory = paths[0]
    4. return documentsDirectory
    5. }
    Hab es so verstanden das jede App ihren Speicherbereich bekommt in den man Dokumente etc. ablegen kann. Ich verwende den default Pfad und speichere meine Daten im Dokumenten Ordner ab. Oder verwendest du andere Argumente für den Pfad anstatt .documentDirectory?
  • Nun habe ich einen anderen Test gemacht und mein iPad mit einem Zertifikat für AdHoc installiert. Nach dem Export von Xcode für AdHoc hab ich die App mit AppBox auf Dropbox hoch geladen und auf dem iPad installiert. Ohne Probleme keine Abbrüche oder sonstiges. Verstehe aber absolut nicht warum :(
    Werde sie mal im AppStore hoch laden und prüfen lassen. mal schauen was heraus kommt.
  • Interessant wäre mal ein Crash-Log. Damit man sehen kann, warum die App überhaupt crasht. ;)

    Die Crash-Logs auf dem Device kannst Du Dir im Devices und Simulators Window in Xcode mit View Device Logs bei dem Device ansehen.

    Du kannst die App auch als Debug Build bzw. mit Debug Symbols beim App Store einstellen. Evtl. tritt der Crash damit dann jedoch nicht mehr auf.
  • Hallo Forum,

    sorry das ich jetzt erst antworte aber war leider beruflich unterwegs und hatte keine Zeit.


    MCDan schrieb:

    Interessant wäre mal ein Crash-Log. Damit man sehen kann, warum die App überhaupt crasht. ;)

    Die Crash-Logs auf dem Device kannst Du Dir im Devices und Simulators Window in Xcode mit View Device Logs bei dem Device ansehen.

    Du kannst die App auch als Debug Build bzw. mit Debug Symbols beim App Store einstellen. Evtl. tritt der Crash damit dann jedoch nicht mehr auf.
    Leider habe ich das noch nie gemacht. Muss ich mal schauen