Laden...

Forenbeiträge von BerndFfm Ingesamt 3.825 Beiträge

20.11.2021 - 15:22 Uhr

Wenn Du die Artikel in einer ListView anzeigst kannst Du den ListViewItemSorter nehmen, der Anwender kann dann auf einen Spaltentitel klicken und die Liste wird danach sortiert.
So wie man es von allen Windows Programmen gewöhnt ist. Beim zweiten Klick auf die Spalte wird dann umgekehrt sortiert.

Sortieren von ListView mithilfe einer Spalte in C # - C#

Neue Artikel einfach am Ende einfügen und dann die Liste neu sortieren. Das ist einfacher als beim Einfügen den richtigen Platz zu suchen.

Wenn Du einen Sortieralgorithmus selber implementieren willst schau nach Bubble Sort. Das geht im Speichern recht fix.

Grüße Bernd

18.11.2021 - 13:21 Uhr

Das Stoppen der Spielfigur machst Du nicht in der Verarbeitung der Tasteneingaben, sondern in der Bewegung.

Es kann ja sein dass er sich 10 Mal nach rechts bewegen kann und beim 11. Mal an eine Wand stößt.

Grüße Bernd

15.11.2021 - 15:40 Uhr

CoderboyPB : Das gefällt mir supergut !

Ich mag C# auch lieber als XAML und habe den größten Teil des Layouts eh in C# programmiert.

Auch bin ich großer Fan vom Fluent Interface, benutze ich selber oft in eigenen Projekten.

Meine Einsatz App benutzt viele Bibliotheken die auf Xamarin.Forms basieren und lässt sich sicher nicht so einfach auf MAUI portieren.

Mein 2. App Projekt "Heimkino Steuerung" benutzt keine fremden Bibliotheken und das werde ich mal mit MAUI und den Community Toolkit Markup Extensions neu erstellen.

Grüße Bernd

13.11.2021 - 07:34 Uhr

Typisierte Datasets nimmt man eigentlich nicht mehr.

Entweder untypisierte und selber auf eine Klasse mappen oder ein ORM.

Ich kann ein Micro ORM wie Dapper empfehlen.

Grüße Bernd

08.11.2021 - 22:11 Uhr

"responsive at every moment"

Ein großes Versprechen. In VS2019 hab ich dauernd eine Sanduhr wo es nicht nötig wäre. Ich bin gespannt !

Schade dass es für .NET Maui keinen Designer gibt. Das wurde in den Kommentaren viel kritisiert.

Hoffentlich funktioniert der Hot Reload, bisher hat er mich immer nur blockiert.

Gespannt bin ich auch wie das VS 2022 auf meinem M1 Mac läuft (ist wohl noch nicht fertig und wird nachgeliefert).

Ich werde alles testen.

Grüße Bernd

07.11.2021 - 17:14 Uhr

Ich sehe keinen Nachteil darin aus einer Desktop App direkt auf die Datenbank zuzugreifen. Ist ja schon eine Art API das die Datenbank zur Verfügung stellt.

Solange der Traffic im lokalen Netzwerk bleibt.

Daten hältst Du am besten in einer richtigen Datenbank vor, da sind sie sicherer als in Access und das klappt auch in einem Netzwerk.

SQL Express ist immer noch eine gute Wahl.

Winforms ist schon eine alte Technik, wird aber immer noch fleißig benutzt. WPF oder Webanwendung sind moderner, ob es Vorteile bringt ist eine andere Frage.

Als Framework kann ich Dir ein ORM empfehlen, dass die Zugriffe auf die Datenbank typsicher für dich durchführt.

Grüße Bernd

05.11.2021 - 12:17 Uhr

Eleganter wäre es die Zahlen in einem Array oder in einer List<> zu speichern.


long[] numbers = new long[] { 1,2,3,4,5,6,7,8,9,10 };

for(int i = 0; i < numbers.Length; i++)
    for(int j = 0; j < numbers.Length; j++)
        if (zahl == numbers[i] * numbers[j]) MessageBox.Show(numbers[i].ToString() + " x " + numbers[j].ToString());

Möchtest Du eine Verschlüsselung mit private key knacken ?

Grüße Bernd

25.10.2021 - 12:40 Uhr

Ich habe das auch seit einigen Monaten.

Teilweise geht die Fehlerliste überhaupt nicht mehr auf. Da muss man mit "Suchen" das Wort "Error" in der Ausgabe suchen.

Nach Neustart vom VS wird es wieder angezeigt.

Ist bei allen meinen Projekten so (Winforms, Xamarin.Forms).

Ich hoffe das neue VS bringt da Besserungen.

Grüße Bernd

19.10.2021 - 11:28 Uhr

Funktioniert die Exe auf dem Entwicklerrechner ohne dass Visual Studio gestartet ist ?

