expo-file-system 58.0.1 → 58.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/expo/modules/filesystem/FileSystemDownloadTask.kt +2 -0
  4. package/android/src/main/java/expo/modules/filesystem/FileSystemPath.kt +65 -2
  5. package/android/src/main/java/expo/modules/filesystem/FileSystemUploadTask.kt +2 -0
  6. package/android/src/main/java/expo/modules/filesystem/FileSystemWatcher.kt +10 -0
  7. package/expo-module.config.json +1 -1
  8. package/ios/FileSystemFileHandle.swift +25 -1
  9. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/{58.0.1/expo.modules.filesystem-58.0.1-sources.jar → 58.0.3/expo.modules.filesystem-58.0.3-sources.jar} +0 -0
  10. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3-sources.jar.md5 +1 -0
  11. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3-sources.jar.sha1 +1 -0
  12. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3-sources.jar.sha256 +1 -0
  13. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3-sources.jar.sha512 +1 -0
  14. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3.aar +0 -0
  15. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3.aar.md5 +1 -0
  16. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3.aar.sha1 +1 -0
  17. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3.aar.sha256 +1 -0
  18. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3.aar.sha512 +1 -0
  19. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/{58.0.1/expo.modules.filesystem-58.0.1.module → 58.0.3/expo.modules.filesystem-58.0.3.module} +24 -24
  20. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3.module.md5 +1 -0
  21. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3.module.sha1 +1 -0
  22. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3.module.sha256 +1 -0
  23. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3.module.sha512 +1 -0
  24. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/{58.0.1/expo.modules.filesystem-58.0.1.pom → 58.0.3/expo.modules.filesystem-58.0.3.pom} +3 -3
  25. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3.pom.md5 +1 -0
  26. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3.pom.sha1 +1 -0
  27. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3.pom.sha256 +1 -0
  28. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.3/expo.modules.filesystem-58.0.3.pom.sha512 +1 -0
  29. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/maven-metadata.xml +4 -4
  30. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/maven-metadata.xml.md5 +1 -1
  31. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/maven-metadata.xml.sha1 +1 -1
  32. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/maven-metadata.xml.sha256 +1 -1
  33. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/maven-metadata.xml.sha512 +1 -1
  34. package/package.json +3 -3
  35. package/prebuilds/output/debug/xcframeworks/ExpoFileSystem.tar.gz +0 -0
  36. package/prebuilds/output/release/xcframeworks/ExpoFileSystem.tar.gz +0 -0
  37. package/spm.config.json +2 -1
  38. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1-sources.jar.md5 +0 -1
  39. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1-sources.jar.sha1 +0 -1
  40. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1-sources.jar.sha256 +0 -1
  41. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1-sources.jar.sha512 +0 -1
  42. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1.aar +0 -0
  43. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1.aar.md5 +0 -1
  44. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1.aar.sha1 +0 -1
  45. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1.aar.sha256 +0 -1
  46. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1.aar.sha512 +0 -1
  47. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1.module.md5 +0 -1
  48. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1.module.sha1 +0 -1
  49. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1.module.sha256 +0 -1
  50. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1.module.sha512 +0 -1
  51. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1.pom.md5 +0 -1
  52. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1.pom.sha1 +0 -1
  53. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1.pom.sha256 +0 -1
  54. package/local-maven-repo/host/exp/exponent/expo.modules.filesystem/58.0.1/expo.modules.filesystem-58.0.1.pom.sha512 +0 -1
