FTP-App für iOS

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

  • FTP-App für iOS

    Hallo zusammen!

    Ich habe mit Swift 5 eine iOS-App entwickelt, mit der man Daten verwalten kann. Dazu:
    1. loggt sie sich auf einem FTP-Server ein (mit Benutzername/PW)
    2. durchsucht einen bestimmten Ordner nach einer bestimmten Datei
    3. lädt diese Datei herunter
    4. löscht diese Datei vom FTP-Server
    5. und nach dem Eingeben von Daten wird die bearbeitete Datei wieder hochgeladen.
    Dafür habe ich die File(s)Provider Library benutzt. Leider ist sie recht buggy und auch wenn ich sie zum Laufen gebracht habe, besteht ein großes Problem:

    Ich habe die App bisher auf einem FTP-Server im selben Netzwerk (von jemand anderem eingerichtet) und mit zwei anderen Test-Servern (speedtest.tele2.net/ & test.rebex.net/, siehe hier) getestet und dort funktioniert alles ohne Probleme. Sie kann sich auch auf dem Server meiner Klienten einloggen, aber sie findet dort keine Dateien! Mit FileZilla oder der Konsole unter Windows werden die Dateien und Ordner ohne Probleme angezeigt.
    Ich habe keine Ahnung, was das Problem ist und meine Klienten können auch nichts an ihrem FTP-Server ändern, weil er auch von anderen Leuten benutzt wird.

    Meine Frage ist daher: Gibt es noch einen anderen Weg, wie ich FTP unter iOS in meiner App verwenden kann?

    Ich habe dazu schon diesen Post hier im Forum von vor über 2 Jahren gefunden, leider kam der OP darin auch zu keinem Ergebnis und alles andere, das Google ausspuckt, wird im Normalfall nicht mehr unterstützt. :/
  • Danke für deine Antwort!
    Ja, ich verwende tatsächlich "FTPFileProvider.Mode.passive".

    Habe es stattdessen mit "extendedPassive" versucht, was keinen Unterschied gemacht hat. "active" liefert dafür nur eine Menge Fehlermeldungen (sind bekannt, aber leider gibt es keinen Support mehr). Nach diesen Errors macht die App zwar scheinbar weiter, aber es werden auch wieder keine Dateien gefunden.
  • Mal ganz ehrlich.

    Hast Du Dir mal etwas Gedanken über die Sicherheit Deiner App gemacht? FTP ist das allerletzte Mittel das man benutzt um Daten von einem Device zum nächsten zu bekommen. Du must immer die Anmeldedaten in der App halten. Jeder kann sich diese mal eben aus deiner app auslesen und dann deinen FTP Server löschen wenn er lustig ist. Das Ganze ist eine tickende Zeitbombe. Ich kann mir einfach nicht vorstellen, dass deine Klienten das lustig finden würden. Wahrscheinlich wissen die aber gar nicht was du da treibst oder?

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Mal ganz ehrlich: Jede Software ist eine tickende Zeitbombe ;) — aber was wäre denn die Alternative für Transfer von Dateien? Vor allem, wenn der Server schon auf dieses Protokoll festgelegt ist?
    Zumindest ftps würde ich schon verlangen, aber das setze ich mal als gegeben voraus; ansonsten wäre mir neu, dass man die Zugangsdaten zwangsweise hartcodiert in der App hinterlegen muss, und in der Frage finde ich auch nichts von dieser Vorraussetzung.

    Eine fertige ftp-Lib habe ich auch nicht parat, aber ich würde zumindest mal nachhaken, ob tatsächlich nicht verschlüsselt wird (Stichwort sftp und ftps).
  • Weitere Alternative wär, wenn man sich zuerst über VPN in das Netz einloggen muss und dann greift man auf den FTP Server zu.

    Bin mir nicht sicher, aber reines FTP verschlüsselt gar nix. Weder Benutzername/Passwort noch die Datenübertragung. Da sollte man sich echt eine Alternative überlegen. Vor allem wenn die Implementierung fehlerhaft ist bzw. die FTP Library Bugs hat, mit denen man sich nur rumärgern muss.

    @Sim2019 Da musst Du wohl selber bissl deine verwendete Library debugged und gucken wo das Problem liegt. Wenn Du die Stelle gefunden hast, dann würde ich mir mal andere Implementierung anschauen bzw. einfach bissl googeln z.B. example-code.com/swift/ftp.asp
  • Thallius schrieb:

    Mal ganz ehrlich.

    Hast Du Dir mal etwas Gedanken über die Sicherheit Deiner App gemacht? FTP ist das allerletzte Mittel das man benutzt um Daten von einem Device zum nächsten zu bekommen. Du must immer die Anmeldedaten in der App halten. Jeder kann sich diese mal eben aus deiner app auslesen und dann deinen FTP Server löschen wenn er lustig ist. Das Ganze ist eine tickende Zeitbombe. Ich kann mir einfach nicht vorstellen, dass deine Klienten das lustig finden würden. Wahrscheinlich wissen die aber gar nicht was du da treibst oder?

    Claus
    Die Login-Daten werden regelmäßig geändert, nur verschlüsselt übertragen und ohne den richtigen Benutzernamen kommt man natürlich sowieso nicht hinein. Mit den Daten, die übertragen werden, kann zum Glück niemand etwas anfangen, also alleine deswegen wäre es eigentlich egal.
    Ich weiß, es ist nicht optimal, aber FTP wird nun mal am Server benutzt (mit dem ich übrigens nichts zu tun habe) und zwar nicht nur von meiner App, sondern auch von bereits bestehenden.

    t-no schrieb:

    Mal ganz ehrlich: Jede Software ist eine tickende Zeitbombe ;) — aber was wäre denn die Alternative für Transfer von Dateien? Vor allem, wenn der Server schon auf dieses Protokoll festgelegt ist?
    Zumindest ftps würde ich schon verlangen, aber das setze ich mal als gegeben voraus; ansonsten wäre mir neu, dass man die Zugangsdaten zwangsweise hartcodiert in der App hinterlegen muss, und in der Frage finde ich auch nichts von dieser Vorraussetzung.

    Eine fertige ftp-Lib habe ich auch nicht parat, aber ich würde zumindest mal nachhaken, ob tatsächlich nicht verschlüsselt wird (Stichwort sftp und ftps).
    Genau das ist da Problem - es gibt keine wirkliche Alternative.

    manoh schrieb:

    Weitere Alternative wär, wenn man sich zuerst über VPN in das Netz einloggen muss und dann greift man auf den FTP Server zu.

    Bin mir nicht sicher, aber reines FTP verschlüsselt gar nix. Weder Benutzername/Passwort noch die Datenübertragung. Da sollte man sich echt eine Alternative überlegen. Vor allem wenn die Implementierung fehlerhaft ist bzw. die FTP Library Bugs hat, mit denen man sich nur rumärgern muss.

    @Sim2019 Da musst Du wohl selber bissl deine verwendete Library debugged und gucken wo das Problem liegt. Wenn Du die Stelle gefunden hast, dann würde ich mir mal andere Implementierung anschauen bzw. einfach bissl googeln z.B. example-code.com/swift/ftp.asp
    Eine Alternative gibt es nicht.
    Das bisher größte Problem konnte über Umwege "beheben" (weiß noch immer nicht, wodurch es genau verursacht wird/wurde), aber ich kenne mich einfach nicht genug mit der Materie aus, um noch dazufremden Code zu debuggen - deswegen muss ich eine Library benutzen, anstatt alles von Anfang an selbst zu programmieren.
    Mit der Chilkat Library habe ich es schon versucht, konnte sie aber bisher noch nicht zum Laufen bringen.

    Chris schrieb:

    Ich brauch auch FTP, Sicherheit hin oder her.
    Allerdings verwende ich libCurl. curl.haxx.se/libcurl/
    Die ist sogar schon auf dem Rechner, leider ohne SFTP.


    Chris
    Danke für den Link. Leider handelt es sich dabei um eine C-Library, ich benutze allerdings Swift und das Einbinden der von manoh geposteten hat schon nicht funktioniert. :/
  • FTP ist heutzutage recht ungeeignet. Ist wie Adobe Flash. SFTP von SSH ist deutlich besser und hat außer der Buchstabenfolge nichts mit FTP zu tun:
    spacehost.de/ftp-ftps-sftp-der-unterschied/

    FTP hat noch das Problem, dass je nach Einstellungen nur die Steuerbefehle verschlüsselt sind, die Dateien aber unverschlüsselt übertragen werden:
    serv-u.com/solutions/what-is-file-transfer-protocol-secure

    Sim2019 schrieb:

    Die Login-Daten werden regelmäßig geändert,
    Bringt nicht viel Sicherheit, wenn eine Passwortattacke endlos probieren kann. Ist der Server vor so etwas abgesichert?

    t-no schrieb:

    Mal ganz ehrlich: Jede Software ist eine tickende Zeitbombe
    Natürlich ist keine Software sicher, aber die Aussage klingt wie aus der Jugendzeit, als man sich die "Braut" schön gesoffen hat, die man sich angelte...

    OpenSSH hatte bisher keine einzige bekannte Lücke, wer immer die aktuelle Version laufen lies. Die machen die Sache schon ganz gut.
  • Wie gesagt, der Server ist so wie er ist, das benutzte Protokoll kann von mir nicht geändert werden und wird wegen mir auch nicht geändert. Andere Apps benutzen den Server auch, es muss also funktionieren, nur wie, das ist die Frage (kann die anderen Entwickler leider nicht fragen, was sie benutzen).
    Ich kann euch nur die Infos geben, die ich habe und was die Absicherung des Servers angeht, ist das nicht viel.
  • Wie gesagt, wenn es kein anderer für dich fixed, dann musst Du selber etwas debuggen und kucken, an Beispielen oder Specs, wie man das fixed.

    Sim2019 schrieb:

    Danke für den Link. Leider handelt es sich dabei um eine C-Library, ich benutze allerdings Swift
    Übrigens versteht sich Swift recht gut mit C.

    Wenn auf dem Server personenbezogene Daten abgespeichert werden und diese unverschlüsselt übertragen werden, dann könnte ich mir vorstellen, dass diese DSGVO etwas dagegen hat.
  • Es geht nicht darum, dass jemand die Fehler für mich behebt, ich suche eine Alternative, da ich die Fehler eben selbst mich beheben kann.

    manoh schrieb:

    Übrigens versteht sich Swift recht gut mit C.
    Theoretisch - ich weiß. Es gibt zwar z.B. für die Chilkat-C-Library x verschiedene Erklärungen, die allerdings allesamt unvollständig sind und ich habe es bisher nicht geschafft, einen Build damit bei einem neuen Projekt abzuschließen.

    manoh schrieb:

    Wenn auf dem Server personenbezogene Daten abgespeichert werden und diese unverschlüsselt übertragen werden, dann könnte ich mir vorstellen, dass diese DSGVO etwas dagegen hat.
    Nein, es sind keine personenbezogenen Daten. Wie gesagt, es sind Daten, mit denen niemand etwas anfangen kann.
  • Sim2019 schrieb:

    manoh schrieb:

    Übrigens versteht sich Swift recht gut mit C.
    Theoretisch - ich weiß.
    Das ist auch praktisch so. Das wäre auch ein Unding, wenn man darauf nicht geachtet hätte C bzw. Obj-C einzubinden.


    Wie gesagt, ich würde mir ein ein kleines Testprogramm schreiben und selber probieren das zu debuggen bzw. das Problem zu verstehen... Oder mir mal Curl anschauen, ob man das nutzen kann (wenn das unter iOS geht).
  • manoh schrieb:

    Wie gesagt, ich würde mir ein ein kleines Testprogramm schreiben und selber probieren das zu debuggen bzw. das Problem zu verstehen... Oder mir mal Curl anschauen, ob man das nutzen kann (wenn das unter iOS geht).
    Genau das ist das Problem, ich beschäftige mich erst seit kurzem mit der Materie und habe keine Ahnung, wie das alles intern funktioniert - es ist auch sinnlos, sich da erst wochenlang einzulesen, nur um dann das Rad neu zu erfinden (Wochen reichen dann vermutlich nicht aus).
    Wie schon gesagt: Ich kann nichts daran ändern, welches Protokoll der Server benutzt - auch, wenn du es noch so oft vorschlägst.

    In der Zwischenzeit habe ich es mal direkt mit Sockets (FTP-Codes) versucht, aber mit allen Socket-Libraries, die noch halbwegs unterstützt werden, gibt es Probleme... Gibt es denn wirklich nichts anderes, das man mit Swift und FTP benutzen kann (OHNE die Software des Servers zu ändern)?
  • Ein kurzes Update:

    Habe mir den Code der FilesProvider-Library noch einmal angeschaut, aber ohne genaue Kenntnis der Materie war ein genaues Debugging für mich einfach nicht möglich.

    Ich benutze jetzt eine leicht abgeänderte BlueSocket Library (kann Sockets öffnen und Befehle darüber schicken) und habe mir drumherum eine eigene, kleine Library aufgebaut, die die entsprechenden Befehle für's z.B. Login oder Hochladen von Dateien schickt und die Antworten der Sockets entsprechend behandelt.