Skip to content

[tvOS] Environment.GetSpecialFolder is too eager in creating the special directories #58787

@filipnavara

Description

@filipnavara

PR #57508 added the following code:

#if TARGET_TVOS
string? path = CombineSearchPath(NSSearchPathDirectory.NSLibraryDirectory, Path.Combine("Caches", "Documents", subdirectory));
// Special version of CombineSearchPath which creates the path if needed.
// This isn't needed for "real" search paths which always exist, but on tvOS
// the base path is really a subdirectory we define rather than an OS directory.
// In order to not treat Directory.Exists(SpecialFolder.ApplicationData) differently
// on tvOS, guarantee that it exists by creating it here
if (!Directory.Exists (path))
Directory.CreateDirectory (path);
#else

While the intention to create ApplicationData directory is correct the implementation creates also any subdirectory as well which is different from what legacy Mono did and what iOS does.

The expected version of the code should be closer to

                string? path = CombineSearchPath(NSSearchPathDirectory.NSLibraryDirectory, Path.Combine("Caches", "Documents"));
                // Special version of CombineSearchPath which creates the path if needed.
                // This isn't needed for "real" search paths which always exist, but on tvOS
                // the base path is really a subdirectory we define rather than an OS directory.
                // In order to not treat Directory.Exists(SpecialFolder.ApplicationData) differently
                // on tvOS, guarantee that it exists by creating it here
                if (!Directory.Exists (path))
                    Directory.CreateDirectory (path);
                path = Path.Combine(path, subdirectory);

(ie. only create the base directory and then combine the paths)

Ref: dotnet/macios#12640

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions