У меня есть обновление по этому вопросу. Мне удалось устранить проблему, но, к сожалению, я не уверен на 100%, какой из удаленных файлов был источником проблемы. Тем не менее, я хотел бы поделиться своим подходом.
Я был почти уверен, что проблема должна находиться где-то в папке приложения, так как в противном случае приложение не будет работать после чистой установки, но не при обновлении.
Я решил сравнить файловую систему внутри моего приложения при чистой установке или с этой неработающей версией после обновления. Я решил перебрать папки приложения и распечатать файлы. До и после очистки кеша. Я добавил следующий код в мой AppDelegate
для сравнения:
NSArray *paths = [NSArray arrayWithObjects:
[NSNumber numberWithUnsignedInt:NSApplicationDirectory],
[NSNumber numberWithUnsignedInt:NSAutosavedInformationDirectory],
[NSNumber numberWithUnsignedInt:NSDesktopDirectory],
[NSNumber numberWithUnsignedInt:NSCachesDirectory],
[NSNumber numberWithUnsignedInt:NSApplicationSupportDirectory],
[NSNumber numberWithUnsignedInt:NSDownloadsDirectory],
[NSNumber numberWithUnsignedInt:NSInputMethodsDirectory],
[NSNumber numberWithUnsignedInt:NSMoviesDirectory],
[NSNumber numberWithUnsignedInt:NSMusicDirectory],
[NSNumber numberWithUnsignedInt:NSPicturesDirectory],
[NSNumber numberWithUnsignedInt:NSPrinterDescriptionDirectory],
[NSNumber numberWithUnsignedInt:NSSharedPublicDirectory],
[NSNumber numberWithUnsignedInt:NSPreferencePanesDirectory],
[NSNumber numberWithUnsignedInt:NSItemReplacementDirectory],
[NSNumber numberWithUnsignedInt:NSAllApplicationsDirectory],
[NSNumber numberWithUnsignedInt:NSAllLibrariesDirectory],
nil];
NSFileManager *manager = [NSFileManager defaultManager];
for ( NSNumber *directory in paths ) {
NSArray *tp = NSSearchPathForDirectoriesInDomains([directory unsignedIntegerValue] , NSUserDomainMask, YES);
if ( [tp count] == 0 )
continue;
NSString *path = [tp objectAtIndex:0];
NSDirectoryEnumerator *direnum = [manager enumeratorAtPath:path];
NSString *filename;
NSLog(@"-------------------------------------------------------");
NSLog(@"== path: %@", path);
NSLog(@"-------------------------------------------------------");
while ( filename = [direnum nextObject] ) {
NSString *thefile = [NSString stringWithFormat:@"%@/%@", path, filename];
NSLog( @"\t%@, deletable? %d", filename, [manager isDeletableFileAtPath:thefile] );
}
}
Затем я сравнил вывод и обнаружил, что единственные оставшиеся файлы находятся в NSAllLibrariesDirectory
. А именно они были
Cookies/Cookies.binarycookies
Preferences/.GlobalPreferences.plist
Preferences/com.apple.PeoplePicker.plist
Preferences/com.medienhaus.VOL.plist
Здесь я эпически потерпел неудачу и реализовал метод очистки для удаления файлов вместо того, чтобы переходить один за другим, чтобы выяснить, какой файл вызвал проблему.
Так что теперь у меня есть рабочая версия, но я точно не знаю, какой из этих четырех файлов сломал ее. Наиболее вероятным является Cookies.binarycookies
.