Funktioniert die Exe auf einem anderen Windows 10 Rechner ?

Welches Framework wird verwendet ?

Ist das installiert ?

Gibt es das Verzeichnis auf dem Windows 7 Rechner ?

Ist "test" der Windows Benutzername ?

Funktioniert es wenn man die Exe als Administrator startet ?

Es fehlt eine Fehlerbehandlung wenn das Löschen nicht funktioniert wenn die Rechte fehlen oder eine Datei von einem anderen Programm in Benutzung ist.

Grüße Bernd

18.10.2021 - 21:27 Uhr

Inzwischen bin ich mit der App viel weiter gekommen.

Unter Android ist die Sicherheit beim Betrieb im Hintergrund sehr hoch, aber 100% geht nicht. Für die App kein Problem, denn die Einsatzleitung sieht sofort wenn der Hintergrundprozess nicht läuft und per Funkruf kann man die Einsatzkraft anweisen die App neu zu starten.

Unter iOS läuft sie absolut stabil im Hintergrund.

Mit der Signierung der iOS App habe ich ja lange gekämpft, und mittlerweile gewonnen. Die Signierung läuft nur auf dem Mac obwohl das anders angegeben ist.

Die App ist inzwischen von Apple für den App Store zertifiziert und kann mit der Apple Software TestFlight an die Beta-Tester verteilt werden. Man kann die Tester per Email einladen oder einen öffentlichen Download-Link erzeugen.

Die Verifizierung der App durch Apple dauert laut Forum 12 - 24 Stunden, früher hat es 7 bis 14 Tage gedauert ! Bei mir hat es 2 Tage gedauert da ich noch einige Fragen beantworten musste.

Grüße Bernd

14.10.2021 - 12:39 Uhr

Ich habe einen eigenen Dialog für den Versand von Rechnungen per Email.

Allerdings Winforms.

So als Idee wie sowas aussehen kann.

Der Texteditor ist ein HTML Editor, so dass man HTML Mails verschicken kann.

Grüße Bernd

12.10.2021 - 13:09 Uhr

Den Fehler hatte ich auch bei Kunden. Trotz Installation aller Datenbanktreiber.

Nachdem ich umgeschrieben habe von


if (dbprovider == Provider.MicrosoftSQLServer) factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
if (dbprovider == Provider.FirebirdSQLServer) factory = DbProviderFactories.GetFactory("FirebirdSql.Data.FirebirdClient");
conn = factory.CreateConnection();

nach


if (dbprovider == Provider.MySQL) conn = new MySqlConnection();
if (dbprovider == Provider.MariaDB) conn = new MySqlConnection();

klappt es nun auf allen Rechnern.

GetFactory() benutze ich nicht mehr. Geht auch ohne.

Grüße Bernd

24.09.2021 - 10:30 Uhr

Der Html Hilfe Compiler von Microsoft enthält eine Datei hh.exe, die kann mit der Option -decompile eine CHM Datei entpacken.

Es sind dann einzelne Html Seiten.

Kommandozeilenparameter : HTMLHelp Befehlszeile

Grüße Bernd

17.09.2021 - 16:12 Uhr

Kleiner Spaß ! Im ausführlichen Log des iPhones in Xcode habe ich gesehen dass der Dateiname nicht gestimmt hat, da hatte ich mich in Xcode vertippt.

Paket in Xcode signiert und Dateiname richtig geschrieben, jetzt geht es. Mit neuem Zertifikat und neuem Bereitstellungsprofil.

Jetzt gehts ins Training die App testen !

Danke für die Hilfe !

Grüße Bernd

17.09.2021 - 16:02 Uhr

Jetzt gehts, ich sag aber nicht woran es lag.

Grüße Bernd

17.09.2021 - 15:12 Uhr

Ich habe nur ein einziges Bereitstellungsprofil. Da sind alle Geräte eingetragen. Ich kann bis zu 100 iPhones und bis zu 100 iPads eintragen für den Beta Test.

Hab gerade bei Apple Developer angerufen. Die saßen bestimmt weit weg, Verständigung war schlecht.

Die sagen mir dass das Adhoc Deployment für ein Beta Test eigentlich keine offizielle Apple Methode wäre, man solle Testflight verwenden.

Ich bekomme Unterlagen wie das genau funktioniert.

Ich habe festgestellt dass in der plist Datei des adhoc Deployment einige Keys eingetragen sind. Vielleicht muss ich da einen Wert aktualisieren.

Grüße Bernd

17.09.2021 - 14:21 Uhr

Ich habe gemerkt dass ich ja bei Erstellung eines neuen Zertifikates auch ein neues Bereitstellungsprofil erstellen muss.

