calliope-edu / calliope-mini-flash-app-iOS

Pair your Calliope mini with your iOS device to flash your scripts to it
MIT License
1 stars 5 forks source link

Testflight 2.1.5 (26) #13

Closed BloodyRain2k closed 2 years ago

BloodyRain2k commented 2 years ago

Dieser PR enthält jetzt alle Änderungen die den Build 2.1.5 (26) ergeben haben, bestehend aus folgenden Branches: https://github.com/BloodyRain2k/calliope-mini-flash-app-iOS/tree/auto_connect

https://github.com/BloodyRain2k/calliope-mini-flash-app-iOS/tree/background_flashing

https://github.com/BloodyRain2k/calliope-mini-flash-app-iOS/tree/online_help

https://github.com/BloodyRain2k/calliope-mini-flash-app-iOS/tree/roberta_xml

https://github.com/BloodyRain2k/calliope-mini-flash-app-iOS/tree/size_exceeded_fix

Da ich nicht weiss wie genau sich Pull Requests verhalten wäre es ratsam diesen hier zuerst zu nehmen, da sich die vorherigen dann vermutlich erübrigen da sie bereits in diesem enthalten sein sollten.

Eine ausführliche Dokumentation der Änderungen folgt in den nächsten Tagen.

TAKeanice commented 2 years ago

Toller Fortschitt an der App! Wegen deiner Frage zu Pull Requests, solange es sich um dieselben Commits handelt können die älteren Commits auch zuerst gemerged werden. Dadurch wird der Umfang des Neuen einfach um die schon gemergedten Commits gekürzt. Trotzdem spricht nichts dagegen einfach diesen PR zu nehmen und die anderen zu verwerfen.

BloodyRain2k commented 2 years ago

Auto Connect - https://github.com/BloodyRain2k/calliope-mini-flash-app-iOS/tree/auto_connect Wenn ein Muster eingegeben wird versucht die App bereits sich zu dem dazugehoerigen Mini zu verbinden, allerdings nur einmal.

Mit den folgenden Aenderungen verbindet sich die App nach dem auf einen Flash folgenden Neustart automatisch, da beim Verbindungsverlust ein Verbindungsversuch gestartet wird. Scheitert der Verbindungsaufbau wird ein verzoegerter Versuch gestartet.

Wenn die Verbindung zum Mini verloren wurde, wird in https://github.com/BloodyRain2k/calliope-mini-flash-app-iOS/blob/88a224528c40c7659029e7695fba1093baa12ebf/Calliope%20App/Bluetooth/CalliopeBLEDiscovery.swift#L54 zuerst .autoConnect auf false gesetzt, definiert in https://github.com/BloodyRain2k/calliope-mini-flash-app-iOS/blob/88a224528c40c7659029e7695fba1093baa12ebf/Calliope%20App/Bluetooth/CalliopeBLEDevice.swift#L82 welche im nachhinein schlecht benannt scheint...

Die einzige Aufgabe von .autoConnect ist es eine Verbindungsversuch Schleife in https://github.com/BloodyRain2k/calliope-mini-flash-app-iOS/blob/88a224528c40c7659029e7695fba1093baa12ebf/Calliope%20App/ViewsAndControllers/CollapsingConnectionView/ConnectionView/MatrixConnectionViewController.swift#L204 verhindern soll, da case .discoveredAll: nach Scheitern des Versuches wieder erreicht wird aber auch gleichzeitig der einzige Punkt im MatrixConnectionViewController ist der bei einem Verbindungsverlust erreicht wird.

.autoConnect ist lediglich dafuer da dass nur 1 Versuch gemacht wird nachdem die Verbindung zum Mini verloren wurde, danach wird ein Verbindungsversuch in die .DispatchQueue.main gepackt, siehe startDelayedDiscovery() weiter unten. Wenn erfolgreich eine Verbindung aufgebaut wurde, wird in https://github.com/BloodyRain2k/calliope-mini-flash-app-iOS/blob/88a224528c40c7659029e7695fba1093baa12ebf/Calliope%20App/Bluetooth/CalliopeBLEDiscovery.swift#L54 fuer alle gefundenen Minis .autoConnect wieder auf true gesetzt.

Die Funktion startDelayedDiscovery() in https://github.com/BloodyRain2k/calliope-mini-flash-app-iOS/blob/88a224528c40c7659029e7695fba1093baa12ebf/Calliope%20App/ViewsAndControllers/CollapsingConnectionView/ConnectionView/MatrixConnectionViewController.swift#L235 nutzt die Eigenschaft .delayedDiscovery um zu zeigen ob ein Versuch in der DispatchQueue gesetzt wurde.

Weiterhin wird der Verbindungsversuch nur ausgeloest wenn der Muster Dialog geschlossen ist, da ein aktiver Versuch die Eingabe fuer die Dauer des Versuchs blockiert, was eher laestig als hilfreich war. Sollte der Dialog offen sein wenn der Versuch stattfinden sollte, wird einfach ein neuer mit einer kurzen Verzoegerung gestartet.

Commits https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/72413ecfae8eb199045e3d340ac77c66860d5179 https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/328105e08c7ef66a32d16c4442bdec43870b3a4f https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/9f726f485d77564db9ee4b76ce0de4bf016983e9

