expo-task-manager 58.0.6 → 58.0.7

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 (38) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/android/build.gradle +2 -2
  3. package/expo-module.config.json +1 -1
  4. package/ios/EXTaskManager/EXTaskService.m +148 -80
  5. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.module → 58.0.7/expo.modules.taskmanager-58.0.7.module} +7 -7
  6. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.7/expo.modules.taskmanager-58.0.7.module.md5 +1 -0
  7. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.7/expo.modules.taskmanager-58.0.7.module.sha1 +1 -0
  8. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.7/expo.modules.taskmanager-58.0.7.module.sha256 +1 -0
  9. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.7/expo.modules.taskmanager-58.0.7.module.sha512 +1 -0
  10. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.pom → 58.0.7/expo.modules.taskmanager-58.0.7.pom} +1 -1
  11. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.7/expo.modules.taskmanager-58.0.7.pom.md5 +1 -0
  12. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.7/expo.modules.taskmanager-58.0.7.pom.sha1 +1 -0
  13. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.7/expo.modules.taskmanager-58.0.7.pom.sha256 +1 -0
  14. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.7/expo.modules.taskmanager-58.0.7.pom.sha512 +1 -0
  15. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/maven-metadata.xml +4 -4
  16. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/maven-metadata.xml.md5 +1 -1
  17. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/maven-metadata.xml.sha1 +1 -1
  18. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/maven-metadata.xml.sha256 +1 -1
  19. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/maven-metadata.xml.sha512 +1 -1
  20. package/package.json +3 -3
  21. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.module.md5 +0 -1
  22. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.module.sha1 +0 -1
  23. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.module.sha256 +0 -1
  24. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.module.sha512 +0 -1
  25. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.pom.md5 +0 -1
  26. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.pom.sha1 +0 -1
  27. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.pom.sha256 +0 -1
  28. package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.pom.sha512 +0 -1
  29. /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6-sources.jar → 58.0.7/expo.modules.taskmanager-58.0.7-sources.jar} +0 -0
  30. /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6-sources.jar.md5 → 58.0.7/expo.modules.taskmanager-58.0.7-sources.jar.md5} +0 -0
  31. /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6-sources.jar.sha1 → 58.0.7/expo.modules.taskmanager-58.0.7-sources.jar.sha1} +0 -0
  32. /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6-sources.jar.sha256 → 58.0.7/expo.modules.taskmanager-58.0.7-sources.jar.sha256} +0 -0
  33. /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6-sources.jar.sha512 → 58.0.7/expo.modules.taskmanager-58.0.7-sources.jar.sha512} +0 -0
  34. /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.aar → 58.0.7/expo.modules.taskmanager-58.0.7.aar} +0 -0
  35. /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.aar.md5 → 58.0.7/expo.modules.taskmanager-58.0.7.aar.md5} +0 -0
  36. /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.aar.sha1 → 58.0.7/expo.modules.taskmanager-58.0.7.aar.sha1} +0 -0
  37. /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.aar.sha256 → 58.0.7/expo.modules.taskmanager-58.0.7.aar.sha256} +0 -0
  38. /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.aar.sha512 → 58.0.7/expo.modules.taskmanager-58.0.7.aar.sha512} +0 -0
package/CHANGELOG.md CHANGED
@@ -10,6 +10,12 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 58.0.7 — 2026-09-23
14
+
15
+ ### 🐛 Bug fixes
16
+
17
+ - [iOS] Fix a data race on `EXTaskService`'s collections that could crash the app when one app context registered its task manager while another tore down, such as on a dev-client reload or `Updates.reloadAsync()`. ([#49558](https://github.com/expo/expo/pull/49558) by [@vonovak](https://github.com/vonovak))
18
+
13
19
  ## 58.0.6 — 2026-09-22
14
20
 
15
21
  _This version does not introduce any user-facing changes._
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'host.exp.exponent'
7
- version = '58.0.6'
7
+ version = '58.0.7'
8
8
 