Leider bekomme ich jetzt beim Archivieren auf dem Mac den Fehler : "Es wurden Konflikte zwischen verschiedenen Versionen von "Svg.Skia" gefunden, die nicht aufgelöst werden konnte.
Obwohl auf dem Mac keine Änderung gemacht wurde außer neues Bereitstellungsprofil laden.

Grüße Bernd

17.09.2021 - 13:43 Uhr

Teilerfolg !

Ja, es dreht sich im Kreis.

Zuerst hatte ich die iOS App auf dem Windows Rechner ein Archiv erstellt und per Ad-hoc verteilt. Das geht aber immer nur einmal per Zertifikat. Das ist wohl seit Visual Studio 16.5 so weil der private Schlüssel nicht auf dem Windows Rechner gespeichert wird. Jedes Mal ein neues Zertifikat erstellt geht nicht weil man nur eine begrenzte Anzahl Zertifikate hat.

Dann habe ich das komplette Projekt auf den Mac kopiert und dort im Visual Studio ein Archiv erstellt und per Ad-hoc verteilt. Das ging leider auch nur einmal.

Der aktuelle Stand :
Die iOS App ließ sich weder auf dem Windows Rechner noch auf dem Mac kompilieren.
Es kam die Fehlermeldung 'Der iOS-Codesignaturschlüssel "Apple Distribution: Bernd Quambusch (818G3XCPH7)" wurde nicht im Schlüsselbund gefunden'
Und : "Private Key not found".

Bestehendes Zertifikat von der Apple Developer Website runterladen und installieren ging leider nicht.

Ich habe jetzt nach dieser Anleitung ein neues Zertifikat erstellt, diesmal aus Xcode auf dem Mac : distribution-certificate-private-key-not-installed

Jetzt kann ich sowohl auf dem Windows Rechner als auch auf dem Mac die App erstellen und auch ein Archiv erstellen. Ich kann sogar den privaten Schlüssel auf dem Mac exportieren und auf dem Windows Rechner importieren. Jetzt wird das Zertifikat unter Apple Accounts als gültig angezeigt.

Leider kann ich es beim ad-hoc Verteilen nicht auswählen, es wird immer das alte Profil geladen.

Auf dem Mac ging es nun im Visual Studio ein Archiv zu erstellen, per ad-hoc zu verteilen und eine IPA-Datei zu erstellen.

Ich teste die Datei jetzt mal und hoffe dass das nun immer so geht.

Update : Die erzeugte Datei lässt sich nicht auf einem iPhone installieren. Es kommt die Fehlermeldung "App kann nicht installiert werden".

Grüße Bernd

14.09.2021 - 22:42 Uhr

Die iOS App lässt sich leider immer noch nicht signieren.

Habe Zertifikat und Profil gelöscht und neu von developer.apple.com runtergeladen.

Nützt leider nichts.

Es kommt : Im Schlüsselbund wurde keine gültigen iOS Codesignaturschlüssel gefunden.

In der Schlüsselbundverwaltung erscheint das Zertifikat, es steht aber dabei "nicht vertrauenswürdig".

Die Anleitungen bei Microsoft funktionieren leider nicht, da sie die Zertifikate immer neu erstellen. Das kann ich aber nur 5 Mal machen, dann ist die maximale Anzahl erreicht.

Grüße Bernd

14.09.2021 - 21:41 Uhr

Danke für den Hinweis !

Unter Android / Verknüpfen (Linking) :

SDK-Assemblies : Erstellen gibt den obigen Fehler.
SDK-Assemblies und Benutzer Assemblies : App lässt sich erstellen, Absturz bei Aufruf der Karte (MapSUI, HttpGet),
Keine : App lässt sich erstellen, Alles läuft

Wie große die App wird ist mir egal. Die Handys haben ja genug Speicher.

Unter iOS bekomme ich leider den Fehler "codesign mit Code 1 beendet". Scheint ein Fehler bei der Signierung zu sein.
Ich sehe dass gerade dass beim Zertifikat "Nicht in keychain" angezeigt wird. Mal sehen wie ich das weg kriege.

Grüße Bernd

14.09.2021 - 11:59 Uhr

Danke für den Hinweis.

Da im Visual Studio aufm mac ein Fehler kam habe ich die nuget Pakete aktualisiert, MapSUI z.B. von 3.0.0 rc1 nach 3.0.0 rc2. Der Fehler kam immer noch.

Dann habe ich auf dem Windows Rechner auch alle nuget Pakete akualisiert, jetzt kam unter Android auch ein Fehler, der den ich oben geschrieben habe.

Zum Glück mache ich jede Stunde ein Voll-Backup des Projektes.

Mit deinen Tipps werde ich versuchen die Fehler zu beheben. Wenn das nicht geht geh ich zurück auf ein Projekt vom Vortag. Es ist immer einfach die paar Änderungen einzubauen.

