Here's a working example for Mac OS (but should be the same for iOS except for the URL setup for the incoming csv file). The csv test data are in 3 columns, with headers of Name, Position and Score - so as to test data types of String, Integer and Double. The Data Model (ViewModel) import Foundation import TabularData class DataModel { static let shared = DataModel() @Published var dataTable: DataFrame? init() { getData() } func getData() { var url: URL? do { url = try FileManager.default.url(for: FileManager.SearchPathDirectory.downloadsDirectory, in: FileManager.SearchPathDomainMask.userDomainMask, appropriateFor: nil, create: true) } catch{ print(Failed to get Downsloads URL (error)) return } let csvOptions = CSVReadingOptions(hasHeaderRow: true, ignoresEmptyLines: true, delimiter: ,) let fileURL = url?.appendingPathComponent(TestCSV.csv) do { dataTable = try DataFrame(contentsOfCSVFile: fileURL!,columns: nil, rows: nil, types: [Name:CSVType.string,Position:CSVType.integer,Score:CSVType.d