9
9
  android {
10
10
  namespace "expo.modules.taskmanager"
11
11
  defaultConfig {
12
12
  versionCode 23
13
- versionName "58.0.6"
13
+ versionName "58.0.7"
14
14
  consumerProguardFiles 'proguard-rules.pro'
15
15
  }
16
16
  }
@@ -9,7 +9,7 @@
9
9
  "publication": {
10
10
  "groupId": "host.exp.exponent",
11
11
  "artifactId": "expo.modules.taskmanager",
12
- "version": "58.0.6",
12
+ "version": "58.0.7",
13
13
  "repository": "local-maven-repo"
14
14
  }
15
15
  }
@@ -35,6 +35,10 @@
35
35
  // Storing events per app. Schema: { "<appId>": [<eventIds...>] }
36
36
  @property (nonatomic, strong) NSMutableDictionary<NSString *, NSMutableArray<NSString *> *> *events;
37
37
 
38
+ // Synchronization token guarding the collections above against concurrent access from different
39
+ // React instances' JS threads and OS callbacks. @synchronized is recursive and releases on exception unwind.
40
+ @property (nonatomic, strong) NSObject *lockTarget;
41
+
38
42
  @end
39
43
 
40
44
  @implementation EXTaskService
@@ -60,6 +64,7 @@
60
64
  _headlessTaskManagers = [NSMapTable strongToWeakObjectsMapTable];
61
65
  _eventsQueues = [NSMutableDictionary new];
62
66
  _events = [NSMutableDictionary new];
67
+ _lockTarget = [NSObject new];
63
68
  }
64
69
  return self;
65
70
  }
@@ -134,16 +139,18 @@
134
139
  @throw [NSException exceptionWithName:@"E_INVALID_TASK_CONSUMER" reason:reason userInfo:errorInfo];
135
140
  }
136
141
 
137
- NSMutableDictionary *appTasks = [[self _getTasksForAppId:appId] mutableCopy];
138
-
139
- [appTasks removeObjectForKey:taskName];
140
-
141
- if (appTasks.count == 0) {
142
- [_tasks removeObjectForKey:appId];
143
- } else {
144
- [_tasks setObject:appTasks forKey:appId];
142
+ @synchronized (_lockTarget) {
143
+ NSMutableDictionary *appTasks = [[self _getTasksForAppId:appId] mutableCopy];
144
+
145
+ [appTasks removeObjectForKey:taskName];
146
+
147
+ if (appTasks.count == 0) {
148
+ [_tasks removeObjectForKey:appId];
149
+ } else {
150
+ [_tasks setObject:appTasks forKey:appId];
151
+ }
145
152
  }
146
-
153
+
147
154
  if ([task.consumer respondsToSelector:@selector(didUnregister)]) {
148
155
  [task.consumer didUnregister];
149
156
  }
@@ -155,8 +162,11 @@
155
162
  */
156
163
  - (void)unregisterAllTasksForAppId:(NSString *)appId
157
164
  {
158
- NSDictionary *appTasks = _tasks[appId];
159
-
165
+ NSDictionary *appTasks;
166
+ @synchronized (_lockTarget) {
167
+ appTasks = _tasks[appId];
168
+ }
169
+
160
170
  if (appTasks) {
161
171
  // Call `didUnregister` on task consumers
162
172
  for (EXTask *task in [appTasks allValues]) {
@@ -164,9 +174,11 @@
164
174
  [task.consumer didUnregister];
165
175
  }
166
176
  }
167
-
168
- [_tasks removeObjectForKey:appId];
169
-
177
+
178
+ @synchronized (_lockTarget) {
179
+ [_tasks removeObjectForKey:appId];
180
+ }
181
+
170
182
  // Remove the app from the config in user defaults.
171
183
  [self _removeFromConfigAppWithId:appId];
172
184
  }
@@ -223,29 +235,45 @@
223
235
  }
224
236
 
