Zugriffsprobleme TextInputStream.Open

Gestern hatte ich mal wieder etwas Zeit und stoße sofort auf ein Problem in einer uralten Routine, die seit Jahren problemfrei läuft.
Hier werden aus eine Preferences-Datei lediglich die vom Programm gesicherten Werte ausgelesen um die Einstellungen des Anwenders wieder einzustellen.
Üblicherweise liegt die Datei im Preferences-Ordner. Da funktioniert dann auch alles problemfrei. Aus “alten Tagen”, als ich das Programm inclusive aller erforderlichen Anwenderdaten auf einem USB-Stick auf wechselnden Rechnern genutzt habe, darf diese Preferences-Datei auch im selben Ordner wie die Anwendungsdatei liegen und wird dann bevorzugt genutzt. Genau das mache ich mit der Debug-Version. Im Entwicklungsordner ist für Testzwecke auch immer eine solche Preferences-Datei.
Genau die kann jedoch nicht mehr genutzt werden.
Hier mal der wesentliche Code:

dim t as TextInputStream
//f wird entweder im Programmverzeichnis gefunden oder im Preferencesordner
if f<>nil and f.exists then
t=TextInputStream.Open(f)//hier knallt es seit gestern, wenn die Datei im Verzeichnis des Programms liegt
...

An der Preferences-Datei selbst liegt es offenbar nicht. Nutze ich die fertig kompilierte App im selben Verzeichnis wie die Debug-Variante, wird die Preferences-Datei aus dem Verzeichnis problemfrei genutzt.

Ebenfalls komisch:
In den Einstellungen kann der Anwender diverse Pfade selbst vorgeben (Ordner für Bilder, für Export, für Ausgabevorlagen, für die Datendateien, einen Backupordner, etc.). Hier wird beim Schließen der Einstellung geprüft ob auf die Pfade zugegriffen werden kann:

elseif f.IsWriteable=false then
  Hinweis EinstellungenPfadeGEDCOM+EndOfLine+KeineZugriffsrechte

Auch hier gibt es Zugriffsprobleme auf Ordner die bisher keine Probleme machten:
/Users/stefan/Documents/[Programmname]
/Users/stefan/Desktop
/Users/stefan/eigene Projekte/[Programmname]/FiktivBilder

Diese Probleme treten nur auf, wenn ich die Anwendung in Xojo im Debug-Modus laufen lasse. Starte ich die fertig kompilierte Anwendung ist alles problemfrei.

Vor ein paar Tagen kam das Update auf 13.6.1, welches ich schon in Verdacht hatte. Wie ich gerade feststelle, habe ich das hier aber noch gar nicht installiert.
Ich habe keine Idee, wieso das Problem bei mir so plötzlich ohne (mir erkennbare) Änderung auftritt.


So. 13.6.1 installiert (Incl. Neustart):
Keine Änderung.
Ich habe weiterhin keinen Zugriff auf diverse Dateien, wenn ich im Debug-Modus arbeite. :frowning:

Hat irgendwer eine Idee, was ich hier verstellt haben könnte oder was der Grund für das Verhalten ist?

Das sind die SIcherheitsmassnahmen von macOS - einfach so auf Ordner zugreifen geht nicht mehr…
Debugbuilds werden von aktuellen Xojo Versionen ad-hoc signiert, da kann es sein, das das nicht ausreicht, um den gewünschten Zugriff zu bekommen. Ggfls. in den Build Einstellungen ein komplettes Codesigniung auch für Debugbuilds einbauen und in der -plist die benötigten Zugriffsrechte eintragen…

Das würde ich ja auch denken. Allerdings wundert es mich, dass diese Änderungen ohne neues macOS oder Update von Xojo erfolgt sein soll.

Vor ein paar Tagen gab es das Problem ja noch nicht.

Wo stelle ich das ein?

Unter Build Settings gibt es “Sign”. Dort ist unter Developer-ID nichts eingetragen. Es hilft aber auch nicht dort meine ID einzugeben.
Welche -plist sollte ich bearbeiten (habe ich bisher nicht benötigt) und was soll ich ändern/eintragen?

Das sagt mir leider alles nichts und war bisher auch nicht erforderlich. Sehr merkwürdig.

Mitunter reicht es schon, wenn irgendein Programmupdate (letztens kam ja Safari in einer neuen Version raus) die Datenbank mit den Zugriffsrechten zurücksetzt oder ein Sicherheitsupdate z.B. für XProtect im Hintergrund etwas ändert.