Vielleicht ändere ich die Vorgehensweise dass ich nicht den gleichen Sourcecode für Windows und Mac benutze, sondern auf beiden Systemen getrennt entwickle.

Da muss ich dann Änderungen auf beiden Systemen vornehmen, wäre aber kein Problem.

Grüße Bernd

13.09.2021 - 20:25 Uhr

Zu früh gefreut.

Beim nächsten Update gab es wieder Fehlermeldungen auf dem mac, diesmal andere als vorher.

Android Version war in 5 Minuten erstellt.

Wieder 2 Tage an der iOS Version gebaut, jetzt kommt ein Versionsfehler in einem nuget Paket. Habe dann alle 4 nuget Pakete aktualisiert und nun geht gar nichts mehr :

Fehlermeldung:
Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
Fehler Mono.Linker.MarkException: Error processing method: 'System.Void XamarinForms.LocationService.Views.MapPage/<Button_Clicked_Menu_Layer>d__161MoveNext()' in assembly: 'XamarinForms.LocationService.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve System.Void Mapsui.Layers.LayerCollectionAdd(Mapsui.Layers.ILayer[])
bei Mono.Linker.Steps.MarkStep.HandleUnresolvedMethod(MethodReference reference)
bei Mono.Linker.Steps.MarkStep.MarkMethod(MethodReference reference)
bei Mono.Linker.Steps.MarkStep.MarkInstruction(Instruction instruction)
bei Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody body)
bei Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method)
bei Mono.Linker.Steps.MarkStep.ProcessQueue()
--- Ende der internen Ausnahmestapelüberwachung ---
bei Mono.Linker.Steps.MarkStep.ProcessQueue()
bei Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue()
bei Mono.Linker.Steps.MarkStep.Process()
bei Mono.Linker.Steps.MarkStep.Process(LinkContext context)
bei MonoDroid.Tuner.MonoDroidMarkStep.Process(LinkContext context)
bei Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
bei Mono.Linker.Pipeline.Process(LinkContext context)
bei MonoDroid.Tuner.Linker.Process(LinkerOptions options, ILogger logger, LinkContext& context)
bei Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res)
bei Xamarin.Android.Tasks.LinkAssemblies.RunTask()
bei Microsoft.Android.Build.Tasks.AndroidTask.Execute() in /Users/builder/azdo/_work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:Zeile 17. XamarinForms.LocationService.Android

Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
Fehler Mono.Linker.MarkException: Error processing method: 'System.Void XamarinForms.LocationService.Views.MapPage::.ctor()' in assembly: 'XamarinForms.LocationService.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve Mapsui.Layers.TileLayer Mapsui.Utilities.OpenStreetMap::CreateTileLayer(System.String)
bei Mono.Linker.Steps.MarkStep.HandleUnresolvedMethod(MethodReference reference)
bei Mono.Linker.Steps.MarkStep.MarkMethod(MethodReference reference)
bei Mono.Linker.Steps.MarkStep.MarkInstruction(Instruction instruction)
bei Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody body)
bei Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method)
bei Mono.Linker.Steps.MarkStep.ProcessQueue()
--- Ende der internen Ausnahmestapelüberwachung ---
bei Mono.Linker.Steps.MarkStep.ProcessQueue()
bei Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue()
bei Mono.Linker.Steps.MarkStep.Process()
bei Mono.Linker.Steps.MarkStep.Process(LinkContext context)
bei MonoDroid.Tuner.MonoDroidMarkStep.Process(LinkContext context)
bei Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
bei Mono.Linker.Pipeline.Process(LinkContext context)
bei MonoDroid.Tuner.Linker.Process(LinkerOptions options, ILogger logger, LinkContext& context)
bei Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res)
bei Xamarin.Android.Tasks.LinkAssemblies.RunTask()
bei Microsoft.Android.Build.Tasks.AndroidTask.Execute() in /Users/builder/azdo/_work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:Zeile 17. XamarinForms.LocationService.Android

Liegt wohl am Update der Mapsui Komponente. Nach Deinstallation und Installation der alten Version bleibt der Fehler leider.

Die Frage ist nun ob Xamarin Forms überhaupt geeignet ist um Apps für den Produktiv Betrieb zu erstellen.

Vielleicht wird es mit Visual Studio 2022 besser wenn NET.Maui kommt.

Grüße Bernd

08.09.2021 - 15:09 Uhr

Der Hinweis hat mir weitergeholfen : Ich habe das gesamte Projekt auf den mac mini kopiert und dort das Archiv erstellt und signiert. Im Visual Studio for mac.

Das lief auf Anhieb !

Der Windows Rechner bekommt seit Version 16.5 keinen private key mehr aus dem developer portal, ich bezweifele dass man da überhaupt eine App signieren kann. Hat wohl noch keiner hinbekommen.

