{"id":141,"date":"2021-04-07T07:32:27","date_gmt":"2021-04-07T07:32:27","guid":{"rendered":"http:\/\/erdbeerbeet.com\/?p=141"},"modified":"2021-09-06T13:43:48","modified_gmt":"2021-09-06T13:43:48","slug":"meine-flutter-fahrt-app-updates","status":"publish","type":"post","link":"https:\/\/erdbeerbeet.com\/de\/meine-flutter-fahrt-app-updates","title":{"rendered":"Meine Flutter-Fahrt &#8211; App-Updates"},"content":{"rendered":"\n<p id=\"block-ec00af11-b9ec-4a8f-8def-7ed0c4a9aa15\">Seine App endlich in einem Store zu ver\u00f6ffentlichen ist ein gro\u00dfer Schritt. Aber noch wichtiger sind tats\u00e4chlich regelm\u00e4\u00dfige Updates. Ich bin bem\u00fcht nicht zu vergessen, wie genau ich das anstelle, immerhin gibt es auch noch verschiedene Plattformen zu ber\u00fccksichtigen, wenn das also kein Grund f\u00fcr diesen Beitrag ist, dann wei\u00df ich auch nicht.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"block-e1b51952-10f1-4e21-8b0b-000b86520d5b\">Das Problem<\/h2>\n\n\n\n<p id=\"block-829e059c-1333-467d-b52a-8f61b2ebaa3d\">Besonders ein Framework wie Flutter bekommt im Monat mehrere Updates. Ebenso genutzte Plugins und Dependencies. Das allein sollte Grund genug sein f\u00fcr ein monatliches Update. Au\u00dferdem hab ich mal gelesen, dass sich das positiv auf die Positionierung im Store auswirkt&#8230;<\/p>\n\n\n\n<p id=\"block-71ea1fff-ead2-4d61-9ec4-20aec65f4b4f\">Jetzt gibt es den Apple-Store, Play-Store, eine gehostete Web-App und bald noch Desktop-Apps. Ich kann nicht die einzige sein, die regelm\u00e4\u00dfig vor ihrer Entwicklungsumgebung sitzt und sich denkt &#8220;verdammt, ich hab das erst letzten Monat gemacht, welchen Knopf muss ich nochmal dr\u00fccken&#8230;&#8221;<\/p>\n\n\n\n<p id=\"block-376ae488-3b3d-4b5b-ba36-1944b193419e\">Zu aller erst muss die zu ver\u00f6ffentliche Version gepr\u00fcft werden. Mit Emulator, Ger\u00e4ten, im Browser, auf dem Desktop. Und das nur erg\u00e4nzend zu Tests und Versions-Management.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"block-2f214f07-fe31-4499-813a-c8fe13b6d8c5\">Play-Store Update<\/h2>\n\n\n\n<p id=\"block-dd1d5b1a-4224-41d5-9129-96025fe0f580\">Vor dem Erstellen einer neuen Version muss der Versionsname und Versionscode der aktuellen App abgeglichen werden, um Komplikationen zu vermeiden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"block-9a8f1c89-e47c-42e3-8dca-b969744f7d13\">Signed Bundle bauen<\/h3>\n\n\n\n<p id=\"block-baebcb29-bc6d-49bd-8dea-700470ffc996\">Der Google-Play-Store ben\u00f6tigt eine apk-Datei oder ein App-Bundle, das in das Release eingef\u00fcgt wird. Um dies zu erhalten muss man sein Projekt zun\u00e4chst einmal in <strong>Android Studio<\/strong> \u00f6ffnen (um genau zu sein das Android-Verzeichnis des Projekts).<\/p>\n\n\n\n<p id=\"block-5cd06826-0160-4250-902d-1c472978d7df\">Wenn irgendwo Test-IDs genutzt werden, z.B. f\u00fcr Werbung, immer daran denken, diese vorher zu ersetzen.<\/p>\n\n\n\n<p id=\"block-fe415d81-3d7f-4468-b1c8-7d315438b7e2\">Die Datei <strong>local.properties<\/strong> \u00f6ffnen, um die Release-Informationen anzupassen.<\/p>\n\n\n\n<pre id=\"block-dc67bebb-07fa-43e0-80db-b3b763c72665\" class=\"wp-block-code\"><code>flutter.buildMode=release<br>flutter.versionName=2.0.2<br>flutter.sdk=\/Library\/flutter<br>sdk.dir=\/Users\/erdbaerchen\/Library\/Android\/sdk<br>flutter.versionCode=42<\/code><\/pre>\n\n\n\n<p id=\"block-93ee0e04-f3f9-4281-b4ae-8f116c741ec5\">Der Versionscode muss h\u00f6her sein als jeder der aktuell ver\u00f6ffentlichten App.<\/p>\n\n\n\n<p id=\"block-9cb70028-2c06-4d90-a8c5-f9f307193e2d\">Um die Build-Datei zu generieren <strong>Build &gt; Generate Signed Bundle \/ APK<\/strong>. Das dauert ein bisschen, danach kann der <strong>locate<\/strong>-Link im Event-Log genutzt werden, um den Ordner mit der neuen App-Datei direkt zu \u00f6ffnen.<\/p>\n\n\n\n<figure class=\"wp-block-image wp-duotone-duotone-2\" id=\"block-cd1d8ebe-041b-466a-8aa7-606bcad53548\"><img decoding=\"async\" src=\"http:\/\/erdbeerbeet.com\/wp-content\/uploads\/2021\/04\/Bildschirmfoto-2021-03-30-um-22.42.11.png\" alt=\"This image has an empty alt attribute; its file name is Bildschirmfoto-2021-03-30-um-22.42.11.png\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"block-270ff243-e504-428a-bea8-e8940c182e4c\">Neues Release erstellen<\/h3>\n\n\n\n<p id=\"block-0eb513da-16bc-454d-8af4-3a702f40fe14\">Je nachdem was f\u00fcr eine Art Track ver\u00f6ffentlich werden soll kann &#8220;Produktion&#8221;, &#8220;Offener Test&#8221; (Beta) oder &#8220;Geschlossener Test&#8221; ausgew\u00e4hlt werden. Das neue Releasee wird mit dem gro\u00dfen, blauen Button oben rechts erstellt.<\/p>\n\n\n\n<p id=\"block-e7a32277-6c2c-46e5-87a3-a27561259d80\"><strong>App Bundle oder APKs<\/strong> hochladen, am einfachsten per Drag-and-Drop aus dem im letzten Schritt ge\u00f6ffneten Ordner. Die Datei wird hochgeladen und daraufhin als neuer Build-Eintrag unterhalb des Feldes angezeigt. Der <strong>Release-Name<\/strong> wird automatisch aus der Datei gezogen. Dann sollten noch <strong>Release-Notes<\/strong> eingepflegt werden um zu zeigen, welche \u00c4nderungen diese neue Version mit sich bringt. Diese werden auch sp\u00e4ter im Store angezeigt.<\/p>\n\n\n\n<p id=\"block-9b1b7cf2-0ab2-4da7-b1b4-e556ddf35ce8\">Jetzt <strong>Speichern<\/strong>, <strong>\u00dcberpr\u00fcfen<\/strong> und <strong>Ver\u00f6ffentlichen<\/strong>, um die neue App-Version auf den Weg zu schicken. Abh\u00e4ngig von der App-Gr\u00f6\u00dfe kann das eine Stunde oder l\u00e4nger dauern.<\/p>\n\n\n\n<figure class=\"wp-block-image wp-duotone-duotone-2\" id=\"block-9f24d8b5-a1a2-4891-bb9d-98a664f5597b\"><img decoding=\"async\" src=\"http:\/\/erdbeerbeet.com\/wp-content\/uploads\/2021\/04\/Bildschirmfoto-2021-04-01-um-21.14.56-1024x672.png\" alt=\"This image has an empty alt attribute; its file name is Bildschirmfoto-2021-04-01-um-21.14.56-1024x672.png\"\/><\/figure>\n\n\n\n<p id=\"block-b8b77ff9-09a0-4f3f-8aef-5625657007e7\">Sobald das Update im Store verf\u00fcgbar ist wird dies in der <strong>Releases<\/strong>-Liste angezeigt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"block-2c2a855d-79a0-4b38-a0ba-ac035751dd7d\">App-Store Update<\/h2>\n\n\n\n<p id=\"block-31568bee-dfcd-4888-b0f6-b95ce714f0bb\">Der erste Schritt wird in Xcode durchgef\u00fchrt. Wieder gilt es Build- und Versions-Nummer zu pr\u00fcfen.<\/p>\n\n\n\n<p id=\"block-89507672-4410-4e2a-9133-20ca61533a0b\">Wenn irgendwo Test-IDs genutzt werden, z.B. f\u00fcr Werbung, immer daran denken, diese vorher zu ersetzen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"block-84149ae5-cbf0-4a46-b7cc-fc2c9096c42d\">Archiv bauen<\/h3>\n\n\n\n<figure class=\"wp-block-image wp-duotone-duotone-2\" id=\"block-2719ac65-6e58-409c-99f3-9f04be320216\"><img decoding=\"async\" src=\"http:\/\/erdbeerbeet.com\/wp-content\/uploads\/2021\/04\/Bildschirmfoto-2021-04-06-um-22.13.02-1024x480.png\" alt=\"This image has an empty alt attribute; its file name is Bildschirmfoto-2021-04-06-um-22.13.02-1024x480.png\"\/><\/figure>\n\n\n\n<p id=\"block-b8898e76-bacf-41db-84b0-665931e06c8d\">Um die richtigen Dateien zu nutzen, den <strong>Runner<\/strong> des Projects ausw\u00e4hlen und <strong>Any iOS Device<\/strong> als Build-Ziel ausw\u00e4hlen. Im <strong>General<\/strong>-Reiter kann noch einmal \u00fcberpr\u00fcft werden, dass Version und Build-Nummer h\u00f6her sind als die der aktiven Version im App-Store.<\/p>\n\n\n\n<p id=\"block-866ea78c-5ae5-4c2c-9639-0a0cc449a5b2\"><strong>Product &gt; Archive<\/strong> baut ein neues Archiv. Wurde der Build erfolgreich abgeschlossen \u00f6ffnet sich ein Fenster mit einer Liste der Archive. Eine weitere Chance, um Build- und Versionsnummer zu \u00fcberpr\u00fcfen. <strong>Distribute App<\/strong> klicken, um fortzufahren. Es folgt ein Wizard, nach dem das Archiv bereit ist f\u00fcr den Upload. Das dauert eine Weile&#8230;<\/p>\n\n\n\n<figure class=\"wp-block-image wp-duotone-duotone-2\" id=\"block-b8afaaaa-1c6f-4cac-946b-81067c4efc47\"><img decoding=\"async\" src=\"http:\/\/erdbeerbeet.com\/wp-content\/uploads\/2021\/04\/Bildschirmfoto-2021-04-06-um-22.22.41-1024x511.png\" alt=\"This image has an empty alt attribute; its file name is Bildschirmfoto-2021-04-06-um-22.22.41-1024x511.png\"\/><\/figure>\n\n\n\n<p id=\"block-f5d254f2-a4c6-4340-8846-78d79cc04def\">Entweder gibt es einen Fehler, oder eine h\u00fcbsche Zusammenfassung der App, die man gerade hochladen m\u00f6chte. <strong>Upload<\/strong> anklicken. Und warten.<br>Nachdem die Meldung &#8220;successfully uploaded&#8221; angezeigt wird, <strong>Done<\/strong> klicken und weiter zum n\u00e4chsten Schritt.<\/p>\n\n\n\n<p id=\"block-9f50b463-1445-4f0a-bbec-992a8731238b\">Xcode sendet den neuen Build direkt zum App-Store. Aber das kann einige Minuten Dauern. In der Zwischenzeit kann schon einmal das n\u00e4chste Release vorbereitet werden.<\/p>\n\n\n\n<p id=\"block-fab88893-9b6c-407a-9699-a94d23a93bd1\">Es ist gut m\u00f6glich, dass man mehrere E-Mails erh\u00e4lt, die auf Verbesserungen hinweisen oder Fehler aufzeigen, die eine Ablehnung der App bedeuten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"block-01a7f00c-703a-40c5-abfa-04381c4b33e6\">Neuen Release erstellen<\/h3>\n\n\n\n<figure class=\"wp-block-image wp-duotone-duotone-2\" id=\"block-f60db004-9a5c-40a6-96dc-28b578e3e493\"><img decoding=\"async\" src=\"http:\/\/erdbeerbeet.com\/wp-content\/uploads\/2021\/04\/Bildschirmfoto-2021-04-06-um-22.14.41.png\" alt=\"This image has an empty alt attribute; its file name is Bildschirmfoto-2021-04-06-um-22.14.41.png\"\/><\/figure>\n\n\n\n<p id=\"block-5e16e89a-4537-410b-9050-cf38a2ba08de\"><strong>App Store Connect<\/strong> im Browser \u00f6ffnen und zur App navigieren. Unterhalb des App-Titels auf + klicken um einen neuen Release anzulegen.<\/p>\n\n\n\n<p id=\"block-0c87f53f-2815-4294-a2fb-34947eaee94f\">Release-Informationen einpflegen. Um den frisch hochgeladenen Build einzuf\u00fcgen muss abgewartet werden, bis er best\u00e4tigt wurde.<br>Sobald eine E-Mail kommt die enth\u00e4lt &#8220;<strong>has completed processing<\/strong>&#8220;, kann der Build von App Store Connect ausgew\u00e4hlt werden.<\/p>\n\n\n\n<figure class=\"wp-block-image wp-duotone-duotone-2\" id=\"block-82e63ced-8962-41fd-8fc0-816d6885d639\"><img decoding=\"async\" src=\"http:\/\/erdbeerbeet.com\/wp-content\/uploads\/2021\/04\/Bildschirmfoto-2021-04-06-um-22.35.34-1024x259.png\" alt=\"This image has an empty alt attribute; its file name is Bildschirmfoto-2021-04-06-um-22.35.34-1024x259.png\"\/><\/figure>\n\n\n\n<p id=\"block-e252c8b7-ba91-485f-98ea-1ea20862db4d\">Build ausw\u00e4hlen, <strong>speichern<\/strong> und &#8220;<strong>Enter for processing<\/strong>&#8221; ausw\u00e4hlen. Unterhalb des App-Titels wird der Zustand der Releases angezeigt. Au\u00dferdem kommt eine E-Mail die mitteilt, dass die App verarbeitet wird: <strong>Waiting for Review<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image wp-duotone-duotone-2\" id=\"block-5d65cc9f-9fb1-4ca9-94c1-a642a55d2a31\"><img decoding=\"async\" src=\"http:\/\/erdbeerbeet.com\/wp-content\/uploads\/2021\/04\/Bildschirmfoto-2021-04-06-um-22.37.15-1024x281.png\" alt=\"This image has an empty alt attribute; its file name is Bildschirmfoto-2021-04-06-um-22.37.15-1024x281.png\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"block-27b75818-8c4b-4257-b603-edb2ccc77c4f\">Warten<\/h3>\n\n\n\n<figure class=\"wp-block-image wp-duotone-duotone-2\" id=\"block-b3efa7df-87a1-45c2-ba16-3942d9f8da68\"><img decoding=\"async\" src=\"http:\/\/erdbeerbeet.com\/wp-content\/uploads\/2021\/03\/Bildschirmfoto-2021-03-09-um-06.53.27-1024x269.png\" alt=\"This image has an empty alt attribute; its file name is Bildschirmfoto-2021-03-09-um-06.53.27-1024x269.png\"\/><\/figure>\n\n\n\n<p id=\"block-3aa14d45-a9f0-40d5-bd0c-d891578036c4\">Es kommen ganze 5 E-Mails im Verlauf des Ver\u00f6ffentlichungs-Prozesses an.<\/p>\n\n\n\n<p id=\"block-a9dc3fa8-f16d-4792-be5c-1400ee78d3b0\">Diejenige welche enth\u00e4lt, dass die App &#8220;Ready for Sale&#8221; ist, ist vorerst die letzte. Jetzt k\u00f6nnen die Benutzer ihre Apps mit der neuen Version updaten.<br>Meiner Erfahrung nach dauert dieser Schritt mindestens einen halben Tag.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"block-957291a8-b2b5-4e90-bf58-6b2432029b48\">Web Update<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"block-0bb32878-6040-468d-9498-64e4f8bc64d1\">Web-Dateien erstellen<\/h3>\n\n\n\n<p id=\"block-d8895197-8b0d-4bfb-8257-0d7000ad458b\">Im Terminal der IDE <code>flutter build web<\/code> ausf\u00fchren. Dies erstellt die Build-Dateien im \/web Ordner des Projekts.<\/p>\n\n\n\n<figure class=\"wp-block-image wp-duotone-duotone-2\" id=\"block-19959949-25dc-489f-bc9b-70061911ae7c\"><img decoding=\"async\" src=\"http:\/\/erdbeerbeet.com\/wp-content\/uploads\/2021\/04\/Bildschirmfoto-2021-04-01-um-21.46.54-1024x758.png\" alt=\"This image has an empty alt attribute; its file name is Bildschirmfoto-2021-04-01-um-21.46.54-1024x758.png\"\/><\/figure>\n\n\n\n<p id=\"block-4047ff94-3273-4ed5-ba0d-2d9055b1693d\">Mit dem FTP-Client der Wahl eine Verbindung zum Web-Hosting herstellen. Die neuen Dateien hochladen und im Browser \u00fcberpr\u00fcfen, ob alles geklappt hat.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is for me to remember how to update my app for all the flutter platforms&#8230; and for those who are interested.<\/p>\n","protected":false},"author":1,"featured_media":384,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[48,13,12],"tags":[16,14],"class_list":["post-141","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-companero","category-flutter","category-programming","tag-app","tag-flutter"],"translation":{"provider":"WPGlobus","version":"3.0.0","language":"de","enabled_languages":["en","de"],"languages":{"en":{"title":true,"content":true,"excerpt":true},"de":{"title":true,"content":true,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/posts\/141","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/comments?post=141"}],"version-history":[{"count":12,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/posts\/141\/revisions"}],"predecessor-version":[{"id":392,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/posts\/141\/revisions\/392"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/media\/384"}],"wp:attachment":[{"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/media?parent=141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/categories?post=141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/tags?post=141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}