рдЬреАрд╕реАрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдирд┐рдЯрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ iOS рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ iTunes File Sharing рдХреЛ Info.plist рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝рдХрд░ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
UIFileSharingEnabled = YES 
рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдзреА рд▓рдбрд╝рд╛рдИ рднреА рдирд╣реАрдВ рд╣реИред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐, рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЫрд╡рд┐

рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдВрд╕реАрдбрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧрд╛рдЗрдб рд╕реЗ рдХрд╛рдлреА рдереНрдпреЛрд░реА рд╣реИред рдЬреАрд╕реАрдбреА рдХреА рдкреНрд░реЗрд╖рдг рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ - рдПрдХ рдореМрд▓рд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдордиреНрд╡рдп рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ , рдЬреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдпрд╛ рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ dispatch_source_create рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреНрд░реЗрд╖рдг рдкреНрд░рдмрдВрдзрдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╕реНрд░реЛрдд рдПрдХ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ (рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░) рд╣реЛрдЧрд╛, рдФрд░ рд╕реНрд╡рдпрдВ рдИрд╡реЗрдВрдЯ (рдлрд╝рд╛рдЗрд▓ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ) рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдмреНрд▓реЙрдХ рдХреЛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдпрд╣рд╛рдВ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдШрдЯрдирд╛ рдбрд┐рд╕реНрдХ рдкрд░ рд▓рд┐рдЦреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдХреА рдЧрдИ рд╣реИ, рдФрд░ рдлрд╛рдЗрд▓реЗрдВ рдЕрдм рдмрдбрд╝реА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдмреНрд▓реЙрдХ рдореЗрдВ, рд╣рдо рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдЕрдВрдд рдХреА рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЬрд╛рдВрдЪ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рддреЛ, рд╢рд░реАрд░ рдХреЗ рдХрд░реАрдмред рд╣рдо рджреЛ рдореБрдЦреНрдп рддрд░реАрдХреЗ startMonitor рдФрд░ stopMonitor , рдХреНрд░рдорд╢рдГ рд╣рдо рдЬрд┐рд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреА рдЬрд╝рд░реВрд░рдд рдХреА рдирд┐рдЧрд░рд╛рдиреА рд╢реБрд░реВ startMonitor рдФрд░ stopMonitor , рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрд╕ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд╣рд╛рдпрдХ рддрд░реАрдХреЗ рднреА stopMonitor , рдЬрд┐рд╕реЗ рд╣реИрдВрдбрд▓рд░ рдмреНрд▓реЙрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

 - (void)startMonitor { //     dispatch_source_t if (_src != NULL) return; //    Documents   NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; //  ,     (O_EVTONLY) _fileDescriptor = open([docPath fileSystemRepresentation], O_EVTONLY); //    thread,     UI dispatch_queue_t queue = dispatch_get_main_queue(); //    dispatch source    (write) _src = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE, _fileDescriptor, DISPATCH_VNODE_WRITE, queue); // handler block      dispatch_source_set_event_handler(_src, ^{ [self directoryDidChange]; }); //     dispatch_source_set_cancel_handler(_src, ^{ close(_fileDescriptor); }); dispatch_resume(_src); } - (void)stopMonitor { if (_src) { //   ,    dispatch_source_cancel(_src); _src = NULL; } } - (void)directoryDidChange { if(!waitingForDocumentsDirectoryTimeout) { // ,    ,     waitingForDocumentsDirectoryTimeout = YES; //       _lastDocumentsDirectoryReferenceArray=[self documentsDirectoryReferenceArray]; //...         ,  [self performSelector:@selector(checkForDocumentsDirectoryChanges) withObject:nil afterDelay:1.0 inModes:[NSArray arrayWithObjects:NSRunLoopCommonModes,nil]]; } } -(void)checkForDocumentsDirectoryChanges { NSArray *newDocumentsDirectoryReferenceArray=[self documentsDirectoryReferenceArray]; //      if(![newDocumentsDirectoryReferenceArray isEqualToArray:_lastDocumentsDirectoryReferenceArray]) { //       _lastDocumentsDirectoryReferenceArray=newDocumentsDirectoryReferenceArray; [self performSelector:@selector(checkForDocumentsDirectoryChanges) withObject:nil afterDelay:1.0 inModes:[NSArray arrayWithObjects:NSRunLoopCommonModes,nil]]; } else { //    waitingForDocumentsDirectoryTimeout=NO; _lastDocumentsDirectoryReferenceArray=nil; // ...         ,  [self scanDocumentsDirectory]; } } -(NSArray *)documentsDirectoryReferenceArray { //         - NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSArray *documentsDirectoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectoryPath error:NULL]; NSMutableArray *documentsDirectoryReferenceArray=[NSMutableArray arrayWithCapacity:10]; for(NSString *fileName in documentsDirectoryContents){ NSString *filePath=[documentsDirectoryPath stringByAppendingPathComponent:fileName]; NSError *error; NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&error]; NSInteger fileSize = [[fileAttributes objectForKey:NSFileSize] intValue]; NSString *fileWithLength=[NSString stringWithFormat:@"%@-%d",fileName,fileSize]; [documentsDirectoryReferenceArray addObject:fileWithLength]; } return documentsDirectoryReferenceArray; } 


рдареАрдХ рд╣реИ, рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╛рда рдкрд░ рдЕрдкрдиреА рдирдЬрд╝рд░ рджреМрдбрд╝рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИрдВ, рдХреЛрдХреЛрдиреЗрдЯрд┐рдХреНрд╕ / рдбреАрдЯреАрдлрд╝рд╛рдЙрдВрдбреЗрд╢рди рдХреНрд▓рд╛рд╕ DTFolderMonitor рдореЗрдВ рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╣рд▓реЗ рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ DTFolderMonitor ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдИрдЯреНрдпреВрдиреНрд╕ рдлрд╝рд╛рдЗрд▓ рд╢реЗрдпрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рд╕реЗ, рдореИрдВ рдЖрдкрдХреЛ scanDocumentsDirectory рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде scanDocumentsDirectory рдЬреИрд╕реЗ рддрд░реАрдХреЗ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЗрд╡рд▓ рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЙрдирдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рднреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╣реЛрдиреЗ рдпрд╛ рди рдЪрд▓рдиреЗ рдкрд░ рднреА рдлрд╛рдЗрд▓ рдХреЛ рдЖрдИрдЯреНрдпреВрди рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 - (void)applicationWillEnterForeground:(UIApplication *)application { [self scanDocumentsDirectory]; } 


рд╕реНрд░реЛрдд рдХрд╛ рд╕рдВрджрд░реНрдн
Apple рдбреЗрд╡рд▓рдкрд░реНрд╕ рдлрд╝реЛрд░рдо рдореЗрдВ рд╡рд┐рд╖рдп рдкрд░ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдЪрд░реНрдЪрд╛ рдХрд╛ рд╕реВрддреНрд░ (рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдХрд╛рд╕ рдЦрд╛рддрд╛)
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЙрдирд┐рдЯрд░ - рдкреБрд░рд╛рдиреЗ рд╕реНрдХреВрд▓ рдореЙрдирд┐рдЯрд░ рдорд╛рдЗрдХрд▓ рд╣реЗрдХ рджреНрд╡рд╛рд░рд╛
рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдФрд░ рдЬреАрд╕реАрдбреА рдПрдХ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рд╕реЛрдХреЛрдиреЗрдЯрд┐рдХреНрд╕ рд╕реЗ рдЬреАрд╕реАрдбреА рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛

Source: https://habr.com/ru/post/In191868/


All Articles