<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic InvalidArgumentError(details: &amp;quot;Mobile map directory path is not an empty directory.&amp;quot;) in Swift Maps SDK Questions</title>
    <link>https://community.esri.com/t5/swift-maps-sdk-questions/invalidargumenterror-details-quot-mobile-map/m-p/1584064#M501</link>
    <description>&lt;P class=""&gt;InvalidArgumentError(details: "Mobile map directory path is not an empty directory.")&lt;BR /&gt;&lt;BR /&gt;I am getting above error while try to load offline downloaded map&lt;BR /&gt;&lt;BR /&gt;below is the code snipet&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;Folder structure&amp;nbsp;&lt;A href="https://drive.google.com/file/d/1KFTZSB5ryS8dZaeLX4F45cX06JSE98Tf/view?usp=drive_link" target="_self"&gt;Folder structure&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="swift"&gt;import SwiftUI
import ArcGIS

struct OfflineMapViewDetails: View {
    
    @State private var offlineMap: Map?
    @StateObject private var offlineMapTaskWrapper: OfflineMapTaskWrapper
    var itemId: String
    
    init(itemId: String) {
        self.itemId = itemId
        _offlineMapTaskWrapper = StateObject(wrappedValue: OfflineMapTaskWrapper(itemId: itemId))
    }
    
    var body: some View {
        
        VStack {
            if let map = offlineMap {
                MapView(map: map)
            }
        }
        .onAppear {
            Task {
                await offlineMapTaskWrapper.generateOfflineMap() { map in
                    self.offlineMap = map
                }
            }
        }
    }
    
    
}

class OfflineMapTaskWrapper: ObservableObject {
    private var offlineMapTask: OfflineMapTask
    private let itemId: String
    
    init(itemId: String) {
        self.itemId = itemId
        let offlinePortalItem = PortalItem(portal: PortalManager.shared.portal!, id: PortalItem.ID(rawValue: itemId)!)
        self.offlineMapTask = OfflineMapTask(portalItem: offlinePortalItem)
    }
    
    func getDirectoryPath() -&amp;gt; URL {
        let baseDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        return baseDirectory.appendingPathComponent(itemId)
    }
    
    
    
    func generateOfflineMap( completion: @escaping (Map) -&amp;gt; Void) async {
        
        let parameters = GenerateOfflineMapParameters()
        parameters.includesBasemap = true
        //        parameters.areaOfInterest = extent
        parameters.continuesOnErrors = false
        
        
        let temporaryDirectory = getDirectoryPath()
        print("temporaryDirectory: \(temporaryDirectory)")
        print("temporaryDirectory: \(offlineMapTask.portalItem?.id)")
        print("temporaryDirectory: \(PortalManager.shared.portal?.user?.fullName)")
        let generateOfflineMapJob = offlineMapTask.makeGenerateOfflineMapJob(
            parameters: parameters,
            downloadDirectory: temporaryDirectory
        )
        generateOfflineMapJob.start()
        
        do {
            let output = try await generateOfflineMapJob.output
            let map = output.offlineMap
            //let builder = EnvelopeBuilder(envelope: extent)
//            builder.expand(by: 0.8)
//            map.initialViewpoint = Viewpoint(boundingGeometry: builder.toGeometry())
            
            DispatchQueue.main.async {
                completion(map)
            }
        } catch {
            print(error)
        }
    }
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 11 Feb 2025 16:05:50 GMT</pubDate>
    <dc:creator>MuralikrishnaDanthala</dc:creator>
    <dc:date>2025-02-11T16:05:50Z</dc:date>
    <item>
      <title>InvalidArgumentError(details: "Mobile map directory path is not an empty directory.")</title>
      <link>https://community.esri.com/t5/swift-maps-sdk-questions/invalidargumenterror-details-quot-mobile-map/m-p/1584064#M501</link>
      <description>&lt;P class=""&gt;InvalidArgumentError(details: "Mobile map directory path is not an empty directory.")&lt;BR /&gt;&lt;BR /&gt;I am getting above error while try to load offline downloaded map&lt;BR /&gt;&lt;BR /&gt;below is the code snipet&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;Folder structure&amp;nbsp;&lt;A href="https://drive.google.com/file/d/1KFTZSB5ryS8dZaeLX4F45cX06JSE98Tf/view?usp=drive_link" target="_self"&gt;Folder structure&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="swift"&gt;import SwiftUI
import ArcGIS

struct OfflineMapViewDetails: View {
    