package/CHANGELOG.md CHANGED
@@ -10,6 +10,20 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 58.0.3 — 2026-09-28
14
+
15
+ ### 🐛 Bug fixes
16
+
17
+ - [Android] Added missing permission checks to upload tasks and to file watchers. ([#50582](https://github.com/expo/expo/pull/50582) by [@barthap](https://github.com/barthap))
18
+ - [iOS] Added a missing permission check when opening a file handle. ([#50583](https://github.com/expo/expo/pull/50583) by [@barthap](https://github.com/barthap))
19
+ - [Android] Check permissions for `content://` URIs served by the app's own file providers. ([#50584](https://github.com/expo/expo/pull/50584) by [@barthap](https://github.com/barthap))
20
+
21
+ ## 58.0.2 — 2026-09-25
22
+
23
+ ### 🐛 Bug fixes
24
+
25
+ - [iOS] Include the privacy manifest in prebuilt frameworks. ([#50503](https://github.com/expo/expo/pull/50503) by [@chrfalch](https://github.com/chrfalch))
26
+
13
27
  ## 58.0.1 — 2026-09-22
14
28
 
15
29
  ### 🐛 Bug fixes
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'host.exp.exponent'
7
- version = '58.0.1'
7
+ version = '58.0.3'
8
8
 
9
9
  android {
10
10
  namespace "expo.modules.filesystem"
11
11
  defaultConfig {
12
12
  versionCode 30
13
- versionName "58.0.1"
13
+ versionName "58.0.3"
14
14
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
15
15
  }
16
16
  testOptions {
@@ -8,6 +8,7 @@ import expo.modules.filesystem.unifiedfile.SAFDocumentFile
8
8
  import expo.modules.filesystem.unifiedfile.UnifiedFileInterface
9
9
  import expo.modules.kotlin.records.Field
10
10
  import expo.modules.kotlin.records.Record
11
+ import expo.modules.kotlin.services.FilePermissionService
11
12
  import expo.modules.kotlin.sharedobjects.SharedObject
12
13
  import expo.modules.kotlin.types.OptimizedRecord
13
14
  import kotlinx.coroutines.Dispatchers
@@ -318,6 +319,7 @@ fun calculateDownloadTotalBytes(
318
319
  }
319
320
 
320
321
  fun resolveDownloadDestination(to: FileSystemPath, url: URI): UnifiedFileInterface {
322
+ to.validatePermission(FilePermissionService.Permission.WRITE)
321
323
  return when (to) {
322
324
  is FileSystemDirectory -> {
323
325
  val filename = url.filename
@@ -4,6 +4,7 @@ import android.content.Context
4
4
  import android.net.Uri
5
5
  import android.os.Build
6
6
  import android.provider.DocumentsContract
7
+ import androidx.core.content.FileProvider
7
8
  import expo.modules.filesystem.unifiedfile.AssetFile
8
9
  import expo.modules.filesystem.unifiedfile.ContentProviderFile
9
10
  import expo.modules.filesystem.fsops.DestinationSpec
@@ -16,6 +17,7 @@ import kotlinx.coroutines.withContext
16
17
  import expo.modules.kotlin.services.FilePermissionService
17
18
  import expo.modules.kotlin.sharedobjects.SharedObject
18
19
  import java.io.File
20
+ import java.io.IOException
19
21
  import java.util.EnumSet
20
22
  import java.util.regex.Pattern
21
23
  import kotlin.io.path.moveTo
@@ -137,8 +139,19 @@ abstract class FileSystemPath(var uri: Uri) : SharedObject() {
137
139
 
138
140
  fun checkPermission(permission: FilePermissionService.Permission): Boolean {
139
141
  if (uri.isContentUri) {
140
- // TODO: Consider adding a check for content URIs (not in legacy FS)
141
- return true
142
+ // Content URIs served by this app's own FileProviders map back onto the internal files and
143
+ // cache trees. In Expo Go those trees hold every experience's sandbox, and an in-process
144
+ // caller reaches any provider regardless of android:exported, so the file the provider would
145
+ // serve has to clear the same check as the equivalent file:// path. Every other content URI
146
+ // keeps the previous behaviour.
147
+ val internalFile = try {
148
+ internalFileServedByOwnProvider()
149
+ } catch (e: IOException) {
150
+ // The authority is ours but the path would not canonicalize. Fail closed: we cannot tell
151
+ // which file this URI serves, and every foreign provider has already returned above.
152
+ return false
153
+ } ?: return true
154
+ return checkPermissionForPath(internalFile.path, permission)
142
155
  }
143
156
  if (uri.isAssetUri) {
144
157
  // TODO: Consider adding a check for asset URIs – this returns asset files of Expo Go (such as root-cert), but these are already freely available on apk mirrors etc.
@@ -147,6 +160,56 @@ abstract class FileSystemPath(var uri: Uri) : SharedObject() {
147
160
  return checkPermissionForPath(javaFile.path, permission)
148
161
  }
149
162
 
163
+ /**
164
+ * The file one of this app's own FileProviders would serve for [uri], or null when the URI is not
165
+ * served by this app or does not resolve under the internal files/cache trees.
166
+ *
167
+ * The candidate is verified by asking FileProvider to map it back to a URI. A provider serves a
168
+ * file under the most specific root it has configured, so a matching first path segment proves the
169
+ * candidate is the file this URI resolves to. Going through FileProvider avoids hardcoding
170
+ * authorities or root names, which differ between the providers this app ships.
171
+ */
172
+ private fun internalFileServedByOwnProvider(): File? {
173
+ val context = appContext?.reactContext ?: return null
174
+ // ContentResolver drops a "<userId>@" prefix before it looks the provider up, but
175
+ // PackageManager does not. Strip it here too, otherwise "content://0@<own authority>/..."
176
+ // looks like a foreign provider while still being served by ours.
177
+ val authority = uri.authority?.substringAfterLast('@') ?: return null
178
+ val provider = context.packageManager.resolveContentProvider(authority, 0) ?: return null
179
+ if (provider.packageName != context.packageName) {
180
+ return null
181
+ }
182
+
183
+ val segments = uri.pathSegments
184
+ if (segments.size < 2) {
185
+ return null
186
+ }
187
+ val rootName = segments.first()
188
+ val relativePath = segments.drop(1).joinToString("/")
189
+
190
+ return listOf(context.filesDir, context.cacheDir)
191
+ .asSequence()
192
+ .map { root -> root to File(root, relativePath).canonicalFile }
193
+ .filter { (root, candidate) -> candidate.path.startsWith(root.canonicalPath + "/") }
194
+ .firstOrNull { (_, candidate) -> servesSamePath(authority, candidate, rootName, context) }
195
+ ?.second
196
+ }
197
+
198
+ private fun servesSamePath(
199
+ authority: String,
200
+ candidate: File,
201
+ rootName: String,
202
+ context: Context
203
+ ): Boolean {
204
+ val servedUri = try {
205
+ FileProvider.getUriForFile(context, authority, candidate)
206
+ } catch (e: IllegalArgumentException) {
207
+ // The candidate is outside every root this provider serves.
208
+ return false
209
+ }
210
+ return servedUri.pathSegments.firstOrNull() == rootName
211
+ }
212
+
150
213
  private fun checkPermissionForPath(path: String, permission: FilePermissionService.Permission): Boolean {
151
214
  val permissions = appContext?.filePermission?.getPathPermissions(
152
215
  appContext?.reactContext ?: throw Exceptions.ReactContextLost(), path
@@ -5,6 +5,7 @@ import expo.modules.filesystem.unifiedfile.UnifiedFileInterface
5
5
  import expo.modules.kotlin.types.Enumerable
6
6
  import expo.modules.kotlin.records.Field
7
7
  import expo.modules.kotlin.records.Record
8
+ import expo.modules.kotlin.services.FilePermissionService
8
9
  import expo.modules.kotlin.sharedobjects.SharedObject
9
10
  import expo.modules.kotlin.types.OptimizedRecord
10
11
  import kotlinx.coroutines.suspendCancellableCoroutine
@@ -83,6 +84,7 @@ class FileSystemUploadTask : SharedObject() {
83
84
  private val progressThrottleInterval = 100.milliseconds
84
85
 
85
86
  suspend fun start(url: String, file: FileSystemFile, options: UploadTaskOptions): UploadTaskResult {
87
+ file.validatePermission(FilePermissionService.Permission.READ)
86
88
  cancelled = false
87
89
  val request = buildUploadRequest(url, file, options)
88
90
  return executeUploadRequest(request)
@@ -5,8 +5,10 @@ import android.os.Build
5
5
  import android.os.FileObserver
6
6
  import androidx.core.net.toUri
7
7
  import expo.modules.kotlin.AppContext
8
+ import expo.modules.kotlin.exception.Exceptions
8
9
  import expo.modules.kotlin.records.Field
9
10
  import expo.modules.kotlin.records.Record
11
+ import expo.modules.kotlin.services.FilePermissionService
10
12
  import expo.modules.kotlin.types.Enumerable
11
13
  import expo.modules.kotlin.sharedobjects.SharedObject
12
14
  import expo.modules.kotlin.types.OptimizedRecord
@@ -82,6 +84,14 @@ internal class FileSystemWatcher(
82
84
  if (!watchedFile.canRead()) {
83
85
  throw WatcherPermissionException(path)
84
86
  }
87
+ // Watching a directory reports the names of the files inside it and every change to them, so it
88
+ // needs the same read permission as reading those files. canRead() only reflects the process
89
+ // UID, which in Expo Go is shared by every experience.
90
+ val context = appContext.reactContext ?: throw Exceptions.ReactContextLost()
91
+ val permissions = appContext.filePermission?.getPathPermissions(context, watchedFile.path)
92
+ if (permissions?.contains(FilePermissionService.Permission.READ) != true) {
93
+ throw WatcherPermissionException(path)
94
+ }
85
95
 
86
96
  watchedUri = watchedFile.toUri()
87
97
  isWatchingDirectory = watchedFile.isDirectory
@@ -12,7 +12,7 @@
12
12
  "publication": {
13
13
  "groupId": "host.exp.exponent",
14
14
  "artifactId": "expo.modules.filesystem",
15
- "version": "58.0.1",
15
+ "version": "58.0.3",
16
16
  "repository": "local-maven-repo"
17
17
  }
18
18
  }
@@ -20,6 +20,18 @@ enum FileMode: String, Enumerable {
20
20
  var writeOnly: Bool {
21
21
  return self == .write || self == .append || self == .truncate
22
22
  }
23
+
24
+ /// Permissions a handle opened in this mode needs. Mirrors `FileMode.requiredPermissions()` on Android.
25
+ var requiredPermissions: [FileSystemPermissionFlags] {
26
+ switch self {
27
+ case .read:
28
+ return [.read]
29
+ case .write, .append, .truncate:
30
+ return [.write]
31
+ case .readWrite:
32
+ return [.read, .write]
33
+ }
34
+ }
23
35
  }
24
36
 
25
37
  @available(iOS 14, tvOS 14, *)
@@ -32,8 +44,20 @@ internal final class FileSystemFileHandle: SharedRef<FileHandle> {
32
44
  private let lock = NSLock() // non-reentrant. Don't use it in recursive calls
33
45
 
34
46
  init(file: FileSystemFile, mode: FileMode?) throws {
47
+ // Callers that ask for a specific mode get exactly that mode checked. When no mode is given we
48
+ // fall back to read-only on a path that is not writable, so opening a bundled file keeps working
49
+ // without having to pass "r" from JavaScript. A path that permits neither still fails below.
50
+ let resolvedMode = mode ?? (file.checkPermission(.write) ? FileMode.readWrite : FileMode.read)
35
51
  self.file = file
36
- self.mode = mode ?? FileMode.readWrite
52
+ self.mode = resolvedMode
53
+
54
+ // Opening a handle hands out raw read/write access to the file, so it has to clear the same
55
+ // permission check as every other read and write. Without this, JavaScript could open a file
56
+ // belonging to another Expo Go experience, which the scoped permission service denies.
57
+ for permission in resolvedMode.requiredPermissions {
58
+ try file.validatePermission(permission)
59
+ }
60
+
37
61
  self.didAccessSecurityScope = file.url.startAccessingSecurityScopedResource()
38
62
 
39
63
  do {
@@ -0,0 +1 @@
1
+ 36cf581996460a6e5255566cd49701d7da5d9eeeedce8c384d5506c87d4c4745
@@ -0,0 +1 @@
1
+ d2ddca5f614fec6403246c467e804fd0c53d8dc57bcdf2e369690b442f375fa9d2a328af645125f22de9ec796dc984acd062f82c33fbc59632c3ac1713063609
@@ -0,0 +1 @@
1
+ 285b393ab98bddc521bd3cb71eb8c1927671b44bb2a10d46382a5bcbb27049e7
@@ -0,0 +1 @@
1
+ afb749d79c17718b5f03123d1d77c194c7e67c2fee5cb4ae120f32b5222e66fdc26834dcbb7ff3b1a9b8a6ec65e56ac46bfea77a2765f7ac6ec4289ec83ae6dd
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "host.exp.exponent",
5
5
  "module": "expo.modules.filesystem",
6
- "version": "58.0.1",
6
+ "version": "58.0.3",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -68,13 +68,13 @@
68
68
  ],
69
69
  "files": [
70
70
  {
71
- "name": "expo.modules.filesystem-58.0.1.aar",
72
- "url": "expo.modules.filesystem-58.0.1.aar",
73
- "size": 761548,
74
- "sha512": "a6a36939c4f2175dd1240f35aa5c7135c72a0e1161eb7d1b66b9582fac558f9851004d73c98f388a54138e819bbddb73d3de791d69a80e789722a31d2fb34427",
75
- "sha256": "bdc5761e7ae67ac551dc575622c118bce1bdfe04d4a3af6c3cb50a139ce151d3",
76
- "sha1": "d2e08b1646752a37de3e5e2a47e3eb7d0f5361ff",
77
- "md5": "2889e74f3d23500423d7ee3885b8adbf"
71
+ "name": "expo.modules.filesystem-58.0.3.aar",
72
+ "url": "expo.modules.filesystem-58.0.3.aar",
73
+ "size": 763939,
74
+ "sha512": "afb749d79c17718b5f03123d1d77c194c7e67c2fee5cb4ae120f32b5222e66fdc26834dcbb7ff3b1a9b8a6ec65e56ac46bfea77a2765f7ac6ec4289ec83ae6dd",
75
+ "sha256": "285b393ab98bddc521bd3cb71eb8c1927671b44bb2a10d46382a5bcbb27049e7",
76
+ "sha1": "e27167b5cb8e3ae35ef824839c878da25e3e79be",
77
+ "md5": "4060c08ec71f069364aa1b8ed64329d7"
78
78
  }
79
79
  ]
80
80
  },
@@ -91,7 +91,7 @@
91
91
  "group": "org.jetbrains.kotlin",
92
92
  "module": "kotlin-stdlib-jdk7",
93
93
  "version": {
94
- "requires": "2.2.0"
94
+ "requires": "2.2.10"
95
95
  }
96
96
  },
97
97
  {
@@ -151,19 +151,19 @@
151
151
  "group": "io.github.expo.pika",
152
152
  "module": "pika-api",
153
153
  "version": {
154
- "requires": "1.0.0"
154
+ "requires": "1.1.0"
155
155
  }
156
156
  }
157
157
  ],
158
158
  "files": [
159
159
  {
160
- "name": "expo.modules.filesystem-58.0.1.aar",
161
- "url": "expo.modules.filesystem-58.0.1.aar",
162
- "size": 761548,
163
- "sha512": "a6a36939c4f2175dd1240f35aa5c7135c72a0e1161eb7d1b66b9582fac558f9851004d73c98f388a54138e819bbddb73d3de791d69a80e789722a31d2fb34427",
164
- "sha256": "bdc5761e7ae67ac551dc575622c118bce1bdfe04d4a3af6c3cb50a139ce151d3",
165
- "sha1": "d2e08b1646752a37de3e5e2a47e3eb7d0f5361ff",
166
- "md5": "2889e74f3d23500423d7ee3885b8adbf"
160
+ "name": "expo.modules.filesystem-58.0.3.aar",
161
+ "url": "expo.modules.filesystem-58.0.3.aar",
162
+ "size": 763939,
163
+ "sha512": "afb749d79c17718b5f03123d1d77c194c7e67c2fee5cb4ae120f32b5222e66fdc26834dcbb7ff3b1a9b8a6ec65e56ac46bfea77a2765f7ac6ec4289ec83ae6dd",
164
+ "sha256": "285b393ab98bddc521bd3cb71eb8c1927671b44bb2a10d46382a5bcbb27049e7",
165
+ "sha1": "e27167b5cb8e3ae35ef824839c878da25e3e79be",
166
+ "md5": "4060c08ec71f069364aa1b8ed64329d7"
167
167
  }
168
168
  ]
169
169
  },
@@ -177,13 +177,13 @@
177
177
  },
178
178
  "files": [
179
179
  {
180
- "name": "expo.modules.filesystem-58.0.1-sources.jar",
181
- "url": "expo.modules.filesystem-58.0.1-sources.jar",
182
- "size": 52568,
183
- "sha512": "3b0f98abf47cb14cd67f832860f8570678a5252397cc401ad9fece2b2a1da29648aa98ec039edae6074a3045cea3a8780530204d6d14bbe2ef2b925c99436d95",
184
- "sha256": "2e6ad5f7df771232299130f53feacfca90a78a253f6233ed93712d81d0ec839e",
185
- "sha1": "aabfc053d71bd3b6f0bcde54f2b3c2f51288adb8",
186
- "md5": "454177555eda494f98f3835dfe600bfe"
180
+ "name": "expo.modules.filesystem-58.0.3-sources.jar",
181
+ "url": "expo.modules.filesystem-58.0.3-sources.jar",
182
+ "size": 53972,
183
+ "sha512": "d2ddca5f614fec6403246c467e804fd0c53d8dc57bcdf2e369690b442f375fa9d2a328af645125f22de9ec796dc984acd062f82c33fbc59632c3ac1713063609",
184
+ "sha256": "36cf581996460a6e5255566cd49701d7da5d9eeeedce8c384d5506c87d4c4745",
185
+ "sha1": "e550922137f77454a0d11fa3ad650256082de0c0",
186
+ "md5": "fe8eefe17b59a662796cf3943c21a194"
187
187
  }
188
188
  ]
189
189
  }
@@ -0,0 +1 @@
1
+ ef7c9c2f345577ad543fb52f09f2db0d6879a8501537d660c14a946a648a26c5
@@ -0,0 +1 @@
1
+ b2e335a9ba52a340db15c05e6374d177f54ca10f7d570cf6a534bb6090e3f254498edfa3ab78eb6919b8a4f478b9b5f2421828fcd48e82795ecaf9cdef793108
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>host.exp.exponent</groupId>
11
11
  <artifactId>expo.modules.filesystem</artifactId>
12
- <version>58.0.1</version>
12
+ <version>58.0.3</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.filesystem</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -76,7 +76,7 @@
76
76
  <dependency>
77
77
  <groupId>org.jetbrains.kotlin</groupId>
78
78
  <artifactId>kotlin-stdlib-jdk7</artifactId>
79
- <version>2.2.0</version>
79
+ <version>2.2.10</version>
80
80
  <scope>runtime</scope>
81
81
  </dependency>
82
82
  <dependency>
@@ -93,7 +93,7 @@
93
93
  <dependency>
94
94
  <groupId>io.github.expo.pika</groupId>
95
95
  <artifactId>pika-api</artifactId>
96
- <version>1.0.0</version>
96
+ <version>1.1.0</version>
97
97
  <scope>runtime</scope>
98
98
  </dependency>
99
99
  </dependencies>
@@ -0,0 +1 @@
1
+ 75457bb40f2482811ea8d006da864c3b70d5ee1f5f1c15bf907c0b219cb2b5ab
@@ -0,0 +1 @@
1
+ 5bf716c48060e32d2545bab8d4e4382c22ecd8c921e1972e398eb9753b93168c114a09dd1dcb162f0ab8c0591d8cc3d792f5c676d5830d01c4ca58ce06452d1b
@@ -3,11 +3,11 @@
3
3
  <groupId>host.exp.exponent</groupId>
4
4
  <artifactId>expo.modules.filesystem</artifactId>
5
5
  <versioning>
6
- <latest>58.0.1</latest>
7
- <release>58.0.1</release>
6
+ <latest>58.0.3</latest>
7
+ <release>58.0.3</release>
8
8
  <versions>
9
- <version>58.0.1</version>
9
+ <version>58.0.3</version>
10
10
  </versions>
11
- <lastUpdated>20260922160133</lastUpdated>
11
+ <lastUpdated>20260928121121</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- 5179f3763b902d908564ce277dd0a1c1
1
+ ea82a8a8961e907f1c0a75c8cf084c34
@@ -1 +1 @@
1
- da3852e2453a60075c5d4cb80d4acfe2dfac98de
1
+ a8bd1820403f7e78f85202370b02425367931e17
@@ -1 +1 @@
1
- 985ef648aee9f3b0dd50b4a8955dddf0003d53fd0336874d1cfd678b1ac05b89
1
+ 89ae118d4e04198ba618f729a7d45ed36c975302e503315a1ffc4af17c2f30df
@@ -1 +1 @@
1
- 7996627b4790099df7b95bcbafa721192d2d7148aac96207fd87ad8f92fb5df28ea11dd3311c95ad49bfc68e9d0eae4ba33234cd12db2889b380958c7900480c
1
+ ab4b24eae863512505dc703280833f835cf39d5932569e0cff4b75234e2e0cf15dbb05221a4cdc37b71ffa81be9680b2e5be820b70d54c8f2e6ee1c314c5e54f
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-file-system",
3
- "version": "58.0.1",
3
+ "version": "58.0.3",
4
4
  "description": "Provides access to the local file system on the device.",
5
5
  "keywords": [
6
6
  "expo",
@@ -56,7 +56,7 @@
56
56
  "@types/jest": "^29.2.1",
57
57
  "@types/node": "^22.14.0",
58
58
  "expo-module-scripts": "56.0.3",
59
- "jest-expo": "58.0.3"
59
+ "jest-expo": "58.0.4"
60
60
  },
61
61
  "peerDependencies": {
62
62
  "expo": "*",
@@ -65,7 +65,7 @@
65
65
  "jest": {
66
66
  "preset": "expo-module-scripts"
67
67
  },
68
- "gitHead": "add8cbf49f477cfd2283ae05af35b4713a773c55",
68
+ "gitHead": "74f6d2b90bc50bd8df7b160d6e6b2204b37a8ce7",
69
69
  "scripts": {
70
70
  "precompile-ios": "et prebuild-package-for-publish",
71
71
  "build": "pnpm run build:lib && pnpm run build:plugin",
package/spm.config.json CHANGED
@@ -36,7 +36,8 @@
36
36
  "expo-modules-core/ExpoModulesCore",
37
37
  "ExpoFileSystem_ios_objc"
38
38
  ],
39
- "linkedFrameworks": ["Foundation", "UIKit", "QuickLook"]
39
+ "linkedFrameworks": ["Foundation", "UIKit", "QuickLook"],
40
+ "resources": [{ "path": "ios/PrivacyInfo.xcprivacy", "rule": "copy" }]
40
41
  }
41
42
  ]
42
43
  }
@@ -1 +0,0 @@
1
- 2e6ad5f7df771232299130f53feacfca90a78a253f6233ed93712d81d0ec839e
@@ -1 +0,0 @@
1
- 3b0f98abf47cb14cd67f832860f8570678a5252397cc401ad9fece2b2a1da29648aa98ec039edae6074a3045cea3a8780530204d6d14bbe2ef2b925c99436d95
@@ -1 +0,0 @@
1
- bdc5761e7ae67ac551dc575622c118bce1bdfe04d4a3af6c3cb50a139ce151d3
@@ -1 +0,0 @@
1
- a6a36939c4f2175dd1240f35aa5c7135c72a0e1161eb7d1b66b9582fac558f9851004d73c98f388a54138e819bbddb73d3de791d69a80e789722a31d2fb34427
@@ -1 +0,0 @@
1
- e96e68f17c84aabfbb77c017e962aed35e2e7614ea3113a6be7a530a18311791
@@ -1 +0,0 @@
1
- e4ffdd44e2e9515962d7cb550b51b7cbe2b92d51c92f943adcba3af67c8696157d178c3167aa2c1358b071fc6c09ee83c4f03357a2dae4dcbb783f6200aaaaea
@@ -1 +0,0 @@
1
- 8e11a796ca077dd034f712cfd7aed2915a22027a8a2e8ab5cc4ed17e9cf3efdc
@@ -1 +0,0 @@
1
- 4db34414ce5c9cca4602f2b629cf521cbdb65f24618d029cf1338ba29c75ed10d60ca3229f8fa0bb6a275ceff52147abde00e74f7f9bc709795b061741b96a9d