Leider werden alle Bereitstellungsprofile angezeigt die ich je erstellt hatte, das sind mehr als 10. Obwohl ich die alten alle gelöscht habe. Es ist ein Geduldsspiel das richtige Profil auszusuchen. Sie heißen alle gleich und das Erstellungsdatum wird nicht angezeigt.

Grüße Bernd

04.09.2021 - 21:06 Uhr

Für mich der Top Shop für : Durchdachte Struktur, Stabilität, Möglichkeiten, Schnittstelle, Dokumentation, Support.

Da die Anforderungen immer individuell sind muss man sich das immer selber anschauen.

Für viele Anwendungen ist er sicher oversized.

WooCommerce kenne ich nicht, das hatte damals keine ausreichende API. Scheint aber inzwischen anders zu sein.

Grüße Bernd

02.09.2021 - 09:30 Uhr

Inzwischen habe ich einige Shopware Shops eingerichtet.

Für mich eines der besten Shopsysteme.

API geht über JSON.

Nachteile : API schlecht dokumentiert, Feldtypen können sich ändern (statische Klassen dann nicht möglich), Rechenfehler im Warenkorb, API hat verschiedene Formate für Import und Export, es gibt nicht für alle Tabellen eine API. Dazu ist die Medienverwaltung recht umständlich und bläst die Datenbank oft auf. Die PDF-Medien bekommen unleserliche Darteinamen.

Shopware ist wie ein Mercedes, wenig Extras aber stabil. Jedes Extra kostet Geld.

Man braucht einen schnellen Webserver mit SSD, sonst ist der Shop zu langsam.

Unser Testshop : Quasar-3 Web-Shop

Grüße Bernd

31.08.2021 - 08:57 Uhr

Danke für den Tipp. Werde ich testen.

Bei dem Link geht es zwar um die Veröffentlichung im Store, die Signatur wird aber die gleiche sein.

Grüße Bernd

22.08.2021 - 21:49 Uhr

Ich suche nun 3 Tage nach einer Lösung für den Fehler

"Die IPA-Datei für die Verteilung des Archivs ... konnte nicht erstellt werden.
/usr/bin/codesign wurde mit Code 1 beendet.
Fehler beim Codesignieren von ..."

Es gibt viele Leute die den Fehler auch haben, aber keine Lösung. Es gibt einige Workarounds, die funktioniere bei mir leider nicht.
Probiert habe ich : Mac neu starten. Neues Zertifikat von Apple installieren. Clean Solution. Lock/Unlock Keychain.

Grüße Bernd

22.08.2021 - 16:50 Uhr

T-Virus : Ja, ich bin sehr gespannt auf VS 2022. Vor allem 64 bit und Maui interessiert mich.

Ja, sorry, geht mehr um VS als um .NET.

Grüße Bernd

20.08.2021 - 23:24 Uhr

Ich wollte heute eine neue Version der App veröffentlichen.

Android war nach 5 Minuten fertig. iOS versuche ich nun 4 Stunden und gebe nun auf.

Die letzte Fehlermeldung : Die IPA-Datei für die Verteilung des Archivs ... konnte nicht erstellt werden.
/usr/bin/codedesign mit Code 1 beendet
Fehler beim Codesigniieren von ...

Ich werde mir überlegen ob ich in Zukunft noch für Apple entwickle.

Grüße Bernd

20.08.2021 - 21:43 Uhr

Ich benutze Visual Studio seit der Version 2003, also seit 18 Jahren. Ich hatte noch nie ein Problem mit der Performance der Applikation.

Optimieren muss man nur die Datenbankzugriffe. Der Rest war immer schnell. Ich baue sogar manchmal Verzögerungen ein damit man sieht das was passiert.

Anders ist es bei der Entwicklungsumgebung. Die wird immer langsamer.

Seit VS 2019 ist das ganz schlimm geworden. Hab mir extra einen neuen Rechner mit SSD Array aufgebaut, ist immer noch sehr langsam.

Es kommt oft die Meldung "Code Änderungen werden angewandt ...". Ich denke das hat mit dem geplanten Neucompilieren von Änderungen zu tun. Oder VS hängt einfach mehrere Minuten.

Ganz schlimm ist es beim Kompilieren für iOS : Das Verbinden mit einem Mac dauert ca. 5 Minuten, dabei ist alles gesperrt, man kann nichts eingeben. In 50% der Fälle klappt es nicht, man muss es wiederholen. Es gibt keine Meldung ob die Verbindung erfolgreich war. Nach 10 Minuten beendet sich die Verbindung zum Mac.

Ich denke dass ein schnellerer Rechner keinen Sinn macht, da wartet man dann 4 statt 5 Minuten.

Ich bezweifele dass die Entwicklung in die richtige Richtung geht.

Grüße Bernd

