Как обсуждалось в комментариях ниже, реальная проблема здесь заключается в том, что plist читается и записывается в два разных места. Где-то в приложении есть код, который читает файл в массив, подобный следующему:
NSString *plistFavPath = [[NSBundle mainBundle] pathForResource:@"arrayFav"
ofType:@"plist"];
arrayFav = [[NSMutableArray alloc] initWithContentsOfFile:plistFavPath];
Эта логика считывает массив из пакета приложения, который предназначен только для чтения и является частью распределенного приложения. Позже, когда отредактированный массив сохраняется, используется код, подобный этому:
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES) objectAtIndex:0];
NSString *plistPath = [rootPath
stringByAppendingPathComponent:@"arrayFav.plist"];
NSLog(@"%@ - %@", rootPath, plistPath);
[arrayFav writeToFile:plistPath atomically:YES];
В результате получается, что обновленный файл записывается в каталог документов приложения, но никогда не читается оттуда, создавая впечатление, что файл не сохраняется правильно. Чтобы исправить это, вы должны изменить код, который читает файл, на тот же путь, по которому вы пишете.
Если вам нужно распространить версию plist по умолчанию для использования при первоначальном запуске до того, как массив будет отредактирован, вы можете продолжить включать версию файла в ваш пакет, а затем добавить код в ваш делегат приложения, который проверяет если файл существует в каталоге документов и если его нет, копирует версию файла пакета по умолчанию в нужное место.