Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Einfache relationale Datenbank für iOS in Verbindung mit der Shortcuts app

Einfache relationale Datenbank für iOS in Verbindung mit der Shortcuts app

Paperflow
Paperflow05.06.2322:23
Einfache relationale Datenbank für iOS in Verbindung mit der Shortcuts app
Folgendes Programm möchte ich schreiben:

Eine Tabelle soll alle meine lokalen Musik-Alben enthalten. Relational zu jedem Album, soll eine weitere Tabelle alle Titel-Nr'n als Zahl enthalten. Relativ zu jeder Nr soll eine Liste mit Zeitstempeln als String(h:m:s) und eine Beschreibung angelegt werden. Die Beschreibung soll frei definierbar sein und kann z. B. Refrain, Strophe oder Solo sein und noch ein boolean Feld Solo

Beispiel eines Datensatzes :
{Album,Nr,hms,Beschreibung,Solo}
{“Dire Straits”,1,“0:0:45”,“1st Verse“,false}


Folgende Funktionen möchte ich später mit dieser Datenbank und der App Shortcuts umsetzen:
* Zum aktuell laufenden Titel, die aktuelle Wiedergabezeit speichern.
* Zu einem ausgewählten Zeitstempel die Beschreibung editieren
* Alle Zeitstempel des Albums auflisten
* Nach einer Beschreibung suchen und die Musik ab dem entsprechenden Zeitstempel abspielen.

Aktuell habe ich alle diese Funktionen schon mit der Notizen App (jeder Datensatz ist eine Notiz) realisiert und das Shortcuts Programm funktioniert tadellos.

Aber aus Neugier und Performance gründen frage ich mich, kann das ganze mit einer Datenbank in iOS und Shortcuts realisiert werden 🙂

Falls es keine Datenbank für iOS in Verbindung mit Shortcuts gibt, wäre es eventuell möglich, mit JSON beziehungsweise verschachtelten dictionary’s zu arbeiten?

Danke das Du bis hierher gelesen hast 🙂
„🎸“
0

Kommentare

Kyalami05.06.2322:35
Vielleicht wäre Ninox passend
0
marm05.06.2323:06
Kürzlich habe ich einen Kurzbefehl erstellt, darin einen JSON-Datensatz angelegt und per Ruby-Skript ausgewertet. Ruby lässt sich mit der Aktion "Shell-Skript ausführen" einbinden. Diese Möglichkeit gibt es aber nur auf dem Mac.
Solche Datensätze funktionieren zwar auch irgendwie über Wörterbücher/Dictionaries und damit in iOS - aber das ist zum Haare raufen ...

Für iOS und MacOS gibt es die kostenlose App Data Jar , die JSON-Container bereitstellt und sich mit Kurzbefehlen nutzen lässt. Das habe ich installiert, aber noch nicht ausprobiert. Das erscheint mir als beste Lösung für Dein Anliegen.

Ninox hat keine Kurzbefehl-Aktionen.
0
Nebula
Nebula06.06.2301:16
Ich würde einfach den Entwickler von Apps wie Marvis, MusicSmart oder Albums fragen, ob sie die Funktionen integrieren möchten. Dazu müsstest du den Nutzen klar hervorheben. Ich habe zwar verstanden, was deine Lösung leisten soll, aber nicht wozu. Mir scheint es jedenfalls viel Aufwand zu sein, eine eigene Datenbank zu pflegen, wenn man schon eine auf dem Gerät hat. Deine Infos könntest du zusätzlich zur iOS-Musikmediathek in Textdateien ablegen. Diese organisierst du dann wie die Musik-App das auf dem Mac tut.
„»Wir werden alle sterben« – Albert Einstein“
0
Paperflow
Paperflow06.06.2309:32
marm
Für iOS und MacOS gibt es die kostenlose App Data Jar , die JSON-Container bereitstellt und sich mit Kurzbefehlen nutzen lässt.

Vielen Dank!

Habe „Data Jar“ installiert und experimentiere gerade welche Struktur die beste ist für relationale Listen

Beispiel:

Album
Dire Straits
1
0:0:1,Beschreibung,false
1:2:3,Beschreibung,true
2
0:0:1,Beschreibung,false
1:2:3,Beschreibung,true
Eric Clapton
1
0:0:1,Beschreibung,false
1:2:3,Beschreibung,true
2
0:0:1,Beschreibung,false
1:2:3,Beschreibung,true

Wäre das dann in shortcuts?:

List(Album)
List(Nr)
Dictionary
hms(txt),body(txt),solo(boolean)

Oder denke ich zu kompliziert

