Startseite › Foren › Deutsches LiveCode-Forum › Updates – vom eigenen Webspace – installieren
Schlagwörter: Dictionary, Dokumentation, Update-Stack erstellen
- Dieses Thema hat 12 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 4 Jahren, 2 Monaten von Peter_M.
-
AutorBeiträge
-
-
Juli 27, 2020 um 12:08 Uhr #21906
Hallo Forum,
nachdem mein LiveCode-Projekt jetzt grundsätzlich funktioniert, habe ich das Problem, dass meine Patienten, die im Schnitt alles andere als technikaffin sind, mit der Installation des Programms unter Android in der Regel überfordert sind. Die Erstinstallation übernehme ich daher häufig in der Praxis.
Ich suche deswegen dringend eine Möglichkeit, wenigstens die Updates narrensicher, das heißt automatisch installieren zu können. Ich dachte zu diesem Zweck an einen Stack, der dem eigentlichen Programm vorgeschaltet ist und nur überprüft, ob ein Update vorhanden ist, dieses Update dann von meinem Webspace holt, selbstständig installiert und startet. Ist die Installation des Updates mit Livecode-Bordmitteln zu erledigen? Kann man das APK-File irgendwie ” launchen”/mit einem LiveCode-Skript installieren? Gibt es hierzu vielleicht schon eine “Lesson”? Bin für jede Anregung dankbar.Peter
-
Juli 28, 2020 um 12:13 Uhr #21914
Hallo,
bei meinen Projekten mache ich das so:
Ich habe einen einfachen Haupt-Stack mit 1 Card, der als eine Art Anwendungs-Menü fungiert. Von hier aus werden die einzelnen “Module” (= Arbeits-Stacks)gestartet. Dieser Haupt-Stack beinhaltet ansonsten nur die Kryptographie, und den Update-Mechanismus.
Dieser Stack alleine wird in eine Standalone (pro Plattform) kompiliert. Er ist sehr einfach gehalten, da er sich möglichst nicht ändern soll – denn um den zu ersetzen, braucht’s ja eine volle Programm-Installation!Meine Programmdaten liegen auf einem FTP-Server, mit vielen Verzeichnissen & unterschiedlichen Accounts.
Um zu verstehen, wie das funktioniert, beschreibe ich am Besten mal einen Programm-Start. Im PreOpenStack-Handler stelle ich (plattform-spezifisch) Fenstergröße, Vollbildmodus, Datenverzeichnis etc. ein. Dann kommt der OpenStack-Handler:
1.) Ich lese eine User-spezifische Schlüsseldatei ein (die mitgeliefert wird) und entschlüssele sie. Diese enthält einen Array mit FTP-Zugangsdaten und Benutzer-Namen & -Typ (“Chef”, “Büro”, “Fahrer” …).
2.) Mit o.a. Daten hole ich weitere Dateien vom FTP: “Preferences”, “Modulliste” und “Menü” (und entschlüssele sie ggf.).
3.) Die “Preferences” wird eingelesen, da sind alle Programm-Einstellungen drin (inkl. ein weiterer FTP-Account, EMail-Account, ein weiterer Schlüssel, Datenbank-Accounts usw.). Das wird als Array in eine custom Property des Stacks gepackt, zwecks leichtem Zugriff.
4.) Die “Menü”-Datei wird gelesen, und damit das Haupt-Menü des Haupt-Stacks erzeugt.
5.) Die “Modulliste” wird gelesen, und jetzt wird es interessant – da stehen alle Dateien (Stacks u.ä.) drin, die ggf. upgedatet werden müssen! Format:
– [Dateiname].[Ext] – “myStack.livecode”
– [Version] – wenn nicht leer, dann “the cStackVersion of stack [Dateiname].[Ext]”
– [CRC32] – CRC32-Prüfsumme
– [Unterverzeichnis lokal] – wohin gespeichert wird
– [Unterverzeichnis auf FTP] – von wo geladen wird
– [Modus] – “stack” -> speichern; “use” -> start using …; …
Pro Datei eine Zeile, tab-getrennt. Das wird jetzt abgearbeitet: Gibt es diese Datei, im richtigen Verzeichnis? Wenn ja, ist es die aktuelle Version? Wenn ja, hat sie die richtige Prüfsumme?
Wenn Nein (irgendwo in der Kette), dann wird sie frisch heruntergeladen & lokal überschrieben.
Und wenn der Modus “use” ist, wird sie mittels “start using” als Bibliothek in den Message-Pfad eingebunden.Das ist es eigentlich, ziemlich verkürzt (ich habe da mal alle Sicherheitsmechanismen ‘rausgelassen, und die Font-Behandlung, und die Möglichkeit, den Haupt-Stack mittels Back- oder Front-Skripten zu erweitern, und …).
Für das plattform-unabhängige Updaten sind zwei Sachen wichtig:
I. Das Datenverzeichnis, wohin das alles gespeichert wird – auf mobil ist das “specialFolderPath(“documents”)”, auf’m Desktop kommt es drauf an, wo das Programm dann liegt – im Programm-Verzeichnis des OS haben wir üblichweise keine Schreib-Rechte … Ich installiere nach [Benutzer]/[Dokumente], da habe ich keine Probleme, und kann dann “specialfolderpath(“resources”)” nehmen.
II. Die CRC32-Methode hat den Vorteil, daß der Benutzer immer mit einem frischen Stack startet. Das geht bei mir, da ich NIE Daten im Stack ablege (ich lösche sogar aktiv bei “closeStackRequest”). Das muss ggf. berücksichtigt werden.
Ich lasse das jetzt mal so stehen, es sollte Dir eine Idee geben. Sag Bescheid, wenn etwas unklar ist, dann können wir ins Detail gehen 😉
Viel Spaß!
-
Juli 28, 2020 um 23:58 Uhr #21918
Hallo Axwald,
zunächst einmal tausend Dank für die detaillierten Infos zu meinem Problem, insbesondere auch für deine Zeit, die du dafür verwenden musstest. Im Prinzip entspricht deine Vorgehensweise genau meinen Vorstellungen. Das Löschen von Daten anlässlich eines Updates ist für meine Appnicht erforderlich, ebenso nicht die Aufgliederung in verschiedene Usergruppen. Du hast es geahnt, dass mir natürlich nicht alles klar ist. Ich habe deiner Beschreibung entnommen, dass nach der Erstinstallation des Hauptstacks (=APK) die eigentliche User-App als .livecode-Datei installations- und updatemäßig zum
Einsatz kommt und nicht als Standalone. Ist folgende Codezeile
im Hauptstack ausreichend zur Installation einer User-App / eines Updates, vorausgesetzt die Pfade stimmen???
start using stack “UserApp.livecode”Viele Grüße
Peter -
Juli 29, 2020 um 12:52 Uhr #21921
Hallo Peter,
ein Stack ist eigentlich nur eine Text-Datei, die Beschreibung der Fenster & Bedienelemente, und die Eigenschaften & Skripte beinhaltet. Wenn Du daraus eine Stand-Alone machst, wird der Livecode-Programmcode hinzugefügt, und es wird eine Binär-Datei daraus.
Diese Stand-Alone kann dann auch andere Stacks ausführen. Und das mache ich mir zu nutze – ich nehme einen (relativ) einfachen Stack mit Steuerungsfunktionen, und kompiliere den. Dabei wird die Laufzeitumgebung (= Livecode-Programmcode) sowie notwendige LC-Bibliotheken hinzugefügt (revsecurity.dll, revdb.dll …), und das, was ich in den “Standalone Application Settings” unter “Copy Files” angegeben habe (hier meine initiale Key-Datei & die Fonts & Sounds).
Das Ergebnis ist für Windows ein Ordner mit einer .exe, die direkt startbar ist. Für Android kommt eine .apk ‘raus, die installiert werden kann. Für iGadgets kompiliere ich nicht, da mich niemand dafür bezahlt – alle mir bekannten iUser sind Kinder meiner Kunden, und die wollen TicToc & WhatsApp, und keine kostspielige Produktiv-Software 😉
Wenn diese StandAlone gestartet wird, holt sie sich die nötigen Arbeits-Stacks vom FTP (wenn sie nicht schon in der aktuellen Version lokal vorliegen), wie beschrieben. Diese Arbeits-Stacks sind ganz normale .rev- oder .livecode-Stacks.
Falls es sich um eine Bibliothek handelt, füge ich sie mit:
start using stack (gPathD & slash & myStackName)
in den Message Path ein – jetzt stehen mir die Befehle und Funktionen darin für alle Stacks zur Verfügung.Die Arbeits-Stacks werden aus dem “Programm-Menü” (= der Haupt-Stack) aufgerufen, mit:
go stack (pPathD & slash & myStackName) in new window
(gPathD ist der Pfad zum betr. Verzeichnis, in einer globalen Variable, in myStackName steht der Name des Stacks)Klarer?
Usergruppen verwende ich, um fallweise bestimmte Funktionen sperren zu können – z.B. können Vertreter Aufträge nur anlegen & speichern, aber nicht abschließen – das kann nur die Zentrale. Also ist der “Abschließen”-Button nur sichtbar, wenn die Gruppe “Zentrale” ist 🙂
Und Löschen – ich habe Daten in den Stacks, die ich nicht ungesichert irgendwo rumliegen lassen möchte. Die Stacks speichern zwar nicht, aber sicher ist sicher.
Viel Spaß!
-
Juli 29, 2020 um 15:52 Uhr #21925
Hallo Axwald,
Deine Antwort hat mir sehr geholfen. Mir ist dadurch alles sehr viel klarer geworden. Ich bin erst am Samstag wieder vor (Programmier-) Ort und kann erst dann beurteilen, ob ich alles richtig verstanden habe und erfolgreich umsetzen kann.
Da ich alle Befehle direkt in meiner User-App integriert habe und keine zusätzliche Bibliothek dazuladen muss, benötige ich vereinfacht gesagt im Hauptstack dann nur folgenden Code, um meine User-App automatisch upzudaten:
go Stack (Pfad +”/myUserStack.livecode”) in new window
Der Code: start using…. wird primär von mir nicht benötigt!?
Ist das richtig gedacht?
Dieses Vorgehen würde mir genialerweise auch das bisher für die Veröffentlichung jedes Updates nötige Kompilieren ersparen…..Viele Grüße
Peter -
Juli 30, 2020 um 13:16 Uhr #21937
Hallo Axwald,
ich habe versucht, Deine Codezeile
“go stack (pPathD & slash & myStackName) in new window”
im LiveCode-Dictionary und bei Google zu recherchieren, bin aber nicht fündig geworden. Wo kann ich (bisher nur laienhafter Programmieranfänger) solch profunde und offenbar für professionelle Software unverzichtbare Informationen und Kenntnisse erlangen?Gruß
Peter -
Juli 30, 2020 um 13:32 Uhr #21938
Hallo Peter,
Du machst es Dir etwas schwer. 🙂
Zunächst kann man “in new window” weglassen, weil das die “Werkseinstellung” ist.
Ein Stack mit -> go stack xyz
öffnet sich immer in einem neuen Fester, es sei denn, man skriptet das dementsprechend!Und nun zur Verdeutlichung ein kleines Beispiel:
... ## Wir haben nur hier Schreibrechte auf der mobilen Platform, ## d.h. Du musst den Stack auch in dieses Verzeichnis herunterladen! ## -> specialfolderpath("documents") ## Das wäre die etwas komplexere Syntax, die ich weiter unten einfach mal aufgedröselt habe: ## go stack (specialfolderpath("documents") & "/name_deines_geladenen_stacks.livecode") put specialfolderpath("documents") into derPfad ## -> gPathD ## Nun öffnen wir einfach Deinen Stack in dem Ordner: go stack (derPfad & "/name_deines_geladenen_stacks.livecode") ...
Siehste? Keine Raketenwissenschaft. 🙂
Gruß
Klaus
-
Juli 30, 2020 um 16:37 Uhr #21940
Hallo Klaus,
danke für deine Erläuterungen! Ich hatte mich nur gewundert, dass diese Syntax im Livecode-Dictionary nicht zu finden war. Meine Frage: habe ich, wenn ich mit einem kompilierten Stack (=APK)
einen weiteren Stack im livecode-Format starte, dasselbe Ergebnis, als würde ich diesen Stack kompilieren und dann starten. Läuft der aufrufende Stack dann im Hintergrund weiter oder muss man ihn schließen?LG
Peter -
Juli 30, 2020 um 17:57 Uhr #21941
Hi Peter,
Ich hatte mich nur gewundert, dass diese Syntax im Livecode-Dictionary nicht zu finden war.
und welchen Teil genau hattest Du nicht verstanden?
Im Dictionary unter “go” steht das aber drin mit “… in new window”Meine Frage: habe ich, wenn ich mit einem kompilierten Stack (=APK) einen weiteren Stack im livecode-Format starte, dasselbe Ergebnis, als würde ich diesen Stack kompilieren und dann starten.
Ja.
Läuft der aufrufende Stack dann im Hintergrund weiter oder muss man ihn schließen?
Es reicht, wenn Du einfach zum anderen Stack gehst (go stack…)
Ist Dir das Prinzip der “Splashscreen” Herangehensweise nun klar?
Also quasi nur einen Platzhalter als Runtinme erstellen?Gruß
Klaus
-
Juli 30, 2020 um 19:36 Uhr #21943
Du darfst mich auch gerne privat kontaktieren, falls Du Hilfe benötigst oder nicht weiterkommst!
-> klaus AT major-k.de -
Juli 31, 2020 um 01:36 Uhr #21952
Hallo Klaus,
vielen Dank für dein Angebot. Falls ich trotz eurer umfassenden Infos noch Umsetzungsprobleme haben sollte, komme ich gerne darauf zurück.
Um meine Nachfragen zu erhellen: ich bin derzeit noch im Urlaub und habe lediglich mein Android-Handy dabei, kann also derzeit nicht livecoden. Offensichtlich ist das (Android-Version des Livecode-Dictionary an dieser Stelle unvollständig!) auch der Grund dafür, dass ich den go stack – Befehl nicht finden kann…..Viele Grüsse
Peter -
Juli 31, 2020 um 11:54 Uhr #21956
Hehe,
das Dictionary der neueren LC-Versionen ist, hmmm, “gewöhnungsbedürftig” 😉
Die OnLine-Version davon ist hier.Es gibt eine Alternative: TinyDictionary.
Ich selber suche meist im Browser:
Livecode [Suchbegriff]
bringt meist das passende Ergebnis. Ansonsten – Max’ Wiki ist oft ausführlicher als die eigentliche Dokumentation.Erholsamen Urlaub!
-
Juli 31, 2020 um 13:56 Uhr #21962
Hi Axwald,
vielen Dank für die Links. Das hilft mir sehr gut weiter. Ich habe immer in einer Version, die ich aus dem Google Play Store heruntergeladen habe, nachgelesen. Dort gab es lediglich eine Info über go … in widget 🙁Gruß
Peter
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.