    @State private var offlineMap: Map?
    @StateObject private var offlineMapTaskWrapper: OfflineMapTaskWrapper
    var itemId: String
    
    init(itemId: String) {
        self.itemId = itemId
        _offlineMapTaskWrapper = StateObject(wrappedValue: OfflineMapTaskWrapper(itemId: itemId))
    }
    
    var body: some View {
        
        VStack {
            if let map = offlineMap {
                MapView(map: map)
            }
        }
        .onAppear {
            Task {
                await offlineMapTaskWrapper.generateOfflineMap() { map in
                    self.offlineMap = map
                }
            }
        }
    }
    
    
}

class OfflineMapTaskWrapper: ObservableObject {
    private var offlineMapTask: OfflineMapTask
    private let itemId: String
    
    init(itemId: String) {
        self.itemId = itemId
        let offlinePortalItem = PortalItem(portal: PortalManager.shared.portal!, id: PortalItem.ID(rawValue: itemId)!)
        self.offlineMapTask = OfflineMapTask(portalItem: offlinePortalItem)
    }
    
    func getDirectoryPath() -&amp;gt; URL {
        let baseDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        return baseDirectory.appendingPathComponent(itemId)
    }
    
    
    
    func generateOfflineMap( completion: @escaping (Map) -&amp;gt; Void) async {
        
        let parameters = GenerateOfflineMapParameters()
        parameters.includesBasemap = true
        //        parameters.areaOfInterest = extent
        parameters.continuesOnErrors = false
        
        
        let temporaryDirectory = getDirectoryPath()
        print("temporaryDirectory: \(temporaryDirectory)")
        print("temporaryDirectory: \(offlineMapTask.portalItem?.id)")
        print("temporaryDirectory: \(PortalManager.shared.portal?.user?.fullName)")
        let generateOfflineMapJob = offlineMapTask.makeGenerateOfflineMapJob(
            parameters: parameters,
            downloadDirectory: temporaryDirectory
        )
        generateOfflineMapJob.start()
        
        do {
            let output = try await generateOfflineMapJob.output
            let map = output.offlineMap
            //let builder = EnvelopeBuilder(envelope: extent)
//            builder.expand(by: 0.8)
//            map.initialViewpoint = Viewpoint(boundingGeometry: builder.toGeometry())
            
            DispatchQueue.main.async {
                completion(map)
            }
        } catch {
            print(error)
        }
    }
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 11 Feb 2025 16:05:50 GMT</pubDate>
      <guid>https://community.esri.com/t5/swift-maps-sdk-questions/invalidargumenterror-details-quot-mobile-map/m-p/1584064#M501</guid>
      <dc:creator>MuralikrishnaDanthala</dc:creator>
      <dc:date>2025-02-11T16:05:50Z</dc:date>
    </item>
    <item>
      <title>Re: InvalidArgumentError(details: "Mobile map directory path is not an empty directory.")</title>
      <link>https://community.esri.com/t5/swift-maps-sdk-questions/invalidargumenterror-details-quot-mobile-map/m-p/1584489#M502</link>
      <description>&lt;P&gt;Based off the screenshot of the folders, you already have a downloaded map on disk at the location you're trying to download to. When you specify the download location, you should make sure there isn't already something at that location on disk.&lt;/P&gt;&lt;P&gt;There are two things you can do:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;If the downloaded map you already have on disk is suitable, you can just re-open that instead of re-downloading it. To re-open without re-downloading, see Step 2 &lt;A href="https://developers.arcgis.com/documentation/offline-mapping-apps/partially-offline-apps/offline-maps/#3-access" target="_self"&gt;here&lt;/A&gt;.&lt;/LI&gt;&lt;LI&gt;Otherwise, if you need to get a fresh copy of the map, delete the previously downloaded map (folder) and re-download to the same location (or you can download to a different location and keep both copies of the offline maps, but if they're the same map, that's probably not what you want).&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Hope that helps.&lt;/P&gt;</description>
      <pubDate>Wed, 12 Feb 2025 16:43:28 GMT</pubDate>
      <guid>https://community.esri.com/t5/swift-maps-sdk-questions/invalidargumenterror-details-quot-mobile-map/m-p/1584489#M502</guid>
      <dc:creator>Nicholas-Furness</dc:creator>
      <dc:date>2025-02-12T16:43:28Z</dc:date>
    </item>
  </channel>
</rss>