225
237
  // Inform requests about finished tasks
226
- for (EXTaskExecutionRequest *request in [_requests copy]) {
238
+ NSArray<EXTaskExecutionRequest *> *requests;
239
+ @synchronized (_lockTarget) {
240
+ requests = [_requests copy];
241
+ }
242
+
243
+ for (EXTaskExecutionRequest *request in requests) {
227
244
  if ([request isIncludingTask:task]) {
228
245
  [request task:task didFinishWithResult:result];
229
246
  }
230
247
  }
231
-
248
+
232
249
  // Remove event and maybe invalidate related app record
233
- NSMutableArray *appEvents = _events[appId];
234
-
235
- if (appEvents) {
236
- [appEvents removeObject:eventId];
237
-
238
- if (appEvents.count == 0) {
239
- [self->_events removeObjectForKey:appId];
240
-
241
- // Invalidate app record but after 1 second delay so we can still take batched events.
242
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
243
- if (!self->_events[appId]) {
244
- [self _invalidateAppWithId:appId];
245
- }
246
- });
250
+ BOOL shouldMaybeInvalidate = NO;
251
+ @synchronized (_lockTarget) {
252
+ NSMutableArray *appEvents = _events[appId];
253
+
254
+ if (appEvents) {
255
+ [appEvents removeObject:eventId];
256
+
257
+ if (appEvents.count == 0) {
258
+ [self->_events removeObjectForKey:appId];
259
+ shouldMaybeInvalidate = YES;
260
+ }
247
261
  }
248
262
  }
263
+
264
+ if (shouldMaybeInvalidate) {
265
+ // Invalidate app record but after 1 second delay so we can still take batched events.
266
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
267
+ BOOL stillEmpty;
268
+ @synchronized (self->_lockTarget) {
269
+ stillEmpty = self->_events[appId] == nil;
270
+ }
271
+
272
+ if (stillEmpty) {
273
+ [self _invalidateAppWithId:appId];
274
+ }
275
+ });
276
+ }
249
277
  }
250
278
 
251
279
  - (void)setTaskManager:(id<EXTaskManagerInterface>)taskManager
@@ -256,23 +284,24 @@
256
284
  // Having two tables for them is to prevent race condition problems,
257
285
  // when both foreground and background apps are launching at the same time.
258
286
  BOOL isHeadless = [taskManager isRunningInHeadlessMode];
259
- NSMapTable *taskManagersTable = isHeadless ? _headlessTaskManagers : _taskManagers;
260
-
261
- // Set task manager in appropriate table.
262
- [taskManagersTable setObject:taskManager forKey:appId];
263
-
287
+
288
+ NSArray<NSDictionary *> *appEventQueue;
289
+ @synchronized (_lockTarget) {
290
+ NSMapTable *taskManagersTable = isHeadless ? _headlessTaskManagers : _taskManagers;
291
+
292
+ // Set task manager in appropriate table.
293
+ [taskManagersTable setObject:taskManager forKey:appId];
294
+
295
+ // Snapshot events waiting for the task manager and remove the queue for that app.
296
+ appEventQueue = [_eventsQueues[appId] copy];
297
+ [_eventsQueues removeObjectForKey:appId];
298
+ }
299
+
264
300
  // Execute events waiting for the task manager.