BloodyRain2k commented 2 years ago

Roberta XML Export - https://github.com/BloodyRain2k/calliope-mini-flash-app-iOS/tree/roberta_xml Anpassungen damit die App ebenfalls die exportierten XML Dateien verarbeitet, sprich speichert, und zusaetzlich die die notwendig waren, damit MakeCode den Programmnamen aus dem Editor auslesen kann.

Es wird versucht die XMLs im Downloads Ordner zu speichern, aber es scheint so als ob der Zugriff auf diesen ausschliesslich auf Desktop-Geraeten erfragt werden kann, nicht auf den Mobil-Geraeten. Daher erfolgt ein Fallback beim Scheitern auf den Dokumente Order welcher einen per-App Ordner auf dem Geraet bereitstellt.

Leider ist mir beim Schreiben der Dokumentation ein potenzielles Problem aufgefallen. Sollte aus irgendwelchen Gruenden das Schreiben in den Dokumente Ordner ebenfalls scheitern, wird die App vermutlich in https://github.com/calliope-mini/calliope-mini-flash-app-iOS/blob/a13ea81d3797579e5e290d799a721172fc2d7c7d/Calliope%20App/ViewsAndControllers/EditorsAndPrograms/Editors/EditorViewController.swift#L210 in einer Schleife stecken bleiben. Je nach dem wie iOS sowas handhabt wird das entweder erkannt oder spaetestens "behoben" wenn der Arbeitsspeicher knapp und die App darum beendet wird. Eine Moeglichkeit diese Situation zu erreichen waere ein MakeCode Programmname der einen / enthaelt oder fuer das Dateisystem ungueltige Zeichen.

Commits https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/1b9cb5ded7bef67f689dbff895047d17eaa1c3cc https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/c9c80f639b88c5d660d1920c17a0ea0830937fb8 https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/9ed6cdb30268a7b05b759b47bfcc01e89f1a1430

BloodyRain2k commented 2 years ago

Online Hilfe - https://github.com/BloodyRain2k/calliope-mini-flash-app-iOS/tree/online_help Anpassungen damit eine Online Hilfe statt der Eingebauten angezeigt wird, sofern die Verbindung zum Internet und der Seite besteht. Definiert ist die Url in https://github.com/calliope-mini/calliope-mini-flash-app-iOS/blob/d7347d20a6e0228e25d78a002cecb6649a7bac07/Calliope%20App/ViewsAndControllers/HelpScreen/HelpContentViewController.swift#L28

Weiterhin wurden in diesem Branch alle Navigationsleisten in der App ausgeblended da diese als redundant eingestuft wurden. Sollten sie doch wieder verwendung finden koennen sie nach bedarf wieder eingeblendet werden.

Commits https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/d7347d20a6e0228e25d78a002cecb6649a7bac07 https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/dc4b392b96c861325d8ad38368c042c4c7c2039d https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/428a150b79b8a7b9f2413f972cdce0c375c4a02f

BloodyRain2k commented 2 years ago

Gemischtes Kein Crash mehr durch BLE Neustart des Mini https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/61d4011ba3c013245d117c61bb9d4ecb4675ad4e Kein Upload wenn keine Aenderungen vorhanden sind https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/752f7f88393235ecf482ad713846cb24f500e19a "Fix" fuer MakeCode 'Size Exceeded' wie in der Android App https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/6e439789ec28001cdcfbc382ce6c56492ced1740 Settings fuer automatisches Laden des letzten Muster bei App Neustart https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/48313f928ac265c27690e9e6feee49f23c32621e https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/b5c61f0cf99eda1eade48c1e1899e685d3939e45 https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/73aa53440625eead1586956a387baf47245c04a3 Flashen laeft weiter auch wenn aus der App gewechselt wurde https://github.com/calliope-mini/calliope-mini-flash-app-iOS/commit/ae1d359e15129fe8608992f9b3ea1ecfb871a263

Zusaetzliche Anmerkungen "Wann muessen Geraete entfernt (ignoriert) werden" Dies passiert wenn MakeCode den Mini in den "Whitelist" Modus gesetzt hat. In diesem will er sich wie jedes andere Bluetooth Geraet Koppeln. Wird nun ein Programm hochgeladen dass den Mini auf "Open" setzt, was derzeit die Standardeinstellung in MakeCode (go.calliope.cc/beta) ist, dann fuehrt dies zur Meldung dass das Geraet erst "ignoriert" werden muss. MakeCode (makecode.calliope.cc) hat meiner Erinnerung nach noch den Standard auf "Whitelist".

Programmspeichergroesse Den Tests mit dem 'Size Exceeded' Problem nach liegt der nutzbare Speicher des Mini im Speicherbereich von 0x18000 bis 0x3C000, was eine Groesse von 147'456 Byte oder 147,5 KiB ergibt. Bestaetigt wurde dies durch die Tatsache dass MakeCode (ohne den "Fix") ab ~146 KiB anfing den 'Size Exceeded' Fehler zu geben. Mit OpenRoberta ist dies kein Problem da das Groesste Programm waehrend der Tests nicht mal auf 100 KiB gekommen ist.