17.08.2021 - 09:01 Uhr

Jetzt hat es so geklappt : iPhone an den mac anschließen, dort VS starten, dann auf dem Windows Rechner in VS das iPhone als Remote Gerät starten.

Vorher hatte ich das aber immer anders gemacht.

Die Meldung heißt auf englisch übrigens : Can't create iOS Archive because Selected device doesn't support archiving.

Grüße Bernd

16.08.2021 - 22:02 Uhr

Nachdem ich einige Hürden bei Signierung und Provisionierung lösen konnte scheitere ich jetzt am Erstellen eines Archives.

iPhone 6s mit iOS 14.71 ist am Windows PC angeschlossen. App auf dem iPhone ist gelöscht.

Der Windows Rechner ist mit dem mac verbunden.

Dort starten ich im iOS Projekt auf dem Windows Rechner "Bereinigen" "Neu Erstellen" "Starten ohne Debuggen"

Ausgabegerät ist "iPhone 6s" in Release-Konfiguration.

Wenn ich dann wähle "Achivieren..." kommt folgende Fehlermeldung :

Fehler
Das ausgewählte Gerät unterstützt keine Archivierung.
Das ausgewählte iOS-Gerät wird zum Erstellen eines Archivs nicht unterstützt.

Es hat aber schon mal funktioniert.

Woran kann das liegen ?

Grüße Bernd

11.08.2021 - 09:02 Uhr

Hier verbinde ich mich mit der Datenbank und lese Werte in das DataSet :


conn.Open();
int anzahl = da.Fill(ds, "Kunde");

In 'anzahl' findest Du die Anzahl der geladenen Zeilen.

Findest Du in meinem Link oben.

Grüße Bernd

10.08.2021 - 20:40 Uhr

Du fügst 2 Zeilen in das DataSet im Speicher ein, nicht in die Datenbank.

Auf die Datenbank greifst Du überhaupt nicht zu.

Hier ein paar Beispiele wie man Daten einfügt und abruft : https://download.seven-c.de/files/DatenbankenHowTo.htm

Grüße Bernd

29.07.2021 - 09:06 Uhr

Es gibt Anwendungen wo eine variable Struktur in json serialisiert wird und dann in einer Datenbank gespeichert wird.

Grüße Bernd

20.07.2021 - 11:45 Uhr

Mit modalem Dialog geht das ganz kurz :


Button button1 = new Button();
button1.Text = "&Abbrechen";
....Add(button1);

dlgAbfrage dlg = new dlgAbfrage();
dlg.ShowDialog();

button1.Text = "&Schließen";

Wenn der Text vom Dialog abhängig ist :


DialogResult result = dlg.ShowDialog();
//oder
string auswahl = dlg.Auswahl;
if (...)

Das wird in dem Artikel "Kommunikation von 2 Forms" erklärt.

Wenn mehrere Buttons den gleichen Click Events aufrufen:


((Button)sender).Text = "&Schließen";

Grüße Bernd

16.07.2021 - 17:46 Uhr

Ich glaube es war eine schlechte Idee als erste Mobile App eine App zu wählen die im Hintergrund laufen soll.

Die App läuft auf Android und iOS manchmal stabil über mehrere Stunden im Hintergrund, manchmal bricht sie sofort ab wenn der Bildschirmschoner angeht.

Woran das liegt weiß ich nicht. Hat da jemand eine Idee ?

Weitere Hürden :

"Error archiving ..."
Xamarin Einstellungen Archives auf C:\Archives einstellen. Der Default Pfad ist länger als 255 Zeichen und erzeugt einen Fehler in Windows.

"iOS Lock Down Error. Mux Error."
iPhone neu starten, dann gehts.

"Error deleting /bin/obj/"
Pfad /bin/obj/ manuell löschen, dann gehts.

Ich glaube dass Xamarin Forms noch nicht so gut in Visual Studio integriert ist. Ich hoffe das wird besser mit .NET Maui.

Grüße Bernd

15.07.2021 - 10:26 Uhr

Die "Hürden" die ich hatte :

Zertifikat und Bereitstellungsprofil im Apple Developer Portal erstellt. Im Visual Studio kann man die runterladen. Leider laufen die dann nicht. Wenn man aus dem VS ein neues Zertifikat erstellt geht es, aber das geht nur 6 Mal nacheinander.