@Nebula: Mir geht’s allein ums lernen und was auf dem iPhone alles möglich ist. Bin schon froh, dass ich es mit der Notizen App und Shortcuts geschafft hab, aber eine Datenbank wäre schon eleganter. Später will ich mich an echte App Entwicklung rantrauen.
„🎸“
0
marm06.06.2309:51
Paperflow
Habe „Data Jar“ installiert und experimentiere gerade welche Struktur die beste ist für relationale Listen
Ich würde jetzt erstmal alles in eine Liste (also nur eine) mit JSON-Datensätzen verpacken ohne relationale Beziehungen. Wenn Du ein Album beschreiben willst, sind nur die dafür nötigen Daten im Datensatz und der Rest leer. Den Rest kannst Du wie Du es brauchst filtern und abrufen.
Oft starte ich gedanklich bei einer Datenbank und am Ende ist es doch nur eine Liste. Hier ist es doch auch so; Du möchtest später auch nicht den "1st Verse" zusätzlich mit einem anderen Album verknüpfen.
+1
albrox06.06.2312:35
Ich würde die Daten an einen Webserver senden und dort speichern. Wohlmöglich hast du damit aber nicht den gewünschten Lerneffekt den du suchst...
0
Paperflow
Paperflow06.06.2317:34
albrox
Ich würde die Daten an einen Webserver senden und dort speichern. Wohlmöglich hast du damit aber nicht den gewünschten Lerneffekt den du suchst...

Das ist richtig.
Zusätzlich wollte ich aber auch alles local lassen.

Status Update: Mittlerweile konnte ich die 500 Datensätze aus der App Notizen in JSON (App Data Jar) migrieren

step1: „db“ migrieren erledigt
Next step2: Daten aus der „db“ abrufen
Next step3: Frontend (Shortcuts) mit der “db“ verknüpfen
„🎸“
0
Paperflow
Paperflow06.06.2321:19
Ich glaube, das JSON für diese Aufgabe nicht geeignet beziehungsweise nicht besser ist als die Notizen App:
The Story, so Far:
Ich habe zwei Möglichkeiten ausprobiert:

1. Strukturiert:
{Album {TitelNr{Zeitmarke UND Beschreibung}}}
Jetzt möchte ich nach der Beschreibung suchen und die Werte für die vorherigen KEYS erhalten: also Album= Dire Straits, TitelNr=1

Das scheint nicht möglich zu sein.
Das Album kennt ZWAR seine Kinder, aber die Kinder kennen nicht ihre Eltern 😂

2. Alles in einem Ordner:
TextFile1={Album+TitelNr+Zeitmarke+Beschreibung}
TextFile2={Album+TitelNr+Zeitmarke+Beschreibung}

Das funktioniert, aber dann muss ich jedesmal das TextFile danach aufteilen. Ist also das gleiche wie in der App Notizen, also kein Mehrwert.

