diff --git a/internal/platform/implementation/apple/BUILD b/internal/platform/implementation/apple/BUILD index ca58ac8a..19b97168 100644 --- a/internal/platform/implementation/apple/BUILD +++ b/internal/platform/implementation/apple/BUILD @@ -96,6 +96,7 @@ objc_library( "//third_party/apple_frameworks:Network", "@nlohmann_json//:json", "//internal/base:file_path", + "//internal/base:files", "//internal/platform:base", "//internal/platform/implementation:comm", "//internal/platform/implementation:platform", diff --git a/internal/platform/implementation/apple/platform.mm b/internal/platform/implementation/apple/platform.mm index c36d73e2..974a7ed5 100644 --- a/internal/platform/implementation/apple/platform.mm +++ b/internal/platform/implementation/apple/platform.mm @@ -20,6 +20,7 @@ #include #include "absl/strings/string_view.h" +#include "internal/base/files.h" #include "internal/platform/implementation/apple/awdl.h" #include "internal/platform/implementation/apple/atomic_boolean.h" #include "internal/platform/implementation/apple/atomic_uint32.h" @@ -27,6 +28,7 @@ #include "internal/platform/implementation/apple/condition_variable.h" #include "internal/platform/implementation/apple/count_down_latch.h" #include "internal/platform/implementation/apple/device_info.h" +#import "internal/platform/implementation/apple/Log/GNCLogger.h" #import "internal/platform/implementation/apple/multi_thread_executor.h" #include "internal/platform/implementation/apple/mutex.h" #include "internal/platform/implementation/apple/preferences_manager.h" @@ -134,6 +136,15 @@ std::unique_ptr ImplementationPlatform::CreateOutputFile(PayloadId p } std::unique_ptr ImplementationPlatform::CreateOutputFile(const std::string& file_path) { + FilePath path{file_path}; + FilePath folder_path = path.GetParentPath(); + // Verifies that a path is a valid directory. + if (!Files::DirectoryExists(folder_path)) { + if (!Files::CreateDirectories(folder_path)) { + GNCLoggerError(@"Failed to create directory: %@", @(folder_path.ToString().c_str())); + return nullptr; + } + } return shared::IOFile::CreateOutputFile(file_path); }