Der Fehler der angezeigt wird heißt "No Keychain".
Das Problem : Der private Schlüssel wird seit VS 16.5 nicht mehr automatisch auf den Windows Rechner übertragen.
Lösung : Zertifikate auf dem Mac runterladen und dort mit privatem Schlüssel speichern (*.p12). Auf dem Windows Rechner im VS importieren und dann geht es.

  1. Hürde : Auf Windows Rechner kam immer die Fehlermeldung "Visual Studio Essentials ... erfordert Kennwort". Ich hatte aber keines vergeben.
    Lösung : Den Eintrag "Visual Studio Essentials ..." im Schlüsselbund des Mac Rechners löschen.

  2. Hürde : Wenn man ein neues Zertifikat oder Profil erstellt bleiben die alten im VS bestehen, obwohl sie im Developer Portal gelöscht sind. So werden 5 Profile angezeigt mit gleichen Namen, aber nur eines ist richtig.
    Lösung : Die Zertifikate und Profile werden in Dateien in
    C:\Users..\AppData\Local\Xamarin\iOS\Provisioning\Certificates
    und
    C:\Users..\AppData\Local\Xamarin\iOS\Provisioning\Profiles
    abgelegt. Die Dateien in diesen Verzeichnissen einfach löschen.

Grüße Bernd

PS.: Alles ohne Gewähr ! Vor allem das Löschen von Sachen !

12.07.2021 - 10:39 Uhr

ich habe bisher die automatische Bereitstellung des Visual Studio benutzt um eine App für das iOS zu erzeugen.

Das war aber keine gute Idee weil das VS dann jedes Mal eine neues Zertifikat erstellt und die Zahl von 6 erlaubten Zertifikaten schnell voll ist.

Bei der manuellen Bereitstellung kann man alles selber kontrollieren was benutzt wird.

Vorher muss man aber noch die alten Zertifikate und Profile im Dateisystem löschen weil man sonst eine Liste von 10 gleichen Zertifikaten hat und nicht weiß welches überhaupt noch gültig ist.

Leider bekommt man bei der manuellen Bereitstellung die Fehlermeldung "Not in keychain". Man muss dann noch den privaten Schlüssel vom Mac Rechner auf den Windows Rechner kopieren und importieren. Das ist leider in keiner Doku erwähnt.

Benutzt hier noch jemand VS unter Windows um iOS Apps zu entwickeln ?

Lohnt es sich wenn ich hier Fragen dazu stellen oder auch Lösungen vorstelle ?

Grüße Bernd

09.07.2021 - 10:17 Uhr

Falls das .NET auf einem System nicht korrekte Werte zurückgibt würde ich die Zeichen nicht in die if Abfrage einbauen sondern eher eine eigene Methode schreiben :


if (Text.Contains(EnvironmentNewLine()))
    ...

public string EnvironmentNewLine()
{
    if (Environment.OS == "IBM Xenix") return "\n";      // nur ein Beispiel
    else return Environment.NewLine;
}


Wenn ich eine Abfrage nur einmal brauche und das dann auch noch so selbstbeschreibend ist speichere ich nicht in einer Zwischenvariablen.

Grüße Bernd

07.07.2021 - 14:56 Uhr

if (Text.Contains(Environment.NewLine)) ...

Grüße Bernd

30.06.2021 - 11:24 Uhr

Hallo Tommy,

die Namen der Controls zur Laufzeit zusammensetzen, was Du ursprünglich machen wolltest, ist oft keine gute Lösung. Zum einen kann der Compiler nicht gut optimieren, zum anderen können Laufzeitfehler auftreten die der Compiler nicht beim Übersetzen merken kann.

Die Übertragung der angelegten Controls in ein Array, wie oben von Th69 vorgeschlagen, finde ich auch die beste Lösung : Anlegen der Controls im Designer und trotzdem Zugriff über eine Schleife.

Ich schreibe nochmal wie das aussehen kann :


TextBox[] tb = new TextBox[] { textBox1, textBox2, textBox3 };
CheckBox[] cb = new CheckBox[] { checkBox1, checkBox2, checkBox3 };
for (int i = 0; i < cb.Length; i++) tb[i].Enabled = cb[i].Checked;

Kürzer geht es kaum.

Wenn jemand eine Checkbox wieder auf unchecked setzt soll dann das zugehörige Textfeld wieder disabled werden ? Das fehlt in deinem Code.

Grüße Bernd

30.06.2021 - 10:59 Uhr

WinSCP hat eine DLL die man einfach einbinden kann.

Das kann ALLES !

WinSCP .NET Assembly and COM Library :: WinSCP

Man muss dazu WinSCP nicht installieren, es reicht die WinSCP.exe ins Programmverzeichnis zu kopieren (das steht nicht in der Doku).

Wenn Du die Auswahl hast nimm SFTP und nicht FTP over SSL (FTPS), bei mir lief das viel besser.

Grüße Bernd

23.06.2021 - 15:13 Uhr

Man kann in Windows Forms die Attribute Dock und Anchor benutzen um Controls automatisch anzupassen.

Wenn das nicht genügt dann musst Du selber rechnen (OnSizeChanged).

Grüße Bernd

17.06.2021 - 09:32 Uhr

Hallo Torsten,

