expo-task-manager 58.0.6 → 58.0.8
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.
- package/CHANGELOG.md +10 -0
- package/android/build.gradle +2 -2
- package/expo-module.config.json +1 -1
- package/ios/EXTaskManager/EXTaskService.m +148 -80
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.module → 58.0.8/expo.modules.taskmanager-58.0.8.module} +8 -8
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.8/expo.modules.taskmanager-58.0.8.module.md5 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.8/expo.modules.taskmanager-58.0.8.module.sha1 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.8/expo.modules.taskmanager-58.0.8.module.sha256 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.8/expo.modules.taskmanager-58.0.8.module.sha512 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.pom → 58.0.8/expo.modules.taskmanager-58.0.8.pom} +2 -2
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.8/expo.modules.taskmanager-58.0.8.pom.md5 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.8/expo.modules.taskmanager-58.0.8.pom.sha1 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.8/expo.modules.taskmanager-58.0.8.pom.sha256 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.8/expo.modules.taskmanager-58.0.8.pom.sha512 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/maven-metadata.xml +4 -4
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/maven-metadata.xml.md5 +1 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/maven-metadata.xml.sha1 +1 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/maven-metadata.xml.sha256 +1 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/maven-metadata.xml.sha512 +1 -1
- package/package.json +3 -3
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.module.md5 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.module.sha1 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.module.sha256 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.module.sha512 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.pom.md5 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.pom.sha1 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.pom.sha256 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/58.0.6/expo.modules.taskmanager-58.0.6.pom.sha512 +0 -1
- /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6-sources.jar → 58.0.8/expo.modules.taskmanager-58.0.8-sources.jar} +0 -0
- /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6-sources.jar.md5 → 58.0.8/expo.modules.taskmanager-58.0.8-sources.jar.md5} +0 -0
- /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6-sources.jar.sha1 → 58.0.8/expo.modules.taskmanager-58.0.8-sources.jar.sha1} +0 -0
- /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6-sources.jar.sha256 → 58.0.8/expo.modules.taskmanager-58.0.8-sources.jar.sha256} +0 -0
- /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6-sources.jar.sha512 → 58.0.8/expo.modules.taskmanager-58.0.8-sources.jar.sha512} +0 -0
- /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.aar → 58.0.8/expo.modules.taskmanager-58.0.8.aar} +0 -0
- /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.aar.md5 → 58.0.8/expo.modules.taskmanager-58.0.8.aar.md5} +0 -0
- /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.aar.sha1 → 58.0.8/expo.modules.taskmanager-58.0.8.aar.sha1} +0 -0
- /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.aar.sha256 → 58.0.8/expo.modules.taskmanager-58.0.8.aar.sha256} +0 -0
- /package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/{58.0.6/expo.modules.taskmanager-58.0.6.aar.sha512 → 58.0.8/expo.modules.taskmanager-58.0.8.aar.sha512} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,16 @@
|
|
|
10
10
|
|
|
11
11
|
### 💡 Others
|
|
12
12
|
|
|
13
|
+
## 58.0.8 — 2026-09-25
|
|
14
|
+
|
|
15
|
+
_This version does not introduce any user-facing changes._
|
|
16
|
+
|
|
17
|
+
## 58.0.7 — 2026-09-23
|
|
18
|
+
|
|
19
|
+
### 🐛 Bug fixes
|
|
20
|
+
|
|
21
|
+
- [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))
|
|
22
|
+
|
|
13
23
|
## 58.0.6 — 2026-09-22
|
|
14
24
|
|
|
15
25
|
_This version does not introduce any user-facing changes._
|
package/android/build.gradle
CHANGED
|
@@ -4,13 +4,13 @@ plugins {
|
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
group = 'host.exp.exponent'
|
|
7
|
-
version = '58.0.
|
|
7
|
+
version = '58.0.8'
|
|
8
8
|
|
|
9
9
|
android {
|
|
10
10
|
namespace "expo.modules.taskmanager"
|
|
11
11
|
defaultConfig {
|
|
12
12
|
versionCode 23
|
|
13
|
-
versionName "58.0.
|
|
13
|
+
versionName "58.0.8"
|
|
14
14
|
consumerProguardFiles 'proguard-rules.pro'
|
|
15
15
|
}
|
|
16
16
|
}
|
package/expo-module.config.json
CHANGED
|
@@ -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
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
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
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
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
|
-
|
|
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
|
-
|
|
300
|
-
|
|
301
|
-
|
|
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
|
-
|
|
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
|
-
|
|
317
|
-
|
|
318
|
-
|
|
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
|
-
|
|
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
|
-
|
|
406
|
-
|
|
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
|
-
|
|
476
|
-
|
|
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 = [
|
|
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
|
-
|
|
582
|
+
@synchronized (self->_lockTarget) {
|
|
583
|
+
[self->_requests removeObject:request];
|
|
584
|
+
}
|
|
532
585
|
request = nil;
|
|
533
586
|
}];
|
|
534
|
-
|
|
535
|
-
|
|
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
|
-
|
|
561
|
-
|
|
562
|
-
|
|
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
|
-
|
|
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
|
|
579
|
-
|
|
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
|
|
671
|
-
|
|
732
|
+
id<UMAppRecordInterface> appRecord;
|
|
733
|
+
@synchronized (_lockTarget) {
|
|
734
|
+
appRecord = _appRecords[appId];
|
|
735
|
+
}
|
|
736
|
+
|
|
672
737
|
if (appRecord) {
|
|
673
738
|
[appRecord invalidate];
|
|
674
|
-
|
|
675
|
-
|
|
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
|
+
"version": "58.0.8",
|
|
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.
|
|
37
|
-
"url": "expo.modules.taskmanager-58.0.
|
|
36
|
+
"name": "expo.modules.taskmanager-58.0.8.aar",
|
|
37
|
+
"url": "expo.modules.taskmanager-58.0.8.aar",
|
|
38
38
|
"size": 68422,
|
|
39
39
|
"sha512": "94ccf8fc5da6951871f25e68b0b515486f7c9eea4b28d7d121856979a6972c08ceefe3d6c1285e032e87eb4d0b83900b93a8575991a0d9777db77e96ec22b1b7",
|
|
40
40
|
"sha256": "a0fcfecf8097ea727261d2d8489c6fc37980587dc9b2ee1c68bc34dfaa10c91e",
|
|
@@ -84,14 +84,14 @@
|
|
|
84
84
|
"group": "io.github.expo.pika",
|
|
85
85
|
"module": "pika-api",
|
|
86
86
|
"version": {
|
|
87
|
-
"requires": "1.
|
|
87
|
+
"requires": "1.1.0"
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
],
|
|
91
91
|
"files": [
|
|
92
92
|
{
|
|
93
|
-
"name": "expo.modules.taskmanager-58.0.
|
|
94
|
-
"url": "expo.modules.taskmanager-58.0.
|
|
93
|
+
"name": "expo.modules.taskmanager-58.0.8.aar",
|
|
94
|
+
"url": "expo.modules.taskmanager-58.0.8.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.
|
|
114
|
-
"url": "expo.modules.taskmanager-58.0.
|
|
113
|
+
"name": "expo.modules.taskmanager-58.0.8-sources.jar",
|
|
114
|
+
"url": "expo.modules.taskmanager-58.0.8-sources.jar",
|
|
115
115
|
"size": 23624,
|
|
116
116
|
"sha512": "7ea57780f278e32cc26b3476ed3d7210534a2c2c35e8bd15ed25f6a5190a95e05e6e13d01b0375de5fd3f693d7fa78916d9f61d2a9e0eb72dafd0b61d8f073c7",
|
|
117
117
|
"sha256": "9c1d4981546e88f3305bbbb17a19e723e76ea68e7342c2097dc1ff807812639b",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
cfe6834e17cd3750c0b1f9adf4170b92
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0960e9f5d79b900844d9f3a8d186495a1663a274
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
b6127c2eca0b9a9f22f1be4bad5309b76f5861d296cdd94a02c37acf26895121
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
774df5e270f6b05d853774b5987a1a8cb86905561f6fb26cf58323f02e3d209f15412df616e24687d597d7947fa3511a5148ebe84aa767c052e3dba8ddc8d415
|
|
@@ -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.
|
|
12
|
+
<version>58.0.8</version>
|
|
13
13
|
<packaging>aar</packaging>
|
|
14
14
|
<name>expo.modules.taskmanager</name>
|
|
15
15
|
<url>https://github.com/expo/expo</url>
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
<dependency>
|
|
65
65
|
<groupId>io.github.expo.pika</groupId>
|
|
66
66
|
<artifactId>pika-api</artifactId>
|
|
67
|
-
<version>1.
|
|
67
|
+
<version>1.1.0</version>
|
|
68
68
|
<scope>runtime</scope>
|
|
69
69
|
</dependency>
|
|
70
70
|
</dependencies>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
14d15048bdeca66240976b140309515a
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
72b2299bb6086a030f8b1318afe42a894c54d7ed
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
90a1415e107eea6aeb7e9abd2180b1b4218f093b5b92a21fe5b926b7bc54d097
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
a3d6de5ea91612f4dc66ee1eec9e8c6afda016ffd9257266dd4d013260af80dca6ad62b4db8378dd4d7315a092b825431134e5a34987ca2b314d2ef8408dc859
|
|
@@ -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.
|
|
7
|
-
<release>58.0.
|
|
6
|
+
<latest>58.0.8</latest>
|
|
7
|
+
<release>58.0.8</release>
|
|
8
8
|
<versions>
|
|
9
|
-
<version>58.0.
|
|
9
|
+
<version>58.0.8</version>
|
|
10
10
|
</versions>
|
|
11
|
-
<lastUpdated>
|
|
11
|
+
<lastUpdated>20260925081259</lastUpdated>
|
|
12
12
|
</versioning>
|
|
13
13
|
</metadata>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
b26819e06e1b5545575af58678fd3235
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
97db400ca8fc6719acdd5b3617189a4410aedc38
|
package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/maven-metadata.xml.sha256
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
7f5187066ffad8868054d93b019a3afd3610399d3e0f8c10f185ee2f0292bad5
|
package/local-maven-repo/host/exp/exponent/expo.modules.taskmanager/maven-metadata.xml.sha512
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
bcb4a1599672421880e605c0713901849f4c32119150acccf10cbad50fa941d6ea578a3f6ad3d4be77998be7eec41d2be2fd534a24abdd89ab30e21ea52699fe
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-task-manager",
|
|
3
|
-
"version": "58.0.
|
|
3
|
+
"version": "58.0.8",
|
|
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.
|
|
32
|
+
"expo": "58.0.0-preview.7",
|
|
33
33
|
"expo-module-scripts": "56.0.3"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"expo": "*",
|
|
37
37
|
"react-native": "*"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "ad41d067bd3df6dd12f1788acc6b54a68e7a650d",
|
|
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
|
-
ad8f7a74b990fec692e4840f52f123f0
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
f2118def0ac3b7f3c02bba93f9b4f297011db6b1
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
9b28bc03d9a595f3a2a2a581070d92b84e44328e7818c6d2ec8a6c081f5424a1
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
71c495ed87ab5e55198af4ffcb291a05e775326f79c2027a690722f8222ce5fe8f5be3551573e3c7ddd40c1800a2db07d8dea104ea1a9dc6cd3c0d33936b042c
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
72176bfec9019e9c827e31e6889cd8eb
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
592be88754bc98e3de1681378e6941a2748fcc50
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
8cd0687d3011cc65b685a9f3678c9d14691e42b8011f72bee9cdcf550787dcd4
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
e5abac459fa4e70fd19a866005bb7a31a0bb4d7e570dccdae6b7801ba1bb08e505067da1157d31e109eef49945b0f7f457cceaa72f15bcc6a869276591844d00
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|