Ich hoffe ich habe keinen gedanklichen Fehler gemacht. Schade, es klang so vielversprechend
„🎸“
0
marm07.06.2301:00
Ich würde das eher so probieren:
[
    {"Album:“Dire Straits”, "TitelNr": 1, "Zeitmarke":"", Beschreibung:""},
    {"Album:“Dire Straits”, "TitelNr": 1, "Zeitmarke":“0:0:45”, Beschreibung:“1st Verse“},
    {"Album:“Dire Straits”, "TitelNr": 2, "Zeitmarke":"", Beschreibung:""}
]
Es gibt zu jeder Titelnummer einen Datensatz, selbst wenn noch keine Zeitmarke gesetzt wurde. Gibt es eine Zeitmarke und eine Beschreibung, dann gibt es einen zusätzlichen Datensatz. Und dann einfach suchen und auswerten.
Vielleicht nimmst Du doch die eingebauten Dictionaries/Wörterbücher. Dafür gibt es die Aktion "Get Dictionary from Input" und liest dort eine Textdatei ein.
+1
Paperflow
Paperflow09.06.2323:31
marm
Ich würde das eher so probieren:
[
    {"Album:“Dire Straits”, "TitelNr": 1, "Zeitmarke":"", Beschreibung:""},
    {"Album:“Dire Straits”, "TitelNr": 1, "Zeitmarke":“0:0:45”, Beschreibung:“1st Verse“},
    {"Album:“Dire Straits”, "TitelNr": 2, "Zeitmarke":"", Beschreibung:""}
]
Es gibt zu jeder Titelnummer einen Datensatz, selbst wenn noch keine Zeitmarke gesetzt wurde. Gibt es eine Zeitmarke und eine Beschreibung, dann gibt es einen zusätzlichen Datensatz. Und dann einfach suchen und auswerten.
Vielleicht nimmst Du doch die eingebauten Dictionaries/Wörterbücher. Dafür gibt es die Aktion "Get Dictionary from Input" und liest dort eine Textdatei ein.

Sooo, musste mich noch technisch einarbeiten, aber jetzt funktioniert es:
So wie du gesagt hast, ein Array (Liste) mit Objekten(Dictionary s). Jedes Objekt ist ein kompletter Datensatz bestehend aus den Keys Album, TrackNr, Zeitstempel, Beschreibung, und zwei boolian keys.

Mittlerweile habe ich folgende Funktionen erstellt:

Automatische Migration aller Notizen
Neues Objekt anlegen
Letztes Objekt löschen
Letztes Objekt editieren
Vorhandenes Objekt suchen
Vorhandenes Objekt abspielen

Anmerkung:
Die Datenbank hat folgende Syntax:
{„Lesezeichen“:[{Objekt n},{Objekt n+1}]}

Nochmals danke für Deine Hilfe!

PS: das ganze ist mit Boardmitteln, also nur Shortcuts und Files gelöst.

Bezüglich der Performance bin ich noch unsicher. Wenn die eine JSON-Datei zu gross wird, könnte das ändern von Objekten etwas lange dauern. Aber die Performance war mit Notizen auch nicht überragend.
„🎸“
+1
marm09.06.2323:45
Paperflow
.., aber jetzt funktioniert es:
Puh, bin froh, dass ich Dich nicht auf den Holzweg geschickt habe. Vielleicht läuft so etwas noch schneller, wenn Du Programme wie zum Beispiel Pythonista nutzt. Leider gibt es keine eingebaute Option in iOS für Shell-Skript, Ruby oder Python wie unter Kurzbefehle für MacOS.
+1
Paperflow
Paperflow18.06.2321:06
marm
Paperflow
.., aber jetzt funktioniert es:
Puh, bin froh, dass ich Dich nicht auf den Holzweg geschickt habe. Vielleicht läuft so etwas noch schneller, wenn Du Programme wie zum Beispiel Pythonista nutzt. Leider gibt es keine eingebaute Option in iOS für Shell-Skript, Ruby oder Python wie unter Kurzbefehle für MacOS.

Update:
Es zeigte sich tatsächlich eine schlechte Performance.

Hab mich deshalb in Java script eingearbeitet und alle Funktionen mit der JSON Datenbank in JS realisiert. Das läuft überraschend schnell. Shortcuts ist jetzt nur noch für die grafische Oberfläche zuständig und für die Input variablen die den JS’s übergeben werden.

Die JS Berechnungen werden in der App Scriptable verarbeitet.

Frontend: Shortcuts
Mittelteil: JS (in Scriptable)
Datenbank: JSON (in Files gespeichert)

Ohne Dich lieber @marm, wäre ich gar nicht auf die Idee kommen, dass Shortcuts so viele Schnittstellen nach außen hat. Vielen Dank dafür.

Hier die fertige App:
Lesen: jeder ePub Reader
Hören im Hintergrund:  Musik App
Übersetzen: DeepL



iOS hat leider kein Splitt-Screen, deshalb hab ich es mit dynamischen Markierungen im ePub-Reader realisiert, so kann ich mich aufs lesen konzentrieren, ohne dauernd zum Audiobook wechseln zu müssen 🙂



Als Nächstes werde ich prüfen, wie ich meine App komplett in eine eigenständige iOS App übertragen kann. Nächste Challenge
„🎸“
+1
marm18.06.2322:33
Danke für das Feedback. Scriptable habe ich zwar installiert, aber noch nichts damit umgesetzt. Das Beispiel ermutigt mich, dass ich Scriptable auch ausprobiere. Nur mit solchen Zusatzprogrammen kann JS, Python usw. sowohl auf iOS wie auf MacOS genutzt werden. Zeige mal bitte das JS-Skript. Würde mich interessieren. Wenn es länger ist, gerne an meinen Posteingang.
0
Paperflow
Paperflow18.06.2322:39
Ich hab mehrere JavaScriptcodes erstellt hier eine Übersicht.
Und als Beispiel eine Datei mit Kommentaren
„🎸“
+1
Paperflow
Paperflow18.06.2322:54
In Shortcuts kannst du es dann mit dieser Aktion aufrufen.
"db" ist die Datenbank als JSON und wird an Scriptable übergeben. Am Ende erhält Du dann das erste Objekt (Dictionary) mit den keys für Album, Nr, Beschreibung, usw.

„🎸“
0
Paperflow
Paperflow18.06.2322:58
Die Datenbank sieht so aus:
„🎸“
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.