jetzt gibt es gleich Schimpfe dass die Exe auf einem Netzwerklaufwerk liegt 😉

Ich mache das aber genauso und läuft seit vielen Jahren in vielen Firmen gut. Ab Windows 7 wird eine geöffnete Datei von Windows gesperrt, vorher konnte man sie einfach austauschen.

Das Problem habe ich auch dass Leute über VPN oder so das Programm gestartet haben und man es so nicht mit einer neuen Version überschreiben kann.

Ich mache das so : ich kopiere das Programm mehrmals auf das Netzwerklaufwerk und mein Hauptprogramm startet immer das Neueste. So kann ich alle nicht gesperrten ersetzen und mit dem Neustart steht die aktuelle Programmversion zur Verfügung.

Programm beenden könnte man nur wenn parallel ein anderen Programm läuft was es beendet. Was ist aber wenn gerade jemand am Arbeiten ist ?

Grüße Bernd

10.06.2021 - 17:43 Uhr

Ich glaube ja immer noch dass Dir die Anzahl der angeklickten Checkboxen überhaupt nichts nützt.
Das was Du oben beschrieben hast würde ich so machen :


if (checkbox1.Checked) ExecLine(txtSourceFilePathApp1, txtFileNameApp1, txtExtApp1);
if (checkbox2.Checked) ExecLine(txtSourceFilePathApp2, txtFileNameApp2, txtExtApp2);
if (checkbox3.Checked) ExecLine(txtSourceFilePathApp3, txtFileNameApp3, txtExtApp3);
if (checkbox4.Checked) ExecLine(txtSourceFilePathApp4, txtFileNameApp4, txtExtApp4);
if (checkbox5.Checked) ExecLine(txtSourceFilePathApp5, txtFileNameApp5, txtExtApp5);
if (checkbox6.Checked) ExecLine(txtSourceFilePathApp6, txtFileNameApp6, txtExtApp6);
if (checkbox7.Checked) ExecLine(txtSourceFilePathApp7, txtFileNameApp7, txtExtApp7);
if (checkbox8.Checked) ExecLine(txtSourceFilePathApp8, txtFileNameApp8, txtExtApp8);
if (checkbox9.Checked) ExecLine(txtSourceFilePathApp9, txtFileNameApp9, txtExtApp9);
if (checkbox10.Checked) ExecLine(txtSourceFilePathApp10, txtFileNameApp10, txtExtApp10);

Wenn es unbedingt eine Schleife sein muss :


for (int i = 1; i < 11; i++)
    if (((CheckBox)this.Controls("checkbox1" + i.ToString()).)Checked)
        ExecLine(this.Controls("txtSourceFilePathApp" + i.ToString()), this.Controls("txtFileNameApp1" + i.ToString()), this.Controls("txtExtApp1" + i.ToString()));

oder


for (int i = 1; i < 11; i++) ExecLine(i);

Hier besteht die Gefahr dass wenn ein Controlname falsch geschrieben ist es erst zur Laufzeit einen Fehler gibt.

Ich bin immer für die einfache Lösung.

Grüße Bernd

09.06.2021 - 15:10 Uhr

PS: @BerndFfm, dein 2. Code paßt nicht zu der Anforderung.

Ich habe erst nach längerem Studium des Source Codes verstanden dass er die Checked Checkboxes durchgehen will um dann den Namen eines Controls zusammenzubasteln um dann einen Wert zuzuweisen, mit if abgefragt.

Deshalb würde ich die Schleife und das Zusammenbasteln des Control Namens einfach weglassen und nur das if verwenden :

if (cbFileNameApp.Checked) fileName = txtFileNameApp.Text;

oder wenn das benutzt werden soll zum Verschieben von Dateien noch einfacher :

if (cbFileNameApp.Checked) MoveFiles(sourceFilePath, targetPath, praegeCodeNrFolderName);

Grüße Bernd

PS.: ich verstehe aber noch nicht genau was der Code oben genau machen soll. Es wäre gut wenn der Autor mal beschreiben würde was er überhaupt machen will.

08.06.2021 - 22:45 Uhr

Ich verstehe auch nicht was da im Code genau gemacht werden soll.

Ich denke das kann man viel eleganter oder einfacher machen.


string sourceFilePath = ""; if (cbSourceFile.Checked) sourceFilePath = txtSourceFilePath.Text;
string fileName = "";       if (cbFileNameApp.Checked) fileName = txtFileNameApp.Text;
...

Das wären 30 Zeilen bei 30 Checkboxen.

Grüße Bernd

08.06.2021 - 20:57 Uhr

Ich würde das mit einem if machen :


CheckBox[] checkboxes = ...;
for (int i = 0; i < checkboxes.Length; i++)
    if (checkboxes[i].Checked)
    {
         ....
    }

Grüße Bernd