“Normalerweise” kommen bei Debugbuilds Fragen vom macOS ob der Zugriff auf Ordner “Dokumente” etc. gewährt werden soll (zumindest ist das bei mir der Fall). Wenn die Anfragen nicht kommen, dann könnte im System etwas “verstellt” sein…

Bildschirm_2023-10-30_01-08-40_PM

Der AppWrapper hat eine sehr ausführliche Hilfe und Unterstützung für das Codesigning auch von Debuigbuilds - einfach mal unter “Scripting” reinschauen und der Anleitung folgen.

Danke für die Hinweise.
Das einzige Update, von dem ich weiß, war (glaube ich) Xcode.

Möglicherweise habe ich direkt in Xojo irgendwas verstellt. Wüsste aber nicht was.
Dass die Anwendung im Programmverlauf nach Zugriffsrechten fragt ist korrekt und lief bisher problemfrei.
Merkwürdig finde ich, dass die Debug-App im Debug-Ordner keinen Zugriff auf die Preferences-Datei mehr hat. Das lief bisher immer problemfrei. Der Debug-Ordner enthält auch Dateien, die Daten des Programms enthalten, die der Anwender bei der Nutzung anlegt.

Aktuell habe ich das Problem, dass ich beim Sichern der Anwenderdaten die älteren Versionen behalten möchte. Dazu wird lediglich die Standardendung geändert. Erst in .BAK danach in .BA1 bis .BA9 und abschließend die Daten in einer neuen Datei gesichert. Das funktioniert offenbar aktuell im Debugger nicht.
Hier scheine ich auch in ein Zugriffsproblem zu laufen, bekomme aber keinerlei Meldung. Es wird nur nicht gesichert.

Leicht frustrierend :frowning:

Hallo Stefan, das heißt du speicherst/änderst innerhalb des App-“Ordners”? Dachte immer, das ist nicht erlaubt. Jedenfalls keine so gute Idee, scheint mir. Dafür gibt es ja entsprechend vorgesehene Bereiche.

Viele Grüße
Thomas

Das Programm speichert die Einstellungen üblicherweise (voreingestellt) in ~Library/Preferences/…
Allerdings prüft das Programm bei Programmstart, ob sich im selben Ordner wie die Programmdatei eine Einstellungsdatei befindet. Diese wird dann vorrangig genutzt.
Das stammt noch aus der Zeit, als sich unter Windows alle Programmbestandteile in der Programmdatei befanden. Also ohne zusätzliche .dll Dateien. So wie bei der Mac App.
Das war für die Nutzung mit einem USB-Stick gedacht. Da konnte man einfach alle zur Nutzung erforderlichen Dateien in einem Ordner auf einen USB-Stick kopieren und die .pref dort mit ablegen. Dann hatte man “seine” Umgebung immer vollständig dabei.

Heute habe ich einen Ordner für die Programmentwicklung, in dem sich alle für die Entwicklung erforderlichen Dateien befinden. Auch Handbuch, Bilder, Entwürfe, ältere Codeversionen, etc.
Dort wird dann auch die Debug-Version erzeugt und gestartet. Die prüft dann auch, ob sich in diesem Ordner eine Preferences-Datei befindet und nutzt die.
Damit kann ich für das Debugging Testdateien nutzen und verändere werde meine eigenen realen Daten noch meine eigenen Einstellungen.

Das würde ich gern beibehalten. Ich fand das prima und sehe auch keinen Grund, das zu unterbinden. Der Ordner ist im Benutzerordner und ich habe uneingeschränkte Zugriffsrechte.

In den letzten Tagen habe ich wenig mit Xojo gemacht und habe die .pref im Debug-Ordner einfach umbenannt.
Ein Test gerade eben (mit .pref im Debug-Ordner) ergibt keinerlei Probleme mehr. Finde ich gut :slight_smile:

Ich kann mich nicht entsinnen, etwas geändert zu haben, was damit zu tun haben könnte. Ich habe lediglich nach eineigen Fehlermeldungen der Anwender geschaut. Fast ausschließlich Probleme unter Windows (über Parallels Desktop).

Ich nehme das mal so zur Kenntnis und freue mich :slight_smile:

Ich löse dieses Problem mit der #debugbuild-Funktion:

#if debugbuild
#else
Specialfolder.ApplicationData
#endif

Unter Umständen kannst du (auch nur) für den Debugbuild einen eigenen Dateinamen verwenden, um die Einstellungen zu speichern.
Und wenn nicht #debugbuild, dann wie gewohnt speichern lassen, aber siehe oben, im ApplicationData:
~/LibraryApplication Support/DeinWebseitenName/DeinProgrammName