Lock File für Edit in AppGroup

  • Lock File für Edit in AppGroup

    Moin

    Ich will ein paar Werte in einer Plist speichern welche über ein App Group Verzeichnis Extension und App zurVerfügung stehen.

    Es ist hierbei wichtig, dass der jeweilige Part den aktuellen Wert ausliest bevor er editiert und speichert, damit die Edits des anderen Parts mit berücksichtigt werden (Die App zählt bei einigen Werten immer weiter).
    Also File Lock -> Read -> Edit -> Save -> File Unlock

    Darf ich bei bei NSFileCoordinators `coordinateWritingItemAtURL:` auch lesen bevor ich schreibe?
    Wenn ich z.B. in der App erst ein coordinate Reading mache, dann editiere und danach coordinate Write, kann sich ja ein Write der Extension dazwischenschieben.
    Die Änderungen der Extension wären dann nicht berücksichtigt.
  • Hallo,

    vielleicht kannst Du ein bisschen die Zusammenarbeit der Erweiterung und der Anwendung erklären.

    Bei mir teilen die auch Daten und ich schicke einfach eine Nachricht, wenn der eine oder der andere etwas geändert hat, so dass sich beide abgleichen.

    Bei Dir hört es sich an, als würdest Du irgend etwas poolen und absichern.
    Da entsteht die Vermutung, ob das richtig sein kann.

    Viele Grüße
  • Ich hab eine App / Extension / Watch App die diverse Systeminformationen darstellt.
    Unter anderem auch den akutellen Traffic der über Wlan und Mobilfunknetz rein-/rausgeht.

    Dachte es wäre für ein Update nett den Datendurchsatz komplett mitzuloggen und die monatliche Datennutzung mit anzuzeigen.
    Bisher hab ich da noch eine andere App für, aber dachte da spar ich mir ein weiteres Glance auf der Uhr, was nie schadet.

    Ich muss also immer den aktuellen Traffic seit dem letzten Update aufaddieren.
    Hat der Nutzer die App offen, wird kontinuierlich der neue Wert dort gepeichert.
    Hat der Nutzer die Today Extension offen geschieht es eben dort.

    Bis hier kein großes Problem, Apps werden ja inaktiv wenn das Notification Center geöffnet wird.
    Also keine parallelen Schreibzugriffe.

    Fies wird es erst mit der Uhr.
    Diese kann ja die Main-App antriggern um etwas auszuführen.
    Habe ich also die Watch-App offen, aktualisiert die Main-App kontinuierlich im Hintergrund.

    Öffne ich nun auf dem Handy die Today Extension, laufen beide Parts der App parallel.

    Hier wollte ich nun eben einen Lock auf die Datei -> Öffnen -> Alten Wert und alten Offset zum Systemzähler lesen -> Neue Datennutzung errechnen -> Neuen Wert und neuen Offset zum Systemzähler speichern -> Lock freigeben.
  • Okay, aber das lässt sich eben leicht mit Benachrichtigungen erschlagen…

    - Erweiterung sendet: Hey, loggt hier jemand?
    - Anwendung sendet: Yep, ich… ODER Anwendung sendet nichts

    Du hast aber auch den Fall, dass die Erweiterung offen ist und die Anwendung auf der Uhr später geöffnet wird und dann beides zeitgleich läuft.

    Ich würde mir aber überlegen, ob Du nicht einfach beide loggen lässt. In unterschiedliche Dateien/Verzeichnisse.
    Das ganze durchdacht, so dass Du die Teile dann immer zusammenführst. Also ein Merge machst.

    Das ist etwas aufwändiger, aber wahrscheinlich das klügste…

    Viele Grüße