mi sembra di avere un sacco di segnalazioni di crash in questo modo:NSConcreteTask launchWithDictionary incidente
Crashed Thread: 14
Exception Type: EXC_GUARD
Exception Codes: 0x4000000200000000, 0x00007fff96f73c48
Thread 14 Crashed:
0 libsystem_kernel.dylib 0x00007fff97b7213a dup + 10
1 com.apple.Foundation 0x00007fff8a116cee -[NSConcreteTask launchWithDictionary:] + 2457
2 com.mycompany.myapp 0x0000000100022814 +[MCSoftwareUpdate automaticallyCheckForUpdates] + 352
3 com.apple.Foundation 0x00007fff89fed76b __NSThread__main__ + 1318
4 libsystem_pthread.dylib 0x00007fff8d2e4899 _pthread_body + 138
5 libsystem_pthread.dylib 0x00007fff8d2e472a _pthread_start + 137
6 libsystem_pthread.dylib 0x00007fff8d2e8fc9 thread_start + 13
Esso non riguarda soltanto il metodo di cui sopra - colpisce qualsiasi codice che utilizza NSTask
. Ho fatto alcune ricerche e mi è stato suggerito che riparare le autorizzazioni potesse risolvere il problema, ma non è molto utile perché non ho modo di entrare in contatto con gli utenti che segnalano questi arresti anomali. Sto già posizionando il codice in un blocco catch try: c'è qualcos'altro che posso fare alla mia estremità per minimizzarlo o eliminarlo?
Ho scritto la seguente funzione per avvolgere NSTask
.
Codice:
+ (BOOL)runTask:(NSString*)taskPath arguments:(NSArray*)args task:(NSTask**)taskObj
{
if (![[NSFileManager defaultManager] isExecutableFileAtPath:taskPath] || [[NSWorkspace sharedWorkspace] isFilePackageAtPath:taskPath]) {
NSLog(@"Error: %@ is not executable",taskPath);
return NO;
}
@try {
NSTask *task = [[NSTask alloc] init];
if (taskObj != NULL) *taskObj = task;
[task setLaunchPath:taskPath];
if (args) [task setArguments:args];
[task setStandardError:[NSFileHandle fileHandleWithNullDevice]];
[task setStandardOutput:[NSFileHandle fileHandleWithNullDevice]];
[task launch];
[task waitUntilExit];
taskObj = nil;
[task release];
return YES;
}
@catch (NSException *exc) {
NSLog(@"Exception running task %@: %@",taskPath,[exc reason]);
}
return NO;
}
sto vedendo questo in una delle mie applicazioni, quando il sistema si sta scaricando sulle maniglie di file . Stranamente, solo quando le mie app funzionano in modo indipendente - quando lo eseguo per Xcode, non si blocca. Dopo un riavvio, il problema non persiste. Poiché si tratta di un segnale, la cattura di eccezioni non va bene, quindi questa è un'esperienza utente davvero terribile, non essendo in grado di gestirlo :(. –
Sì, un cliente mi ha confermato ieri che è scomparso per lui dopo un riavvio. – mwoods