265
- NSMutableArray *appEventQueue = _eventsQueues[appId];
266
-
267
- if (appEventQueue) {
268
- for (NSDictionary *body in appEventQueue) {
269
- [taskManager executeWithBody:body];
270
- }
301
+ for (NSDictionary *body in appEventQueue) {
302
+ [taskManager executeWithBody:body];
271
303
  }
272
-
273
- // Remove events queue for that app.
274
- [_eventsQueues removeObjectForKey:appId];
275
-
304
+
276
305
  if (!isHeadless) {
277
306
  // Maybe update app url in user defaults. It might change only in non-headless mode.
278
307
  [self _maybeUpdateAppUrl:appUrl forAppId:appId];
@@ -296,26 +325,35 @@
296
325
  NSLog(@"EXTaskService: Executing task '%@' for app '%@'.", task.name, task.appId);
297
326
 
298
327
  // Save an event so we can keep tracking events for this app
299
- NSMutableArray *appEvents = _events[task.appId] ?: [NSMutableArray new];
300
- [appEvents addObject:executionInfo[@"eventId"]];
301
- [_events setObject:appEvents forKey:task.appId];
302
-
328
+ @synchronized (_lockTarget) {
329
+ NSMutableArray *appEvents = _events[task.appId] ?: [NSMutableArray new];
330
+ [appEvents addObject:executionInfo[@"eventId"]];
331
+ [_events setObject:appEvents forKey:task.appId];
332
+ }
333
+
303
334
  if (taskManager != nil) {
304
335
  // Task manager is initialized and can execute events
305
336
  [taskManager executeWithBody:body];
306
337
  return;
307
338
  }
308
-
309
- if (_appRecords[task.appId] == nil) {
339
+
340
+ BOOL hasAppRecord;
341
+ @synchronized (_lockTarget) {
342
+ hasAppRecord = _appRecords[task.appId] != nil;
343
+ }
344
+
345
+ if (!hasAppRecord) {
310
346
  // No app record yet - let's spin it up!
311
347
  [self _loadAppWithId:task.appId appUrl:task.appUrl];
312
348
  }
313
-
349
+
314
350
  // App record for that app exists, but it's not fully loaded as its task manager is not there yet.
315
351
  // We need to add event's body to the queue from which events will be executed once the task manager is ready.
316
- NSMutableArray *appEventsQueue = _eventsQueues[task.appId] ?: [NSMutableArray new];
317
- [appEventsQueue addObject:body];
318
- [_eventsQueues setObject:appEventsQueue forKey:task.appId];
352
+ @synchronized (_lockTarget) {
353
+ NSMutableArray *appEventsQueue = _eventsQueues[task.appId] ?: [NSMutableArray new];
354
+ [appEventsQueue addObject:body];
355
+ [_eventsQueues setObject:appEventsQueue forKey:task.appId];
356
+ }
319
357
  return;
320
358
  }
321
359
 
@@ -382,7 +420,11 @@
382
420
  */
383
421
  - (NSDictionary<NSString *, EXTask *> *)_getTasksForAppId:(NSString *)appId
384
422
  {
385
- return _tasks[appId];
423
+ NSDictionary<NSString *, EXTask *> *appTasks;
424
+ @synchronized (_lockTarget) {
425
+ appTasks = _tasks[appId];
426
+ }
427
+ return appTasks;
386
428
  }
387
429
 
388
430
  /**
@@ -394,16 +436,19 @@
394
436
  consumerClass:(Class)consumerClass
395
437
  options:(nullable NSDictionary *)options
396
438
  {
397
- NSMutableDictionary *appTasks = [[self _getTasksForAppId:appId] mutableCopy] ?: [NSMutableDictionary new];
398
439
  EXTask *task = [[EXTask alloc] initWithName:taskName
399
440
  appId:appId
400
441
  appUrl:appUrl
401
442
  consumerClass:consumerClass
402
443
  options:options
403
444
  delegate:self];
404
-
405
- [appTasks setObject:task forKey:task.name];
406
- [_tasks setObject:appTasks forKey:appId];
445
+
446
+ @synchronized (_lockTarget) {
447
+ NSMutableDictionary *appTasks = [[self _getTasksForAppId:appId] mutableCopy] ?: [NSMutableDictionary new];
448
+ [appTasks setObject:task forKey:task.name];
449
+ [_tasks setObject:appTasks forKey:appId];
450
+ }
451
+
407
452
  [task.consumer didRegisterTask:task];
408
453
  return task;
409
454
  }
@@ -472,11 +517,17 @@
472
517
 
473
518
  - (void)_iterateTasksUsingBlock:(void(^)(id<EXTaskInterface> task))block
474
519
  {
475
- for (NSString *appId in _tasks) {
476
- NSDictionary *appTasks = [self _getTasksForAppId:appId];
477
-
520
+ // Snapshot so we can call out to task consumers below without holding the lock.
521
+ NSDictionary<NSString *, NSDictionary *> *tasksSnapshot;
522
+ @synchronized (_lockTarget) {
523
+ tasksSnapshot = [_tasks copy];
524
+ }
525
+
526
+ for (NSString *appId in tasksSnapshot) {
527
+ NSDictionary *appTasks = tasksSnapshot[appId];
528
+
478
529
  for (NSString *taskName in appTasks) {
479
- id<EXTaskInterface> task = [self _getTaskWithName:taskName forAppId:appId];
530
+ id<EXTaskInterface> task = appTasks[taskName];
480
531
  block(task);
481
532
  }
482
533
  }
@@ -528,12 +579,16 @@
528
579
  callback(results);
529
580
  }
530
581
 
531
- [self->_requests removeObject:request];
582
+ @synchronized (self->_lockTarget) {
583
+ [self->_requests removeObject:request];
584
+ }
532
585
  request = nil;
533
586
  }];
534
-
535
- [_requests addObject:request];
536
-
587
+
588
+ @synchronized (_lockTarget) {
589
+ [_requests addObject:request];
590
+ }
591
+
537
592
  [self _iterateTasksUsingBlock:^(id<EXTaskInterface> task) {
538
593
  if ([task.consumer.class respondsToSelector:@selector(supportsLaunchReason:)] && [task.consumer.class supportsLaunchReason:launchReason]) {
539
594
  [self _addTask:task toRequest:request withInfo:userInfo];
@@ -557,16 +612,20 @@
557
612
  appRecord = [appLoader loadAppWithUrl:appUrl options:nil callback:^(BOOL success, NSError *error) {
558
613
  if (!success) {
559
614
  NSLog(@"EXTaskService: Loading app '%@' from url '%@' failed. Error description: %@", appId, appUrl, error.description);
560
- [self->_events removeObjectForKey:appId];
561
- [self->_eventsQueues removeObjectForKey:appId];
562
- [self->_appRecords removeObjectForKey:appId];
563
-
615
+ @synchronized (self->_lockTarget) {
616
+ [self->_events removeObjectForKey:appId];
617
+ [self->_eventsQueues removeObjectForKey:appId];
618
+ [self->_appRecords removeObjectForKey:appId];
619
+ }
620
+
564
621
  // Host unreachable? Unregister all tasks for that app.
565
622
  [self unregisterAllTasksForAppId:appId];
566
623
  }
567
624
  }];
568
-
569
- [_appRecords setObject:appRecord forKey:appId];
625
+
626
+ @synchronized (_lockTarget) {
627
+ [_appRecords setObject:appRecord forKey:appId];
628
+ }
570
629
  }
571
630
  }
572
631
 
@@ -575,8 +634,11 @@
575
634
  */
576
635
  - (id<EXTaskManagerInterface>)_taskManagerForAppId:(NSString *)appId
577
636
  {
578
- id<EXTaskManagerInterface> taskManager = [_taskManagers objectForKey:appId];
579
- return taskManager ?: [_headlessTaskManagers objectForKey:appId];
637
+ id<EXTaskManagerInterface> taskManager;
638
+ @synchronized (_lockTarget) {
639
+ taskManager = [_taskManagers objectForKey:appId] ?: [_headlessTaskManagers objectForKey:appId];
640
+ }
641
+ return taskManager;
580
642
  }
581
643
 
582
644
  /**
@@ -667,12 +729,18 @@
667
729
 
668
730
  - (void)_invalidateAppWithId:(NSString *)appId
669
731
  {
670
- id<UMAppRecordInterface> appRecord = _appRecords[appId];
671
-
732
+ id<UMAppRecordInterface> appRecord;
733
+ @synchronized (_lockTarget) {
734
+ appRecord = _appRecords[appId];
735
+ }
736
+
672
737
  if (appRecord) {
673
738
  [appRecord invalidate];
674
- [_appRecords removeObjectForKey:appId];
675
- [_headlessTaskManagers removeObjectForKey:appId];
739
+
740
+ @synchronized (_lockTarget) {
741
+ [_appRecords removeObjectForKey:appId];
742
+ [_headlessTaskManagers removeObjectForKey:appId];
743
+ }
676
744
  }
677
745
  }
678
746
 
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "host.exp.exponent",
5
5
  "module": "expo.modules.taskmanager",
6
- "version": "58.0.6",
6
+ "version": "58.0.7",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -33,8 +33,8 @@
33
33
  ],
34
34
  "files": [
35
35
  {
36
- "name": "expo.modules.taskmanager-58.0.6.aar",
37
- "url": "expo.modules.taskmanager-58.0.6.aar",
36
+ "name": "expo.modules.taskmanager-58.0.7.aar",
37
+ "url": "expo.modules.taskmanager-58.0.7.aar",
38
38
  "size": 68422,
39
39
  "sha512": "94ccf8fc5da6951871f25e68b0b515486f7c9eea4b28d7d121856979a6972c08ceefe3d6c1285e032e87eb4d0b83900b93a8575991a0d9777db77e96ec22b1b7",
40
40
  "sha256": "a0fcfecf8097ea727261d2d8489c6fc37980587dc9b2ee1c68bc34dfaa10c91e",
@@ -90,8 +90,8 @@
90
90
  ],
91
91
  "files": [
92
92
  {
93
- "name": "expo.modules.taskmanager-58.0.6.aar",
94
- "url": "expo.modules.taskmanager-58.0.6.aar",
93
+ "name": "expo.modules.taskmanager-58.0.7.aar",
94
+ "url": "expo.modules.taskmanager-58.0.7.aar",
95
95
  "size": 68422,
96
96
  "sha512": "94ccf8fc5da6951871f25e68b0b515486f7c9eea4b28d7d121856979a6972c08ceefe3d6c1285e032e87eb4d0b83900b93a8575991a0d9777db77e96ec22b1b7",
97
97
  "sha256": "a0fcfecf8097ea727261d2d8489c6fc37980587dc9b2ee1c68bc34dfaa10c91e",
@@ -110,8 +110,8 @@
110
110
  },
111
111
  "files": [
112
112
  {
113
- "name": "expo.modules.taskmanager-58.0.6-sources.jar",
114
- "url": "expo.modules.taskmanager-58.0.6-sources.jar",
113
+ "name": "expo.modules.taskmanager-58.0.7-sources.jar",
114
+ "url": "expo.modules.taskmanager-58.0.7-sources.jar",
115
115
  "size": 23624,
116
116
  "sha512": "7ea57780f278e32cc26b3476ed3d7210534a2c2c35e8bd15ed25f6a5190a95e05e6e13d01b0375de5fd3f693d7fa78916d9f61d2a9e0eb72dafd0b61d8f073c7",
117
117
  "sha256": "9c1d4981546e88f3305bbbb17a19e723e76ea68e7342c2097dc1ff807812639b",
@@ -0,0 +1 @@
1
+ 4b17da35c4d3b6e2350e01b548554eefb8258f51b92e23418af0f1bcc74f59d6
@@ -0,0 +1 @@
1
+ a52f5618fd24c3a80a4db0245da83cf60756b686b05920a188bfc257a1be61a7fcaa995d81610e50dd9fbec60a3232e1fdee21f641044f3a26463490820c35ae
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>host.exp.exponent</groupId>
11
11
  <artifactId>expo.modules.taskmanager</artifactId>
12
- <version>58.0.6</version>
12
+ <version>58.0.7</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.taskmanager</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -0,0 +1 @@
1
+ 9628069dae0a72f8137d7463622aa23cf841270986f6e2356df8e95dc848f5ad
@@ -0,0 +1 @@
1
+ 98e6a934b54be76c4ffabf067fc156a38927a0207087a596dd35e405d1e65c2541367c7d51cdc79fa85f4436f2e039676bff4519a5604372ca4e3dbb530cac00
@@ -3,11 +3,11 @@
3
3
  <groupId>host.exp.exponent</groupId>
4
4
  <artifactId>expo.modules.taskmanager</artifactId>
5
5
  <versioning>
6
- <latest>58.0.6</latest>
7
- <release>58.0.6</release>
6
+ <latest>58.0.7</latest>
7
+ <release>58.0.7</release>
8
8
  <versions>
9
- <version>58.0.6</version>
9
+ <version>58.0.7</version>
10
10
  </versions>
11
- <lastUpdated>20260922160129</lastUpdated>
11
+ <lastUpdated>20260923154008</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- dcf9bf1c9de56ddd5f03c82051bf2e8f
1
+ f9f70a85d70655053c2d6a3181df9c5e
@@ -1 +1 @@
1
- 0506f0f717712cb2594a426e89e681617435a35a
1
+ f01ae0da35e790fa1bc3853b8c04e8ca509f5c42
@@ -1 +1 @@
1
- 1de38f425d65457abef8a25ac8a1f48872250ad3565eacc548b27fb752f2bb19
1
+ 75dbbff8d0f3744eec768fb68441a91d80bf5a03bb62e57a6aa392b81171db51
@@ -1 +1 @@
1
- 50343942b69fc2a6d0ffab59bb5e992bc280be7a148ed4c97cb95ad4b4f3a5720f5c89b9d8db815c28b2e67ba06d582feec796170ec472bac60ad06f78c693e3
1
+ 45aff3d46d7c6c05437c411d94bfb2ed82c84c53648b940d41714083b3cbb0adb43c42f32e29ad8098f1bf86dfc9f793bd4930a6a7e3480af1fd8e791e7e2faf
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-task-manager",
3
- "version": "58.0.6",
3
+ "version": "58.0.7",
4
4
  "description": "Expo module that provides support for tasks that can run in the background.",
5
5
  "keywords": [
6
6
  "background",
@@ -29,14 +29,14 @@
29
29
  "devDependencies": {
30
30
  "@types/jest": "^29.2.1",
31
31
  "@types/node": "^22.14.0",
32
- "expo": "58.0.0-preview.5",
32
+ "expo": "58.0.0-preview.6",
33
33
  "expo-module-scripts": "56.0.3"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "expo": "*",
37
37
  "react-native": "*"
38
38
  },
39
- "gitHead": "add8cbf49f477cfd2283ae05af35b4713a773c55",
39
+ "gitHead": "8aeb4368d396d2d71a2fc8c652c4d1d4d53ed858",
40
40
  "scripts": {
41
41
  "build": "pnpm run build:lib && pnpm run build:plugin",
42
42
  "build:lib": "expo-build src",
@@ -1 +0,0 @@
1
- 9b28bc03d9a595f3a2a2a581070d92b84e44328e7818c6d2ec8a6c081f5424a1
@@ -1 +0,0 @@
1
- 71c495ed87ab5e55198af4ffcb291a05e775326f79c2027a690722f8222ce5fe8f5be3551573e3c7ddd40c1800a2db07d8dea104ea1a9dc6cd3c0d33936b042c
@@ -1 +0,0 @@
1
- 8cd0687d3011cc65b685a9f3678c9d14691e42b8011f72bee9cdcf550787dcd4
@@ -1 +0,0 @@
1
- e5abac459fa4e70fd19a866005bb7a31a0bb4d7e570dccdae6b7801ba1bb08e505067da1157d31e109eef49945b0f7f457cceaa72f15bcc6a869276591844d00