1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-realm

Клонировать/Скачать
CHANGELOG.md 800 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 06.05.2025 05:50 857f5ad

x.y.z Примечания к выпуску (yyyy-MM-dd)

Улучшения

  • Нет.

Исправлено

  • Как нажать и заметить проблему? Каков был её эффект? (#????, начиная с версии v?.?.?)
  • Нет.

Сопоставимость

  • Realm Studio: 15.0.0 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 16.3.0.
  • CocoaPods: 1.10 или выше.
  • Xcode: 15.3.0-16.3.

Внутренние изменения

  • Обновлен realm-core с ? до ?

10.54.4 Примечания к выпуску (2025-04-09)

Улучшения

  • Добавлены бинарные файлы для Xcode 16.3.

Сопоставимость

  • Realm Studio: 15.0.0 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 16.3.0.
  • CocoaPods: 1.10 или выше.
  • Xcode: 15.3.0-16.3.

10.54.3 Примечания к выпуску (2025-03-07)

Улучшения

  • Включено автоматическое управление сбросом клиента для Realms событий. Эти Realms обычно не вызывают сброс клиента, но могут, если синхронизация перезапускается при частичной загрузке. (Core #8072).

Сопоставимость

  • Realm Studio: 15.0.0 или выше.

  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 16.2.0.

  • CocoaPods: 1.10 или выше.

  • Xcode: 15.3.0-16.2.### Внутренние изменения

  • Обновлен realm-core с версии v14.13.1 до 14.14.0

10.54.2 Примечания к выпуску (2024-12-17)

Улучшения

  • Добавлены предварительно собранные бинарные файлы для Xcode 16.2.

Сопоставимость

  • Realm Studio: 15.0.0 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 16.2.0.
  • CocoaPods: 1.10 или выше.
  • Xcode: 15.3.0-16.2.

10.54.1 Примечания к выпуску (2024-10-22)

Исправлено

  • Библиотека событий пыталась загрузить резервные копии файлов, созданные в рамках обновления формата файлов, что приводило к созданию резервных копий этих резервных копий, создавая цикл до достижения максимального размера имени файла (Core #8040, начиная с версии v10.26.0).

Сопоставимость

  • Realm Studio: 15.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.4.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 15.3.0-16.1 beta.

Внутренние изменения

  • Обновлен realm-core с версии v14.13.0 до 14.13.1

Заметки выпуска 10.54.0 (2024-09-20)

Минимальная поддерживаемая версия Xcode теперь 15.3.### Улучшения

  • При использовании Xcode 16 сборка производится в режиме языка Swift 6. Библиотеки, собранные в режиме Swift 6, могут быть использованы в приложениях, собранных в режиме Swift 5, поэтому это не должно повлиять на приложения, кроме устранения некоторых предупреждений и обеспечения совместимости всех API Realm с режимом Swift 6. Некоторые замечания по использованию Realm Swift в режиме Swift 6:
    • try await Realm(actor: actor) заменен на try await Realm.open() для обхода отсутствия реализации изолированных параметров для инициализаторов (https://github.com/swiftlang/swift/issues/71174). Актор теперь автоматически выводится и не должен передаваться вручную.
    • @ThreadSafe не может использоваться как property wrapper для локальных переменных и аргументов функций в режиме Swift 6. Проверка отправляемости для property wrappers не была реализована из-за их тихого устаревания в пользу макросов. Он все еще может использоваться как property wrapper для свойств класса и как вручную применяемый wrapper локально, но обратите внимание, что он плохо сочетается с изолированными Realm.
    • В режиме Swift 6 некоторые функции клиента MongoDB изменили тип возврата с [AnyHashable: Any] на Document. Эти функции должны были всегда возвращать Document, а старый тип возврата больше не компилируется из-за отсутствия отправляемости.
  • Некоторые компоненты SwiftUI теперь явно помечены как @MainActor.Эти типы были неявно @MainActor в Swift 5, но стали неизолированными при использовании Xcode 16 в режиме Swift 5 из-за удаления неявной изоляции при использовании property wrappers для членов класса. Это привело к появлению новых предупреждений отправляемости в Xcode 16 (или ошибок в режиме Swift 6).
  • Добавлены бинарные файлы Xcode 16 и 16.1 в пакеты выпуска.### Исправлено
  • Запрос с несколькими предикатами, объединенными с помощью OR, может привести к аварийному завершению работы на некоторых платформах (проверка строгого слабого порядка не проходит на iPhone) (#8028, начиная с версии v10.50.0).### Совместимость
  • Realm Studio: 15.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии OnClickListener 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.4.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 15.3.0-16.1 бета.

Внутренние изменения

  • Обновлен realm-core с версии v14.12.1 до 14.13.0

10.53.1 Примечания к выпуску (2024-09-05)

Улучшения

  • Добавлен путь к файлу в исключение, выбрасываемое методом File::rw_lock() при неудаче в открытии файла. (Core #7999)

Исправления* Исправлена проблема с фильтрацией уведомлений, используя свойство LinkingObjects в качестве последнего элемента, которая иногда давала неверные результаты

(Core #7530, начиная с версии v10.11.0).

  • Исправлена потенциальная ошибка при завершении процесса, когда уровень логирования Logger установлен выше Info (Core #7969, начиная с версии v10.45.0).

  • Проверка максимальной длины пути была некорректной, и пути длиной от 240 до 250 символов не использовали хэшированный резервный вариант (Core #8007, начиная с версии v10.0.0).

  • Неправильное использование API, приводящее к выбрасыванию исключения внутри обратного вызова, иногда приводило к завершению программы из-за попадания в REALM_UNREACHABLE() вместо передачи исключения вызывающему коду (Core #7836).### Совместимость

  • Realm Studio: 15.0.0 или новее.

  • API совместимы с предыдущими выпусками в серии Yöntem 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 15.4.0.

  • CocoaPods: 1.10 или новее.

  • Xcode: 15.1.0-16 бета 5.

Внутренние изменения

  • Обновлен realm-core с версии v14.12.0 до 14.12.1

10.53.0 Примечания к выпуску (2024-08-20)

Улучшения

  • Подпишите наши опубликованные xcframeworks. По требованиям Apple, мы должны подписывать наши релизные бинарные файлы, чтобы Xcode мог проверить, что они были подписаны тем же разработчиком в каждой новой версии. (Apple).
  • Отправьте предупреждения о синхронизации сервера, такие как отключение синхронизации на стороне сервера, в обработчик ошибок синхронизации. (#8020).
  • Добавьте поддержку для запросов сравнения строк, что позволяет строить запросы строк с использованием следующих операторов (>, >=, <, <=). Это чувствительное к регистру лексикографическое сравнение. (#8008).

Исправлено* Метод -[RLMAsymmetricObject createObject:withValue:] был помечен как возвращающий ненулевое значение, несмотря на то, что всегда возвращает nil (с версии v10.29.0).

  • Устранены несколько предупреждений статического анализатора clang, которые не указывали на реальные ошибки.

  • Асинхронные и версии Future метода User.functions работали только для функций, которые принимают ровно один аргумент, который должен быть массивом (#8669, с версии 10.16.0).### Совместимость

  • Realm Studio: 15.0.0 или выше.

  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 15.4.0.

  • CocoaPods: 1.10 или выше.

  • Xcode: 15.1.0-16 бета 5.

10.52.3 Примечания к выпуску (2024-08-09)

Улучшения

  • Улучшена производительность массового создания объектов, когда объекты содержат встроенные объекты. Это особенно важно для применения синхронизированных бутстрапов. (Core #7945)
  • Обнаружение циклов сброса клиента теперь проверяет, был ли предыдущий попыткой восстановления тот же выпуск Realm, и если нет, пытается восстановиться снова. (Core #7944).

Исправлено* Уведомления о изменениях приложения отправлялись слишком рано при входе нового пользователя, что приводило к пустому профилю пользователя, если он был прочитан внутри уведомления о изменении (с версии v10.51.0).

  • Ошибка разрешения конфликтов, связанная с инструкциями ArrayErase и Clear, иногда приводила к исключению "Invalid prior_size" при синхронизации (Core #7893, с версии v10.51.0).
  • Слияния синхронизации, которые приводили к пустому обратному преобразованию изменений, обрабатывались неправильно, что могло привести к расхождению данных. Отчеты о реальных случаях этого не поступали. (Core #7955, с версии v10.51.0).
  • Метод Realm.writeCopy() иногда неправильно выбрасывал исключение, утверждая, что есть незагруженные локальные изменения, когда исходный Realm является синхронизированным Realmом (Core #7966, с версии v10.7.6).### Совместимость Realm Studio: 15.0.0 или более поздняя версия. API совместимы в обратном направлении со всеми предыдущими выпусками в серии 10.x.y. Выпуск Carthage для Swift построен с использованием Xcode 15.4.0. CocoaPods: 1.10 или более поздняя версия. Xcode: 15.1.0-16 бета 5.

Внутренние изменения

Обновлен realm-core с версии v14.11.1 до 14.12.0

10.52.2 Примечания к выпуску (2024-07-19)

Улучшения

Изменения ролей и разрешений на стороне сервера больше не требуют сброса клиента для обновления локального Realm. (Core #7440)### Исправлено* Удаление объекта с свойством List<AnyRealmValue> приводило к ошибочному режиму каскадного удаления и выполнению каскадного удаления. Это означало, что если любое последующее свойство объекта ссылалось на другой топ-уровневый объект, и это было единственным связующим объектом, целевой объект также будет рекурсивно удален, как в случае встроенных объектов. (Core #7828, начиная с версии v10.51.0).

  • Исправлено утверждение array_backlink.cpp:112: Assertion failed: int64_t(value >> 1) == key.value при удалении ссылок на объект (либо путем переопределения ссылки, либо удалением объекта). Это могло произойти, если ссылка исходила из коллекции внутри AnyRealmValue, любого Map или List<AnyRealmValue>, и было более 256 объектов данного типа, содержащих ссылку. (Core #7594, начиная с версии v10.8.0).
  • Исправлено утверждение array.cpp:319: Array::move() Assertion failed: begin <= end [2, 1] при удалении объектов, содержащих вложенные коллекции внутри AnyRealmValue, если это приводило к объединению листьев bptree. (Core #7839, начиная с версии v10.51.0).
  • SyncSession.wait(for: .upload) был неоднозначным в обработке коммитов, которые не создают изменения для загрузки (например, изменение гибких подписок синхронизации).Ранее, если все не загруженные коммиты имели пустые изменения и сессия никогда не завершала загрузку, она ждала завершения загрузки, иначе завершала немедленно. Теперь она всегда завершает загрузку немедленно. (Core #7796).
  • При возобновлении сессии во время её приостановки синхронизирующий клиент мог столкнуться с утверждением. (Core #7860, начиная с версии v10.27.0).
  • Если сессия синхронизации была прервана отключением или перезапуском во время загрузки бутстрапа (набора загрузок, вызванных добавлением или изменением подписки запроса), устаревшие данные предыдущего бутстрапа могли быть включены при повторном подключении сессии и завершении загрузки бутстрапа. Это могло привести к объектам, хранящимся в базе данных, которые не соответствуют реальному состоянию сервера и потенциально приводящим к компенсирующим записям. (Core #7827, начиная с v10.27.0).
  • Исправлена ненужная перезагрузка сервера при отсутствии данных для загрузки (Core #2129, начиная с v10.51.0).

Совместимость* Realm Studio: 15.0.0 или новее.

  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.4.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 15.1.0-15.4.0.

Внутренние изменения

  • Обновлен realm-core с версии v14.10.2 до v14.11.0

10.52.1 Примечания к выпуску (2024-06-28)

Исправлено

  • Компактация Realm (вызываемая установкой shouldCompactOnLaunch) для зашифрованного файла Realm могла привести к созданию недействительного файла, если ключ шифрования не был допустимой строкой, завершённой нулём. (Core #7842, начиная с версии v10.52.0).
  • Присваивание List или Dictionary к свойству типа AnyRealmValue, которое уже хранило коллекцию такого типа, могло только выдавать инструкцию очистки, если коллекция не была пустой. Это означало, что присваивание к свойству на двух разных клиентах могло объединить коллекции, если свойство изначально хранило пустую коллекцию, но выбирало одно из двух присваиваний, если свойство изначально не было пустым. Если объединение является желаемым поведением, добавление элементов к List вместо присваивания нового List всё ещё достигнет этого результата (Core #7809, начиная с версии v10.51.0).

Совместимость

  • Realm Studio: 15.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.4.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 15.1.0-15.4.0.### Внутренние изменения
  • Обновлен realm-core с версии v14.10.1 до 14.10.2

10.52.0 Примечания к выпуску (2024-06-18)

Улучшения

  • Добавлен метод @ObservedSectionedResults.remove(atOffsets:section:), который позволяет удалять объект Realm при использовании onDelete в ForEach в SwiftUI List.
  • Добавлена поддержка Xcode 16 beta 1 и исправлены некоторые новые предупреждения. Учтите, что полная поддержка режима языка Swift 6 пока не включена (#8618).
  • Методы Realm.asyncWrite() и Realm.asyncRefresh() теперь используют новую функцию #isolation для избежания предупреждений о sendability при сборке с Xcode 16 (#8618).
  • Включено сообщение об ошибке сброса клиента-источника в ошибки, которые отражают неудачу автоматического обработки сброса клиента (Core #7761).
  • Улучшена производительность транзакций записи с большим количеством вставок, особенно при установке большого числа свойств для каждого созданного объекта (Core #7734).
  • Приложение теперь удаляет завершающие слеши из базового URL, вместо того чтобы генерировать запутанные ошибки 404 (Core #7791).

Исправлено* Удаление объекта Realm, используемого в коллекции @ObservedSectionedResults в SwiftUI, могло привести к аварийному завершению работы во время диффа View. (#8294, начиная с версии v10.29.0)

  • Исправлены некоторые сценарии сброса клиента (например, миграция на гибкий синхронизацию), которые могли завершиться ошибкой, если новый сброс клиента (например, откат миграции гибкой синхронизации) произошел до завершения первого. (Core #7542, начиная с версии v10.40.0)
  • Код шифрования больше не ведет себя по-разному в зависимости от размера страниц системы, что полностью устраняет повторяющийся источник ошибок, связанных с копированием зашифрованных файлов Realm между платформами с разными размерами страниц. Одна известная оставшаяся ошибка была (RNET-1141), где открытие файлов на системе с большим размером страницы по сравнению с системой записи приводило к попытке чтения секций файла, которые никогда не были записаны (Core #7698).
  • Были несколько сложных сценариев, которые могли привести к чтению устаревших данных из зашифрованных файлов в многопроцессных сценариях. Эти сценарии были очень труднодоступны и обычно приводили к аварийному завершению работы из-за неудачи проверки или выброса исключения DecryptionFailure (Core #7698, начиная с версии v10.38.0).* Зашифрованные файлы имеют некоторые безвредные гонки потоков, где мы можем скопировать блок памяти, когда другой поток записывает в ограниченный диапазон. Логически невозможно прочитать из этого диапазона, когда это происходит, но Thread Sanitizer вполне обоснованно жалуется на это. Теперь мы выполняем более медленные операции при запуске с TSan, что избегает этой безвредной гонки (Core #7698).
  • Realm.asyncOpen() для гибко синхронизированного Realm иногда не ждал завершения ожидаемых подписок, что приводило к тому, что он не ждал загрузки всех данных. (Core #7720, начиная с введения гибкой синхронизации).
  • List<AnyRealmValue>.clear() приводил к неудаче проверки при использовании на файле, созданном версией Realm старше v10.49.0. (Core #7771, начиная с версии 10.49.0)### Совместимость* Realm Studio: 15.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.4.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 15.1.0-16 бета

Внутренние изменения

  • Обновлен realm-core с версии v14.9.0 до 14.10.1

10.51.0 Примечания к выпуску (2024-06-06)

Улучшения

  • Добавлена поддержка хранения вложенных коллекций (List и Map, но не ManagedSet) в AnyRealmValue.

    class MixedObject: Object {
      @Persisted var anyValue: AnyRealmValue
    }
    
    // Вы можете создать AnyRealmValue из Swift's Dictionary.
    let dictionary: Dictionary<String, AnyRealmValue> = ["key1": .string("hello"), "key2": .bool(false)]
    
    // Вы можете создать AnyRealmValue из Swift's Map
    // и вложить коллекцию в другую коллекцию.
    let list: Array<AnyRealmValue> = [.int(12), .double(14.17), AnyRealmValue.fromDictionary(dictionary)]
    
    let realm = realmWithTestPath()
    try realm.write {
      let obj = MixedObject()
      obj.anyValue = AnyRealmValue.fromArray(list)
      realm.add(obj)
    }
  • Добавлены новые операторы в Query API для Swift для поддержки запросов к вложенным коллекциям.

    realm.objects(MixedObject.self).where { $0.anyValue[0][0][1] == .double(76.54) }

    Оператор .any позволяет искать по всем ключам или индексам.

    realm.objects(MixedObject.self).where { $0.anyValue["key"].any == .bool(false) }
  • Отчет о возникшей ошибке, которая вызвала сброс клиента. (Core #6154)### Исправлено

  • Доступ к App.currentUser из уведомления, созданного функцией App.switchToUser(), включая уведомления для нового пользователя, только что вошедшего в систему, приводил к блокировке. (Core #7670, начиная с версии v10.50.0).

  • Вставка одного и того же ссылки на ту же ключ в словаре более одного раза некорректно создавала несколько обратных ссылок на объект. Это не приводило к аварийному завершению работы позже, но могло повлиять на запросы явного подсчета обратных ссылок и, возможно, уведомления. (Core #7676, начиная с версии v10.49.2).

  • Нестримовый уведомитель прогресса не вызывал немедленно свой обратный вызов после регистрации. Вместо этого пришлось бы подождать получения сообщения о загрузке, чтобы получить первое обновление — если вы уже были в режиме "caught up" при регистрации уведомителя, вы могли бы долго ждать получения от сервера загрузки, вызывающей/заканчивающей ваш уведомитель. (Core #7627, начиная с версии v10.50.0).

  • После компактации запускалась процедура обновления файла. Это могло привести к потере данных, если deleteRealmIfMigrationNeeded установлен в true. (Core #7747, начиная с версии v10.49.0).

Совместимость* Realm Studio: 15.0.0 или новее.

  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.4.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 15.1.0-15.4.0.

Внутренние изменения

  • Обновлен realm-core с версии v14.6.2 до v14.9.0

10.50.1 Примечания к выпуску (2024-05-21)

Улучшения

  • Обновлено упаковывание выпуска для Xcode 15.4.

Исправлено

  • @AutoOpen и @AsyncOpen не использовали initialSubscriptions из конфигурации, переданной им (PR #8572, начиная с версии v10.50.0).
  • App.baseURL всегда был nil (PR #8573, начиная с версии v10.50.0).

Справочные данные

  • Realm Studio: 15.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.4.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 15.1.0-15.4.0.

10.50.0 Примечания к выпуску (2024-05-02)

Поддержка Xcode 14 отменена, так как он больше не может использоваться для отправки приложений в App Store. Теперь минимальная поддерживаемая версия Xcode — 15.1.

Знаменитые проблемы

  • Доступ к App.currentUser внутри обратного вызова App.subscribe приводил к мёртвому замку.### Улучшения
  • Добавлено поле SyncConfiguration. initialSubscriptions, описывающее начальную конфигурацию подписки, переданную при создании SyncConfiguration (#8548).
  • При подключении к нескольким серверным приложениям для каждого метаданных Realm используется уникальный ключ шифрования, а не один общий (Core #7552).
  • Улучшена производительность запросов IN и цепочки OR для типов UUID/ObjectId (.Net #3566).
  • Добавлена поддержка обновления базового URL Atlas Device Sync в случае необходимости перемещения между серверами (облачными и/или краевыми серверами). Этот API является приватным и может быть импортирован только с использованием @_spi(Private)
    @_spi(RealmSwiftExperimental) import RealmSwift попытайся ожидать, что app. updateBaseUrl(to: "https://services. cloud. mongodb. com")
    (#8486).
  • Включена сборка RealmSwift в виде динамической библиотеки при установке через SPM, что позволяет нам предоставлять манифест приватности. Когда RealmSwift собирается в виде статической библиотеки, вы должны предоставить свой собственный манифест, так как Xcode не собирает статические библиотеки в совместимом с xcprivacy образом. Из-за некоторых багов в Xcode, это может потребовать внесения ручных изменений в ваш проект:
    • Цели теперь должны зависеть только от Realm или RealmSwift. Если вы используете как obj-c, так и swift API, зависимость от RealmSwift позволит вам импортировать Realm. Попытка прямой зависимости от обоих даст ошибку "Swift пакетная цель 'Realm' связана как статическая библиотека 'App' и 'Realm', но не может быть собрана динамически, так как есть пакетный продукт с таким же именем."
    • Чтобы фактически собрать RealmSwift в виде динамической библиотеки, измените "Do Not Embed" на "Embed & Sign" в разделе "Frameworks, Libraries, and Embedded Content" на вкладке General настроек вашего цели. (#8561).
  • Поля transferredBytes и transferrableBytes в классе Progress были устаревшими в пользу progressEstimate, который представляет значение от 0.0 до 1.0, указывающее на оцененный прогресс к загрузке/скачиванию. (#8476)### Исправлено
  • -[RLMUser allSessions] не включал сессии, которые ожидали доступного токена, несмотря на то, что включались сессии в других неактивных состояниях. (Core #7300, начиная с v10.0.0).
  • [RLMApp allUsers] включал пользователей, которые были выведены из системы во время текущего запуска приложения, но не включал пользователей, которые ранее были выведены из системы. Теперь он всегда включает всех пользователей, выведенных из системы. (Core #7300, начиная с v10.0.0).
  • Удаление активного пользователя (через User.delete()) оставляло активного пользователя неустановленным вместо выбора другого активного пользователя. (Core #7300, начиная с v10.0.0).com/realm/realm-core/pull/7300), начиная с v10.23.0).
  • Исправлено несколько проблем, связанных с копированием зашифрованного Realm между платформами с разными размерами страниц (например, между x86_64 и arm64 Apple платформами):
    • Исправлено утверждение Assertion failed: new_size % (1ULL << m_page_shift) == 0 при открытии зашифрованного Realm размером менее 64Мб, сгенерированного на платформе с другим размером страницы. (Core #7322, начиная с v10.42.0)
    • Исправлено исключение DecryptionFailed, выбрасываемое при открытии маленького Realm (<4к данных), сгенерированного на устройстве с размером страницы 4к, если оно было включено и открыто на устройстве с большим размером страницы (с самого начала).
    • Исправлено проблема при последующем открытии зашифрованного Realm для некоторых редких паттернов выделения памяти, когда верхний ref находился примерно в 50 байтах от конца страницы. Это могло проявляться в виде исключения DecryptionFailed или утверждения: encrypted_file_mapping.hpp:183: Assertion failed: local_ndx < m_page_state.size(). (Core #7319)
  • Инициализация схемы могла привести к ошибке утверждения, если клиент синхронизации применял скачанный изменения при открытии файла Realm. (#7041, начиная с v10.15.0).
  • Отчет о прогрессе загрузки для flexibly синхронизированных Realm был некорректным.Теперь он заменен на оценку прогресса, которая вычисляется сервером на основе исторических данных и других эвристики. (#8476)

Устаревшие функции* rlm_valueType устарел в пользу rlm_anyValueType, который теперь включает коллекции (List и Dictionary).

Сопоставимость

  • Realm Studio: 15.0.0 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.3.0.
  • CocoaPods: 1.10 или выше.
  • Xcode: 15.1.0-15.3.0.

Внутренние изменения

  • Обновлен realm-core с версии v14.5.2 до v14.6.2

10.49.2 Примечания к выпуску (2024-04-17)

Улучшения

Исправлено* Исправлен сбой, который возникал при получении ошибки HTTP 401 или 403 при открытии потока просмотра для коллекции MongoDB. (#8519)

  • Исправлено утверждение "m_lock_info && m_lock_info->m_file.get_path() == m_filename", которое может возникать при открытии Realm, когда файл в процессе закрытия на другом потоке. (#8507)

  • Исправлено расхождение истории из-за ошибки в коде репликации при установке по умолчанию null значений (включая вложенные объекты). (Core #7536)

  • Возможное исключение null-указателя при выходе из системы и не выполненных асинхронных коммитов. (Core #7434)

  • AppConfiguration.baseUrl теперь возвращает значение по умолчанию URL, если он не установлен, вместо nil. (#8512)

  • Добавлен манифест приватности в Swift пакет Core (Swift #8535)

  • Исправлен сбой при интеграции удаления уже удаленного ключа словаря (Core #7488, начиная с версии v10.0.0)### Сопоставимость

  • Realm Studio: 15.0.0 или выше.

  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 15.3.0.

  • CocoaPods: 1.10 или выше.

  • Xcode: 14.2-15.3.0.

Внутренние изменения

  • Обновлен realm-core с версии 14.4.1 до 14.5.2

10.49.1 Примечания к выпуску (2024-03-22)

Улучшения

  • Улучшена производительность компактации файлов на платформах arm64 для зашифрованных файлов размером от 16КБ до 4МБ. (PR #7492).

Исправлено

  • Открытие Realm с кэшированным пользователем в режиме офлайн приводило к тому, что некоторые шаги процесса подключения не повторялись, а вместо этого отображалась фатальная ошибка. (#7349, начиная с версии v10.46.0).

Сопоставимость

  • Realm Studio: 15.0.0 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.3.0.
  • CocoaPods: 1.10 или выше.
  • Xcode: 14.2-15.3.0.

Внутренние изменения

  • Обновлен realm-core с версии v14.3.0 до 14.4.1

10.49.0 Примечания к выпуску (2024-03-22) =============================================================В этом выпуске введен новый формат файлов Realm (v24). Открытие существующих файлов Realm автоматически обновляет их, делая невозможным открытие старыми версиями. Процесс обновления обычно происходит очень быстро, за исключением случаев, когда у вас есть большие наборы AnyRealmValue, String или Data, которые должны быть перезаписаны.Автоматически создается резервная копия рядом с Realm перед выполнением обновления. При возврате к более старым версиям Realm будет автоматически восстановлена резервная копия, или она будет удалена через три месяца.

Улучшения

  • Хранение свойств типа Decimal128 оптимизировано аналогично свойствам типа Int, так что отдельные значения будут занимать 0 байт (если все значения null), 32 байта, 64 байта или 128 байт в зависимости от потребностей. (Core #6111)### Исправлено* Сортировка по двоичным данным выполнялась путем сравнения байтов как signed char, а не unsigned char, что приводило к очень странным порядкам (так как сортировка по данным была включена в версии 6.0.4).
  • Сортировка по AnyRealmValue не использовала допустимого полного порядка, и определенные комбинации значений могли приводить к тому, что значения не будут сортироваться или даже могут привести к аварийному завершению программы. Решение этой проблемы приведет к тому, что некоторые ранее допустимые комбинации значений различных типов будут сортироваться в разном порядке по сравнению с предыдущим (с момента введения AnyRealmValue в 10.8.0).
  • RLMSet/MutableSet был не последователен в отношении того, считает ли он строку и данные, содержащие utf-8 закодированные байты этой строки, эквивалентными. Теперь они всегда считаются различными. (с момента введения множеств в версии 10.8.0).
  • Запросы на равенство для свойства Mixed с индексом иногда возвращали неверные результаты, если значения различных типов случайно имели одинаковый хэш-код. (Core 6407, с версии 10.8.0).
  • Создание более чем 8388606 ссылок, указывающих на один объект, приводило к аварийному завершению программы. (Core #6577, с версии 5.0.0)* Realm, созданный на устройстве non-apple ARM 64 и скопированный на другую платформу (и наоборот), были не переносимыми из-за различий в порядке сортировки. Это затрагивает строки или двоичные данные, у которых первое различие находится в непечатном символе. Эти элементы могут не быть найдены в множестве или в индексированном столбце, если строки имели длинный общий префикс (> 200 символов). (Core #6670, с версии 2.0.0 для индексов, и с момента введения множеств в версии 10.8.0)
  • Исправлен случайный сбой, связанный с открытием Realm на фоновом потоке, когда процесс находился в процессе завершения работы (Core #7420). ### Изменения, нарушающие совместимость* Отказ от поддержки открытия файлов Realm версии пред-5.0.0.

Совместимость

  • Realm Studio: 15.0.0 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.3.0.
  • CocoaPods: 1.10 или выше.
  • Xcode: 14.2-15.3.0. Обратите внимание, что поддержка Xcode 14 будет прекращена, когда Apple начнет требовать Xcode 15 для подачи заявок в App Store 29 апреля.

Внутренние изменения

  • Обновлен realm-core с версии 13.26.0 до 14.3.0

10.48.1 Примечания к выпуску (2024-03-15)

Исправлено

  • Приватный манифест конфиденциальности Realm.framework отсутствовал NSPrivacyAccessedAPICategoryDiskSpace, но мы проверяем свободное место на диске перед попыткой автоматического резервного копирования файлов Realm (с версии 10.46.0).

Совместимость

  • Realm Studio: 14.0.1 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.3.0.
  • CocoaPods: 1.10 или выше.
  • Xcode: 14.2-15.3.0.

10.48.0 Примечания к выпуску (2024-03-07)

Улучшения

  • Удалены ограничения, препятствующие объявлению модели с только вычисляемыми свойствами. (#8414)
  • Добавлен Xcode 15.3 в пакет выпуска (PR #8502).

Исправлено* Исправлена поддержка нескольких аргументов через переменную окружения REALM_EXTRA_BUILD_ARGUMENTS в build.sh. (PR #8413).

Спасибо, @hisaac!

  • Исправлены некоторые новые предупреждения о передаче, введенные в Xcode 15.3 (PR #8502).### Совместимость

  • Realm Studio: 14.0.1 или выше.

  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 15.3.0.

  • CocoaPods: 1.10 или выше.

  • Xcode: 14.2-15.3.0.

10.47.0 Примечания к выпуску (2024-02-12)

Улучшения

  • Добавлена начальная поддержка геосpatial запросов для точек. Нет нового специализированного типа для хранения геосpatial точек, вместо этого точки должны храниться в виде вложенного объекта, имеющего форму (GeoJson-shaped), как в примере ниже:
    public class Location: EmbeddedObject {
      @Persisted private var coordinates: List<Double>
      @Persisted private var type: String = "Point"
    }
    public var широта: Double { return координаты[1] }
    public var долгота: Double { return координаты[0] }
    
    convenience init(_ широта: Double, _ долгота: Double) {
        self.init()
        // Долгота приходит первой в массиве координат документа GeoJson
        координаты.append(objectsIn: [долгота, широта])
    }
    Географические запросы (geoWithin) могут выполняться только на таком типе объектов и будут выбрасывать ошибку в противном случае. Запросы могут использоваться для фильтрации объектов, чьи точки находятся в определённой области, используя следующие заранее определённые формы (GeoBox, GeoPolygon, GeoCircle).
    class Person: Object {
        @Persisted var имя: String
        @Persisted var местоположение: Location? // Встроенный объект GeoJson
    }    let realm = realmWithTestPath()
      try realm.write {
          realm.add(PersonLocation(имя: "Мария", местоположение: Location(широта: 55.6761, долгота: 12.5683)))
      }
    
      let shape = GeoBox(bottomLeft: (55.6281, 12.0826), topRight: (55.6762, 12.5684))!
      let местоположения = realm.objects(PersonLocation.self).where { $0.местоположение.geoWithin(shape) }
    
      Можно использовать `filter` или `NSPredicate` для выполнения географического запроса.
      ```swift
      let shape = GeoPolygon(outerRing: [(-2, -2), (-2, 2), (2, 2), (2, -2), (-2, -2)], holes: [[(0, 0), (1, 1), (-1, 1), (0, 0)]])!
      let местоположения = realm.objects(PersonLocation.self).filter("местоположение IN %@", shape)
    
      let местоположения = realm.objects(PersonLocation.self).filter(NSPredicate(format: "местоположение IN %@", shape))

Сопоставимость

  • Realm Studio: 14.0.1 или новее.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с Xcode 15.2.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 14.2-15.2.0.

Внутренние изменения

  • Перенесли выпускающие конвейеры на Github Actions.10.46.0 Примечания к выпуску (2024-01-23) =============================================================

Улучшения

  • Добавлен манифест конфиденциальности в оба фреймворка.
  • Внутренние символы C++ больше не экспортируются из Realm.framework при установке через CocoaPods, что уменьшает размер бинарника на ~5%, немного улучшает время запуска приложения и устраняет некоторые предупреждения при связывании фреймворка. Это уже было так при использовании Carthage или предварительно скомпилированного фреймворка (PR #8464).
  • Поле baseURL конфигурации AppConfiguration теперь может быть обновлено, вместо сохранения значения между запусками приложения в хранилище метаданных. (Core #7201).
  • Разрешено использование синхронизированных в памяти Realms. Это позволит задать идентификатор в памяти для гибко синхронизированного Realm.

Исправлено* Реализация Encodable для @Persisted не позволяла энкодеру кастомизировать кодировку значений, что приводило к проблемам с использованием JSONEncoder's dateEncodingStrategy (#8425).

  • Исправлено выполнение Package.swift на Linux для поддержки инструментов, таких как Dependabot, которые требуют сборки описания пакета, но не самого пакета (#8458, начиная с версии v10.40.1).

Нарушающие изменения

  • Поле schemaVersion в Realm.Configuration теперь всегда должно быть равно нулю для синхронизированных Realm. Схемы версий в настоящее время не применимы к синхронизированным Realm, и поле ранее не читалось.

Сопоставимость

  • Realm Studio: 14.0.1 или новее.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift собран с Xcode 15.2.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 14.2-15.2.0.

Внутренние изменения

  • Обновлено realm-core с версии 13.25.1 до 13.26.0

10.45.3 Примечания к выпуску (2024-01-08)

Улучшения

  • Обновлено упаковывание выпуска для Xcode 15.2. Предварительно собранные бинарники для 14.1 и 15.0 теперь удалены из пакета выпуска.

Сопоставимость

  • Realm Studio: 14.0.1 или новее.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift собран с Xcode 15.2.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 14.2-15.2.0.

10.45.2 Примечания к выпуску (2023-12-22) =============================================================### Улучшения

  • Значительно улучшена производительность создания объектов с очень большим количеством предварительно существующих входящих ссылок. Это в основном относится к начальной синхронизации при загрузке объектов, которые синхронизируются до тех, к которым они ссылаются (Core #7217, начиная с версии v10.0.0).
  • Регистрация новых уведомлений внутри транзакций записи до фактического внесения изменений теперь действительно разрешена. Это должно было быть разрешено в версии 10.39.1, но на самом деле не работало из-за избыточной проверки.
  • SyncSession.ProgressDirection и SyncSession.ProgressMode не имели Sendable аннотаций (PR #8435).
  • Realm.Error.subscriptionFailed отображался с неправильным доменом ошибки, что делало его невозможным для перехвата (с версии 10.42.2, PR #8435).

Совместимость

  • Realm Studio: 14.0.1 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.1.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 14.1-15.1.0.

Внутренние изменения

  • Обновлен realm-core с версии 13.25.0 до 13.25.1

10.45.1 Примечания к выпуску (2023-12-18)

Исправлено* Исключения, возникающие при применении начальной загрузки для изменения подписки на синхронизацию, приводили к завершению программы вместо отчета об ошибке синхронизации (Core #7196 и Core #7197).

  • Вызов SyncSession.reconnect() во время ожидающего повторного подключения после несмеренной ошибки приводил к ошибке утверждения, упоминающей "!m_try_again_activation_timer", если была получена еще одна несмеренная ошибка (Core #6961).### Совместимость

  • Realm Studio: 14.0.1 или новее.

  • API совместимы с предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 15.1.0.

  • CocoaPods: 1.10 или новее.

  • Xcode: 14.1-15.1.0.

Внутренние изменения

  • Обновлен realm-core с версии 13.24.1 до 13.25.0

10.45.0 Примечания к выпуску (2023-12-15) =============================================================### Улучшения

  • Обновление упаковки выпуска для Xcode 15.
  • Обеспечение ожидания загрузки/скачивания в SyncSession, что приостановит текущий метод (или вызовет асинхронный блок) до тех пор, пока загрузка или скачивание не завершится для данного сеанса синхронизации, например:
try realm.write {
  realm.add(Person())
}
try await realm.syncSession?.wait(for: .upload)

Обратите внимание, что это обычно не следует использовать — синхронизация в конечном итоге является последовательной и должна использоваться как таковая. Однако, есть специальные случаи (в частности, в тестировании), где это может быть использовано.

  • Уведомления о изменениях подписки синхронизации теперь отменяются, если сеанс синхронизации становится неактивным, как это делается для обработчиков прогресса загрузки и скачивания. Если происходит фатальная ошибка синхронизации, она будет отображена в обработчике завершения, и если пользователь вышел из системы, будет отображена ошибка "операция отменена". Нечеткие ошибки остаются без изменений (то есть клиент синхронизации внутренне повторяет попытки без отображения ошибок). Ранее фатальные ошибки приводили к тому, что обработчик завершения никогда не вызывался. (Core #7073)
  • Автоматическое восстановление клиента теперь сохраняет оригинальное деление изменений, вместо объединения всех несинхронизированных изменений в одно изменение. Это обычно улучшает производительность сервера при большом количестве восстановленных изменений (Core #7161).
  • Автоматическое восстановление клиента теперь лучше восстанавливает изменения, когда изменения были загружены с сервера после того, как локальные изменения были подтверждены. Если локальный Realm был полностью синхронизирован с сервером до сброса клиента, автоматическое восстановление теперь всегда должно создавать точно такую же структуру, как если бы сброс клиента не был выполнен (Core #7161). ### Исправлено
  • Гибкие подписки на синхронизацию иногда не отправлялись на сервер, если они создавались во время загрузки клиентом начального состояния для предыдущего изменения подписки, и начальное состояние не завершалось успешно (Core #7077, начиная с версии v10.21.1).
  • Гибкие подписки на синхронизацию иногда не отправлялись на сервер, если сразу после создания подписки отправлялось сообщение UPLOAD (Core #7076, начиная с версии v10.43.1).
  • Создание или удаление гибких подписок на синхронизацию во время обработки в фоновом режиме сброса клиента с включенным автоматическим восстановлением иногда приводило к аварийному завершению с исключением KeyNotFound.(Core #7090, начиная с версии v10.28.2)
  • Автоматическое восстановление сброса клиента иногда завершалось ошибкой "Недопустимое изменение схемы (UPLOAD): невозможно обработать инструкцию AddColumn для несуществующей таблицы" при восстановлении изменений схемы, сделанных в оффлайн-режиме. Это происходило только в том случае, если сервер использовал недавно введенную опцию для разрешения разрушительных изменений схемы в режиме разработчика. (Core #7042).
  • Метод MutableSet<String>.formIntersection() иногда приводил к ошибке использования после освобождения памяти, если он был запрошен для пересечения множества с самим собой (начиная с версии v10.0.0).
  • Ошибки, возникшие при повторном применении локальных изменений для восстановления сброса клиента, в синхронизируемых Realms на основе разделов, приводили к тому, что попытка восстановления сброса клиента не фиксировалась, что могло привести к бесконечному циклу попыток и неудач восстановления. Гибкие подписки на синхронизацию и ошибки от сервера после завершения локального восстановления были обработаны правильно. (Core #7149, начиная с версии v10.0.0).* Во время восстановления сброса клиента, когда восстанавливались операции перемещения или установки на List<Object> или List<AnyRealmValue>, которые выполнялись на индексах, которые не были добавлены в процессе восстановления, ссылки на объект, который был удален другим клиентом в оффлайн-режиме, воссоздавались восстанавливающим клиентом, но объекты этих ссылок имели только заполненный первичный ключ, а все остальные поля имели значения по умолчанию. Теперь, вместо создания этих "зомби" объектов, списки, восстанавливающиеся, пропускают такие удаленные ссылки. (Core #7112), начиная с реализации восстановления сброса клиента в версии v10.25.0).
  • В процессе восстановления сброса клиента могут отсутствовать несколько элементов в множестве ссылок, или может быть выброшено исключение, которое препятствует восстановлению (например, "Запрошенный индекс 1 при вызове get() для множества 'source.collection', когда максимальное значение равно 0"). (Core #7112), начиная с реализации восстановления сброса клиента в версии v10.25.0).
  • Вызов sort() или distinct() для MutableSet<Object>, содержащего неразрешённые ссылки (то есть объекты, которые были удалены другим синхронизированным клиентом), приводил к появлению результата с повторяющимися записями. * Устранено автоматическое восстановление сброса клиента при восстановлении записи, которая внесла неразрешимые изменения в список (например, модификация или удаление существующей записи), за которым следовало изменение подписки, а затем добавление записи в список, что приводило к дублированию вставок в списке (Core #7155, с момента введения автоматического восстановления сброса клиента для гибкой синхронизации).
  • Устранены несколько причин исключений "неудача расшифровки", которые могли возникать при открытии нескольких зашифрованных файлов Realm в одном процессе, используя Realm, хранящийся на файловой системе exFAT. (Core #7156, с момента версии v1.0.0).
  • Устранена блокировка, возникавшая при доступе к текущему пользователю из App из коллбэка слушателя User (Core #7183, с момента версии v10.42.0).
  • Имена классов длиной 57 символов приводили к аварийному завершению восстановления сброса клиента, так как применялся неверный лимит в 56 символов (правильный лимит — OnClickListener 57 символов) (Core #7176, с момента версии v10.0.0).
  • Автоматическое восстановление сброса клиента для гибких Realmов выполняло восстановленные изменения в нескольких транзакциях записи, между которыми освобождался блокировщик записи. Это имело несколько заметных негативных эффектов: - Другие потоки, читающие из Realm во время восстановления сброса клиента, могли наблюдать недействительное промежуточное состояние.
    • Другие потоки могли потенциально записывать во время восстановления сброса клиента, что приводило к расхождению истории от сервера.
    • Уведомления о изменениях, созданные восстановлением сброса клиента, не были минимальными и могли сообщать о том, что некоторые вещи изменились, хотя на самом деле они не изменились.
    • Все ожидающие подписки были помечены как заменённые и затем пересозданы, что приводило к тому, что что-либо ждет завершения подписок и срабатывает слишком рано. (Core #7161, начиная с версии v10.29.0).
  • Если первое открытие Realm с гибкой синхронизацией вызвало сброс клиента, конфигурация имела начальный коллбэк подписок, как до, так и после сброса, и начальный коллбэк подписок начал транзакцию чтения без завершения её (что обычно будет так), открытие замороженного Realm для коллбэка после сброса вызывало исключение BadVersion. (Core #7161, начиная с версии v10.29.0). ### Совместимость* Realm Studio: 14.0.1 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.1.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 14.1-15.1.0.

Внутренние изменения

  • Перенесли наши текущие CI-транспортные системы в Xcode Cloud.
  • Обновили realm-core с версии 13.23.1 до 13.24.1

10.44.0 Примечания к выпуску (2023-10-29)

Улучшения

  • Expose SyncSession.reconnect(), который запрашивает немедленное повторное подключение, если сессия в данный момент отключена, а не ожидает обычного времени задержки повторного подключения.
  • Обновление упаковки выпуска для Xcode 15.1 beta. срезы для visionOS теперь включаются только для 15.1, а не для срезов в небета-версии 15.0.

Совместимость

  • Realm Studio: 14.0.1 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.0.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 14.1-15.0.0.

10.43.1 Примечания к выпуску (2023-10-13)

Улучшения

  • Пустые коммиты больше не запускают дополнительное выполнение обработчика прогресса синхронизации, отчитывающегося о том же самом информации, что и предыдущее выполнение (Core #7031).

Исправлено

  • Обновление подписок не запускало автоматическое обновление Realm, иногда приводя к зависанию Realm.asyncRefresh() до тех пор, пока другой записывающийся элемент не выполнял запись (Core #7031).### Совместимость

  • Realm Studio: 14.0.1 или новее.

  • API совместимы с предыдущими выпусками в серии Yöntem 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 15.0.0.

  • CocoaPods: 1.10 или новее.

  • Xcode: 14.1-15.0.0.

Внутренние изменения

  • Обновили realm-core с версии 13.22.0 до 13.23.1

10.43.0 Примечания к выпуску (2023-09-29)

Улучшения

  • Добавлен API Results.subscribe для гибкой синхронизации. Теперь вы можете подписываться и отписываться от гибкой подписки синхронизации через объект Result.

    // Именованное выражение запроса
    let results = try await realm.objects(Dog.self).where { $0.age > 18 }.subscribe(name: "adults")
    results.unsubscribe()  // Неименованный запрос подписки
    let results = try await realm.objects(Dog.self).subscribe()
    results.unsubscribe()

    После коммитирования подписки в локальное множество подписок realm, метод будет ожидать загрузки в соответствии с WaitForSyncMode.

    let results = try await realm.objects(Dog.self).where { $0.age > 1 }.subscribe(waitForSync: .always)

    Где .always всегда будет загружать самую свежую информацию для подписки, .onCreation будет делать это только в первый раз, когда подписка создается, и .never никогда не будет ожидать загрузки данных.

    Эта API находится в стадии Preview и может быть изменена в будущем.

  • Добавлена новая API, которая позволяет удалять все неименованные подписки из множества подписок.

    realm.subscriptions.removeAll(unnamedOnly: true)
    ```### Исправлено
    
  • Сборка предварительно скомпилированных библиотек с использованием классического связывателя для обхода проблемы нового связывателя, который не работает на iOS <15. При использовании CocoaPods или SPM вам потребуется вручную добавить -Wl,-ld_classic к OTHER_LDFLAGS для вашего приложения до тех пор, пока Apple не исправит ошибку.

  • Удаление среза visionOS из сборки Carthage, так как это приводит к тому, что Carthage отклоняет xcframework (#8370).

  • Ошибки разрешения при создании асимметричных объектов не обрабатывались правильно, что приводило к аварийному завершению работы (Core #6978, начиная с версии 10.35.0).

Сопоставимость

  • Realm Studio: 14.0.1 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии Yö 10.x.y.
  • Выпуск Carthage для Swift собран с использованием Xcode 15.0.0.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 14.1-15.0.0.

Внутренние изменения

  • Обновлено realm-core с версии 13.21.0 до 13.22.0

10.42.4 Примечания к выпуску (2023-09-25)

Улучшения

  • Асимметричные объекты теперь могут ссылаться на не встроенные, не асимметричные объекты. (Core #6981)

Исправлено

  • Сборка предварительно скомпилированных библиотек с использованием классического связывателя для обхода проблемы нового связывателя, который не работает на iOS <15. При использовании CocoaPods или SPM вам потребуется вручную добавить -Wl,-ld_classic к OTHER_LDFLAGS для вашего приложения до тех пор, пока Apple не исправит ошибку.
  • Удаление среза visionOS из сборки Carthage, так как это приводит к тому, что Carthage отклоняет xcframework (#8370).
  • Ошибки разрешения при создании асимметричных объектов не обрабатывались правильно, что приводило к аварийному завершению работы (Core #6978, начиная с версии 10.35.0).

Сопоставимость

  • Realm Studio: 14.0.1 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift собран с использованием Xcode 15.0.0.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 14.1-15.0.0.

Внутренние изменения

  • Обновлено realm-core с версии 13.21.0 до 13.22.0

10.42.4 Примечания к выпуску (2023-09-25)

Улучшения

  • Асимметричные объекты теперь могут ссылаться на не встроенные, не асимметричные объекты. (Core #6981)### Исправлено* Пакет Swift не смог связать некоторые необходимые системные библиотеки при сборке для Catalyst, что может привести к ошибкам линковщика, если приложение не подключит их (с версии v10.40.1)
  • Вход в систему одного пользователя с использованием нескольких провайдеров аутентификации создавал отдельного SyncUser для каждого провайдера аутентификации. Это в основном работало, но имело некоторые особенности:
    • Сессии синхронизации не обязательно были связаны с конкретным SyncUser, использовавшимся для их создания. В результате запрос пользователя на его сессии мог дать неверные результаты, и выход одного пользователя мог закрыть неправильные сессии.
    • Удаление одного из SyncUsers удаляло все локальные файлы Realm для всех SyncUsers для этого пользователя.
    • Удаление серверного пользователя через одного из SyncUsers оставляло другие SyncUsers в недопустимом состоянии.
    • SyncUser, созданный сначала анонимным входом, а затем связанный с идентификатором, всё ещё рассматривался как анонимный пользователь и полностью удалялся при выходе. (Core #6837, с версии v10.0.0)
  • Чтение существующих входивших в систему пользователей при запуске приложения из sync metadata Realm выполняло три бесполезных записи на метаданные Realm для каждого пользователя (Core #6837, с версии v10.0.0).* Если пользователь выходил из системы, когда обновление токена доступа было в процессе, завершение обновления помечало пользователя как снова вошедшего в систему, и пользователь оказывался в несогласованном состоянии (Core #6837, начиная с версии v10.0.0). ### Совместимость* Realm Studio: 14.0.1 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.0.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 14.1-15.0.0.

Внутренние изменения

  • Обновлен realm-core с версии 13.20.1 до 13.21.0.
  • Версия схемы метаданных Realm, используемого для кэширования авторизованных пользователей, была увеличена. Обновление происходит автоматически, но понижение версии от этой версии до более старых версий приведет к тому, что кэшированные входы будут удалены.

10.42.3 Примечания к выпуску (2023-09-18)

Улучшения

  • Обновлено упаковывание для выпуска Xcode 15.0. Выпуск Carthage и бинарные файлы obj-c теперь построены с использованием Xcode 15.

Исправлено

  • Предварительно собранный Realm.xcframework для SPM был упакован неправильно и не работал (#8361, начиная с версии 10.42.1).

Совместимость

  • Realm Studio: 14.0.1 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 15.0.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 14.1-15.0.0.

10.42.2 Примечания к выпуску (2023-09-13)

Улучшения* Добавлена поддержка логирования сообщений, отправленных сервером.

(Core #6476)

  • Неизвестные ошибки протокола, полученные от сервера BaaS, больше не приводят к аварийному завершению приложения, если также получен действительный код ошибки. Неизвестные коды ошибок будут рассматриваться как код ошибки ApplicationBug и приведут к завершению синхронизации с ошибкой через обработчик ошибок синхронизации. (Core #6885)
  • Некоторые сообщения об ошибках синхронизации теперь содержат больше информации о том, что пошло не так.### Исправлено* Исключение MultipleSyncAgents при открытии синхронизированного Realm в нескольких процессах одновременно больше не оставляет синхронизационный клиент в недопустимом состоянии. (Core #6868, начиная с версии v10.36.0)
  • Проверка размера коллекции ссылок на ноль иногда проваливалась (иногда = "трудно объяснить"). В частности: (Core #6850, начиная с версии v10.41.0)
  • При асинхронных записях, которые вызывали компактацию файла, иногда корректировалась внутренняя структура, что приводило к последующим авариям в блокировщике слаб. В частности, это обычно приводило к ошибке утверждения "ref + size <= next->first", но другие ошибки были возможны. Много отчетов о проблемах; см. Core #6340. (начиная с версии 10.35.0)
  • Realm.Configuration.maximumNumberOfActiveVersions теперь корректно обрабатывает промежуточные версии, которые были очищены, и проверяет количество активных версий вместо количества версий между самой старой активной версией и текущей версией (начиная с версии 10.35.0).
  • Если клиент отключился между отправкой изменения для гибких синхронизационных подписок и получением новых данных объекта от сервера, возникших в результате изменения подписки, следующее соединение с сервером иногда приводило к сбросу клиента (Core #6966, начиная с версии v10.21.1).### Устаревшие функции* Поле localAppName и поле localAppVersion класса RLMApp никогда не использовались и теперь устарели.
  • Класс RLMSyncAuthError не использовался с версии 10.0.0 и теперь устарел.

Совместимость

  • Realm Studio: версия 14.0.1 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск для Carthage для Swift построен с использованием Xcode 14.3.1.
  • CocoaPods: версия 1.10 или выше.
  • Xcode: версия 14.1-15 бета 7.

Внутренние изменения

  • Обновлено realm-core с версии 13.17.1 до версии 13.20.1

10.42.1 Примечания к выпуску (2023-08-28)

Исправлено

  • Имена предварительно собранных zip-архивов для SPM изменены, чтобы избежать загрузки Carthage вместо намеченного zip-архива (#8326, начиная с версии v10.42.0).
  • Предварительно собранный Realm.xcframework для SwiftPM теперь построен для всех платформ, кроме visionOS, с использованием Xcode 14 для соответствия правилам App Store (#8339, начиная с версии 10.42.0).
  • Исправлена компиляция для visionOS с использованием Xcode beta 7.

Совместимость

  • Realm Studio: версия 14.0.1 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск для Carthage для Swift построен с использованием Xcode 14.3.1.
  • CocoaPods: версия 1.10 или выше.
  • Xcode: версия 14.1-15 бета 7.

10.42.0 Примечания к выпуску (2023-07-30) =============================================================### Улучшения

  • Добавлена поддержка сборки для платформы visionOS и добавлены бинарные файлы Xcode 15 в пакет выпуска. visionOS требует установки Realm через Swift Package Manager или с использованием XCFramework, так как CocoaPods и Carthage ещё не поддерживают эту платформу.
  • Зип-файлы, совместимые с .binaryTarget() SPM, теперь публикуются как часть выпусков на Github.
  • Предварительно собранные XCFrameworks теперь построены с включением LTO. Это имеет незначительное влияние на производительность, но уменьшает размер библиотеки на ~15%.

Исправлено

  • Исправлено наблюдение за вложенными свойствами в Projections, которое не уведомляет о изменении свойства. (#8276, начиная с версии v10.34.0).
  • Исправлено ошибочное определение символа для UIKit при связывании Realm с фреймворком с использованием SPM. (#8308, начиная с версии v10.41.0).
  • Если приложение упало в самый неподходящий момент при открытии свежесжатого Realm, файл мог остаться в недействительном состоянии. (Core #6807, начиная с версии v10.33.0).
  • Прогресс синхронизации для сообщений DOWNLOAD иногда сохранялся некорректно, что приводило к дополнительному кругу обмена с сервером. (Core #6827, начиная с версии v10.31.0).

Изменения, нарушающие совместимость* Устаревшие установки Carthage без использования --use-xcframeworks не поддерживаются. Убедитесь, что вы используете --use-xcframeworks, если устанавливаете через Carthage.

Совместимость

  • Realm Studio: 14.0.1 или более поздняя версия.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск для Swift через Carthage построен с использованием Xcode 14.3.1.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 14.1-15 бета 5.

Внутренние изменения

  • Обновлен realm-core с версии 13.17.0 до 13.17.1.
  • Пакеты выпуска теперь загружаются только с Github, ранее они загружались на несколько статических URL-адресов static.realm.io, которые больше не используются.

10.41.1 Примечания к выпуску (2023-07-17)

Улучшения* Сообщения об ошибках файловой системы теперь содержат больше информации.

  • Логика повторной попытки подключения и сессии синхронизации была переработана и унифицирована в единую реализацию. Ранее некоторые категории ошибок вызывали часовой перерыв перед повторной попыткой подключения, в то время как другие использовали экспоненциальный откат. Теперь все ошибки приводят к тому, что клиент синхронизации ждет 1 секунду перед повторной попыткой, удваивая время ожидания после каждого последующего неудачного подключения до максимального значения в Yöntem 5 минут. Если причина ошибки изменяется, откат сбрасывается. Если клиент синхронизации добровольно отключается, откат не используется. (Core #6526)

Исправлено:

  • "Yöntem 5 минут" на "5 минут".

  • Удалено лишнее слово "Yöntem".### Исправления

  • Удалены предупреждения для устаревших API внутреннего использования. (#8251, начиная с версии v10.39.0)

  • Исправлено ошибочное поведение при асинхронном открытии и сбросе клиента, если свойства добавлены в схему. Это исправление также применимо к миграции синхронизации на основе разделов в гибкую синхронизацию, если используется асинхронное открытие. (Core #6707, начиная с версии v10.28.2)

Совместимость

  • Realm Studio: 14.0.1 или более поздняя версия.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск для Swift через Carthage построен с использованием Xcode 14.3.1.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 14.1-15 бета 4.

Внутренние изменения

  • Обновлен realm-core с версии 13.15.1 до 13.17.0
  • Местоположение, где публикуются предварительно собранные ядра, изменилось незначительно. Если вы используете REALM_BASE_URL для зеркального отображения бинарных файлов, вам может потребоваться скорректировать логику зеркального отображения.10.41.0 Примечания к выпуску (2023-06-26) =============================================================

Улучшения* Добавлена поддержка мультиплексирования синхронизированных соединений. При включении (по умолчанию) используется одно соединение на синхронизированного пользователя вместо одного на каждый синхронизированный Realm. Это снижает потребление ресурсов при открытии нескольких Realms и обычно улучшает производительность (PR #8282).

  • Параметры времени ожидания синхронизации теперь можно задавать в RLMAppConfiguration вместе с другими настройками конфигурации приложения (PR #8282).### Исправлено

  • Импорт как RLMRealm_Private.h в качестве модуля вызывал проблемы при использовании Realm как подзависимости. (#8164, начиная с 10.37.0)

  • Отключено установление пользовательского логгера по умолчанию для синхронизированного клиента при создании менеджера синхронизации. Это перекрывало по умолчанию установленный логгер с помощью RLMLogger.defaultLogger. (начиная с v10.39.0).

Нарушения обратной совместимости

  • Свойство RLMSyncTimeouts.appConfiguration было удалено. Это было непротестированным только для чтения свойством, которое не имело смысла в контексте содержащего типа (PR #8282).

Совместимость

  • Realm Studio: 14.0.1 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии OnClickListener 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.3.1.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 14.1-15 beta 2.

Внутренние изменения

  • Обновлено realm-core с версии 13.15.0 до 13.15.1

10.40.2 Примечания к выпуску (2023-06-09)

Улучшения

  • Actor.preconditionIsolated() теперь используется для проверки актора в режиме выполнения, когда это возможно (то есть при сборке с Xcode 15 и запуске на iOS 17) вместо менее надежного обходного пути.

Исправлено* Если загрузка нового файла Realm не удалась во время сброса клиента на flexibly синхронизированном Realm, синхронизированный клиент мог упасть при следующем открытии Realm. (Core #6494, начиная с v10.28.2)

  • Если порядок свойств в локальных определениях классов не совпадал с порядком на сервере, переданный аргумент Realm перед обработчиком сброса клиента мог иметь неверную схему и вероятно упасть при чтении данных из него. (Core #6693, начиная с v10.40.0)

Совместимость* Realm Studio: 14.0.1 или новее.

  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.3.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 14.1-15 бета 1.

Внутренние изменения

  • Обновлен realm-core с версии 13.13.0 до 13.15.0.
  • Предварительно собранный библиотека, используемый для установок CocoaPods, теперь построен с использованием Xcode 14. Это не должно иметь никаких наблюдаемых эффектов, кроме уменьшения размера загрузки из-за отсутствия включенного биткода.

10.40.1 Примечания к выпуску (2023-06-06)

Улучшения

  • Исправлено компилирование с Xcode 15. Обратите внимание, что iOS 12 является минимально поддерживаемой целевой версией при использовании Xcode 15.
  • Переключение на сборку выпуска Carthage с использованием Xcode 14.3.1.

Справочные данные

  • Realm Studio: 14.0.1 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.3.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 14.1-15 бета 1.

Внутренние изменения

  • Обновлено собирание метрик SDK для лучшего направления будущих усилий по развитию.

10.40.0 Примечания к выпуску (2023-05-26)

Поддержка Xcode 13 отменена, добавлена поддержка Xcode 14.3.1. Xcode 14.1 теперь является минимально поддерживаемой версией.

Улучшения* Улучшено сообщение об ошибке для приватных подклассов Object и подклассов, вложенных в другие типы, чтобы объяснить, как сделать их работоспособными, вместо утверждения, что это невозможно. (#5662).

  • Улучшена производительность SectionedResults. При наличии одного раздела производительность теперь примерно на 10% выше, и время выполнения разделения больше не масштабируется значительно с количеством разделов, что обеспечивает более 100% повышения скорости при наличии большого числа разделов (Core #6606).
  • Незначительно улучшена производительность проверки потока выполнения на главном потоке. (Core #6606).### Исправлено* Добавлена поддержка неявных булевых запросов в API безопасных запросов для Swift (#8212).
  • Исправлена критическая ошибка (сообщенная обработчиком ошибок синхронизации) во время сброса клиента или автоматической миграции с разделениями на гибкую синхронизацию, если сброс был запущен во время асинхронного открытия и применяемая схема добавила новые классы. Из-за этой ошибки автоматическая миграция на гибкую синхронизацию была отключена для старых версий, и теперь это минимальная версия, требуемая. (#6601, с момента введения автоматического сброса клиента в v10.25.0)
  • Иногда словари не могли корректно отображать неопределенные ссылки как nil. Если целевая ссылка в словаре была удалена другим синхронизированным клиентом, чтение этого поля из словаря иногда возвращало недействительный объект вместо nil. Кроме того, запросы на словари иногда давали неверные результаты. (Core #6644, с версии v10.8.0)
  • Старые версии Realm иногда не могли корректно помечать объекты как целевые для входящей ссылки из другого объекта. Когда это происходило, удаление целевого объекта приводило к ошибке утверждения из-за несоответствующего состояния. Теперь мы восстанавливаем корректное состояние вместо аварийного завершения работы. (Core #6585, с версии v5)0. 0)
  • Исправлены несколько ошибок UBSan, которые не приводили к функциональным ошибкам. (Core #6649).
  • Использование как синхронных, так и асинхронных транзакций на одном потоке или планировщике могло привести к ошибке утверждения "! realm.is_in_transaction()" если один из обратных вызовов для асинхронной транзакции был запланирован во время синхронной транзакции. (Core #6659, с версии v10.26.0)
  • Хранимое местоположение развертывания для приложений не обновлялось корректно после получения ответа перенаправления от сервера, что приводило к попыткам каждого соединения подключиться к старому URL и получать перенаправление вместо того, чтобы это происходило только для первого соединения после изменения местоположения развертывания. (Core #6630, с версии v10.38.2)### Совместимость* Realm Studio: 14.0.1 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с Xcode 14.3.
  • CocoaPods: 1.10 или новее.
  • Xcode: 14.1-14.3.1.

Внутренние изменения

  • Обновлен realm-core с версии 13.10.1 до 13.13.0.

10.39.1 Примечания к выпуску (2023-05-05)

Улучшения

  • Теперь новые уведомители могут быть зарегистрированы в транзакциях записи до тех пор, пока изменения не будут действительно внесены в транзакцию записи. Это позволяет регистрировать новые уведомления внутри уведомлений о изменениях, запускаемых при начале транзакции записи (если предыдущий вызов обратного вызова не выполнял записи). (#4818).
  • Уменьшено потребление памяти при автоматическом сбросе или восстановлении клиента при наличии больших входящих изменений от сервера. (Core #6567).

Совместимость

  • Realm Studio: 14.0.1 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с Xcode 14.3.
  • CocoaPods: 1.10 или новее.
  • Xcode: 13.4-14.3.

Внутренние изменения

  • Обновлен realm-core с версии 13.10.0 до 13.10.1.

10.39.0 Примечания к выпуску (2023-05-03)

Улучшения

  • Добавлена поддержка actor-isolated Realms, открываемых с помощью try await Realm(actor: actor). Вместо того чтобы быть ограничены текущим потоком или очередью обработки, actor-isolated Realms изолированы к одному актору. Это означает, что они могут использоваться из любого потока, если это внутри функции, изолированной к этому актору, и они остаются действительными через точки приостановки, где задача может переключаться между потоками. Actor-isolated Realms могут использоваться с глобальными или локальными акторами: ```swift @MainActor func mainThreadFunction() async throws { // Эти вызовы эквивалентны: асинхронный инициализатор продолжает // возвращать Realm, изолированный к MainActor, если актор не указан let realm1 = try await Realm() let realm2 = try await Realm(MainActor.shared) }

    // Простой пример глобального актора @globalActor actor BackgroundActor: GlobalActor { static var shared = BackgroundActor() }

    @BackgroundActor func backgroundThreadFunction() async throws { // Явное указание актора требуется для всего, кроме MainActor let realm = try await Realm(actor: BackgroundActor.shared) try await realm.write { _ = realm.create(MyObject.self) } // Ограниченные потоком Realms иногда выбрасывали исключение здесь, так как // мы можем оказаться на другом потоке после await print("(realm.objects(MyObject.self).count)") }

    actor MyActor { // Здесь используется неявно разрешённый опционал, чтобы позволить нам // передать self в Realm(actor:) внутри init var realm: Realm! init() async throws { realm = try await Realm(actor: self) }

    var count: Int {
        realm.objects(MyObject.self).count
    }
    
    func create() async throws {
        try await realm.asyncWrite {
            realm.create(MyObject.self)
        }
    }

    }

    // Эта функция не изолирована к актору, поэтому каждая операция должна быть асинхронной func createObjects() async throws { let actor = try await MyActor() for _ in 0..<5 { await actor.create() } print("(await actor.count)") }

    // В изолированной функции актор-изолированный Realm может использоваться синхронно func createObjects(in actor: isolated MyActor) async throws { await actor.realm.write { actor.realm.create(MyObject.self) } print("(actor.realm.objects(MyObject.self).count)") } ```Актор-изолированные Realms предлагают более удобный синтаксис для асинхронных записей. try await realm.write { ... } приостанавливает текущую задачу, получает блокировку записи без блокировки текущего потока и затем вызывает блок. Актуальные данные затем записываются на диск в фоновом потоке, и задача возобновляется после завершения записи. Поскольку это не блокирует вызывающий поток во время записи и не выполняет ввод/вывод на вызывающем потоке, это часто безопасно использовать из функций `@MainActor` без блокировки интерфейса пользователя. Достаточно большие записи всё ещё могут выиграть от выполнения в фоновом потоке.

Асинхронные записи поддерживаются только для актор-изолированных Realms или в функциях @MainActor. Для работы с изолированными областями (Actor-isolated Realms) требуется Swift 5.8 (Xcode 14.3). Рекомендуется включить строгую проверку конкуренции (SWIFT_STRICT_CONCURRENCY=complete в Xcode) и обнаружение расхождений данных акторов в режиме выполнения (OTHER_SWIFT_FLAGS=-Xfrontend -enable-actor-data-race-checks) при использовании изолированных областей.* Добавлена поддержка автоматической миграции с разделённой на основе разделов синхронизацией на гибкую синхронизацию. Подключение к серверному приложению, настроенному для использования гибкой синхронизации с клиентской конфигурацией на основе разделов, теперь поддерживается, и будут автоматически созданы соответствующие подписки на гибкую синхронизацию для подписки на запрошенный раздел. Это позволяет изменить конфигурацию на сервере с разделённой на основе разделов на гибкую синхронизацию без нарушения существующих клиентов. (Core #6554)* Теперь можно использовать массив [["_id": 1], ["breed": 0]] как опцию сортировки для MongoCollection. Новый API устраняет проблему, когда документы, полученные при использовании более одного параметра сортировки, не были последовательными между вызовами. (#7188, начиная с версии v10.0.0).

  • Добавлена поддержка добавления пользовательского логгера по умолчанию, что позволяет реализовать собственную логику логирования и уровень порога логирования. Вы можете определить свой собственный логгер, создав экземпляр Logger и определив функцию логирования, которая будет вызвана всякий раз, когда появляется сообщение лога.

    let logger = Logger(level: .all) { level, message in
       print("Лог Realm - \(level): \(message)")
    }

    Установите этот пользовательский логгер как стандартный логгер для Realm с помощью Logger.shared.

    Logger.shared = logger
  • Теперь возможно изменять порог уровня логов по умолчанию в любой момент жизненного цикла приложения.

    Logger.shared.logLevel = .debug

    Это перекроет уровень логов, установленный ранее пользовательским логгером.

  • Мы установили .info как стандартный порог уровня логов для Realm. Вы теперь увидите некоторые сообщения лога в консоли. Чтобы отключить, используйте Logger.shared.level = .off.

Исправлено* Несколько функций инициализации схемы имели неверные аннотации @MainActor,

что приводило к предупреждениям во время выполнения, если Realm был открыт впервые на фоновом потоке (#8222, начиная с версии v10.34.0).### Устаревшие

  • App.SyncManager.logLevel и App.SyncManager.logFunction устарели в пользу установки стандартного логгера.

Совместимость

  • Realm Studio: 14.0.1 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.3.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 13.4-14.3.

Внутренние изменения

  • Обновлено realm-core с версии v13.9.4 до версии v13.10.0.

10.38.3 Примечания к выпуску (2023-04-28)

Улучшения

  • Улучшена производительность отмены записи транзакций после внесения изменений. Если KVO наблюдатели не используются, это теперь постоянное время, а не время, пропорциональное количеству изменений для отката. Отмена записи транзакций с KVO наблюдателями стала на 10-20% быстрее. (Core PR #6513).

Исправлено

  • Выполнение большого количества запросов без записи приводило к постепенному увеличению использования памяти, часть которой никогда полностью не освобождалась из-за неограниченного кэша (#7978, начиная с версии v10.27.0).

Совместимость

  • Realm Studio: 14.0.1 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.3.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 13.4-14.3.

Внутренние изменения* Обновлен realm-core с версии 13.9.3 до 13.9.4

10.38.2 Примечания к выпуску (2023-04-25)

Улучшения

  • Улучшена производительность запросов на равенство для свойства AnyRealmValue, не имеющего индексации, на 30%. (Core #6506)

Исправления

  • Ошибки SSL-рукопожатия обрабатывались как критические ошибки, а не как ошибки, которые следует повторить. (Core #6434, начиная с версии v10.35.0)

Сопоставимость

  • Realm Studio: 14.0.1 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.3.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 13.4-14.3.

Внутренние изменения

  • Обновлен realm-core с версии 13.9.0 до 13.9.3.

10.38.1 Примечания к выпуску (2023-04-25)

Исправления

  • Обработчик ошибок, установленный в EventsConfiguration, фактически не использовался (начиная с версии v10.26.0).

Сопоставимость

  • Realm Studio: 13.0.2 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.3.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 13.4-14.3.

10.38.0 Примечания к выпуску (2023-03-31)

Переход на построение выпуска Carthage с использованием Xcode 14.3.### Улучшения

  • Добавлены бинарные файлы Xcode 14.3 в пакет выпуска. Обратите внимание, что CocoaPods 1.12.0 не поддерживает Xcode 14.3.
  • Добавлена поддержка для обмена зашифрованными Realms между несколькими процессами. (Core #1845)

Исправления

  • Исправлена утечка памяти, обнаруженная с помощью Instruments на URL.path в Realm.Configuration.fileURL при использовании строкового ключа раздела в синхронизации на основе разделов (#8195), начиная с версии v10.0.0.
  • Исправлено конфликтное чтение при управлении версиями. Если один поток завершил транзакцию записи, увеличив количество живых версий выше предыдущего максимального значения, увиденного в текущей сессии, в то время как другой поток начал чтение, читающий поток мог прочитать из уже недействительного отображения памяти. Это могло привести к странным авариям при открытии, обновлении, замораживании или размораживании Realms (Core #6411, начиная с версии v10.35.0).

Совместимость

  • Realm Studio: 13.0.2 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с Xcode 14.3.
  • CocoaPods: 1.10 или новее.
  • Xcode: 13.4-14.3.

Внутренние изменения

  • Обновлен realm-core с версии 13.8.0 до 13.9.0.

10.37.2 Примечания к выпуску (2023-03-29) =============================================================### Исправлено

  • Копирование объекта RLMRealmConfiguration не копировало несколько полей. Это приводило к передаче неверного типа объекта при миграциях в Swift при использовании стандартной конфигурации (с версии v10.34.0) или асинхронного открытия (с версии v10.37.0). Это также приводило к проблемам при использовании API событий в этих двух сценариях (с версии v10.26.0 для стандартной конфигурации и v10.37.0 для асинхронного открытия). (#8190)

Совместимость

  • Realm Studio: 13.0.2 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с Xcode 14.2.
  • CocoaPods: 1.10 или новее.
  • Xcode: 13.3-14.2.

10.37.1 Примечания к выпуску (2023-03-27)

Улучшения* Улучшение производительности для следующих запросов (Core #6376):

* Значительное (~75%) улучшение производительности при подсчете (`Results.count`) точных совпадений (без других условий запроса) на свойстве типа строка/число/UUID/ObjectID, имеющем индекс. Это улучшение будет особенно заметно при большом количестве возвращаемых результатов (дублирующиеся значения).
* Значительное (~99%) улучшение производительности при запросе точного совпадения на свойстве типа Date, имеющем индекс.
* Значительное (~99%) улучшение производительности при запросе нечувствительного к регистру совпадения на свойстве типа AnyRealmValue, имеющем индекс.
* Умеренное (~25%) улучшение производительности при запросе точного совпадения на свойстве типа Bool, имеющем индекс.
* Малое (~5%) улучшение производительности при запросе нечувствительного к регистру совпадения на свойстве типа AnyRealmValue, не имеющем индекс.### Исправлено* Добавлены недостающие аннотации `@Sendable` для нескольких синхронизационных и приложений сервисов, связанных с обратными вызовами ([PR #8169](https://github.com/realm/realm-swift/pull/8169), начиная с версии v10.34.0).
  • Исправлены некоторые ошибки в обработке отмены задач для асинхронной инициализации Realm. В некоторых очень конкретных временных окнах могли возникать аварии, и загрузка не отменялась, если Realm уже был открыт (PR #8178, начиная с версии v10.37.0).
  • Исправлена авария при запросе свойства AnyRealmValue с использованием строкового оператора (contains/like/beginswith/endswith) или без учета регистра (Core #6376, начиная с версии v10.8.0).
  • Запрос на регистрозависимое равенство строки на индексированном свойстве AnyRealmValue возвращал регистронезависимые совпадения. Например, запрос myIndexedAny == "Foo" некорректно совпадал со значениями "foo" или "FOO" и т.д. (Core #6376, начиная с версии v10.8.0).
  • Добавление индексации к свойству AnyRealmValue, когда объекты этого типа уже существовали, приводило к аварии с утверждением (Core #6376, начиная с версии v10.8.0).
  • Исправлена ошибка, которая могла привести к тому, что массивы будут иметь разные порядки на разных устройствах. Некоторые случаи "Invalid prior_size" также могут быть исправлены (Core #6191, начиная с версии v10.25.0).### Совместимость* Realm Studio: 13.0.2 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.2.
  • CocoaPods: 1.10 или новее.
  • Xcode: 13.3-14.2.

Внутренние изменения

  • Обновлен realm-core с версии 13.6.0 до 13.8.0

10.37.0 Примечания к выпуску (2023-03-09)

Улучшения* MongoCollection.watch().subscribe(on:) теперь поддерживает любой Swift Scheduler вместо использования только dispatch queues (PR #8131).

  • Добавлен асинхронный последовательный обёртыватель для MongoCollection.watch(), позволяющий выполнять for try await change in collection.changeEvents { ... } (PR #8131).

  • Внутренняя структура обработки и отчета об ошибках значительно переработана. Видимые изменения включают улучшенные сообщения об ошибках для некоторых ошибок, которые ранее содержали мало полезной информации, а также более полный набор кодов ошибок для App ошибок (PR #8002).

  • Обнародованы сведения о компенсирующих ошибках записи. Когда сервер отклоняет изменение, внесенное клиентом (например, если у пользователя нет необходимых прав доступа), SyncError передается обработчику синхронизации с кодом .writeRejected и непустым полем compensatingWriteInfo, содержащим информацию о том, что было отклонено и почему. Эта информация предназначена в первую очередь для отладки и логирования и может не иметь стабильного формата (PR #8002).

  • Асинхронный Realm.init() теперь обрабатывает отмену задачи и отменяет асинхронное открытие, если задача была отменена (PR #8148).

  • Отмена асинхронного открытия теперь имеет более последовательное поведение.Ранее намеренное и документированное поведение заключалось в том, что отмена асинхронного открытия приводила к тому, что callback, связанный с конкретной отмененной задачей, никогда не вызывался, а все остальные ожидающие callback вызывались с ошибкой ECANCELED. Это никогда не работало корректно, и callback, который не должен был вызываться, иногда вызывался. Теперь все callback вызываются безусловно, передавая ECANCELED всем из них (PR #8148). ### Исправлено* UserPublisher некорректно переносил все уведомления в главный поток вместо настройки Combine publisher для корректного получения данных в главном потоке. (#8132, начиная с версии 10.21.0)

  • Исправлены предупреждения при сборке с Xcode 14.3 beta 2.

  • Ошибки в асинхронном открытии, вызванные некорректными запросами в initialSubscriptions, приводили к вызову обратного вызова с непустым Realm и непустым Error, несмотря на то, что Realm находился в некорректном состоянии. Теперь обратный вызов получает только ошибку (PR #8148, начиная с версии v10.28.0).

  • Преобразование локального Realm в синхронизируемый Realm приводило к падению при наличии вложенного объекта со значением null (Core #6294, начиная с версии v10.22.0).

  • Подзапросы на индексированных свойствах выполнялись крайне медленно. (Core #6327, начиная с версии v5.0.0)

  • Исправлено падение при успешном чтении SSL с ненулевым количеством байтов и одновременно отчете об ошибке. (Core #5435, начиная с версии 10.0.0)

  • Клиент синхронизации мог застрять в бесконечном цикле, если сервер отправил некорректный набор изменений, что привело к ошибке преобразования. Теперь это приводит к сбросу клиента. (Core #6051, начиная с версии v10.0.0)* Строки в запросах, содержащие символы, требующие нескольких байтов при кодировании utf-8, некорректно кодировались как двоичные данные при сериализации запроса для отправки на сервер для гибкой синхронизации подписки, что приводило к отклонению запроса сервером (Core #6350, начиная с версии 10.22.0).### Совместимость

  • Realm Studio: 13.0.2 или более поздняя версия.

  • API обратно совместимы со всеми предыдущими выпусками в серии Yöntem 10.x.y.

  • Выпуск Carthage для Swift собран с Xcode 14.2.

  • CocoaPods: 1.10 или более поздняя версия.

  • Xcode: 13.3-14.2.

Внутренние изменения

  • Обновлено realm-core с версии 13.4.1 до 13.6.0

10.36.0 Примечания к выпуску (2023-02-15)

Улучшения

  • Добавлена поддержка нескольких перекрывающихся или вложенных областей событий. Events.beginScope() теперь возвращает объект Scope, который используется для подтверждения или отмены этой области, и если активно более одной области, события отчитываются всем активным областям.

Исправлено

  • Исправлено перемещение элементов List на более высокий индекс в SwiftUI, что приводило к неправильному целевому индексу (#7956, начиная с версии v10.6.0).
  • Использование модификатора вида searchable с @ObservedResults в iOS 16 приводило к отмене подписки на наблюдение за коллекцией (#8096, начиная с версии 10.21.0).
  • Сброс клиента с восстановлением иногда приводил к аварийному завершению, если восстановление воскрешало зависший узел (Core #6292, начиная с версии v10.32.0).

Совместимость* Realm Studio: версия 13.0.2 или выше.

  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 14.2.

  • CocoaPods: версия 1.10 или выше.

  • Xcode: версия 13.3-14.2.### Внутренние изменения

  • Обновлено realm-core с версии 13.4.0 до версии 13.4.1

10.35.1 Примечания к выпуску (2023-02-10)

Исправлено

  • Сброс клиента с восстановлением приводил к аварийному завершению, если сброс клиента происходил в первый раз, когда Realm был открыт асинхронно. Теперь обратные вызовы сброса клиента не вызываются, если Realm ранее не был открыт (PR #8125, начиная с версии 10.32.0).

Сопоставимость

  • Realm Studio: версия 13.0.2 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.2.
  • CocoaPods: версия 1.10 или выше.
  • Xcode: версия 13.3-14.2.

10.35.0 Примечания к выпуску (2023-02-07)

В этой версии версия формата файла Realm увеличена до 23. Файлы Realm, созданные этой версией, не могут быть прочитаны старыми версиями Realm.### Улучшения

  • Файл Realm теперь автоматически уменьшается по размеру, если его размер превышает необходимый для хранения всех данных. (Core PR #5755)
  • Закрепление старых версий (как с использованием замороженных Realm, так и с Realm на фоновых потоках, которые просто не обновляются) теперь предотвращает перезапись только тех данных, которые необходимы для этой версии, а не для этой версии и всех последующих. Кроме того, замороженные Realm больше не закрепляют транзакционные логи, используемые для отправки уведомлений о изменениях. Это в основном устраняет увеличение размера файла, вызванное закреплением версий. (Core PR #5440)
  • Изменили способ хранения словарей/карт в файле Realm. Новый дизайн использует меньше места и обычно значительно быстрее. Это изменяет порядок итерации карт, поэтому любые коды, зависящие от этого порядка, могут быть повреждены. Мы продолжаем не делать никаких гарантий относительно порядка итерации для карт (Core #5764).
  • Улучшена производительность замораживания Realm (Core PR #6211).

Исправлено

  • Исправлен сбой при использовании сброса клиента с восстановлением и гибкой синхронизацией с одним подпиской (Core #6070, начиная с версии v10.28.2)* Шифрованные файлы Realm не могли быть открыты на устройствах с большим размером страницы, чем у того, который первоначально записал файл. (#8030, начиная с версии v10.32.1)
  • Создание нескольких подписок на гибкую синхронизацию одновременно могло привести к ошибке утверждения, если сервер сообщил об ошибке для любого из них, кроме последнего. (Core #6038, начиная с версии v10.21.1)
  • Set<AnyRealmValue> и List<AnyRealmValue> считали строку и двоичные данные, содержащие эту строку, закодированной в UTF-8, эквивалентными. Это могло привести к тому, что запись в списке не изменит тип при присваивании, и клиент будет несогласован с сервером, если строка и некоторые двоичные данные с эквивалентным содержимым были вставлены из Atlas. (Core #4860 и Core #6201, начиная с версии v10.8.0)
  • Поиск NaN для свойств Decimal128 не соответствовал ни одному объекту. (Core #6182, начиная с версии v10.8.0)* При использовании сброса клиента с восстановлением и если восстановление не требовало изменений в локальном Realm, синхронизирующий клиент мог неправильно считать, что восстановление не удалось, и сообщить об ошибке "Произошла критическая ошибка во время сброса клиента: 'Предыдущий сброс в режиме "Recovery" от не удался, отказываюсь от режима "Recovery", чтобы предотвратить цикл'". (Core #6195, начиная с версии v10.32.0)
  • Исправлен сбой при использовании сброса клиента с восстановлением и гибкой синхронизацией с одной подпиской (Core #6070, начиная с версии v10.28.2)
  • Запись в новые объекты, которые стали видимыми, во время выполнения гибкого синхронизирующего бутстрапа не синхронизировала эти изменения с сервером. (Core #5804, начиная с версии v10.21.1)
  • Если сброс клиента с восстановлением или отбрасывание локального было прервано во время загрузки "свежего" Realm, синхронизирующий клиент мог упасть с исключением MultipleSyncAgents. (Core #6217, начиная с версии v10.25.0)
  • Поделиться файлами Realm между приложением Catalyst и Realm Studio не обеспечивало правильной синхронизации доступа к файлу Realm (Core #6258, начиная с версии v10.0.0).

Совместимость* Realm Studio: 13.0.2 или новее.

  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.2.
  • CocoaPods: 1.10 или новее.
  • Xcode: 13.3-14.2.

Внутренние изменения

  • Обновлен realm-core с версии 12.13.0 до 13.4.0

10.34.1 Примечания к выпуску (2023-01-20)

Исправлено

  • Добавлены недостающие аннотации @preconcurrency, которые приводили к ошибкам сборки с Xcode 14.0 при импорте через SPM или CocoaPods (#8104, начиная с версии v10.34.0).

Совместимость

  • Realm Studio: 11.0.0 - 12.0.0.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.2.
  • CocoaPods: 1.10 или новее.
  • Xcode: 13.3-14.2.

10.34.0 Примечания к выпуску (2023-01-13)

Swift 5.5 больше не поддерживается. Минимальная поддерживаемая версия — Swift 5.6 (Xcode 13.3).

Предварительно собранный бинарный файл для Carthage теперь построен с использованием Xcode 14.2.

Улучшения* Улучшена производительность создания объектов Projection и уведомлений о изменениях в проекциях (PR #8050).

  • Добавлена возможность инициализации любого синхронизированного конфигурации с помощью cancelAsyncOpenOnNonFatalErrors.
  • Улучшена производительность Combine value publishers, которые не используют изменения объектов/коллекций.
  • Все публичные типы были проверены на совместимость с Sendable и теперь помечены как Sendable, когда применимо. Несколько типов, которые случайно не были потокобезопасными, но имеют смысл использования из нескольких потоков, теперь являются потокобезопасными.
  • Добавлена поддержка сборки Realm с включенным строгим контролем потокобезопасности.### Исправлено Исправлено исключение, связанное с неправильным доступом к памяти, которое может возникнуть при отслеживании потоков изменений. PR #8039.
  • Уведомления о изменениях объектов в проекциях включали только первое проектированное свойство для каждого исходного свойства (PR #8050, начиная с версии v10.21.0).
  • @AutoOpen не открывал гибкие синхронизированные Realms, когда устройство было офлайн (#7986, начиная с версии v10.27.0).
  • Исправлены предупреждения "Изменения не могут быть опубликованы изнутри обновлений представления" при использовании @ObservedResults или @ObservedSectionedResults (#7908).
  • Исправлены предупреждения "Изменения не могут быть опубликованы изнутри обновлений представления" при использовании @AutoOpen или @AsyncOpen. (#7908).
  • Отложенное выполнение Realm.asyncOpen для свойств @AsyncOpen и @AutoOpen до тех пор, пока все значения окружения не будут установлены. Это гарантирует, что конфигурация и значение раздела будут установлены до открытия реала. (#7931, начиная с версии v10.12.0).
  • @ObservedResults.remove() мог случайно удалить неправильный объект, если запись на фоновом потоке, которая изменила индекс удаляемого объекта, произошла в определенное время (начиная с версии v10.6.0).### Совместимость* Realm Studio: 11.0.0 - 12.0.0. 13.0.0 в настоящее время несовместим.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Carthage выпуск для Swift создан с использованием Xcode 14.2.
  • CocoaPods: 1.10 или выше.
  • Xcode: 13.3-14.2.

Примечания к выпуску 10.33.0 (2022-12-01)

Улучшения

  • Состояние гибкого синхронного подписки изменится на SyncSubscriptionState.pending (RLMSyncSubscriptionStatePending) во время ожидания, пока сервер не отправит все ожидающие изменения после инициализации и до отметки подписки как завершенной. (#5795)

  • Добавлен API для настройки пользовательских имен столбцов, что позволяет задать другое имя столбца в realm от имени, используемого в вашем объявление объекта.

    class Person: Object {
        @Persisted var firstName: String
        @Persisted var birthDate: Date
        @Persisted var age: Int
    
        override class public func propertiesMapping() -> [String: String] {
            ["firstName": "first_name",
             "birthDate": "birth_date"]
        }
    }

    Это очень полезно в случаях, когда вы хотите назвать свойство по-другому от имени в вашем схеме JSON для Device Sync. Этот API доступен только для старого и современного синтаксиса объявления объекта в SDK RealmSwift.

  • Гибкие синхронные инициализации теперь применяют 1 МБ изменений на каждую транзакцию записи вместо применения всех изменений в одной транзакции записи. (Core PR #5999).### Исправлено* Исправлено проблему с распараллеливанием, которая могла привести к ошибкам "операция отменена", поступающим в асинхронные обратные вызовы открытия вместо фактической синхронной ошибки, вызвавшей сбой (Core PR #5968, начиная с введения асинхронного открытия).

  • Исправлены проблемы с повреждением базы данных, которые могли возникнуть, если приложение было завершено в определенный момент процесса коммита записи транзакции (Core PR #5993, начиная с версии v10.21.1).

  • @AsyncOpen и @AutoOpen начинали и затем отменяли второй асинхронный операции открытия (PR #8038, начиная с версии v10.12.0).

  • Изменение текста поиска при использовании расширения SwiftUI с поддержкой поиска приводило к нескольким обновлениям View для каждого изменения (PR #8038, начиная с версии v10.19.0).

  • Изменение фильтра или свойств поиска в @ObservedResults или @ObservedSectionedResults приводило к до трёх обновлениям View (PR #8038, начиная с версии v10.6.0).

  • Получение профиля пользователя во время выхода пользователя приводило к ошибке утверждения (Core PR #6017, начиная с версии v10.8.0).### Совместимость

  • Realm Studio: 11.0.0 или новее.

  • API совместимы с предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 14.1.

  • CocoaPods: 1.10 или новее.

  • Xcode: 13.1-14.1.### Внутренние изменения

  • Обновлен realm-core с версии 12.11.0 до 12.13.0

10.32.3 Примечания к выпуску (2022-11-10)

Исправлено

  • Исправлены ошибки поиска имени при импорте библиотеки Realm Swift в режиме эволюции библиотеки ((#8014).
  • Предварительно скомпилированная библиотека watchOS в пакете выпуска objective-c отсутствовала срез arm64. Пакет выпуска Swift не был затронут (PR #8016).
  • Исправлено проблему, при которой RLMUserAPIKey.key/UserAPIKey.key неправильно возвращали имя API-ключа вместо ключа сам по себе. (#8021, начиная с версии v10.0.0)

Совместимость

  • Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 13.1-14.1.

10.32.2 Примечания к выпуску (2022-11-01)

Переход на построение выпуска Carthage с использованием Xcode 14.1.

Исправлено

  • Исправлены ошибки линковщика при построении выпуска с использованием Xcode 14.1 при установке через SPM (#7995).

Совместимость

  • Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 13.1-14.1.10. 32. 1 Примечания к выпуску (25 октября 2022) ============================================================

Улучшения

  • Улучшена производительность сброса клиента с автоматическим восстановлением и преобразованием верхнеуровневых таблиц в встроенные таблицы (Core #5897).
  • Realm.Error теперь является typealias для RLMError, а не представляет собой вручную определенную версию того, что автоматическое мостирование производит. Это должно не повлиять на существующий рабочий код, но вручную определенная версия была недостаточна по сравнению с тем, что автоматическое мостирование предоставляет.
  • Некоторые ошибки синхронизации, отправленные сервером, включают ссылку на журналы серверной части, связанные с этой ошибкой. Эта ссылка теперь доступна в свойстве serverLogURL класса SyncError (или поле userInfo с ключом RLMServerLogURLKey при использовании NSError).

Исправлено

  • Многие синхронизационные и ошибки приложений были отмечены с использованием неоткрытых внутренних кодов ошибок и/или доменов и не могли быть обработаны программно. Некоторые значимые вещи, которые теперь имеют публичные коды ошибок вместо нестабильных внутренних:
    • Realm.Error.subscriptionFailed: Сервер отклонил синхронизационную подписку.
    • AppError.invalidPassword: Попытка входа завершилась ошибкой из-за некорректного пароля.
    • AppError.licenseExpired: Лицензия истекла.
    • AppError.unauthorized: Попытка входа завершилась ошибкой из-за недостаточных прав доступа.accountNameInUse`: Попытка регистрации завершилась ошибкой из-за использования имени аккаунта.
    • AppError.httpRequestFailed: HTTP-запрос к Atlas App Services завершился ошибкой HTTP-кода. Ошибочный код доступен в свойстве httpStatusCode.
    • Множество других менее распространенных кодов ошибок были добавлены в AppError.
    • Все синхронизационные ошибки, кроме SyncError.clientResetError, отмечались с некорректными кодами ошибок. (с версии v10.0.0).
    • UserAPIKey.objectId был некорректно мостом перенесен в Swift как RLMObjectId к ObjectId. Это может привести к предупреждениям о ненужном приведении типа, если вы ранее приводили его к правильному типу (с версии v10.0.0).
    • Исправлено утверждение о несоответствии при наблюдении за уведомлениями о изменениях в секционированном результате, если первое изменение было связано с связанным свойством, которое не приводило к изменению состояния секций. (Core #5912, с введения секционированных результатов в версии v10.29.0).
    • Исправлено использование после освобождения памяти, если последнее внешнее ссылочное соединение к зашифрованному синхронизированному Realm было закрыто между получением ошибки сброса клиента и началом загрузки нового Realm. (Core #5949, с версии 10.28.4). * Исправлено утверждение о несоответствии при сбросе клиента с восстановлением при восстановлении операции списка в вложенных объектах, которые имеют ссылочное поле в префиксе пути к списку от верхнего уровня объекта. (Core #5957, с введения автоматического восстановления в версии v10.32.0).
    • Создание операции записи, отклоненной сервером из-за превышения максимального размера транзакции, теперь приводит к ошибке сброса клиента вместо прерывания синхронизации и застревания навсегда. (Core #5209, с версии v10).
    • Открытие незашифрованного файла с ключом шифрования иногда приводило к отчету об ошибке. Неправильное сообщение об ошибке указывало на проблему, отличную от ошибки дешифрования (Core #5915, начиная с версии 0.89.0).
    • Исправление редкого мертлока, который мог возникнуть при закрытии синхронизированного Realm сразу после завершения записи транзакции, если рабочий поток синхронизации также только что завершил обработку изменения из сервера (Core #5948). ### Совместимость* Realm Studio: 11.0.0 или более поздняя версия.
  • API совместимы в обратном направлении со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.0.1.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 13.1-14.1.

Внутренние изменения

  • Обновлен realm-core с версии 12.9.0 до 12.11.0.

Примечания к выпуску 10.32.0 (10 октября 2022)
=============================================================### Улучшения Добавьте .recoverUnsyncedChanges (RLMClientResetModeRecoverUnsyncedChanges) и .recoverOrDiscardUnsyncedChanges (RLMClientResetModeRecoverOrDiscardUnsyncedChanges) поведение к ClientResetMode (RLMClientResetMode).

  • Новые добавленные режимы восстановления работают путем загрузки realm, который отражает последнее состояние сервера после сброса клиента. Процесс восстановления выполняется локально с целью интеграции состояния сервера с любыми локальными изменениями, произошедшими до сброса клиента. Интеграция изменений осуществляется с помощью следующих правил:
  1. Объекты, созданные локально и не синхронизированные до сброса клиента, будут интегрированы.
  2. Если объект был удален на сервере, но изменен на клиенте, удаление имеет приоритет, а обновление отбрасывается.
  3. Если объект был удален на клиенте, но не на сервере, инструкция по удалению клиента применяется.
  4. В случае конфликтных обновлений одного и того же поля применяется обновление клиента.
  • Процесс сброса клиента будет переходить к ClientResetMode.discardUnsyncedChanges, если процесс восстановления неудачен в .recoverOrDiscardUnsyncedChanges.
  • Процесс сброса клиента будет переходить к ClientResetMode.manual, если процесс восстановления неудачен в .recoverUnsyncedChanges.
  • Два новых режима восстановления на Swift поддерживают обратные вызовы сброса клиента: .recoverUnsyncedChanges(beforeReset: ((Realm) -> Void)? = nil, afterReset: ((Realm, Realm) -> Void)? = nil). - Два новых режима восстановления на Objective-C поддерживают обратные вызовы сброса клиента в notifyBeforeReset и notifyAfterReset для обоих [RLMUser configurationWithPartitionValue] и [RLMUser flexibleSyncConfigurationWithClientResetMode]. Для получения дополнительной информации о обратных вызовах сброса клиента, см. ClientResetMode, RLMClientResetBeforeBlock, RLMClientResetAfterBlock, и внесенные изменения в версии 10.25.0.
    • Добавьте два новых интерфейса для определения обработчика ручного сброса клиента:
      • Добавьте обратный вызов обработчика ручного сброса к ClientResetMode.manual -> ClientResetMode.manual(ErrorReportingBlock? = nil).
      • Добавьте свойство RLMSyncConfiguration.manualClientResetHandler (тип RLMSyncErrorReportingBlock).
      • Эти блоки отчета об ошибках вызываются в случае RLMSyncErrorClientResetError.
      • См. ErrorReportingBlock (RLMSyncErrorReportingBlock), и ClientResetInfo для получения дополнительной информации.
      • Ранее ручные сбросы клиента обрабатывались только через SyncManager.ErrorHandler. У вас есть возможность, но не обязательство, определить обработчик ручного сброса в этих интерфейсах. В противном случае, SyncManager.ErrorHandler всё ещё вызывается во время ручного процесса сброса клиента.
      • Эти новые интерфейсы вызываются только при ошибке RLMSyncErrorClientResetError. Все другие ошибки синхронизации всё ещё обрабатываются в SyncManager.ErrorHandler.
      • См. 'Разрушающие изменения' для информации о том, как эти интерфейсы взаимодействуют с уже существующим SyncManager.ErrorHandler.### Внесенные изменения, нарушающие совместимость* Значение по умолчанию для clientResetMode (RLMClientResetMode) изменено с .manual (RLMClientResetModeManual) на .recoverUnsyncedChanges (RLMClientResetModeRecoverUnsyncedChanges).
    • Если вы используете .manual и продолжите это делать, единственное изменение, которое вам необходимо сделать явно, — это указание режима вручную в ваших Realm.Configuration.SyncConfiguration, так как они теперь будут по умолчанию использовать .recoverUnsyncedChanges.
    • Вы можете определить обработчик сброса клиента вручную в недавно введенных manual(ErrorReportingBlock? = nil) или RLMSyncConfiguration.manualClientResetHandler, но это не обязательно. SyncManager.errorHandler будет вызван во время сброса клиента, если в эти новые интерфейсы не переданы обратные вызовы.

Устаревшие функции

  • ClientResetMode.discardLocal устарел в пользу ClientResetMode.discardUnsyncedChanges. Причина заключается в том, что название лучше отражает эффект этого режима сброса. В действительности поведение не изменилось.

Совместимость

  • Realm Studio: 11.0.0 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 14.0.1.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 13.1-14.1.

Заметки к выпуску 10.31.0 (2022-10-05)

Предварительно скомпилированный бинарный файл для Carthage теперь построен с использованием Xcode 14.0.1.### Улучшения

  • Уменьшите время выполнения агрегатных операций на больших словарях вдвое (Core #5864).
  • Улучшите производительность агрегатных операций на коллекциях объектов в 2-10 раз (Core #5864). Значительно улучшите производительность сортировки или получения уникальных ключей или значений словаря. Самая затратная операция теперь выполняется за O(log N) вместо O(N log N), и большие словари могут увидеть уменьшение времени сортировки до 99%. (Core #5166).
  • Добавьте поддержку изменения местоположения развертывания для приложений Atlas. Ранее это считалось неизменным (Core #5648).
  • Синхронный клиент теперь уступает блокировку записи другим потокам, которые ожидают выполнения записи, даже если у него еще есть не выполненные задачи, вместо того чтобы всегда применять все изменения, полученные от сервера, даже когда другие потоки пытаются записать данные (Core #5844).
  • Синхронный клиент больше не записывает временные копии изменений, полученных от сервера, в файл Realm (Core #5844).

Исправлено* Установка свойства List с Results больше не вызывает исключение

нераспознанного селектора (начиная с версии 10.8.0-beta.2).

  • RLMProgressNotificationToken и ProgressNotificationToken теперь удерживают сильную ссылку на сессию синхронизации, что позволяет ей оставаться активной до тех пор, пока токен не будет освобожден или аннулирован, как и другие токены уведомлений. (#7831, начиная с версии v2.3.0).
  • Results позволяли некорректные агрегатные операции на типах колонок, которые не имеют смысла для агрегации, что приводило к получению бессмысленных результатов вместо отчета об ошибке (Core #5876, начиная с версии v5.0.0).
  • Upserting документа в коллекции Mongo приводил к аварийному завершению работы, если тип идентификатора документа был чем-то другим, кроме ObjectId (начиная с версии v10.0.0).
  • Исправлена ошибка использования после освобождения памяти при закрытии сессии синхронизации и уничтожении приложения одновременно (Core #5752, начиная с версии v10.19.0).

Устаревшие функции

  • RLMUpdateResult.objectId устарел в пользу RLMUpdateResult.documentId для поддержки отчета об идентификаторах документов, которые не являются object id.

Перерывы в совместимости

  • Приватный API _realmColumnNames переименован в новый публичный API propertiesMapping(). Это изменение затрагивает только API Swift и не влияет на API obj-c.### Совместимость

  • Realm Studio: 11.0.0 или более поздняя версия.

  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 14.0.1.

  • CocoaPods: 1.10 или более поздняя версия.

  • Xcode: 13.1-14.1.

Внутренние изменения

  • Обновлено realm-core с версии 12.7.0 до версии 12.9.0

10.30.0 Примечания к выпуску (2022-09-20) =============================================================### Исправлено* Входящие ссылки из свойств RealmAny не обрабатывались правильно при миграции типа объекта с верхнего уровня на встроенный. В настоящий момент свойства RealmAny не могут ссылаться на встроенные объекты. (Core #5796, начиная с версии 10.8.0).

  • Realm.refresh() иногда не переходил к самой последней версии. Он пытался быть полуасинхронным способом, что приводило к путанице и иногда к переходу к более новой, но не самой последней версии. Иногда он блокировался до тех пор, пока не будут готовы уведомители, чтобы затем перейти к самой последней версии. Это поведение было не документировано и не работало корректно, поэтому теперь он всегда блокируется, если это необходимо для перехода к самой последней версии. (#7625, начиная с версии v0.98.0).
  • Исправлен наиболее распространённый источник нарушений приоритета потока при выполнении записей на основном потоке. Если начало транзакции записи требует ожидания завершения вычислений уведомлений в фоновом режиме, это ожидание теперь выполняется с учётом качества сервиса (QoS). (#7902).
  • Подписка на свойства ссылок в flexibly synced Realm не работала из-за несоответствия между тем, что отправлял клиент, и тем, что требовал сервер. (Core #5409).* Попытка использования AsymmetricObject с синхронизацией на основе разделов теперь возвращает осмысленную ошибку намного раньше в процессе. Асимметричная синхронизация требует использования flexibly synced. (Core #5691, начиная с версии 10.29.0).
  • Запросы без учета регистра, но с учетом диакритических знаков, могли привести к аварийному завершению работы при использовании 4-байтовых символов UTF-8. (Core #5825, начиная с версии v2.2.0).
  • Акцентированные символы теперь корректно обрабатываются запросами без учета регистра, но с учетом диакритических знаков. (Core #5825, начиная с версии v2.2.0). ### Изменения, нарушающие совместимость* Метод -[RLMASLoginDelegate authenticationDidCompleteWithError:] был переименован в -[RLMASLoginDelegate authenticationDidFailWithError:] для соответствия новым требованиям App Store. Это затрагивает только API на Objective-C. (#7945)

Совместимость

  • Realm Studio: версия 11.0.0 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift создан с использованием Xcode 13.4.1.
  • CocoaPods: версия 1.10 или выше.
  • Xcode: версия 13.1 - 14.

Внутренние изменения

  • Обновлено realm-core с версии 12.6.0 до 12.7.0

10.29.0 Примечания к выпуску (2022-09-09)

Улучшения

  • Добавлена поддержка асимметричного синхронизирования. Когда класс наследуется от AsymmetricObject, созданные объекты синхронизируются односторонне на сервер и не могут быть запрошены или прочитаны локально.```swift class PersonObject: AsymmetricObject { @Persisted(primaryKey: true) var _id: ObjectId @Persisted var name: String @Persisted var age: Int }
попытайтесь realm. write {
       // Это создаст объект на сервере, но не локально.
       realm. create(PersonObject. self, value: ["_id": ObjectId. generate(),
                                               "name": "Дилан",
                                               "age": 20])
    }
  • Добавьте возможность разделения коллекции, которая соответствует RealmCollection, RLMCollection. Коллекции могут быть разделены по уникальному ключу, полученному из пути ключа или обратного вызова, и вернут экземпляр SectionedResults/RLMSectionedResults. Каждый раздел в коллекции будет экземпляром ResultsSection/RLMSection, который дает доступ к элементам, соответствующим ключу раздела. SectionedResults/RLMSectionedResults и ResultsSection/RLMSection имеют возможность наблюдения.
    class DemoObject: Object {
        @Persisted var title: String
        @Persisted var date: Date
        var firstLetter: String {
            return title. first. map(String. init(_:)) ?? ""
        }
    }
    var sectionedResults: SectionedResults<String, DemoObject>
    // . . .
    sectionedResults = realm. objects(DemoObject. self)
        . sectioned(by: \. firstLetter, ascending: true)
  • Добавьте @ObservedSectionedResults для поддержки SwiftUI. Этот тип обертки свойства получает разделенные результаты из Realm с использованием пути ключа или обратного вызова для определения ключа раздела.
    struct DemoView: View {
        @ObservedSectionedResults(DemoObject. self,
                                  sectionKeyPath: \. firstLetter) var demoObjects
        var body: some View {
            VStack {
                List {
                    ForEach(demoObjects) { section in
                        Section(header: Text(section. key)) {
                               MyRowView(object: object)
                           }
                       }
                   }
               }
           }
       }
   }
  • Добавлена автоматическая обработка изменений верхнего уровня объектов на встроенные объекты в процессе миграции. Все объекты нового встроенного типа, которые имеют нулевое количество входящих ссылок, удаляются, а объекты с несколькими входящими ссылками дублируются. Это происходит после завершения функции обратного вызова миграции, поэтому нет функциональных изменений, если у вас уже есть логика миграции, которая правильно обрабатывает это. (Core #5737).

  • Улучшена производительность при первом подключении нового файла Realm к серверу, особенно когда значительное количество данных было записано в режиме оффлайн. (Core #5772).

  • Большая часть работы, выполняемой на потоке синхронизации, была выведена из транзакции записи, используемой для применения изменений сервера, что уменьшает время блокировки других потоков от записи. (Core #5772).

  • Улучшена производительность парсера изменения синхронизации, что ускоряет применение изменений из сервера. (Core #5772).### Исправлено

  • Исправлены все неудачи UBSan, обнаруженные нашими тестами. Неясно, проявлялись ли эти ошибки в виде видимых багов. (Core #5665).

  • Обратные вызовы завершения загрузки иногда вызывались до завершающего шага внутренней маркировки загрузки как завершенной, что могло привести к ошибке при вызове Realm.writeCopy() из обратного вызова завершения. (Core #4865).

  • Запись в Realm, хранящийся на диске exFAT, при необходимости расширения файла во время записи транзакции записи выбрасывала исключение "fcntl() с F_BARRIERFSYNC не удалось: Неприемлемый ioctl для устройства". (Core #5789, начиная с версии 10.27.0).

  • Синхронизация Decimal128 с большим значением мантиссы могла привести к аварийному завершению программы. (Core #5728).

Совместимость

  • Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии Yöntem 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 13.4.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 13.1-14 RC.

Внутренние изменения

  • Обновлен realm-core с версии 12.5.1 до 12.6.0

10.28.7 Примечания к выпуску (2022-09-02)

Улучшения

  • Добавлены предварительно собранные бинарные файлы для Xcode 14 в пакет выпуска.

Исправлено

  • Исправлена ошибка архивирования сборок watchOS с Xcode 14.### Совместимость

  • Realm Studio: 11.0.0 или новее.

  • API совместимы с предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 13.4.1.

  • CocoaPods: 1.10 или новее.

  • Xcode: 13.1-14 beta 6.

10.28.6 Примечания к выпуску (2022-08-19)

Исправлено

  • Исправлена ошибка, при которой зависимость realm-swift как под-цели SPM приводит к ошибке отсутствия символов при архивировании iOS (Core #7645).

Совместимость

  • Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 13.4.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 13.1-14 beta 5.

Внутренние изменения

  • Обновлен realm-core с версии 12.5.0 до 12.5.1

10.28.5 Примечания к выпуску (2022-08-09)

Улучшения

  • Улучшена производительность доступа к свойствам SubscriptionSet, когда записи не были сделаны в Realm с момента последнего доступа.

Исправлено

  • Возможна ошибка использования после освобождения памяти, если Realm с включенными аудиторскими событиями был уничтожен во время обработки завершения загрузки для Realm событий на другом потоке. (Core PR #5714)
  • Открытие синхронизированного только для чтения Realm в первый раз через asyncOpen не устанавливало версию схемы, что могло привести к ошибкам утверждения m_schema_version != ObjectStore::NotVersioned позже.* Обновлен realm-core с версии 12.4.0 до 12.5.0

10.28.4 Примечания к выпуску (2022-08-03)

Улучшения

  • Добавлена поддержка сборки arm64 watchOS при установке Realm через CocoaPods.
  • Уменьшено количество используемого виртуального адресного пространства (Core #5645).

Исправлено* Исправлены некоторые предупреждения при сборке с Xcode 14

(Core #5577).

  • Исправлены ошибки компиляции на платформах watchOS, которые не поддерживают локальное хранение потоков. (#7694, #7695 начиная с версии v10.21.1).

  • Исправлено конкурентное чтение данных при коммитировании транзакции, когда несколько потоков ожидают начала записи транзакций. Это, по-видимому, не вызывало функциональных проблем.

  • Исправлено конкурентное чтение данных при записи аудита событий, которое могло произойти, если поток синхронизации клиента был занят другими задачами при открытии Realm аудита.

  • Исправлены некоторые случаи исчерпания виртуального адресного пространства (встречаются/сообщаются как ошибки mmap) (Core #5645).

  • Области аудита событий, содержащие только события записи и не содержащие событий чтения, иногда выбрасывали исключение BadVersion при коммитировании записи транзакции (начиная с версии v1.0.26.0).

  • Клиентские функции сброса для режима DiscardLocal передавали недействительные экземпляры Realm, если функции сброса были вызваны в момент, когда Realm не был открыт иначе. (Core #5654, начиная с введения режима сброса DiscardLocal в версии v10.25.0).### Совместимость

  • Realm Studio: 11.0.0 или более поздняя версия.

  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift собран с Xcode 13.4.1.

  • CocoaPods: 1.10 или более поздняя версия.

  • Xcode: 13.1-14 бета 4.

Внутренние изменения

  • Обновлен realm-core с версии 12.3.0 до 12.4.0.

10.28.3 Примечания к выпуску (2022-07-27)

Улучшения

  • Значительно улучшена производительность получения закэшированных экземпляров Realm в Swift при использовании конфигурации синхронизации.

Исправлено

  • Добавлены недостающие initialSubscription и rerunOnOpen в метод copyWithZone класса RLMRealmConfiguration. Это привело к некорректным значениям при использовании RLMRealmConfiguration.defaultConfiguration.
  • Обработчик ошибок синхронизации не удерживал сильную ссылку на сессию синхронизации при переносе ошибки из рабочего потока в основной поток, что приводило к недействительности сессии, переданной в обработчик ошибок, если больше не оставалось сильных ссылок в других местах.

Совместимость

  • Realm Studio: 11.0.0 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 13.4.1.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 13.1-14 бета 3.

10.28.2 Примечания к выпуску (2022-06-30)

Исправлено* Использование seedFilePath выбрасывало исключение, если Realm-файл, который открывался, уже существовал (#7840, начиная с версии v10.26.0).

  • Коллбэк initialSubscriptions вызывался каждый раз при открытии Realm, независимо от значения rerunOnOpen и если Realm уже был открыт на другом потоке (начиная с версии v10.28.0).

  • Разрешено использование RLMSupport.Swift из RealmSwift's Cocoapods (#6886).

  • Исправлено срабатывание UBSan при отображении зашифрованных страниц. Исправление этого не изменило конечный ассемблер, поэтому, вероятно, не было функциональных проблем, возникших из-за этого (начиная с версии v5.0.0).

  • Улучшена производительность синхронизирующихся клиентов при интеграции изменений с множеством маленьких строк (в общей сложности > 1024 байт на изменения) на iOS 14 и устройствах с ограниченной или фрагментированной памятью. (Core #5614)

  • Исправлено гонку данных при открытии гибко синхронизируемого Realm (начиная с версии v10.28.0).

  • Добавлено отсутствующее удаление обратной ссылки при присвоении null или не-ссылочного значения свойству AnyRealmValue, которое ранее ссылалось на объект. Это могло привести к исключениям "ключ не найден" или утверждениям, таких как mixed.hpp:165: [realm-core-12.1.0] Assertion failed: m_type при удалении объекта назначения. (Core #5574, начиная с введения AnyRealmValue в версии v10.8.0)### Совместимость

  • Realm Studio: 12.0.0 или новее.

  • API совместимы с обратной совместимостью со всеми предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 13.4.1.

  • CocoaPods: 1.10 или новее.

  • Xcode: 13.1-14 бета 2.

Внутренние изменения

  • Обновлено realm-core с версии 12.1.0 до 12.3.0.

10.28.1 Примечания к выпуску (2022-06-10)

Улучшения

  • Добавлена поддержка Xcode 14. При сборке с использованием Xcode 14 минимальная версия развертывания теперь iOS 13.

Совместимость

  • Realm Studio: 11.0.0 или более поздняя версия.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 13.4.1.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 13.1-14 beta 1.

10.28.0 Примечания к выпуску (2022-06-03)

Улучшения* Заменить упоминания 'MongoDB Realm' на 'Atlas App Services' в документации и обновить соответствующие ссылки на документацию.

  • Разрешить добавление подписки для запроса всех документов определенного типа на Swift для гибкой синхронизации.
   try await subscriptions.update {
      subscriptions.append(QuerySubscription<SwiftPerson>(name: "all_people"))
   }
  • Добавить поддержку API Combine для гибкой синхронизации в бета-версии.
  • Добавить параметр initialSubscriptions при получении конфигурации гибкой синхронизации от пользователя, что позволяет указать блок обновления подписки, чтобы инициализировать набор подписок гибкой синхронизации при первом открытии Realm. Есть дополнительный необязательный параметр флаг rerunOnOpen, который позволяет запускать эти начальные подписки при каждом запуске приложения.```swift let config = user.flexibleSyncConfiguration(initialSubscriptions: { subs in subs.append(QuerySubscription(name: "people_10") { $0.age > 10 }) }, rerunOnOpen: true) let realm = try Realm(configuration: config)
* Обработчик ошибок синхронизирующего клиента теперь сообщает об ошибке с подробной информацией о том, какой объект её вызвал, при записи объекта в Realm гибкой синхронизации вне запроса подписки. ([#5528](https://github.com/realm/realm-core/pull/5528))
* Добавление объекта в Realm гибкой синхронизации для типа, не входящего в запрос подписки, теперь вызывает исключение. ([#5488](https://github.com/realm/realm-core/pull/5488)).

### Исправлено

* Подписки запросов гибкой синхронизации теперь правильно завершаются при синхронизации данных в локальном Realm. ([#5553](https://github.com/realm/realm-core/pull/5553), начиная с версии v12.0.0)

### Перерывы в совместимости

* Переименован `SyncSubscriptionSet.write` в `SyncSubscriptionSet.update` для избежания путаницы с `Realm.write`.
* Переименован `SyncSubscription.update` в `SyncSubscription.updateQuery` для избежания путаницы с `SyncSubscriptionSet.update`.
* Переименован `RLMSyncSubscriptionSet.write` в `RLMSyncSubscriptionSet.update` для соответствия с API на Swift.

### Совместимость

* Realm Studio: 11.0.0 или новее.
* API совместимы с обратной совместимостью со всеми предыдущими выпусками в серии OnClickListener 10.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 13.4.
* CocoaPods: 1.10 или новее.
* Xcode: 13.1-13.4.

### Внутренние изменения

* Обновлен realm-core с версии 12.0.0 до 12.1.0.10.27.0 Примечания к выпуску (2022-05-26)
=============================================================

### Улучшения

* Свойства `@AsyncOpen`/`@AutoOpen` могут использоваться с гибкой синхронизацией.

### Исправления

* При установке через SPM отладочные сборки могли столкнуться с утверждением о неудаче во время инициализации гибкой синхронизации. ([Core #5527](https://github.com/realm/realm-core/pull/5527))
* Гибкая синхронизация теперь применяет данные инициализации только в том случае, если вся инициализация была получена. Ранее изолированные объекты могли возникнуть из-за изменения снимка чтения на сервере. ([Core #5331](https://github.com/realm/realm-core/pull/5331))
* Частично исправлена регрессия производительности записи, введенная в версии v10.21.1. Версия v10.21.1 исправила случай, когда ядро могло вызвать панику или аккумулятор устройства мог погаснуть в неправильный момент транзакции записи, что могло привести к исправлению файла Realm, но за счет значительного удара по производительности. В этой версии изменено выполнение синхронизации файла для обеспечения такой же безопасности при меньшем ударе по производительности. ([#7740](https://github.com/realm/realm-swift/issues/7740)).

### Совместимость

* Realm Studio: 11.0.0 или новее (см. примечание ниже).
* API совместимы с обратной совместимостью со всеми предыдущими выпусками в серии 10.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 13.4.
* CocoaPods: 1.10 или новее.
* Xcode: 13.1-13.4.### Внутренние изменения

* Обновлен realm-core с версии 11.17.0 до 12.0.0.
* Увеличен номер версии для файла блокировки, используемого для межпроцессорной синхронизации. Это не влияет на постоянные данные, но означает, что версии Realm, использующие пред-12.0.0 realm-core, не могут открывать файлы Realm одновременно с теми, которые открыты этой версией. В частности, это включает Realm Studio, и v11.1.2 (последняя на момент выпуска) не могут открывать файлы Realm, которые одновременно открыты в симуляторе.

10.26.0 Примечания к выпуску (2022-05-19)
=============================================================

Xcode 13.1 теперь является минимально поддерживаемой версией Xcode, так как Apple больше не позволяет отправлять приложения в App Store с использованием Xcode 12.

### Улучшения

* Добавлены бинарные файлы Xcode 13.4 в пакет релиза.
* Добавлен Swift API для асинхронных транзакций
```swift
    try? realm.writeAsync {
        realm.create(SwiftStringObject.self, value: ["string"])
    } onComplete: { error in
        // опциональная обработка после завершения записи
    }

    try? realm.beginAsyncWrite {
        realm.create(SwiftStringObject.self, value: ["string"])
        realm.commitAsyncWrite()
    }

    let asyncTransactionId = try? realm.beginAsyncWrite {
        // ...
    }
    try! realm.cancelAsyncWrite(asyncTransactionId)
  • Добавлен Obj-C API для асинхронных транзакций
   [realm asyncTransactionWithBlock:^{
        [StringObject createInRealm:realm withValue:@[@"string"]];
    } onComplete:^(NSError *error) {
        // опциональная обработка
    }];

    [realm beginAsyncWriteTransaction:^{
        [StringObject createInRealm:realm withValue:@[@"string"]];
        [realm commitAsyncWriteTransaction];
    }];
```    RLMAsyncTransactionId asyncTransactionId = [realm beginAsyncWriteTransaction:^{
        // ...
    }];
    [realm cancelAsyncTransaction:asyncTransactionId];
  • Улучшена производительность открытия Realm с установленными objectClasses/objectTypes в конфигурации.
  • Реализован API для записи событий Realm для отчета о чтении и записи в файл Realm в Atlas.### Исправлено* Уменьшено минимальное версионное число операционной системы для async входа и FunctionCallables, чтобы соответствовать остальным async функциям. (#7791)
  • Использование RealmSwift XCFramework с включенной эволюцией библиотеки приводило к ошибке 'Failed to build module 'RealmSwift'; this SDK is not supported by the compiler', когда XCFramework был построен с помощью более старой версии Xcode и затем использовался с более поздней версией. (#7313, начиная с версии 3.18.0)
  • Возникал конфликт данных, когда открывался синхронизированный Realm с режимом сброса клиента, установленным на discardLocal, одновременно с тем, как другой поток обрабатывал сброс клиента. Это, вероятно, не вызывало функциональных проблем на практике, и окно времени для срабатывания было очень узким (начиная с версии 10.25.0).
  • Если асинхронное открытие Realm приводило к сбросу клиента, вызовы обратного вызова для discardLocal могли теоретически не быть выполнены из-за конфликта данных. Время для этого, вероятно, было не достижимо на практике (начиная с версии 10.25.0).
  • Вызов [RLMRealm freeze]/Realm.freeze для Realm, созданного из writeCopy, не приводил к созданию замороженного Realm. (#7697, начиная с версии 5.0.0)
  • Использование динамического субскрипта API для неуправляемых объектов до первого открытия Realm или если objectTypes был установлен при открытии Realm приводил к выбросу исключения.(#7786).
  • Синхронизирующий клиент мог отправить поврежденный указатель загрузки, что приводило к фатальной ошибке от сервера из-за неинициализированной переменной. (#5460, начиная с версии 10.25.1)
  • Гибкая синхронизация не корректно возобновляла синхронизацию, если бутстрап был прерван. (#5466, начиная с версии 10.21.1). ### Совместимость* Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 13.4.
  • CocoaPods: 1.10 или новее.
  • Xcode: 13.1-13.4.

Внутренние изменения

  • Обновлен realm-core с версии v11.15.0 до v11.17.0

Заметки выпуска 10.25.2 (2022-04-27)

Улучшения

  • Заменены бинарные файлы Xcode 13.3 на бинарные файлы 13.3.1.

Исправления

  • List<AnyRealmValue> содержал недействительный объект вместо null, когда связанный объект был удален с помощью синхронизирующего клиента (Core #5215, начиная с версии v10.8.0).
  • Добавление объекта в Set, удаление родительского объекта Set и последующее удаление добавленного объекта приводило к аварийному завершению работы (Core #5387, начиная с версии v10.8.0).
  • Синхронизированные файлы Realm, созданные с использованием версии v10.0.0-beta.3, перезагружались вместо использования существующего файла, что могло привести к потере любых несинхронизированных данных в этих файлах (начиная с версии v10.20.0).

Совместимость

  • Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 13.3.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 12.4-13.3.1.

Внутренние изменения

  • Обновлен realm-core с версии v11.14.0 до v11.15.0Заметки выпуска 10.25.1 (2022-04-11) =============================================================

Исправления

  • Исправлены различные ошибки корruptions памяти при использовании шифрования, вызванные отсутствием блокировки mutex при необходимости. (#7640, #7659, начиная с версии v10.21.1)
  • Некорректное вычисление накопленного размера при группировке изменений приводило к ошибкам "error reading body failed to read: read limited at 16777217 bytes" от сервера при записи больших объемов данных (Core #5373, начиная с версии 10.25.0).

Совместимость

  • Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 13.3.
  • CocoaPods: 1.10 или новее.
  • Xcode: 12.4-13.3.

Внутренние улучшения

  • Обновлен realm-core с версии v11.13.0 до v11.14.0.

10.25.0 Примечания к выпуску (2022-03-29)

Файлы Realm, созданные этой версией, не могут быть открыты старыми версиями Realm. Существующие файлы будут автоматически обновлены при открытии.

Несинхронизированные файлы Realm остаются совместимыми с предыдущими версиями.### Улучшения

  • Добавлена возможность использования синтаксиса запросов Swift в @ObservedResults, что позволяет фильтровать результаты с помощью параметра where.
  • Добавлена возможность использования MutableSet с StateRealmObject в SwiftUI.
  • Расширения Async/Await теперь совместимы с iOS 13 и выше при сборке с помощью Xcode 13.3.
  • Изменения, ожидающие загрузки на сервер, теперь сжимаются, что уменьшает необходимое место на диске при выполнении больших транзакций записи в режиме офлайн или при ограниченной пропускной способности. (Core #5260).
  • Добавлены новые свойства SyncConfiguration.clientResetMode и RLMSyncConfiguration.clientResetMode.
    • Значения этих свойств определяют поведение клиента в случае сброса клиента.
    • См. ниже для информации о значениях ClientResetMode.
    • clientResetMode по умолчанию равно .manual, если не указано иное.
  • Добавлены новые перечисления ClientResetMode и RLMClientResetMode.
    • Эти перечисления представляют возможное поведение сброса клиента для SyncConfiguration.clientResetMode и RLMSyncConfiguration.clientResetMode, соответственно.
    • .manual и RLMClientResetModeManual
      • Локальная копия Realm копируется в каталог восстановления для сохранности, а затем удаляется из исходного расположения. При следующем открытии Realm для этого значения раздела копия Realm будет автоматически перезагружена из MongoDB Realm и может использоваться как обычно. - Данные, записанные в Realm после того, как локальная копия Realm отклонилась от резервной копии, будут присутствовать в локальной копии восстановления файла Realm. Перезагруженный Realm будет содержать только данные, присутствующие в момент резервного копирования Realm на сервере.
      • rlmSync_clientResetBackedUpRealmPath и SyncError.clientResetInfo() используются для доступа к каталогу восстановления.
    • .discardLocal и RLMClientResetDiscardLocal
      • Все несинхронизированные локальные изменения автоматически удаляются, а локальное состояние автоматически возвращается к самому последнему состоянию с сервера. Несинхронизированные изменения могут быть восстановлены в блоке обратного вызова после сброса клиента (см. ниже для более подробной информации).
      • Если RLMClientResetModeDiscardLocal включен, но операция сброса клиента не может быть завершена, процесс сброса клиента переходит в режим ручного управления.
      • Доступные объекты основного царства остаются связанными, чтобы пользовательский интерфейс мог быть обновлен без нарушения.
    • Добавлена поддержка блоков уведомлений о сбросе клиента для .discardLocal и RLMClientResetDiscardLocal
      • Реализация RealmSwift: discardLocal(((Realm) -> Void)? = nil, ((Realm, Realm) -> Void)? = nil)
        • Блоки сброса клиента RealmSwift устанавливаются при инициализации конфигурации пользователя
        var configuration = user.configuration(partitionValue: "myPartition", clientResetMode: .discardLocal(beforeClientResetBlock, afterClientResetBlock))
        ```     - Блок перед сбросом клиента -- `((Realm) -> Void)?  = nil` -- выполняется до сброса клиента. Возможные варианты использования включают:
        ```swift
        let beforeClientResetBlock: (Realm) -> Void = { beforeRealm in
          var recoveryConfig = Realm.Configuration()
          recoveryConfig.fileURL = myRecoveryPath
          do {
            try beforeRealm.writeCopy(configuration: recoveryConfig)
            /* Копия царства может быть использована позже для восстановления, отладки, отчетности и т. д. */
          } catch {
            /* Обработка ошибки */
          }
        }
        • Блок после сброса клиента -- ((Realm, Realm) -> Void)? = nil -- выполняется после сброса клиента. Возможные варианты использования включают:
        let afterClientResetBlock: (Realm, Realm) -> Void = { before, after in
          /* Этот блок может быть использован для добавления пользовательского механизма восстановления, резервного копирования файла царства, отправки отчетов и т. д. */
          for object in before.objects(myClass.self) {
            let res = after.objects(myClass.self)
            if (res.filter("primaryKey == %@", object.primaryKey).first != nil) {
              /* .  .  .  пользовательский механизм восстановления .  .  .  */
            } else {
              /* .  .  .  пользовательский механизм восстановления .  .  .  */
            }
          }
        }
      • Реализация Realm Obj-c: Оба блока перед и после сброса клиента существуют как свойства RLMSyncConfiguration и устанавливаются при инициализации.
          RLMRealmConfiguration *config = [user configurationWithPartitionValue:partitionValue
                                                                clientResetMode:RLMClientResetModeDiscardLocal
                                                              notifyBeforeReset:beforeBlock
                                                              notifyAfterReset:afterBlock];
        ```                                                            notifyAfterReset:afterBlock];
        где beforeBlock типа RLMClientResetBeforeBlock. И afterBlock является типом RLMClientResetAfterBlock. ### Совместимость помех* Xcode 13.2 больше не поддерживается при сборке с использованием функций Async/Await. Используйте Xcode 13.3 для сборки с функциональностью Async/Await.

Исправлено

  • Добавление объекта Realm в ObservedResults или коллекции, использующие StateRealmObject, управляемые одним и тем же Realm, приводило к ошибке, если объект был заморожен и не разморожен заранее.

  • Установка конфигурации Realm для @ObservedResults с помощью его инициализатора перекрывалась конфигурацией Realm, сохраненной в .environment(\.realmConfiguration, ...), если они не совпадали (Cocoa #7463, начиная с v10.6.0).

  • Исправление фильтра компонента поиска, перекрывающего начальный фильтр для @ObservedResults, (начиная с v10.23.0).

  • Сравнение Results, LinkingObjects или AnyRealmCollection при использовании Realm через XCFramework приводило к ошибкам компиляции (Cocoa #7615, начиная с v10.21.0).

  • Открытие зашифрованного Realm, когда ключевая ячейка заблокирована на macOS, приводило к аварийному завершению работы (#7438).

  • Обновление подписок при обновлении токена доступа приводило к аварийному завершению работы (Core #5343, начиная с v10.22.0).

  • Исправление нескольких проблем с гонкой в SyncSession при установке customRequestHeaders при использовании SyncSession на другом потоке.### Совместимость

  • Realm Studio: 11.0.0 или более поздняя версия.

  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift собран с использованием Xcode 13.3.

  • CocoaPods: 1.10 или более поздняя версия.

  • Xcode: 12.4-13.3.

Внутренние изменения

  • Обновлено realm-core с версии v11.12.0 до v11.13.0

10.24.2 Примечания к выпуску (2022-03-18)

Исправлено

  • Приложение иногда аварийно завершало работу с исключениями, такими как 'KeyNotFound' или утверждением "has_refs()". Другие проблемы, указывающие на повреждение файла, также могут быть исправлены этим. Упомянутая здесь проблема была той, которая привела к решению проблемы. (Core #5283, начиная с v5.0.0)

Совместимость

  • Realm Studio: 11.0.0 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift собран с использованием Xcode 13.3.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 12.4-13.3.

Внутренние изменения

  • Обновлен realm-core с версии 11.11.0 до 11.12.0

10.24.1 Примечания к выпуску (2022-03-14)

Переход на сборку Carthage-бинарника с использованием Xcode 13.3. В этом выпуске нет функциональных изменений по сравнению с версией 10.24.0.

Совместимость* Realm Studio: 11.0.0 или более поздняя версия.

  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Carthage-выпуск для Swift собран с использованием Xcode 13.3.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 12.4-13.3.10.24.0 Примечания к выпуску (2022-03-05) =============================================================

Улучшения

  • Добавлена возможность использования синтаксиса запросов на Swift в @ObservedResults, что позволяет фильтровать результаты с помощью параметра where.### Исправлено* Если список объектов содержит ссылки на объекты, не включенные в синхронизированную часть, уведомления о изменении коллекции для этого списка могут быть некорректными (Core #5164, начиная с v10.0.0).
  • Добавление нового гибкого уведомления о синхронизации может привести к аварийному завершению с сообщением "Assertion failed: !m_unbind_message_sent" в очень конкретных сценариях времени (Core #5149, начиная с v10.22.0).
  • Преобразование чисел с плавающей запятой/чисел с плавающей запятой в Decimal128 может привести к неточным результатам (Core #5184, начиная с v10.0.0).
  • Использование знаковых символов в именах классов и полей в синхронизированном Realm может привести к ошибкам синхронизации (Core #5196, начиная с v10.0.0).
  • Вызов Realm.invalidate() изнутри уведомления о изменении Realm может привести к тому, что транзакция записи, которая вызвала уведомление, не будет сохранена на диске (начиная с v10.22.0).
  • Когда клиентский сброс ошибок приводит к тому, что текущий файл Realm резервируется и затем удаляется, ошибки удаления игнорировались, если копирование прошло успешно. Теперь удаление старого файла запланировано на следующее запуск приложения (Core #5180, начиная с v2.0.0).* Исправление ошибки при компиляции целевой задачи watchOS Simulator, не поддерживающей Thread-local storage (#7623, начиная с v10.21.0).
  • Добавление проверки валидации для отчета об ошибках, которые имеют смысл, если конфигурация Realm указывает на то, что виртуальный Realm должен быть зашифрован (Core #5195).
  • Swift пакет устанавливал флаги линковщика на неправильной цели, что приводило к ошибкам линковщика, когда SPM решает построить основную библиотеку как динамическую библиотеку (#7266).
  • Задача download-core завершалась ошибкой, если выполнялась в окружении без установленной переменной TMPDIR (#7688, начиная с v10.23.0). ### Совместимость* Realm Studio: 11.0.0 или более поздняя версия.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 13.2.1.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 12.4-13.3 beta 3.

Внутренние изменения

  • Обновлен realm-core с версии 11.9.0 до 11.11.0

10.23.0 Примечания к выпуску (2022-02-28)

Улучшения

  • Добавлен метод Realm.writeCopy(configuration:)/[RLMRealm writeCopyForConfiguration:], который обеспечивает следующую функциональность:

    • Экспорт локального Realm, не использующего синхронизацию, для использования с MongoDB Realm Sync, когда конфигурация была получена из синхронизированного RLMUser/User.
    • Запись копии локального Realm в указанное место в конфигурации.
    • Запись копии синхронизированного Realm, используемого пользователем A, и открытие его пользователем B.
    • Важно отметить, что могут потребоваться миграции при использовании конфигурации локального Realm для открытия файла Realm, скопированного из синхронизированного Realm. Будет выброшено исключение, если Realm уже существует в указанном месте назначения.
  • Добавлен параметр seedFilePath к RLMRealmConfiguration и Configuration. Если этот параметр установлен, вместо создания пустого Realm будет скопирован Realm из seedFilePath в fileURL нового Realm. Если файл Realm уже существует в пути назначения, файл-семя не будет скопирован, и уже существующий Realm будет открыт. Важно отметить, что для использования этого параметра с конфигурацией синхронизированного Realm файл-семя должен быть предварительно скопирован в место назначения с помощью Realm.writeCopy(configuration:)/[RLMRealm writeCopyForConfiguration:].

  • Добавлена возможность постоянного удаления пользователя из приложения MongoDB Realm. Это может быть вызвано с помощью User.delete()/[RLMUser deleteWithCompletion:].

  • Добавлено соответствие протоколу NSCopying для RLMDecimal128 и RLMObjectId.

  • Добавлены бинарные файлы Xcode 13.3 в пакет выпуска (и удалены бинарные файлы Xcode 13.0).### Исправлено* Добавление поддержки arm64 в сборке Carthage (#7154)

  • Добавление недостающей поддержки запросов IN для примитивных типов в безопасных запросах.

    let persons = realm.objects(Person.self).where {
      let acceptableNames = ["Tom", "James", "Tyler"]
      $0.name.in(acceptableNames)
    }

    (Cocoa #7633, начиная с версии v10.19.0)

  • Обход проблемы с падением компилятора при сборке с Swift 5.6 / Xcode 13.3. CustomPersistable's PersistedType теперь всегда должен быть встроенным типом, а не другим CustomPersistable типом, так как Swift 5.6 убрал поддержку бесконечно-рекурсивных ассоциированных типов (#7654).

  • Исправление избыточного вызова фильтрации для @ObservedResults из компонента searchable (начиная с версии v10.19.0).### Совместимость

  • Realm Studio: 11.0.0 или новее.

  • API совместимы с предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 13.2.1.

  • CocoaPods: 1.10 или новее.

  • Xcode: 12.4-13.3 beta 3.

10.22.0 Примечания к выпуску (2022-01-25)

Улучшения

  • Добавлена поддержка бета-версии для гибкого синхронизирования. Подробнее см. документацию backend и SDK. Пожалуйста, сообщайте о любых проблемах с бета-версией через Github.

Исправлено* Таблица метаданных UserIdentity растет бесконечно. (#5152, начиная с версии v10.20.0).

  • Теперь отображается полезное сообщение об ошибке при открытии синхронизированного Realm в режиме без синхронизации или наоборот. (#5161, начиная с версии v5.0.0).### Совместимость

  • Realm Studio: 11.0.0 или новее.

  • API совместимы с предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 13.2.1.

  • CocoaPods: 1.10 или новее.

  • Xcode: 12.4-13.2.1.

Внутренние изменения

  • Обновлен realm-core с версии 11.8.0 до 11.9.0

10.21.1 Примечания к выпуску (12 января 2022) =============================================================### Исправлено* Синхронный клиент теперь очищает очередь получения при неудачной отправке с ошибкой ECONNRESET, что гарантирует получение и обработку любого сообщения об ошибке от сервера. (#5078)

  • Проверка схемы отсутствовала для встроенных объектов в наборах, что приводило к появлению бесполезного сообщения об ошибке, если Realm-объект подкласса содержал один (с версии 10.0.0).
  • Открытие Realm с схемой, содержащей сиротские встроенные типы объектов, выполняло дополнительную пустую транзакцию записи (с версии 10.0.0).
  • Замораживание Realm с схемой, содержащей сиротские встроенные типы объектов, выбрасывало исключение "Неправильное транзакционное состояние" (с версии 10.19.0).
  • Запросы @sum и @avg на словарях с плавающей точкой или двойной точностью использовали слишком много точности для промежуточных значений, что приводило к неправильному округлению (с версии 10.5.0).
  • Изменено сообщение об ошибке для вызова обновления на неизменяемом Realm с "Продолжительная транзакция через объект базы данных без информации о истории." на "Невозможно обновить только для чтения Realm." (#5061, с версии 10.8.0).
  • Запросы вида "link.collection.@sum = 0", где link является null, соответствовали, если collection был списком или набором, но не словарем (#5080, с версии 10.8.0).* Типы, требующие пользовательского моста obj-c (например, PersistableEnum или CustomPersistable), вызывали исключения, упоминающие __SwiftValue в различных местах на версиях iOS старше iOS 14 (#7604, начиная с версии 10.21.0). ### Совместимость* Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Carthage выпуск для Swift построен с Xcode 13.2.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 12.4-13.2.1.

Внутренние изменения

  • Обновлен realm-core с версии 11.6.1 до 11.8.0.

10.21.0 Примечания к выпуску (2022-01-10)

Улучшения

  • Добавлена свойство metadata к классу RLMUserProfile/UserProfile.
  • Добавлен класс Projection для создания легких представлений моделей из объектов Realm.
public class Person: Object {
    @Persisted var firstName = ""
    @Persisted var lastName = ""
    @Persisted var address: Address? = nil
    @Persisted var friends = List<Person>()
}

public class Address: EmbeddedObject {
    @Persisted var city: String = ""
    @Persisted var country = ""
}

class PersonProjection: Projection<Person> {
    // `Person.firstName` будет иметь ту же имя и тип
    @Projected(\Person.firstName) var firstName
    // Будет только одна строка для `city` исходного объекта `Address`
    @Projected(\Person.address.city) var homeCity
    // List<Person> будет отображаться как список firstNames
    @Projected(\Person.friends.projectTo.firstName) var firstFriendsName: ProjectedCollection<String>
}
```// `people` будет содержать проекции для каждого объекта `Person` в `realm`
let people: Results<PersonProjection> = realm.objects(PersonProjection.self)
  • Значительно улучшена производительность чтения AnyRealmValue и enum типов из коллекций Realm.
  • Разрешено использование Swift enum, которые соответствуют PersistableEnum как тип значения для всех коллекций Realm.
  • AnyRealmCollection теперь соответствует Encodable.
  • Значения AnyRealmValue и PersistableEnum теперь могут быть переданы напрямую в NSPredicate, используемый в вызове filter(), вместо передачи rawValue (rawValue всё ещё разрешён).
  • Теперь можно выполнять запросы на коллекции PersistableEnums с помощью where().
  • Добавлена поддержка запросов на rawValue enum с помощью where().
  • .count теперь поддерживается для всех типов Map вместо только числовых типов в where().
  • Добавлена поддержка запросов на свойства объектов, содержащихся в словарях (например, "dictProperty.@allValues.name CONTAINS 'a'").
  • Улучшена ошибка сообщения для многих типов недействительных предикатов в запросах.
  • Добавлена поддержка сравнения @allKeys с другим свойством того же объекта.
  • Добавлена поддержка Numeric для Decimal128.
  • Некоторые недействительные объявления свойств, такие как List<AnyRealmValue?>, теперь являются ошибкой компиляции вместо ошибки выполнения.
  • Вызов .sorted(byKeyPath:) на коллекции с типом элемента, который не поддерживает сортировку по ключевым путям, теперь является ошибкой компиляции вместо ошибки выполнения.
  • RealmCollection.sorted(ascending:) теперь может быть вызван для всех коллекций, кроме Object/EmbeddedObject, вместо только тех, где Element соответствует Comparable. ```* Добавлена поддержка использования пользовательских типов с @Persistable и в коллекциях Realm путём определения отображения между типом, который Realm знает как хранить, и пользовательским типом. Например, `URL` может быть сделан persistable следующим образом:
    extension URL: FailableCustomPersistable {
        // Хранить значения URL как String в Realm
        public typealias PersistedType = String
        // Преобразование String в URL
        public init? (persistedValue: String) { self.init(string: persistedValue) }
        // Преобразование URL в String
        public var persistableValue: String { self.absoluteString }
    }
    После этого объявление свойства @Persisted var url: URL является допустимым свойством на объекте Realm. Более продвинутые отображения могут быть выполнены путём отображения на EmbeddedObject, который может хранить несколько значений.
* [#5633](https://github.com/realm/realm-cocoa/issues/5633).
* Динамический доступ к `Map` объектов не корректно обрабатывал значения `nil` (начиная с версии 10.8.0).
* `where()` позволял создавать некорректные запросы из-за сравнений с булевыми значениями, возвращающими `Query<T>` вместо `Query<Bool>` (начиная с версии 10.19.0).
* Запросы `@allValues` на словарях случайно не требовали "ANY".
* Модификаторы без учета регистра и без учета диакритических знаков игнорировались при сравнении результата агрегатной операции с другим свойством в запросе.
* `Object.init(value:)` не позволял инициализировать свойства типа `RLMDictionary<NSString, RLMObject>`/`Map<String, Object?>` с `nil` значениями для элементов карты (начиная с версии 10.8.0).
* `@ObservedResults` не обновлялся при изменении наблюдаемого коллектива. (начиная с версии 10.6.0)

### Совместимость

* Realm Studio: 11.0.0 или выше.
* API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 13.2.1.
* CocoaPods: 1.10 или выше.
* Xcode: 12.4-13.2.1.

10.20.1 Примечания к выпуску (2021-12-14)
=============================================================

Xcode 12.4 теперь является минимально поддерживаемой версией Xcode.

### Исправлено

* Добавлена поддержка `Indexable` для UUID.
  ([Cocoa #7545](https://github.com/realm/realm-swift/issues/7545), начиная с версии 10.10.0)### Перерывы в совместимости

* Все `async` функции теперь требуют Xcode 13.2 для обхода ошибки App Store/TestFlight, которая приводит к аварийному завершению работы приложений, построенных с использованием 13.0/13.1 и не использующих libConcurrency, но связанных с библиотекой, которая использует libConcurrency.

### Совместимость

* Realm Studio: 11.0.0 или выше.
* API обратно совместимы со всеми предыдущими выпусками в серии  Yöntem 10.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 13.2.
* CocoaPods: 1.10 или выше.
* Xcode: 12.2-13.2.

10.20.0 Примечания к выпуску (2021-11-16)
=============================================================

### Улучшения

* `@ThreadSafe` и `ThreadSafeReference` теперь соответствуют `Sendable`.
* Разрешено использование Swift перечислений, соответствующих `PersistableEnum`, как типов значений для всех Realm коллекций.
* `AnyRealmCollection` теперь соответствует `Encodable`.
* Значительно улучшена производительность чтения `AnyRealmValue` и перечислений из Realm коллекций.
* `AnyRealmCollection` теперь соответствует `Encodable`.

### Исправлено

### Улучшения

* `@ThreadSafe` и `ThreadSafeReference` теперь соответствуют `Sendable`.
* Разрешено использование Swift перечислений, соответствующих `PersistableEnum`, как типов значений для всех Realm коллекций.
* `AnyRealmCollection` теперь соответствует `Encodable`.
* Значительно улучшена производительность чтения `AnyRealmValue` и перечислений из Realm коллекций.
* `AnyRealmCollection` теперь соответствует `Encodable`.

### Исправлено* `@AutoOpen` теперь будет открывать существующий локальный файл Realm при любой ошибке соединения,
  а не только при истечении времени ожидания соединения.
* Запрещены изменения состояния `progress` для `@AutoOpen` и `@AsyncOpen` после изменения состояния на `open(let realm)` или `error(let error)`.
* При выходе из системы синхронизированного пользователя файл Realm локальной части не удалялся при очень длинных значениях разделов, превышающих максимальную длину пути. ([Core #4187](https://github.com/realm/realm-core/issues/4187), начиная с версии v10.0.0)
* Если часы клиента отстают более чем на 30 минут, не пытаться обновлять токен доступа. ([Core #4941](https://github.com/realm/realm-core/issues/4941))
* Неудачные запросы аутентификации использовали фиксированное длительное ожидание вместо экспоненциального отступа, как другие запросы синхронизации, что могло привести к очень задержанному восстановлению соединения после того, как устройство было вне сети достаточно долго, чтобы истек токен доступа (начиная с версии v10.0.0).### Сопоставимость

* Realm Studio: 11.0.0 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 13.1.
* CocoaPods: 1.10 или более поздняя версия.
* Xcode: 12.2-13.1.

### Внутренние изменения

* Обновлен realm-core с версии 11.6.0 до 11.6.1.

10.19.0 Примечания к выпуску (2021-11-04)
=============================================================

### Улучшения

* Добавлен модификатор SwiftUI `.searchable()`, который позволяет фильтровать результаты `@ObservedResult` из компонента поля поиска по ключевому пути.
  ```swift
  List {
      ForEach(reminders) { reminder in
        ReminderRowView(reminder: reminder)
      }
  }.searchable(text: $searchFilter,
               collection: $reminders,
               keyPath: \.name) {
    ForEach(reminders) { remindersFiltered in
      Text(remindersFiltered.name).searchCompletion(remindersFiltered.name)
    }
  }
  • Добавлен API для безопасного поиска синтаксиса запросов. Это позволяет фильтровать Realm и коллекции, управляемые Realm, с использованием выражений стиля Swift. Вот краткий пример:
    class Person: Object {
      @Persisted var name: String
      @Persisted var hobbies: MutableSet<String>
      @Persisted var pets: List<Pet>
    }
    class Pet: Object {
      @Persisted var name: String
      @Persisted var age: Int
    }
    Добавьте переменные persons:
    let persons = realm.objects(Person.self).where {
      $0.hobbies.contains("музыка") || $0.hobbies.contains("бейсбол")
    }
    ```  persons = realm.objects(Person.self).where {
      ($0.pets.age >= 2) && $0.pets.name.starts(with: "L")
    }
    (#7419)
  • Добавьте поддержку словарных срезов (например, "phoneNumbers['Jane'] == '123-3456-123'") при использовании NSPredicate для запросов.
  • Добавьте профиль пользователя в объект пользователя. Это содержит метаданные из социальных входов с MongoDB Realm.
  • Незначительно уменьшите пиковый расход памяти при обработке синхронизационных изменений.### Исправлено* Измените значение по умолчанию для таймаута запроса для RLMApp с 6 секунд на 60 секунд.
  • Асинхронная инициализация Realm часто давала экземпляр Realm, который фактически не мог быть использован и выбрасывал неправильные исключения потока. Теперь это @MainActor, и он всегда возвращает экземпляр Realm, который работает на основном акторе. Неработающий параметр queue: был удален (с версии 10.15.0).
  • Восстановите поведение до версии 10.12.0, вызывая writeCopy() для синхронизированного Realm, что приводит к созданию локального несинхронизированного Realm (#7513).
  • Decimal128 не правильно нормализовал значение перед хешированием, поэтому могли быть значения, которые были равны, но имели разные хеш-значения (с версии 10.8.0).
  • Исправлен редкий сбой утверждения или мертвая блокировка, когда сессия синхронизации соревнуется с закрытием в то же время, когда внешний референс к Realm освобождается (Core #4931).
  • Исправлен сбой утверждения при открытии синхронизированного Realm с пользователем, который был удален. Теперь выбрасывается исключение. (Core #4937, с версии 10.0.0).
  • Исправлен редкий сбой сегментации, который мог быть активирован, если пользователь был выведен из системы, когда ответ на обновление токена доступа приходит. (Core #4944, с версии 10.0.0).* Исправлен баг, при котором уведомители прогресса на AsyncOpenTask могли быть вызваны после завершения открытия. (Core #4919).
  • SecureTransport не был включен для сборок macCatalyst при установке через SPM, что приводило к исключениям 'SSL/TLS protocol not supported' при использовании Realm Sync. (#7474).
  • Пользователи оставались в состоянии входа, когда их токен обновления истекал. (Core #4882, начиная с версии 10).
  • Вызов .count для уникального коллектива возвращал общее количество объектов в коллекции вместо уникального счета при первом вызове. (#7481, начиная с версии 10.8.0).
  • realm.delete(collection.distinct(...)) удалял все объекты в коллекции вместо первого объекта с каждым уникальным значением в свойстве, если уникальные результаты не были прочитаны хотя бы один раз (начиная с версии 10.8.0).
  • Вызов .distinct() на коллекции, доступ к Results, а затем передача Results в realm.delete() приводил к удалению правильных объектов, но после этого количество объектов в Results отображалось как ноль, даже если в Results все еще присутствовали объекты (начиная с версии 10.8.0).
  • Сжатие при загрузке могло привести к тому, что уведомители о завершении синхронной загрузки, которые не являются потоковыми, никогда не будут отображать завершение (начиная с версии 10.0.0, Core #4989).
  • Исправлено мертвое простое замыкание в SyncManager, которое, вероятно, было невозможно получить в реальных программах (с версии 10.0.0). ### Совместимость* Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с Xcode 13.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 12.4-13.2.

Внутренние изменения

  • Обновлен realm-core с версии v11.4.1 до v11.6.0

10.18.0 Примечания к выпуску (2021-10-25)

Улучшения

  • Добавлена поддержка использования нескольких пользователей с @AsyncOpen и @AutoOpen. Установка текущего пользователя на нового пользователя теперь автоматически перезапускает Realm с новым пользователем.
  • Добавлен предварительно собранный бинарный файл для Xcode 13.1 в пакет выпуска.

Исправления

  • Исправлено использование defaultConfiguration по умолчанию в @AsyncOpen и @AutoOpen, если пользователь не предоставляет его. Это устанавливает неправильный путь, который не соответствует конфигурации пользователя (начиная с версии v10.12.0).
  • Добавлено завершение подписки для AsyncOpenPublisher после успешного возврата Realm.

Совместимость

  • Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с Xcode 13.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 12.2-13.1.

10.17.0 Примечания к выпуску (2021-10-06)

Улучшения

  • Добавлен новый свойственный обёртка @ThreadSafe. Объекты и коллекции, обёрнутые с помощью @ThreadSafe, могут передаваться между потоками. Это позволяет использовать локальные переменные и параметры функций в многопоточной среде.### Совместимость

  • Realm Studio: 11.0.0 или новее.

  • API совместимы с предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с Xcode 13.0.

  • CocoaPods: 1.10 или новее.

  • Xcode: 12.2-13.0.

10.16.0 Примечания к выпуску (2021-09-29)

Улучшения

  • Добавлены асинхронные версии методов EmailPasswordAuth.callResetPasswordFunction и User.linkUser.
  • Добавлена асинхронная версия методов MongoCollection.
  • Добавлена поддержка асинхронных пользовательских функций.

Исправления

  • Распространяющаяся ошибка в Realm.asyncOpen() иногда приводила к тому, что последующие записи из Realm Sync не вызывали уведомлений (#7447, #7453, Core #4909, начиная с версии v10.15.0).

Совместимость

  • Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 13.0.
  • CocoaPods: 1.10 или новее.
  • Xcode: 12.2-13.0.

10.15.1 Примечания к выпуску (2021-09-15)

Улучшения

  • Переключение на сборку Carthage с использованием Xcode 13.

Исправлено

  • Исправление ошибки компиляции, возникающей при наличии Swift 5.5, но отсутствии macOS 12 SDK. Это было особенно заметно для Xcode 13 RC. Это исправление добавляет проверку #canImport для модуля _Concurrency, который не был доступен до macOS 12 SDK.### Совместимость

  • Realm Studio: 11.0.0 или новее.

  • API совместимы с предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 13.0.

  • CocoaPods: 1.10 или новее.

  • Xcode: 12.2-13.0.

10.15.0 Примечания к выпуску (2021-09-10)

Улучшения

  • Добавлены асинхронные версии методов Realm.asyncOpen и App.login.
  • ThreadSafeReference больше не удерживает версию транзакции источника для чего-либо, кроме результата, созданного путем фильтрации коллекции. Это означает, что удерживание ссылок на другие объекты (например, Objects) больше не приведет к увеличению размера файла.
  • Теперь можно создать ThreadSafeReference к Results, поддерживаемому коллекцией, внутри транзакции записи, если коллекция не была создана в текущей транзакции записи.
  • Синхронизированные Realm больше не открываются дважды, что уменьшает потребление адресного пространства и файловых дескрипторов вдвое. (Core #4839)
  • При использовании SwiftUI-помощников (@ObservedRealmObject и др.) для привязки к свойству Equatable, самоприсваивание больше не выполняет бесполезную транзакцию записи. SwiftUI иногда вызывает функцию set привязки несколько раз для одного действия UI, поэтому это приводит к значительному уменьшению количества записей.### Исправлено
  • Добавление неуправляемого объекта в Realm, объявленного с помощью @StateRealmObject, приводило к исключению "Cannot add an object with observers to a Realm".
  • Документация RealmCollectionChange ссылалась на индексы в модификациях как на 'новую' коллекцию. Это неверно, и теперь документация указывает, что модификации относятся к предыдущей версии коллекции. (Cocoa #7390)
  • Исправлена ошибка при вызове RLMSyncConfiguration.initWithUser при отображении ошибок, когда пользователь отключен/удален из панели управления MongoDB Realm. (Cocoa #7399, начиная с версии v10.0.0)
  • Если приложение падало в неправильный момент при регистрации пользователя, следующее запуск приложения могло столкнуться с ошибкой утверждения "m_state == SyncUser::State::LoggedIn", когда синхронизированный Realm открывается с этим пользователем. (Core #4875, начиная с версии v10.0.0)
  • Параметр keyPaths: для @ObservedResults не работал (начиная с версии v10.12.0).### Совместимость* Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 12.2-13.0 beta 5.

Внутренние изменения

  • Обновлен realm-core с версии 11.3.1 до 11.4.1

10.14.0 Примечания к выпуску (2021-09-03)

Улучшения

  • Добавлены дополнительные методы observe для объектов и RealmCollections, которые принимают параметр типа PartialKeyPath.
  • Пакет выпуска теперь снова содержит бинарные файлы Xcode 13.
  • Свойства типа PersistableEnum теперь могут быть индексированы или использованы в качестве первичного ключа, если значение RawValue является индексируемым или первичным ключом.

Исправлено

  • Map<Key, Value> не соответствовал Codable. (Cocoa #7418, начиная с версии v10.8.0)
  • Исправлено утверждение "Недопустимый тип данных" в синхронизирующем клиенте, когда клиент получил инструкцию AddColumn от сервера для свойства типа AnyRealmValue, которое уже существует локально. (Core #4873, начиная с версии v10.8.0)

Совместимость

  • Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 12.2-13.0 beta 5.

Внутренние изменения

  • Обновлен realm-core с версии 11.3.0 до 11.3.1.10.13.0 Примечания к выпуску (2021-08-26) =============================================================

Улучшения

  • Журналы синхронизации теперь содержат информацию о том, какой объект/изменение-набор применялся при выбросе исключения. (Core #4836)
  • Добавлен код ошибки ServiceErrorCode для случая неправильного имени пользователя/пароля при использовании App.login. (Core #7380)

Исправлено

  • Исправлен сбой в MongoCollection.findOneDocument(filter:), который возникал, когда для заданного фильтра не находилось результатов. (Cocoa #7380, начиная с версии v10.0.0)
  • Некоторые SwiftUI-обёртки свойств неправильно требовали от объектов соблюдения интерфейса ObjectKeyIdentifiable вместо Identifiable. (Cocoa #7372, начиная с версии v10.6.0)
  • Обход проблем с поставкой поврежденного swiftinterface-файла для Combine на 32-битной iOS в бете Xcode 13. (Cocoa #7368)
  • Исправлена коррупция истории при замене встроенных объектов в списке. (Core #4845), начиная с версии v10.0.0)

Совместимость

  • Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 12.2-13.0 beta 5.

Внутренние изменения

  • Обновлен realm-core с версии 11.2.0 до 11.3.010.12.0 Примечания к выпуску (2021-08-03) =============================================================

Улучшения

  • Методы Object.observe() и RealmCollection.observe() теперь включают необязательный параметр keyPaths, который фильтрует уведомления о изменениях, оставляя только те, которые происходят на указанном пути ключа или путях ключей. Подробности о поведении фильтрации см. в документации метода.
  • ObservedResults<ResultsType> теперь включает необязательный параметр keyPaths, который фильтрует уведомления о изменениях, оставляя только те, которые происходят на указанном пути ключа или путях ключей. Например: @ObservedResults(MyObject.self, keyPaths: ["myList.property"]).
  • Добавлены два новых свойства-обёртки для асинхронного открытия Realm в SwiftUI View:
    • AsyncOpen — свойство-обёртка, которое инициирует Realm.asyncOpen для текущего пользователя, уведомляя View о изменении состояния Realm asyncOpen.
    • AutoOpen работает аналогично AsyncOpen, но в случае отсутствия интернет-соединения вернёт открытое Realm.
  • Добавлено значение EnvironmentValues.partitionValue. Это значение можно внедрить в любое View с помощью одного из наших новых свойств-обёрток AsyncOpen и AutoOpen: MyView().environment(\.partitionValue, "partitionValue").
  • Большая часть работы, выполняемой при первоначальной инициализации коллекции-наблюдателя, теперь выполняется на фоновом рабочем потоке, а не на основном потоке.### Исправлено* configuration(partitionValue: AnyBSON) всегда устанавливает значение раздела nil для конфигурации синхронизации пользователя.
  • Декодирование свойства @Persisted некорректно выбрасывало ошибку DecodingError.keyNotFound для опционального свойства, если ключ отсутствовал. (Cocoa #7358, начиная с версии v10.10.0)
  • Исправлена ссылка на символ, которая препятствовала сборке Realm на файловых системах с чувствительностью к регистру. (#7344, начиная с версии v10.8.0)
  • Удаление обратного вызова изменения из Results иногда блокировало вызывающий поток, пока запрос для этого Results выполнялся в фоновом потоке рабочего процесса. (начиная с версии v10.11.0).
  • Наблюдатели объектов не корректно обрабатывали удаление объекта, что могло привести к ошибкам утверждения, упоминающим "m_table" в ObjectNotifier. (Core #4824, начиная с версии v10.11.0).
  • Исправлен сбой при доставке уведомлений через вложенные иерархии списков Mixed, содержащих ссылки. (Core #4803, начиная с версии v10.8.0).
  • Исправлен сбой при удалении объекта, связанного с Mixed, через синхронизацию. (Core #4828, начиная с версии v10.8.0).
  • Исправлен редкий сбой при установке Mixed ссылки впервые, который происходил, если ссылка указывала на ту же таблицу и добавление обратной ссылочной колонки вызывало разделение BPNode. (Core #4828, начиная с версии v10.8.0)### Совместимость* Realm Studio: 11.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.1.
  • CocoaPods: 1.10 или новее.
  • Xcode: 12.2-13.0 beta 4. На iOS Xcode 13 beta 2 является последней поддерживаемой версией из-за проблем с бета-версиями 3 и 4, которые содержат сломанный Combine.framework.

Внутренние изменения

  • Обновлен realm-core с версии v11.1.1 до v11.2.0

10.11.0 Примечания к выпуску (2021-07-22)

Улучшения

  • Добавлены безопасные методы для:

    • RealmCollection.min(of:)
    • RealmCollection.max(of:)
    • RealmCollection.average(of:)
    • RealmCollection.sum(of:)
    • RealmCollection.sorted(by:ascending:)
    • RealmKeyedCollection.min(of:)
    • RealmKeyedCollection.max(of:)
    • RealmKeyedCollection.average(of:)
    • RealmKeyedCollection.sum(of:)
    • RealmKeyedCollection.sorted(by:ascending:)
    • Results.distinct(by:)
    • SortDescriptor(keyPath:ascending:)

    Вызов этих методов теперь возможен с помощью ключевых путей Swift, например:

    class Person: Object {
        @Persisted var name: String
        @Persisted var age: Int
    }
    ```  let persons = realm.objects(Person.self)
    persons.min(of: \.age)
    persons.max(of: \.age)
    persons.average(of: \.age)
    persons.sum(of: \.age)
    persons.sorted(by: \.age)
    persons.sorted(by: [SortDescriptor(keyPath: \Person.age)])
    persons.distinct(by: [\Person.age])
  • Добавлен метод List.objects(at indexes:) для Swift и [RLMCollection objectsAtIndexes:] для Objective-C. Это позволяет выбирать элементы в коллекции с помощью заданного IndexSet (#7298).

  • Добавлены методы App.emailPasswordAuth.retryCustomConfirmation(email:completion:) и [App.emailPasswordAuth retryCustomConfirmation:completion:]. Эти функции поддерживают повторное выполнение пользовательской функции подтверждения.

  • Улучшена производительность создания уведомителей для коллекций Realm с сложной схемой. Это означает, что первый запуск запроса или первый вызов observe() для коллекции будет выполнять значительно меньше работы на потоке вызова.

  • Улучшена производительность вычисления изменений для уведомлений, особенно для глубоко вложенных объектных графов и объектов, которые имеют List или Set свойства с небольшим количеством объектов в коллекции.

Исправлено* RealmProperty<T?> вызывал ошибку при декодировании значения null из JSON.

(Cocoa #7323, начиная с версии v10.8.0)

  • @Persisted<T?> вызывал ошибку при декодировании значения null. (#7332, начиная с версии v10.10.0).
  • Исправлена проблема, при которой Realm.Configuration устанавливался после того, как были размещены представления, используя .environment(\.realmConfiguration, ...) в SwiftUI. Это могло вызвать проблемы, если вам необходимо повысить версию схемы и вы используете @ObservedResults.
  • Профили синхронизированных пользователей теперь правильно сохраняются между запусками.

Сопоставимость

  • Realm Studio: 11.0.0 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии Yö 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.1.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 12.2-13.0 beta 3. Обратите внимание, что этот выпуск не содержит бинарные файлы Xcode 13 beta, так как beta 3 не включает рабочую версию Combine.framework для iOS.

Внутренние изменения

  • Обновлено realm-core с версии 11.0.4 до 11.1.1

10.10.0 Примечания к выпуску (2021-07-07)

Улучшения* Добавлена новая синтаксическая конструкция на основе свойств-обёрток для свойств классов объектов Realm Swift. Вместо использования @objc dynamic или типа обёртки RealmProperty, теперь свойства могут быть объявлены с помощью @Persisted var property: T, где T может быть любым из поддерживаемых типов свойств, включая опциональные числа и коллекции. Это имеет несколько преимуществ:

- Все типы свойств теперь объявляются одинаковым образом. Больше не нужно помнить, что этот тип требует `@objc dynamic var`, а другой тип требует `let`, и вспомогательные классы `RealmProperty` или `RealmOptional` больше не нужны для типов, которые не поддерживаются Objective-C.
- Больше не нужно переопределять методы класса, такие как `primaryKey()`, `indexedProperties()` или `ignoredProperties()`. Основной ключ и флаги индексации теперь задаются напрямую в объявлении свойства с помощью `@Persisted(primaryKey: true) var _id: ObjectId` или `@Persisted(indexed: true) var indexedProperty: Int`. Если присутствуют какие-либо свойства с `@Persisted`, все остальные свойства будут неявно игнорироваться.
- Некоторые проблемы с производительностью были исправлены. Объявление коллекционных свойств как `let listProp = List<T>()` приводило к тому, что объект `List<T>` создавался заранее при чтении родительского объекта, что могло вызвать проблемы с производительностью, если класс имеет большое количество свойств `List` или `RealmOptional`.`@Persisted var list: List<T>` позволяет отложить создание `List<T>` до тех пор, пока оно не будет доступно, что улучшает производительность при переборе объектов и использовании только некоторых из их свойств. Аналогично, `let _id = ObjectId.generate()` был удобным способом объявления синхронизируемого первичного ключа, но приводил к генерации новых ObjectIds в некоторых сценариях, где значение никогда не использовалось. `@Persisted var _id: ObjectId` имеет такое же поведение автоматической генерации первичных ключей, но позволяет нам генерировать его только при необходимости.
  • Поддерживается больше типов перечислений. Любое перечисление RawRepresentable, чей тип представления поддерживается Realm, может быть сохранено в проекте @Persisted, а не только @objc перечисления. Перечисления должны быть объявлены как соответствующие протоколу PersistableEnum, и все еще не могут (еще) использоваться в коллекциях.
  • willSet и didSet могут использоваться с свойствами @Persistable, в то время как ранее они не работали для управляемых объектов Realm. Хотя мы ожидаем, что переход на новую синтаксис будет очень простым для большинства пользователей, мы планируем поддерживать существующий синтаксис объявления на основе objc в обозримом будущем. Новый стиль и старый стиль не могут быть смешаны в одном классе. Но новые классы могут использовать новый синтаксис, в то время как существующие классы продолжают использовать старый синтаксис. Обновление существующего класса до нового синтаксиса не изменяет, какие данные хранятся в файле Realm, и поэтому не требует миграции (если вы, конечно, не измените схему в процессе).* Добавлен метод Map.merge(), который добавляет пары ключ-значение из другого Map или Dictionary в карту.
  • Добавлен метод Map.asKeyValueSequence(), который возвращает адаптер, который может быть использован с общими функциями, работающими с последовательностями в стиле Dictionary.

Исправлено

  • Значения перечисления AnyRealmValue теперь поддерживаются в более широком диапазоне мест при создании объектов.
  • Объявление свойства как RealmProperty<AnyRealmValue?> теперь будет отображать ошибку во время обнаружения схемы, а не делать поломанные вещи при использовании свойства.
  • Наблюдение за свойством invalidated объекта RLMDictionary/Map через KVO не корректно устанавливало старые/новые значения в уведомлении (с версии 10.8.0).

Совместимость

  • Realm Studio: 11.0.0 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.1.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 12.2-13.0 beta 2.10.9.0 Примечания к выпуску (2021-07-01) =============================================================

Улучшения

  • Добавлены App.emailPasswordAuth.retryCustomConfirmation(email:completion:) и [App.emailPasswordAuth retryCustomConfirmation:completion:]. Эти функции поддерживают повторное выполнение пользовательской функции подтверждения.

  • Улучшена производительность многих операций со словарем, особенно при использовании KVO (Key-Value Observing).### Исправлено

  • Вызов -[RLMRealm deleteObjects:] для RLMDictionary очищал словарь, но не удалял объекты внутри него (с версии v10.8.0).

  • Исправлено утверждение об ошибке при наблюдении за List<AnyRealmValue> содержащим ссылки на объекты. (Core #4767, с версии v10.8.0).

  • Исправлено утверждение об ошибке при наблюдении за RLMDictionary/Map, который ссылается на объект, удаляемый другим синхронизированным клиентом. (Core #4770, с версии v10.8.0).

  • Исправлен бесконечный рекурсивный цикл, который мог привести к переполнению стека при вычислении изменений для набора объектов, содержащих циклы. (Core #4770, с версии v10.8.0).

  • Коллизии в словарях не обрабатывались правильно. (Core #4776, с версии v10.8.0).

  • Исправлено падение при очистке списка или множества AnyRealmValue, содержащих ссылки на объекты. (Core #4774, с версии v10.8.0).

  • Попытка обновления токена пользователя, отозванного администратором, приводила к бесконечному циклу и последующему падению. Теперь данная ситуация корректно вынуждает пользователя выйти из системы и отображает ошибку. (Core #4745, с версии v10.0.0).

Совместимость* Realm Studio: 11.0.0 или более поздняя версия.

  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.1.

  • CocoaPods: 1.10 или более поздняя версия.

  • Xcode: 12.2-13.0 бета 2.### Внутренние изменения

  • Обновлено realm-core с версии v11.0.3 до версии v11.0.4

10.8.1 Примечания к выпуску (2021-06-22)

Улучшения

  • Обновлено Xcode 12.5 до Xcode 12.5.1.
  • Создание меньшего количества динамических классов во время выполнения улучшает использование памяти и время старта незначительно.

Исправлено

  • Импорт пакета Realm для Swift приводил к нескольким предупреждениям о несуществующих исключенных файлах. Обратите внимание, что одно предупреждение все еще будет присутствовать после этого изменения. (#7295, начиная с v10.8.0).
  • Обновлен корневой URL для документации API, чтобы ссылки указывали на место, где публикуются новые версии документации. (#7299, начиная с v10.6.0).

Сопоставимость

  • Realm Studio: 11.0.0 или более поздняя версия. Обратите внимание, что эта версия Realm Studio еще не была выпущена на момент выпуска.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.1.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 12.2-13.0 beta 1.

Заметки к выпуску 10.8.0 (2021-06-14) =============================================================ВНИМАНИЕ: В этой версии обновлен формат файлов Realm для поддержки новых типов данных и изменений в обработке первичных ключей. Открытые файлы Realm будут автоматически обновлены и не смогут быть прочитаны версиями старше v10.8.0. Этот обновление должен быть быстрым. Обратите внимание, что теперь мы автоматически создаем резервную копию файла Realm до обновления.### Улучшения

  • Добавлена поддержка типов данных UUID и NSUUID. Эти типы могут использоваться в качестве свойства первичного ключа для классов объектов.
  • Добавлены два новых типа коллекций для дополнения существующего типа RLMArray/List:
    • RLMSet<T> в Objective-C и MutableSet<T> в Swift — это изменяемые неупорядоченные коллекции уникальных объектов, аналогичные встроенным NSMutableSet и Set. Значения в множестве могут быть любого типа, который не является коллекцией и который может быть сохранен как свойство Realm. Множества гарантируют, что они никогда не будут содержать два объекта, которые сравниваются как равные, включая случаи слияния конфликтных записей синхронизацией.
    • RLMDictionary<NSString *, T> в Objective-C и Map<String, T> — это изменяемые словари ключ-значение, аналогичные встроенным NSMutableDictionary и Dictionary. Значения в словаре могут быть любого типа, который не является коллекцией и который может быть сохранен как свойство Realm. Ключи должны всегда быть строками.
  • Добавлена поддержка динамически типизированных свойств, которые могут хранить значение любого из типов, поддерживаемых Realm, включая подклассы объектов (но не подклассы вложенных объектов). Эти свойства объявляются с помощью @property id<RLMValue> propertyName; в Objective-C и let propertyName = RealmProperty<AnyRealmValue>() в Swift.

Исправлено* Установка коллекции с типом значения, допускающим null, в null через один из динамических интерфейсов приводила к ошибке утверждения вместо очистки коллекции.

  • Исправлено неправильное обнаружение нескольких входящих ссылок в миграции при изменении таблицы на встроенную и удалении ссылки на неё одновременно. (#4694 начиная с версии v10.0.0-beta.2)

  • Исправлено расхождение слияния в Set, когда один клиент очищает Set, а другой добавляет и удаляет объекты. (#4720)

  • Частично отменено изменение обработки первичных ключей начиная с версии v5.0.0 для исправления регрессии производительности. В версии v5.0.0 первичные ключи определяли позицию в низкоуровневой таблице, куда будут вставляться новые объекты, что устранило необходимость отдельного индекса для первичного ключа. Это сделало некоторые шаблоны использования немного быстрее, но также сделало некоторые разумные вещи значительно медленнее. (#4522)

  • Исправлено неправильное обнаружение нескольких входящих ссылок в миграции при изменении таблицы на встроенную и удалении ссылки на неё одновременно. (#4694 начиная с версии v10.0.0-beta.2)

  • Исправлено неправильное отчет о модификациях коллекции.Это можно было наблюдать по получению неправильных индексов модификаций для отсортированных или уникальных результатов, или по отсутствию вызова блоков уведомлений при наличии только модификаций. (#4573 начиная с версии v5.0.0).

  • Исправлено неправильное излучение синхронизационных инструкций при замене существующего встроенного объекта другим встроенным объектом. (Core #4740).### Устаревшие функции

  • RealmOptional<T> устарел в пользу RealmProperty<T?>. RealmProperty функционально идентичен RealmOptional при хранении опциональных числовых типов, но также может хранить новый тип AnyRealmValue.

Сопоставимость

  • Realm Studio: 11.0.0 или более поздняя версия. Обратите внимание, что эта версия Realm Studio ещё не была выпущена на момент выпуска.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 12.2-13.0 beta 1.

Внутренние изменения

  • Обновлен realm-core с версии v10.7.2 до версии v11.0.3

10.8.0-beta.2 Примечания к выпуску (2021-06-01)

Улучшения

  • Добавлен тип данных RLMDictionary/Map<>. Это коллекция типа словаря, используемая для хранения пар ключ-значение.

Сопоставимость

  • Realm Studio: 11.0.0-beta.1 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.
  • CocoaPods: 1.10 или более поздняя версия.

Внутренние изменения

  • Обновлен realm-core с версии v11.0.0-beta.4 до версии v11.0.0-beta.6

10.8.0-beta.0 Примечания к выпуску (2021-05-07)

Улучшения

  • Добавлен тип данных RLMSet/MutableSet<>. Это коллекция типа множества, используемая для хранения уникальных значений.

  • Добавлена поддержка типа данных id<RLMValue>/AnyRealmValue.

  • Добавлена поддержка типа данных UUID/NSUUID.### Исправления

  • Нет.

Устаревшие функции

  • RealmOptional устарел в пользу RealmProperty.

Совместимость

  • Realm Studio: 10.0.0 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.4.
  • CocoaPods: 1.10 или более поздняя версия.

Внутренние изменения

  • Обновлен realm-core с версии v10.7.2 до версии v10.8.0-beta.5

10.7.7 Примечания к выпуску (2021-06-10)

Минимальная поддерживаемая версия Xcode — 12.2.

Улучшения

  • Добавлены бинарные файлы Xcode 13 beta 1 в пакет выпуска.

Исправления

  • Исправлено аварийное завершение работы при запуске в некоторых версиях Xcode (Xcode < 12, отчеты в Xcode 12.5), где SwiftUI не связан слабо по умолчанию. Это исправление работает только для проектов CocoaPods. (#7234)
  • Исправлены предупреждения при сборке с Xcode 13 beta 1.

Совместимость

  • Realm Studio: 10.0.0 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.
  • CocoaPods: 1.10 или более поздняя версия.
  • Xcode: 12.2-13.0 beta 1.

10.7.6 Примечания к выпуску (2021-05-13)

Улучшения

  • Теперь можно отменять реалмы, открытые в режиме только для чтения (хотя это маловероятно быть полезным).* Исправлено предупреждение о доступности при сборке Realm. Путь к выполнению, вызывающий это предупреждение, в настоящее время недоступен, поэтому это не вызывало проблем во время выполнения (#7219, начиная с версии 10.7.3).

  • Проактивная проверка времени истечения срока действия токена доступа и его обновление перед попыткой инициирования сессии синхронизации. Это предотвращает появление некоторых сообщений об ошибках на клиенте, таких как: "ERROR: Connection[1]: Websocket: Expected HTTP response 101 Switching Protocols, but received: HTTP/1.1 401 Unauthorized" (RCORE-473, начиная с версии v10.0.0).

  • Исправлено конкурентное состояние, которое могло привести к тому, что уведомления о пропуске не будут пропущены, если несколько коммитов с пропуском уведомлений были выполнены последовательно (начиная с версии v5.0.0).

  • Исправлено аварийное завершение работы внутри TableRecycler, которое могло произойти, если Realms были открыты на фоновых потоках при выходе из приложения. (Core #4600, начиная с версии v5.0.0).

  • Исправлены ошибки, связанные с "необработанным исключением в потоке уведомителя: N5realm11KeyNotFoundE: No such object", которые могли произойти на синхронизированных Realms, если связанный объект был удален другим клиентом. (JS #3611, начиная с версии v10.0.0).* Чтение ссылки на объект, удаленный другим клиентом, через строковый интерфейс (например, value(forKey:) или субскрипторный оператор на DynamicObject) могло вернуть недействительный объект вместо nil. (Core #4687, начиная с версии v10.0.0).

  • Синхронное Realm для метаданных синхронизации теперь будет воссоздано, если ключ шифрования для него отсутствует в ключевом хранилище, вместо аварийного завершения работы. Это может произойти, если устройство восстановлено из незашифрованного резервного копирования, которое восстанавливает данные приложения, но не записи ключевого хранилища, что приводит к удалению всех кэшированных логик для пользователей синхронизации, но не к потере данных. (Core #4285).

  • Теперь можно создавать потокобезопасные ссылки для только для чтения Realms. (#5475).### Совместимость

  • Realm Studio: 10.0.0 или более поздняя версия.

  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.

  • CocoaPods: 1.10 или более поздняя версия.

Внутренние изменения

  • Обновлен realm-core с версии v10.6.0 до v10.7.2

10.7.5 Примечания к выпуску (2021-05-07)

Исправлено

  • Итерация по замороженным коллекциям на нескольких потоках одновременно могла привести к исключению "count underflow" NSInternalInconsistencyException. (#7237, начиная с v5.0.0).

Совместимость

  • Realm Studio: 10.0.0 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.
  • CocoaPods: 1.10 или выше.

10.7.4 Примечания к выпуску (2021-04-26)

Улучшения

  • Добавлены бинарные файлы Xcode 12.5 в пакет выпуска.

Исправлено

  • Добавлен файл Info.plist в XCFrameworks в пакете Carthage xcframework (#7216, начиная с 10.7.3).

Совместимость

  • Realm Studio: 10.0.0 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.5.
  • CocoaPods: 1.10 или выше.

10.7.3 Примечания к выпуску (2021-04-22)

Улучшения* Упакован предварительно собранный XCFramework для Carthage. Carthage 0.38 и выше

теперь будет загружать этот XCFramework вместо старых фреймворков при использовании --use-xcframeworks.

  • Теперь мы делаем резервную копию файла realm перед любым обновлением формата файла. Резервная копия сохраняется в течение Yöntem 3 ay. Резервные копии, сделанные до обновления формата файла, позволяют лучше анализировать любые ошибки при обновлении. Мы также восстанавливаем резервную копию, если а) попытка открыть файл realm с "будущим" форматом файла и б) существует резервная копия, соответствующая текущему формату файла. (Core #4166)
  • Сообщение об ошибке при неудачных начальных шагах открытия файла realm теперь более описательно.
  • Улучшена конвертация Decimal128 в/из строки для чисел с более чем 19 значащими цифрами. Это означает, что инициализатор Decimal128, который принимает строку, теперь никогда не выбрасывает исключение, как это делалось ранее только для значений за пределами допустимого диапазона. Инициализатор все еще помечен как throws для обратной совместимости. (#4548)

Исправлено* Исправлены заголовки путей для podspec, чтобы избежать случайного обнаружения файла, который не является частью пакета, что вызывало предупреждения при импорте фреймворка. (#7113, начиная с версии 10.5.2).

  • Исправлен сбой, который возникал при наблюдении за неуправляемыми объектами в нескольких представлениях SwiftUI. При использовании @StateRealmObject или @ObservedObject в нескольких представлениях с неуправляемым объектом каждое представление подписывалось на объект. Когда каждое представление отписывалось (обычно при возврате через стек представлений), наши свойства-обёртки пытались удалять KVO для каждого отписывания, хотя это должно было выполняться только один раз. Теперь мы правильно удаляем KVO только один раз. (#7131)
  • Исправлено поведение isInvalidated, которое не возвращало правильное значение после удаления объекта из Realm при использовании пользовательской схемы. Схема объекта не обновлялась при добавлении объекта в Realm. Теперь мы правильно обновляем схему объекта при добавлении его в Realm. (#7181)
  • Синхронизация больших значений Decimal128 приводила к ошибке "Assertion failed: cx.w[1] == 0" (Core #4519, начиная с версии v10.0.0).* Вопросный/не подтверждённый исправление для сбоев, связанных с невозможностью отображения в памяти (недостаток памяти, недостаток виртуального адресного пространства). Например (#4514, начиная с версии v5.0.0).
  • Исправлены ошибки утверждений, такие как "!m_notifier_skip_version.version" или "m_notifier_sg->get_version() + 1 == new_version.version" при выполнении записей внутри обратных вызовов уведомлений о изменениях. Ранее обновление Realm путём начала транзакции записи пропускало доставку уведомлений, оставляя состояние несогласованным. Теперь уведомления доставляются рекурсивно, когда это необходимо. (Cocoa #7165).
  • Исправлен отчёт о уведомлениях о изменениях коллекций. Это могло быть замечено по получению неправильных индексов изменений для отсортированных или уникальных результатов, или по отсутствию вызова блоков уведомлений при наличии только изменений. (#4573 начиная с версии v5.0.0). ### Совместимость* Realm Studio: 10.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.4.
  • CocoaPods: 1.10 или новее.

Внутренние изменения

  • Обновлен realm-core с версии v10.5.5 до v10.6.0
  • Добавлено дополнительное отладочное валидирование управления картами файлов, которое, надеемся, поймает случаи, когда мы отключаем что-то, что все еще используется.

10.7.2 Примечания к выпуску (2021-03-08)

Исправлено

  • При интеграции большого объема данных с сервера вы можете получить "Утверждение не выполнено: !fields.has_missing_parent_update()" (Core #4497, начиная с версии 6.0.0)

Совместимость

  • Realm Studio: 10.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.4.
  • CocoaPods: 1.10 или новее.

Внутренние изменения

  • Обновлен realm-core с версии v10.5.4 до v10.5.5* Запросы вида "a.b.c == nil" могли соответствовать объектам, где b равно nil, если c не имел индекса и не имел его, если c был индексирован. Оба теперь соответствуют поведению NSPredicate. (Core #4460, начиная с версии 4.3.0).
  • Восстановлена поддержка обновления файлов из формата файла 5 (Realm Cocoa 1.x). (Core #7089, начиная с версии 5.0.0).
  • На 32-битных устройствах вы можете получить исключение с сообщением "Объект не найден" при обновлении до версии v10.* (Java #7314, начиная с версии 5.0.0).
  • Поток уведомлений перезапускал запросы после каждого коммита вместо коммитов, которые модифицировали таблицы, что могло повлиять на результаты запроса, если таблица имела исходящие ссылки на таблицы, не используемые в запросе. (Core #4456, начиная с версии 5.0.0).
  • Исправлено утверждение "Недопустимый ref перевод [16045690984833335023, 78187493520]" которое могло возникать при использовании синхронизации или нескольких процессов, записывающих в один файл Realm. (#7086, начиная с версии 5.0.0).

Совместимость* Realm Studio: 10.0.0 или более поздняя версия.

  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.4.
  • CocoaPods: 1.10 или более поздняя версия.

Внутренние изменения

  • Обновлен realm-core с версии v10.5.3 до v10.5.4

10.7.0 Примечания к выпуску (2021-02-23)

Улучшения

  • Добавлена поддержка отсутствующих операций запроса для свойств данных:

    • Свойства данных могут сравниваться с другими свойствами данных (например, "dataProperty1 == dataProperty2").
    • Можно выполнять запросы без учета регистра и диакритических знаков для свойств данных. Это будет иметь значимые результаты только в том случае, если свойство данных содержит UTF-8 строковые данные.
    • Свойства данных на связанных объектах могут быть запрошены (например, "link.dataProperty CONTAINS %@").
  • Реализованы запросы, которые фильтруют списки, отличные от ссылок на объекты (списки объектов уже поддерживались). Все поддерживаемые операторы для обычных свойств теперь поддерживаются для списков (например, "ANY intList = 5" или "ANY stringList BEGINSWITH 'prefix'"), а также агрегированные операции над списками (например, "intArray.@sum > 100").

  • Улучшена производительность сортировки по более чем одному свойству. Особенно важна, если многие элементы соответствуют первому свойству. Устраняет (#7092)### Исправлено

  • Исправлена ошибка, которая препятствовала маркировке типа объекта с входящими ссылками как встроенных во время миграций. (Core #4414)

  • Поток прослушивания уведомлений Realm иногда мог попасть в ситуацию, когда утверждение "!skip_version.version" не выполнялось, если транзакция записи была завершена в определенное время (с версии 10.5.0).

  • Добавлено временное решение для случая, когда обновление старого файла с незаконной строкой могло привести к аварийному завершению работы (#7111).

  • Исправлена ошибка разрешения конфликтов, связанная с инструкцией ArrayMove, которая иногда могла привести к исключению "Invalid prior_size", препятствующему синхронизации (с версии 10.5.0).

  • Пропуск уведомления о изменении в первой транзакции записи после добавления наблюдателя мог иногда не привести к пропуску уведомления (с версии 10.5.1).

Совместимость

  • Realm Studio: 10.0.0 или более поздняя версия.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.4.
  • CocoaPods: 1.10 или более поздняя версия.

Внутренние изменения

  • Обновлен realm-core с версии v10.5.0 до версии v10.5.3

10.6.0 Примечания к выпуску (2021-02-15) =============================================================### Улучшения

  • Добавлен @StateRealmObject для поддержки SwiftUI. Этот тип свойства-обёртки создаёт наблюдаемый объект на View. Используйте вместо SwiftUI. StateObject для типов Realm Object, List и EmbeddedObject.
  • Добавлен @ObservedRealmObject для поддержки SwiftUI. Этот тип свойства-обёртки подписывается на наблюдаемый объект и устаревает View всякий раз, когда наблюдаемый объект изменяется. Используйте вместо SwiftUI. ObservedObject для типов Realm Object, List или EmbeddedObject.
  • Добавлен @ObservedResults для поддержки SwiftUI. Этот тип свойства-обёртки извлекает результаты из Realm. Результаты используют конфигурацию Realm, предоставленную значением окружения EnvironmentValues. realmConfiguration.
  • Добавлены EnvironmentValues. realm и EnvironmentValues. realmConfiguration для типов Realm и Realm. Configuration соответственно. Значения могут быть внедрены в Views с помощью метода View. environment, например, MyView(). environment(\. realmConfiguration, Realm. Configuration(fileURL: URL(fileURLWithPath: "myRealmPath. realm"))). Значение затем может быть объявлено на примере MyView как @Environment(\. realm) var realm.
  • Добавлены расширения SwiftUI. Binding, где Value является типом Object, List или EmbeddedObject. Эти расширения предоставляют методы для обёрнутых транзакций записи, чтобы избежать избыточного кода в Views, например, TextField("name", $personObject. name) или $personList. append(Person()).
  • Добавлены Object. bind и EmbeddedObject. bind для поддержки SwiftUI. Это позволяет вам создавать привязки к свойствам Realm, когда свойство-обёртка недоступно, например, TextField("name", personObject. bind(\. name)).* Теперь клиент Sync логирует сообщения об ошибках, полученные от сервера, а не только размер сообщения об ошибке.
  • Ошибки, возвращаемые сервером при закрытии WebSockets sync, теперь захватываются и выявляются как SyncError.
  • Улучшена производительность последовательных чтений на Results, поддерживаемых напрямую Table (то есть realm.objects(ClasSName.self) без фильтра/сортировки и т. д.) на 50x.
  • Отделённые встроенные типы объектов, которые не связаны ни с какими верхнеуровневыми типами, теперь лучше обрабатываются. Ранее сервер отвергал схему, что приводило к запаздывающему и запутанному отчёту об ошибках. Явное включение сироты в objectTypes теперь немедленно отображается как ошибка при открытии Realm, и сироты автоматически исключаются из автоматически обнаруженной схемы, когда objectTypes не указан. ### Исправлено* Чтение из результата, поддерживаемого напрямую таблицей (то есть realm.object(ClasSName.self) без фильтра/сортировки и т.д.) могло давать неверные результаты, если результат был создан и доступен до создания нового объекта с первичным ключом меньше наименьшего первичного ключа, который ранее существовал. (#7014, начиная с версии OnClickListener 5.0.0).
  • Во время синхронизации вы могли столкнуться с ошибкой с сообщением "Assertion failed: ref + size <= next->first". (Core #4388)

Сопоставимость

  • Realm Studio: 10.0.0 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.4.
  • CocoaPods: 1.10 или более поздняя версия.

Внутренние изменения

  • Обновлен realm-core с версии v10.4.0 до v10.5.0

10.5.2 Примечания к выпуску (2021-02-09)

Улучшения

  • Добавлена поддержка "размораживания" объектов. Realm, Results, List и Object теперь имеют методы thaw(), которые возвращают живую копию замороженного объекта. Это позволяет поведению приложения, где замороженный объект может быть снова сделан живым для изменения значений. Например, сначала замораживаем объект, переданный в UI view, затем размораживаем объект в view для обновления значений.

  • Добавлены бинарные файлы Xcode 12.4 в пакет выпуска.### Исправлено

  • Вставка даты в синхронизированное собрание через AnyBSON.datetime(...) могла быть типа Timestamp вместо Date. Это могло привести к ошибкам в синхронизированных объектах с свойством типа Date. (#6654, начиная с версии 10.0.0).

  • Исправлена проблема, при которой создание объекта после обновления формата файла могло завершиться ошибкой с сообщением "Assertion failed: lo() <= std::numeric_limits<uint32_t>::max()" (#4295, начиная с версии 5.0.0).

  • Добавлена возможность перебора объектов в миграциях с типами, которые больше не присутствуют в схеме.

  • Добавлено RLMResponse.customStatusCode. Это исправляет исключения таймаута, которые могли возникать при плохом соединении. (#4188).

  • Ограничено использование ObjectKeyIdentifiable на платформы, которые поддерживают Combine, чтобы соответствовать изменениям, внесенным в SDK Xcode 12.5. (#7083).

Совместимость

  • Realm Studio: 10.0.0 или более поздняя версия.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.4.
  • CocoaPods: 1.10 или более поздняя версия.

Внутренние изменения

  • Обновлен realm-core с версии v10.3.3 до v10.4.0.

10.5.1 Примечания к выпуску (2021-01-15)

Улучшения* Добавлен бинарный файл Xcode 12.3 в пакет выпуска.

  • Добавлена поддержка запросов, в которых nil находится слева, а ключевой путь — справа (например, "nil == name" вместо "name == nil", как требовалось ранее).### Исправлено
  • Время ожидания при вызове функций сервера через App иногда приводило к аварийному завершению вместо отчета об ошибке.
  • Исправлено конкурентное состояние, которое приводило к "необработанному исключению в потоке уведомителя: N5realm15InvalidTableRefE: transaction_ended" и аварийному завершению при закрытии или недействительности исходного Realm в очень конкретное время во время первого запуска уведомителя коллекции (#3761, начиная с версии v5.0.0).
  • Удаление и повторное создание объектов с вложенными объектами может завершиться ошибкой. (PR Core #4240, начиная с версии v10.0.0).
  • Быстрое перечисление List после удаления родительского объекта приводило к аварийному завершению с ошибкой утверждения вместо более подходящего исключения. (Core #4114, начиная с версии v5.0.0).
  • Исправлена проблема, при которой вызов функции MongoDB Realm Function никогда не выполнялся из-за потери ссылки на слабый User.

Совместимость

  • Realm Studio: 10.0.0 или более поздняя версия.
  • API совместимы с предыдущими выпусками в серии Yö10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.3.
  • CocoaPods: 1.10 или более поздняя версия.

Внутренние изменения

  • Обновлен realm-core с версии v10.3.2 до v10.3.3

10.5.0 Примечания к выпуску (2020-12-14) =============================================================### Улучшения

  • MongoDB Realm теперь поддерживается при установке Realm через Swift Package Manager.

Исправлено

  • Идентификатор пользователя был добавлен в путь к файлу для синхронизированных Realms дважды, а также было выполнено дополнительное укрытие для значения раздела. Это не вызвало функциональных проблем, но сделало имена файлов более запутанными, чем это было необходимо. Существующие файлы Realm продолжат находиться по старому пути, в то время как новые файлы будут создаваться по более короткому пути. (С версии v10.0.0).
  • Исправлена ситуация гонки, которая могла бы позволить запросам на замороженные Realms получить доступ к неинициализированной структуре для поисковых индексов (с версии v5.0.0).
  • Исправлены несколько ситуаций гонки в инициализации App и SyncSession. Эти ситуации могли бы привести к странным ошибкам при первом открытии синхронизированного Realm (с версии v10.0.0).
  • Исправлено использование устаревшего ссылочного объекта при обновлении пользовательских данных пользователя, что могло бы привести к аварийному завершению работы (с версии v10.0.0).

Совместимость

  • Realm Studio: 10.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.2.
  • CocoaPods: 1.10 или новее.

Внутренние изменения

  • Обновлен realm-core с версии v10.1.4 до v10.3.210.4.0 Примечания к выпуску (2020-12-10) =============================================================

Улучшения

  • Добавлена поддержка Combine для App и User. Эти два типа теперь имеют свойство objectWillChange, которое излучает каждый раз, когда состояние объекта изменяется (например, при входе или выходе пользователя). (PR #6977).

Исправлено

  • Интеграция изменений из сервера иногда приводила к ошибке утверждения "n != realm::npos" внутри Table::create_object_with_primary_key() при создании объекта с первичным ключом, который ранее использовался и имел входящие ссылки. (Core PR #4180, начиная с версии v10.0.0).
  • Срезы arm64 для симулятора не были включены в пакет выпуска XCFramework. (PR #6982, начиная с версии v10.2.0).

Совместимость

  • Realm Studio: 10.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.2.
  • CocoaPods: 1.10 или новее.

Внутренние изменения

  • Обновлен realm-core с версии v10.1.3 до v10.1.4
  • Обновлен realm-sync с версии v10.1.4 до v10.1.5

10.3.0 Примечания к выпуску (2020-12-08)

Улучшения

  • Добавлены учетные данные Google OpenID Connect, альтернативный способ входа вместо учетных данных Google OAuth 2.0.

Исправлено* Исправлена ошибка, которая могла препятствовать достижению консистентности при разрешении конфликтов. Аффектированные клиенты могли столкнуться с расхождением данных и потенциальными ошибками консистентности в результате конфликтного разрешения между циклами Create-Erase-Create для объектов с первичными ключами (начиная с версии v10.0.0).### Совместимость

  • Realm Studio: 10.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.2.
  • CocoaPods: 1.10 или новее.

Внутренние изменения

  • Обновлен realm-sync с версии v10.1.3 до v10.1.4

10.2.0 Примечания к выпуску (2020-12-02)

Улучшения

  • Предварительно собранные двоичные файлы теперь упакованы в XCFrameworks. Это добавляет поддержку для Catalyst и arm64 симуляторов при использовании их для установки Realm, устраняет необходимость шага сборки strip-frameworks, и должен упростить установку.
  • Функциональность поддержки для использования API Objective-C из Swift теперь включена в Realm Swift и теперь включает все необходимые обёртки для типов MongoDB Realm. В смешанных проектах Objective-C/Swift мы рекомендуем продолжать использовать типы Objective-C, но импортировать как Realm, так и RealmSwift в ваших Swift файлах.

Исправления

  • Идентификатор пользователя был добавлен в путь к файлу для синхронизированных Realms дважды и выполнялось лишнее экранирование значения раздела. Это не вызывало функциональных проблем, но делало имена файлов более запутанными, чем это было необходимо. Существующие файлы Realm будут продолжать находиться по старому пути, в то время как новые файлы будут создаваться по более короткому пути. (С версии v10.0.0).### Совместимость

  • Realm Studio: 10.0.0 или более поздняя версия.

  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 12.2.

  • CocoaPods: 1.10 или более поздняя версия.

10.1.4 Примечания к выпуску (2020-11-16)

Улучшения

  • Добавлены срезы arm64 к сборкам для macOS.

Совместимость

  • Realm Studio: 10.0.0 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.2.
  • CocoaPods: 1.10 или более поздняя версия.

Внутренние изменения

  • Обновлен realm-core с версии v10.0.1 до v10.1.3
  • Обновлен realm-sync с версии v10.0.1 до v10.1.3

10.1.3 Примечания к выпуску (2020-11-13)

Улучшения

  • Добавлены двоичные файлы Xcode 12.2 в пакет выпуска.

Исправления

  • Запрещено устанавливать RLMRealmConfiguration.deleteRealmIfMigrationNeeded/Realm.Config.deleteRealmIfMigrationNeeded при включенной синхронизации. Это не работало так, как ожидалось, так как не удаляло соответствующее состояние сервера и сломалось в запутанных способах (PR #6931).

Совместимость

  • Realm Studio: 10.0.0 или более поздняя версия.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.1.
  • CocoaPods: 1.10 или более поздняя версия.

10.1.2 Примечания к выпуску (2020-11-06) =============================================================### Улучшения

  • Некоторые состояния ошибок, которые ранее выбрасывали вводящее в заблуждение исключение "NoSuchTable", теперь выбрасывают более описательное исключение.

Исправлено

  • Один из Swift пакетов не имел установленного минимального целевого развертывания, что приводило к ошибкам при архивировании приложения, которое импортировало Realm через SPM.
  • Восстановление эмуляции filelock на watchOS, чтобы ОС не завершала работу приложения, когда оно приостановлено, а Realm открыт на watchOS 7 (#6861, начиная с версии v5.4.8).
  • Исправление аварийного завершения работы при случае-независимом запросе на индексированные столбцы строк, когда ничего не соответствует (#6836, начиная с версии v5.0.0).
  • Null значения в List<Float?> или List<Double?> были некорректно обрабатывались как не-null в некоторых местах. Неизвестно, вызывало ли это какие-либо функциональные проблемы при использовании публичного API. (Core PR #3987, начиная с версии v5.0.0).
  • Удаление записи из списка в двух разных клиентах могло привести к удалению неправильной записи в одном клиенте при слиянии изменений (начиная с версии v10.0.0).

Совместимость

  • Realm Studio: 10.0.0 или новее.

  • API совместимы с предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 12.1.

  • CocoaPods: 1.10 или новее.### Внутренние изменения

  • Обновлено realm-core с версии v10.0.0 до v10.1.1

  • Обновлено realm-sync с версии v10.0.0 до v10.1.1

10.1.1 Примечания к выпуску (2020-10-27)

Улучшения

  • Установка минимальной версии CocoaPods в podspec, чтобы попытка установки с более старыми версиями давала более полезную ошибку (PR #6892).

Исправлено

  • Вложенные объекты не могли быть помечены как ObjectKeyIdentifiable (PR #6890, начиная с версии v10.0.0).

Совместимость

  • Realm Studio: Yöntem 10.0.0 или новее.
  • API совместимы с предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.1.
  • CocoaPods: 1.10 или новее.

10.1.0 Примечания к выпуску (2020-10-22)

Теперь для установки Realm требуется CocoaPods версии 1.10 или выше.

Улучшения

  • Вызывать исключение для объектов, у которых ни одно свойство не помечено как @objc.
  • Поддержка Mac Catalyst и симуляторов arm64 при интеграции через CocoaPods.
  • Добавление бинарных файлов Xcode 12.1 в пакет выпуска.
  • Добавление поддержки Combine для Realm.asyncOpen().

Исправлено

  • Реализация точного и несинхронизированного уведомления о завершении внутренних изменений, что избегает конкурентной ситуации, когда уведомление о завершении загрузки появляется раньше, чем изменения, ожидающие загрузки, были загружены. (#1118).

Совместимость

  • Realm Studio: 10.0.0 или выше.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.1.10.0.0 Примечания к выпуску (2020-10-16) =============================================================

Этот выпуск функционально идентичен v10.0.0-rc.2.

ЗАМЕЧАНИЕ: Эта версия повышает версию формата файла Realm для поддержки новых типов данных. Файлы Realm будут автоматически обновлены при открытии и не могут быть прочитаны версиями Realm, старше v10.0.0.### Поверхностные изменения

  • Переименуйте Realm.Publisher в RealmPublishers для избежания путаницы с Combine.Publisher.
  • Удалите [RLMSyncManager shared]. Теперь это свойство на App/RLMApp.
  • RLMSyncManager.pinnedCertificatePaths был удален.
  • Классы RLMUserAccountInfo и RLMUserInfo (swift: UserInfo, UserAccountInfo) были удалены.
  • RLMSyncUser/SyncUser был переименован в RLMUser/User.
  • Мы больше не поддерживаем Realm Cloud (legacy), а вместо этого используем новое "MongoDB Realm" Cloud. MongoDB Realm — это серверная-менее платформа, которая позволяет разработчикам быстро создавать приложения без необходимости настройки серверной инфраструктуры. MongoDB Realm построен на MongoDB Atlas и автоматически интегрирует подключение к вашей базе данных.
  • Удалите поддержку синхронизации на основе запросов, включая параметры конфигурации и типы RLMSyncSubscription и SyncSubscription (#6437).
  • Удалите все, что связано с правами доступа к синхронизации, включая как систему прав доступа на основе путей, так и объектные уровни привилегий для синхронизации на основе запросов. Права доступа теперь настраиваются через MongoDB Atlas. (#6445).
  • Удалите поддержку Realm Object Server.
  • В синхронизированных Realms объекты, не являющиеся встроенными, всегда должны иметь первичный ключ с именем "_id".
  • Все Swift-обратные вызовы для асинхронных операций, которые могут завершиться ошибкой, теперь принимают параметр Result<Value, Error> вместо двух отдельных параметров Value? и Error?.### Улучшения
  • Добавлена поддержка следующего поколения синхронизации. Поддержка синхронизации с MongoDB вместо Realm Object Server. Приложения должны создаваться на realm.mongodb.com.
  • Схема отображения памяти для файлов Realm изменена для лучшей поддержки открытия очень больших файлов.
  • Добавлена поддержка типа данных ObjectId. Это автоматически сгенерированный уникальный идентификатор, аналогичный GUID или UUID. (PR #6450).
  • Добавлена поддержка типа данных Decimal128. Это 128-битное десятичное число с плавающей запятой IEEE 754, аналогичное NSDecimalNumber. (PR #6450).
  • Добавлена поддержка вложенных объектов. Вложенные объекты — это объекты, принадлежащие к одному родительскому объекту и удаляемые вместе с ним. Они определяются наследованием от EmbeddedObject / RLMEmbeddedObject вместо Object / RLMObject.
  • Добавлен метод -[RLMUser customData]/User.customData. Пользовательские данные настраиваются в вашем приложении MongoDB Realm.
  • Добавлен метод -[RLMUser callFunctionNamed:arguments:completion:]/User.functions. Это точка входа для вызова удаленных функций MongoDB Realm. Функции позволяют вам определять и выполнять логику на стороне сервера для вашего приложения. Функции пишутся на современном JavaScript (ES6+) и выполняются в бессерверном режиме.При вызове функции вы можете динамически получить доступ к компонентам текущего приложения, а также к информации о запросе на выполнение функции и пользователе, отправившем запрос.
  • Добавлен метод -[RLMUser mongoClientWithServiceName:]/User.mongoClient. Это точка входа для вызова вашего удаленного сервиса MongoDB. Операции чтения включают -[RLMMongoCollection findWhere:completion:], -[RLMMongoCollection countWhere:completion:] и -[RLMMongoCollection aggregateWithPipeline:completion:]. Операции записи включают -[RLMMongoCollection insertOneDocument:completion:], -[RLMMongoCollection insertManyDocuments:completion:], -[RLMMongoCollection updateOneDocument:completion:], -[RLMMongoCollection updateManyDocuments:completion:], -[RLMMongoCollection deleteOneDocument:completion:] и -[RLMMongoCollection deleteManyDocuments:completion:]. Если вы уже знакомы с драйверами MongoDB, важно понимать, что удаленный RLMMongoCollection предоставляет доступ только к операциям, доступным в MongoDB Realm. * Получение конфигурации Realm от пользователя теперь выполняется с помощью [RLMUser configurationWithPartitionValue:]/User.configuration(partitionValue:). Значения разделов могут быть типа String, Int или ObjectId, и выполняют роль аналогичную URL-адресам Realm в Realm Cloud. Основное отличие заключается в том, что разделы должны быть более тесно связаны с вашими данными. Например, если вы управляете псевдонимом Dog, и у вас есть поле breed, которое служит ключом раздела, вы можете открывать realms на основе породы собак.* Добавлена возможность потокового получения событий изменения на удалённой коллекции MongoDB с помощью [RLMMongoCollection watch:delegate:delegateQueue:], MongoCollection.watch(delegate:). При вызове watch(delegate:) вам будет предоставлен RLMChangeStream (ChangeStream), который можно использовать для завершения прослушивания, вызвав close(). События изменения также могут быть потоково получены с помощью MongoCollection.watch Combine publisher, который будет потоково передавать события изменения каждый раз, когда удалённая коллекция MongoDB обновляется.
  • Добавлена возможность слушать, когда поток событий изменения Watch открыт при использовании Combine. Используйте onOpen(event:) сразу после открытия WatchPublisher, чтобы зарегистрировать обратный вызов, который будет вызван один раз, когда поток событий изменения открыт.
  • Объекты с целочисленными первичными ключами больше не требуют отдельного индекса для столбца первичного ключа, что улучшает производительность вставки и немного уменьшает размер файла. ### Совместимость* Realm Studio: 10.0.0 или новее.
  • Выпуск Carthage для Swift построен с использованием Xcode 12

Внутренние изменения

  • Обновлен realm-core с версии v6.1.4 до v10.0.0
  • Обновлен realm-sync с версии v5.0.29 до v10.0.0

Заметки о выпуске 10.0.0-rc.2 (2020-10-15)

Улучшения

  • Добавлена возможность слушать событие открытия потока изменений Watch при использовании Combine. Используйте onOpen(event:) сразу после открытия WatchPublisher для регистрации обратного вызова, который будет вызван один раз при открытии потока изменений.

Реклассификации* Операции вставки в коллекции MongoDB теперь отчитываются о вставленных документах

идентификаторы в виде BSON, а не ObjectId.

  • Вложенные объекты больше не могут создавать циклы на уровне схемы. Например, тип A больше не может иметь свойство объекта типа A, или свойство объекта типа B, если тип B ссылается на тип A. Это всегда отвергалось сервером, но ранее было разрешено в несинхронизированных Realms.

  • Свойства первичного ключа снова помечаются как индексированные. Это отражает внутренние изменения в обработке первичных ключей, которые не должны иметь других видимых эффектов.

  • Изменены парные типы возврата из Swift completion handlers на возврат Result<Value, Error>.

  • Изменено определение RealmSwift.Object для добавления поддержки режима эволюции библиотеки Swift. Это обычно не должно иметь никакого эффекта, но вам может потребоваться добавить override к инициализаторам подклассов объектов.

  • Добавлен тип .null к AnyBSON. Это создает различие между значениями null и правильно отсутствующими типами BSON.### Исправлено

  • Установлена правильная точность при сериализации double в расширенном JSON.

  • Чтение массива objectTypes из конфигурации Realm не включало вложенные типы объектов, которые были установлены в массиве.

  • Отклонение циклов в вложенных объектах как часть локальной схемы валидации вместо ошибки сервера.

  • Несмотря на то, что MongoClient получается из User, он фактически использовал текущего пользователя приложения User, а не пользователя, из которого он был получен, для выполнения запросов.

Этот выпуск также включает следующие изменения от 5.4.7 - 5.5.0

Улучшения

  • Добавлена возможность захватывать токен уведомления при использовании Combine publisher, который наблюдает за объектом Realm или коллекцией. Пользователь будет вызывать saveToken(on:at:) сразу после запуска издателя для использования этой функции.### Исправлено* При использовании Realm.write(withoutNotifying:) существовала возможность того, что предоставленные блоки наблюдения не будут пропущены при выполнении транзакции записи. (Object Store #1103)

  • Сравнение двух одинаковых неуправляемых объектов List<>/RLMArray могло завершиться неудачей. (#5665).

  • Случайно-независимые запросы на равенство на индексированных строковых свойствах иногда не могли очистить некоторое внутреннее состояние при повторном выполнении запроса. Это могло проявляться в виде дублированных результатов или ошибок "ключа не найдено". (#6830, #6694, начиная с версии 5.0.0).

  • Запросы на равенство на индексированных строковых свойствах иногда выбрасывали исключения "ключа не найдено", если хеш строки имел установленный бит 62. (.NET #2025, начиная с версии v5.0.0).

  • Запросы, сравнивающие необязательные целочисленные свойства с nil, могли вести себя так, словно они сравнивались с нулем вместо этого (начиная с версии v5.0.0).### Сопоставимость

  • Формат файла: генерирует Realms с форматом v12 (читает и обновляет все предыдущие форматы)

  • Realm Studio: 10.0.0 или выше.

  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.

  • Выпуск Carthage для Swift построен с использованием Xcode 12.

Внутренние изменения

  • Обновлен realm-core с версии v10.0.0-beta.9 до v10.0.0
  • Обновлен realm-sync с версии v10.0.0-beta.14 до v10.0.0

10.0.0-rc.1 Примечания к выпуску (2020-10-01)

Перерывы в совместимости

  • Измените следующие методы на RLMUser на свойства:
    • [RLMUser emailPasswordAuth] => RLMUser.emailPasswordAuth
    • [RLMUser identities] => RLMUser.identities
    • [RLMUser allSessions] => RLMUser.allSessions
    • [RLMUser apiKeysAuth] => RLMUser.apiKeysAuth
  • Другие изменения в RLMUser:
    • nullable был удален из RLMUser.identifier
    • nullable был удален из RLMUser.customData
  • Измените следующие методы на RLMApp на свойства:
    • [RLMApp allUsers] => RLMApp.allUsers
    • [RLMApp currentUser] => RLMApp.currentUser
    • [RLMApp emailPasswordAuth] => RLMApp.emailPasswordAuth
  • Определите RealmSwift.Credentials как enum вместо typealias. Пример использования изменился с Credentials(googleAuthCode: "token") на Credentials.google(serverAuthCode: "serverAuthCode"), и Credentials(facebookToken: "token") на Credentials.facebook(accessToken: "accessToken"), и т.д.
  • Удалите параметр ошибки и переопределите payload в + (instancetype)credentialsWithFunctionPayload:(NSDictionary *)payload error:(NSError **)error;. Теперь он определен как + (instancetype)credentialsWithFunctionPayload:(NSDictionary<NSString *, id<RLMBSON>> *)payload;.

Совместимость* Формат файла: Генерирует Realms с форматом v12 (Чтение и обновление всех предыдущих форматов)

  • Realm Studio: 10.0.0 или новее.
  • API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
  • Выпуск Carthage для Swift построен с использованием Xcode 12.

10.0.0-beta.6 Примечания к выпуску (2020-09-30)

Критические изменения

  • Изменение параметров Google Credential для лучшего отражения требуемого кода аутентификации:
    • Credentials(googleToken:) => Credentials(googleAuthCode:)
    • [RLMCredentials credentialsWithGoogleToken:] => [RLMCredentials credentialsWithGoogleAuthCode:]
  • Переименование Realm.Publishers в RealmPublishers для избежания путаницы с Combine.Publishers

Исправлено

  • Удаление объектов иногда могло изменять ObjectId оставшихся объектов с null на ObjectId("deaddeaddeaddeaddeaddead") при наличии более чем 1000 объектов. (С версии v10.0.0-alpha.1)
  • Исправлено отсутствие утверждения при добавлении индекса к Nullable ObjectId свойству, содержащему null. (с версии v10.0.0-alpha.1).

В этом выпуске также включены следующие изменения от 5.4.0 - 5.4.6:

Улучшения* Добавление предварительно скомпилированного бинарного файла для Xcode 11.7 в пакет выпуска.

  • Добавление предварительно скомпилированного бинарного файла для Xcode 12 в пакет выпуска.
  • Улучшение асимптотической производительности запросов NOT IN для индексированных свойств. Теперь это O(количество строк) вместо O(количество строк * количество значений в IN-условии).
  • Незначительное (<5%) улучшение производительности большинства операций, включающих чтение из файла Realm.### Исправлено* Обновление файлов с пред-5. x версий, использующих строковые первичные ключи, приведет к тому, что realm. object(ofType:forPrimaryKey:) не сможет найти объект. (#6716, начиная с 5. 2. 0)
  • Записная транзакция, которая изменяет объект с более чем 16 управляемыми свойствами и приводит к увеличению размера файла Realm до более чем 2 ГБ, может привести к ошибке утверждения, упоминающей "m_has_refs". (JS #3194, начиная с 5. 0. 0).
  • Объекты с более чем 32 свойствами могут повредить файл Realm и привести к различным аварийным завершениям работы. (Java #7057, начиная с 5. 0. 0).
  • Исправление мертвых琐碎部分保持原文格式和内容不变,因此直接结束翻译:```markdown
  • Исправление мертвых мертвецов при открытии файла Realm в iOS-симуляторе и Realm Studio (#6743, начиная с версии 5.3.6).
  • Исправление мертвых мертвецов при открытии файла Realm в iOS-симуляторе и Realm Studio (#6749, начиная с версии 5.3.6).
  • Если вы используете шифрование, ваше приложение может упасть с сообщением типа "Открытие файлов Realm формата версии 0 не поддерживается этой версией Realm". (#6889 и другие, начиная с версии 5.0.0).
  • Ограничение Realm на последовательную очередь могло вызывать ошибку, утверждавшую, что очередь не является последовательной на версиях iOS старше 12. (#6735, начиная с версии 5.0.0).
  • Результаты иногда могли давать устаревшие результаты внутри транзакции записи, если запись, которая должна была обновить результаты, была сделана до первого доступа к существующему объекту результатов. (#6721, начиная с версии 5.0.0).
  • Исправление архивирования фреймворков Realm и RealmSwift с помощью Xcode 12. (#6774).
  • Исправление компиляции через Carthage при использовании Xcode 12 (#6717).
  • Исправление аварийного завершения работы внутри realm::Array(Type)::init_from_mem(), которое иногда происходило при выполнении запроса по ссылкам сразу после создания объектов запросимого типа. (#6789 и возможно другие, начиная с версии 5.0.0).
  • Возможно исправление проблем при изменении типа первичного ключа объекта с необязательного на обязательный.
* Realm Studio: 10.0.0 или новее.
* Carthage релиз для Swift построен с Xcode 12.

### Внутренние изменения

* Обновлен realm-core с v10.0.0-beta.7 до v10.0.0-beta.9
* Обновлен realm-sync с v10.0.0-beta.11 до v10.0.0-beta.14

10.0.0-beta.5 Примечания к выпуску (2020-09-15)
=============================================================

### Улучшения

* Добавлен `User.loggedIn`.
* Добавлена поддержка нескольких Realm Apps.
* Удален `[RLMSyncManager shared]`. Теперь это свойство на самом приложении.
* Добавлена поддержка Combine для:
    * PushClient
    * APIKeyAuth
    * User
    * MongoCollection
    * EmailPasswordAuth
    * App.login

### Исправлено

* Исправлено `MongoCollection.watch` для последовательной доставки событий на заданной очереди.
* Исправлено `[RLMUser logOutWithCompletion]` и `User.logOut` для корректного выхода пользователя.
* Исправлено падение при запуске на iOS версиях старше 13 (с версии v10.0.0-beta.3).

### Перерывы в совместимости* `RLMSyncManager.pinnedCertificatePaths` удален.
* Классы `RLMUserAccountInfo` & `RLMUserInfo` (swift: `UserInfo`, `UserAccountInfo`) удалены.
* Следующие функциональности переименованы для соответствия Cocoa другим Realm SDKs:| Старая API                                                   | Новая API                                                     |
|:-------------------------------------------------------------|:---------------------------------------------------------------|
| `RLMUser.identity`                                           | `RLMUser.identifier`                                          |
| `User.identity`                                              | `User.id`                                                     |
| `-[RLMCredentials credentialsWithUsername:password:]`        | `-[RLMCredentials credentialsWithEmail:password:]`            |
| `Credentials(username:password:)`                            | `Credentials(email:password:)`                                |
| `- [RLMUser apiKeyAuth]`                                     | `-[RLMUser apiKeysAuth]`                                      |
| `User.apiKeyAuth()`                                          | `User.apiKeysAuth()`                                          |
| `-[RLMEmailPasswordAuth registerEmail:password:completion:]` | `-[RLMEmailPasswordAuth registerUserWithEmail:password:completion:]` |
| `App.emailPasswordAuth().registerEmail(email:password:)`     | `App.emailPasswordAuth().registerUser(email:password:)`       |### Совместимость* Формат файла: Генерирует Realms с форматом v12 (чтение и обновление всех предыдущих форматов)
* Realm Studio: 10.0.0 или новее.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 11.6.

### Внутренние изменения

* Обновлен realm-core с версии v10.0.0-beta.6 до v10.0.0-beta.7
* Обновлен realm-sync с версии v10.0.0-beta.10 до v10.0.0-beta.11

10.0.0-beta.4 Примечания к выпуску (2020-08-28)
=============================================================

### Улучшения

* Добавлена поддержка 64-битного симулятора watchOS, добавленного в Xcode 12.
* Добавлена возможность потокового отслеживания событий изменения на удалённой коллекции MongoDB с помощью
  `[RLMMongoCollection watch:delegate:delegateQueue]`,
  `MongoCollection.watch(delegate)`. При вызове `watch(delegate)` вам будет предоставлен `RLMChangeStream` (`ChangeStream`), который будет использоваться для отмены и остановки сессии потокового отслеживания с помощью вызова `[RLMChangeStream close]` (`ChangeStream.close()`) при необходимости.
* Добавлен `MongoCollection.watch`, который является Combine публишером, который будет потоково передавать события изменения каждый раз, когда удалённая коллекция MongoDB обновляется.
* Добавлена возможность открытия синхронизированного Realm с `nil` значением раздела.

### Исправления

* Realm.Configuration.objectTypes теперь принимает встроенные объекты
* Исправлены ошибки, перенесённые из 5.3.5

### Совместимость* Формат файла: Генерирует Realms с форматом v10 (Чтение и обновление всех предыдущих форматов)
* Realm Studio: 3.11 или новее.
* API совместимы с предыдущими выпусками в серии v10.0.0-beta.x.
* Выпуск Carthage для Swift построен с использованием Xcode 11.5.

### Внутренние изменения

* Обновлен realm-core с версии v10.0.0-beta.1 до v10.0.0-beta.6
* Обновлен realm-sync с версии v10.0.0-beta.2 до v10.0.0-beta.10

10.0.0-beta.3 Примечания к выпуску (17 августа 2020)
=============================================================

Этот выпуск также включает все изменения из 5.3.2.

### Реклассификация* Следующие классы и псевдонимы были переименованы для соответствия Cocoa и другим SDK Realm:| Старая API                                                  | Новая API                                                     |
|:------------------------------------------------------------|:---------------------------------------------------------------|
| `RLMSyncUser`                                               | `RLMUser`                                                      |
| `SyncUser`                                                  | `User`                                                         |
| `RLMAppCredential`                                          | `RLMCredential`                                                |
| `AppCredential`                                             | `Credential`                                                   |
| `RealmApp`                                                  | `App`                                                          |
| `RLMUserAPIKeyProviderClient`                               | `RLMAPIKeyAuth`                                                |
| `RLMUsernamePasswordProviderClient`                         | `RLMEmailPasswordAuth`                                         |
| `UsernamePasswordProviderClient`                            | `EmailPasswordAuth`                                            |
| `UserAPIKeyProviderClient`                                  | `APIKeyAuth`                                                   |* Следующая функциональность также перемещена в User| Старый API                                                      | Новый API                                                       |
|:-------------------------------------------------------------|:--------------------------------------------------------------|
| `[RLMApp callFunctionNamed:]`                                | `[RLMUser callFunctionNamed:]`                                |
| `App.functions`                                              | `User.functions`                                              |
| `[RLMApp mongoClientWithServiceName:]`                       | `[RLMUser mongoClientWithServiceName:]`                       |
| `App.mongoClient(serviceName)`                               | `User.mongoClient(serviceName)`                               |
| `[RLMApp userAPIKeyProviderClient]`                          | `[RLMUser apiKeyAuth]`                                        |
| `App.userAPIKeyProviderClient`                               | `User.apiKeyAuth()`                                           |
| `[RLMApp logOut:]`                                           | `[RLMUser logOut]`                                            |
| `App.logOut(user)`                                           | `User.logOut()`                                               |
| `[RLMApp removeUser:]`                                       | `[RLMUser remove]`                                            |
| `App.remove(user)`                                           | `User.remove()`                                               |
| `[RLMApp linkUser:credentials:]`                             | `[RLMUser linkWithCredentials:]`                              |
| `App.linkUser(user, credentials)`                            | `User.link(credentials)`                                      |

* Метод `refreshCustomData()` для `User` теперь возвращает `void` и передает пользовательские данные в обратный вызов при успешном выполнении.### Совместимость
* В этом выпуске введены разрывы совместимости для некоторых классов синхронизации и функциональности MongoDB Realm Cloud.
(См. раздел о разрывах совместимости для полного списка)
* Формат файла: генерирует Realms с форматом v11 (чтение и обновление всех предыдущих форматов)
* Realm Studio: 10.0.0 или выше.
* Выпуск Carthage для Swift построен с Xcode 11.5.10.0.0-beta.2 Примечания к выпуску (2020-06-09)
=============================================================
Теперь минимально поддерживаемые версии — Xcode 11.3 и iOS 9.### Улучшения
* Добавлена поддержка сборки с Xcode 12 beta 1. watchOS в настоящее время требует удаления x86_64 из поддерживаемых архитектур. Поддержка нового 64-битного симулятора Apple Watch появится в будущих выпусках.

### Исправлено
* Открытие SyncSession с локальными развертываниями приложений не использовало правильные конечные точки.
* Ссылки из встроенных объектов на топ-уровневые объекты некорректно запрещались.
* Открытие файла Realm в формате v6 (созданного версиями Realm Cocoa от 2.4 до 2.10) приводило к аварийному завершению программы. (С версии 5.0.0, [Core #3764](https://github.com/realm/realm-core/issues/3764)).
* Обновление файлов Realm версии 9 (до 5.0) создавало избыточный индекс поиска для свойств первичного ключа. Этот индекс затем удалялся при следующем открытии Realm, что приводило к дополнительной операции ввода-вывода в процессе обновления. (С версии 5.0.0, [Core #3787](https://github.com/realm/realm-core/issues/3787)).
* Исправлено проблема производительности при обновлении файлов версии 9 с индексами поиска для свойств, не являющихся первичными ключами. (С версии 5.0.0, [Core #3767](https://github.com/realm/realm-core/issues/3767)).

### Совместимость
* Формат файла: генерирует файлы Realm версии v11 (читает и обновляет все предыдущие версии)
* MongoDB Realm: 84893c5 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 10.0.0-alpha.
* Выпуск Carthage для Swift собран с Xcode 11.5.### Внутренние изменения
* Обновлено realm-core с версии v6.0.3 до v10.0.0-beta.1
* Обновлено realm-sync с версии v5.0.1 до v10.0.0-beta.2

10.0.0-beta.1 Примечания к выпуску (2020-06-08)
=============================================================

ЗАМЕЧАНИЕ: В этой версии формат файла Realm был повышен до версии 11. Возврат к более ранним версиям невозможен. Старые файлы автоматически будут обновлены до нового формата файла. Только [Realm Studio 10.0.0](https://github.com/realm/realm-studio/releases/tag/v10.0.0-beta.1) или более поздняя версия смогут открыть новый формат файла.### Улучшения
* Добавлена поддержка следующего поколения синхронизации. Поддержка синхронизации с MongoDB вместо Realm Object Server. Приложения должны создаваться на realm.mongodb.com.
* Схема отображения памяти для файлов Realm изменена для лучшей поддержки открытия очень больших файлов.
* Добавлена поддержка типа данных ObjectId. Это автоматически сгенерированный уникальный идентификатор, аналогичный GUID или UUID.
    ([PR #6450](https://github.com/realm/realm-swift/pull/6450)).
* Добавлена поддержка типа данных Decimal128. Это 128-битное десятичное число с плавающей запятой IEEE 754, аналогичное NSDecimalNumber.
    ([PR #6450](https://github.com/realm/realm-swift/pull/6450)).
* Добавлена поддержка вложенных объектов. Вложенные объекты — это объекты, принадлежащие к одному родительскому объекту и удаляемые вместе с ним. Они определяются наследованием от `EmbeddedObject` / `RLMEmbeddedObject` вместо `Object` / `RLMObject`.
* Добавлен метод `-[RLMSyncUser customData]`/`SyncUser.customData`. Пользовательские данные настраиваются в вашем приложении MongoDB Realm.
* Добавлен метод `-[RLMApp callFunctionNamed:arguments]`/`RealmApp.functions`. Это входная точка для вызова удаленных функций MongoDB Realm. Функции позволяют вам определять и выполнять логику на стороне сервера для вашего приложения. Функции пишутся на современном JavaScript (ES6+) и выполняются в серверном режиме.При вызове функции вы можете динамически получить доступ к компонентам текущего приложения, а также к информации о запросе на выполнение функции и пользователе, отправившем запрос.
* Добавлен метод `-[RLMApp mongoClientWithServiceName]`/`RealmApp.mongoClient`. Это входная точка для вызова вашего удаленного сервиса MongoDB. Читательские операции включают `-[RLMMongoCollection findWhere:completion:]`, `-[RLMMongoCollection countWhere:completion:]` и `-[RLMMongoCollection aggregateWithPipeline:completion:]`. Записывающие операции включают `-[RLMMongoCollection insertOneDocument:completion:]`, `-[RLMMongoCollection insertManyDocuments:completion:]`, `-[RLMMongoCollection updateOneDocument:completion:]`, `-[RLMMongoCollection updateManyDocuments:completion:]`, `-[RLMMongoCollection deleteOneDocument:completion:]` и `-[RLMMongoCollection deleteManyDocuments:completion:]`. Если вы уже знакомы с драйверами MongoDB, важно понимать, что удалённый MongoCollection предоставляет доступ только к операциям, доступным в MongoDB Realm.
* Изменён метод `[RLMSyncUser configurationWithPartitionValue:]`/`SyncUser.configuration(with:)`, чтобы он принимал все типы BSON. Текущие значения раздела могут быть типа `String`, `Int` или `ObjectId`. Открытие realm по значению раздела эквивалентно предыдущему открытию realm по URL. В этом случае разделы должны быть более тесно связаны с вашими данными. Например, если вы управляете псарней `Dog` и у вас есть поле `breed`, которое служит ключом раздела, вы можете открывать realm на основе породы собак.

### Помехи совместимости* Поддержка Realm Cloud (legacy) больше не предоставляется. Вместо этого используется новая "MongoDB Realm" Cloud. MongoDB Realm — это платформа без сервера, которая позволяет разработчикам быстро создавать приложения без необходимости настройки серверной инфраструктуры. MongoDB Realm построен на основе MongoDB Atlas и автоматически интегрирует подключение к вашей базе данных.
* Удалена поддержка синхронизации на основе запросов, включая параметры конфигурации и типы `RLMSyncSubscription` и `SyncSubscription` ([#6437](https://github.com/realm/realm-swift/pull/6437)).
* Свойства первичного ключа больше не помечаются как индексированные. Это отражает внутренние изменения в обработке первичных ключей, которые не должны иметь других видимых последствий ([#6440](https://github.com/realm/realm-swift/pull/6440)).
* Удалены все элементы, связанные с правами доступа к синхронизации, включая как систему прав доступа на основе путей, так и объектные права доступа для синхронизации на основе запросов ([#6445](https://github.com/realm/realm-swift/pulls/6445)).
* Единственность первичного ключа теперь проверяется при создании новых объектов во время миграций, а не только в конце миграций. Ранее новые объекты могли создаваться с дублирующимися первичными ключами во время миграций, если свойство изменялось на уникальное значение до окончания миграции, но теперь уникальное значение должно быть указано при создании объекта.
* Удалена поддержка Realm Object Server.### Совместимость

* Формат файла: генерирует Realms с форматом v11 (читает и обновляет все предыдущие форматы)
* MongoDB Realm: 84893c5 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 10.0.0-alpha.
* Выпуск Carthage для Swift построен с использованием Xcode 11.5.

### Внутренние изменения

* Обновлен realm-core с версии v6.0.3 до версии v10.0.0-beta.1
* Обновлен realm-sync с версии v5.0.1 до версии v10.0.0-beta.2

5.5.0 Примечания к выпуску (2020-10-12)
=============================================================

### Улучшения

* Добавлена возможность захвата `NotificationToken` при использовании публишера Combine, который наблюдает за объектом Realm или коллекцией. Пользователь вызывает `saveToken(on:at:)` сразу после запуска публишера для использования этой функции.

### Исправлено

* При использовании `Realm.write(withoutNotifying:)` существовала возможность того, что предоставленные блоки наблюдения не будут пропущены при выполнении транзакции записи.
  ([Object Store #1103](https://github.com/realm/realm-object-store/pull/1103))
* Сравнение двух одинаковых неуправляемых объектов `List<>`/`RLMArray` завершалось неудачей.
  ([#5665](https://github.com/realm/realm-swift/issues/5665))

### Совместимость

* Формат файла: генерирует Realms с форматом v11 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 5.0.0 или новее.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с Xcode 12.5.4.8 Примечания к выпуску (2020-10-05)
=============================================================

### Исправлено

* Запросы на равенство без учета регистра на индексированных строковых свойствах иногда не очищали внутреннее состояние при повторном выполнении запроса. Это могло проявляться в виде дублированных результатов или ошибок "ключа не найдено".
  ([#6830](https://github.com/realm/realm-swift/issues/6830), [#6694](https://github.com/realm/realm-swift/issues/6694), начиная с 5.0.0).

### Совместимость

* Формат файла: Генерирует Realms с форматом v11 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 5.0.0 или новее.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с Xcode 12.

### Внутренние изменения

* Обновлен realm-core с версии v6.1.3 до v6.1.4
* Обновлен realm-sync с версии v5.0.28 до v5.0.29

5.4.7 Примечания к выпуску (2020-09-30)
=============================================================

### Исправлено

* Запросы на равенство на индексированных строковых свойствах иногда выбрасывали исключения "ключа не найдено", если хеш строки имел установленный бит 62.
  ([.NET #2025](https://github.com/realm/realm-dotnet/issues/2025), начиная с v5.0.0).
* Запросы, сравнивающие необязательные целочисленные свойства с nil, ведут себя так, как будто они сравнивают с нулем (начиная с v5.0.0).

### Совместимость* Формат файла: Генерирует Realms с форматом v11 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 5.0.0 или новее.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с Xcode 12.### Внутренние изменения

* Обновлен realm-core с версии v6.1.2 до v6.1.3
* Обновлен realm-sync с версии v5.0.27 до v5.0.28

5.4.6 Примечания к выпуску (2020-09-29)
=============================================================

5.4.5 не обновил версию core для методов установки, кроме SPM. Все изменения, перечисленные там, действительно произошли в этой версии для методов установки, кроме SPM.### Совместимость

* Формат файла: Генерирует Realms с форматом v11 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 5.0.0 или новее.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 12.

### Внутренние изменения

* Обновлен realm-sync с версии v5.0.26 до v5.0.27

5.4.5 Примечания к выпуску (2020-09-28)
=============================================================

### Улучшения

* Незначительно (<5%) улучшена производительность большинства операций, включающих чтение из файла Realm.

### Исправления

* Повторное выполнение запроса на равенство на индексированном строковом свойстве могло давать неверные результаты, если предыдущее выполнение запроса соответствовало нескольким объектам, а теперь соответствует одному объекту. Это могло проявляться либо как нахождение несоответствующего объекта, либо выбрасывание исключения "ключа не найдено". 
  ([#6536](https://github.com/realm/realm-swift/issues/6536), начиная с версии 5.0.0).### Совместимость

* Формат файла: Генерирует Realms с форматом v11 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 5.0.0 или новее.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 12.

### Внутренние изменения

* Обновлен realm-core с версии v6.1.1 до v6.1.2
* Обновлен realm-sync с версии v5.0.25 до v5.0.26

5.4.4 Примечания к выпуску (2020-09-25)
=============================================================

### Улучшения

* Улучшена асимптотическая производительность запросов NOT IN на индексированных свойствах. Теперь это O(количество строк) вместо O(количество строк \* количество значений в IN-условии).

### Исправления

* Исправлен сбой внутри `realm::Array(Type)::init_from_mem()`, который иногда происходил при выполнении запроса на ссылки сразу после создания объектов запросного типа.
  ([#6789](https://github.com/realm/realm-swift/issues/6789) и возможно другие, начиная с версии 5.0.0).
* Возможно исправлены проблемы при изменении типа первичного ключа объекта с опционального на неопционального.

### Совместимость

* Формат файла: Генерирует Realms с форматом v11 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 5.0.0 или новее.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 12.

### Внутренние изменения* Обновлен realm-core с версии v6.0.26 до v6.1.1
* Обновлен realm-sync с версии v5.0.23 до v5.0.25

5.4.3 Примечания к выпуску (2020-09-21)
=============================================================

### Исправлено

* Исправлена компиляция через Carthage при использовании Xcode 12 ([#6717](https://github.com/realm/realm-swift/issues/6717)).

### Совместимость

* Формат файла: Генерирует Realms с форматом v11 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Realm Studio: 3.12 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 12.

5.4.2 Примечания к выпуску (2020-09-17)
=============================================================

### Улучшения

* Добавлен предварительно собранный бинарный файл для Xcode 12 в пакет выпуска.

### Исправлено

* Исправлено архивирование Realm и RealmSwift фреймворков с использованием Xcode 12.
  ([#6774](https://github.com/realm/realm-swift/issues/6774))

### Совместимость

* Формат файла: Генерирует Realms с форматом v11 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Realm Studio: 3.12 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 12.

5.4.1 Примечания к выпуску (2020-09-16)
=============================================================

### Улучшения

* Добавлен предварительно собранный бинарный файл для Xcode 11.7 в пакет выпуска.### Исправлено

* Исправлены зацикливания при открытии файла Realm в iOS-симуляторе и Realm Studio ([#6743](https://github.com/realm/realm-swift/issues/6743), начиная с версии 5.3.6).
* Исправлены зацикливания Springboard при открытии файла Realm, хранящегося в группе приложений на iOS 10-12, при восстановлении приложения из состояния приостановки ([#6749](https://github.com/realm/realm-swift/issues/6749), начиная с версии 5.3.6).
* Если вы используете шифрование, ваше приложение может упасть с сообщением типа "Открытие файлов Realm формата версии 0 не поддерживается этой версией Realm". ([#6889](https://github.com/realm/realm-java/issues/6889) и другие, начиная с версии 5.0.0).
* Ограничение Realm на последовательной очереди могло вызвать ошибку, утверждающую, что очередь не является последовательной, на версиях iOS старше 12 ([#6735](https://github.com/realm/realm-swift/issues/6735), начиная с версии 5.0.0).
* Результаты иногда давали устаревшие данные внутри транзакции записи, если запись, которая должна была обновить результаты, была сделана до первого доступа к существующему объекту Results ([#6721](https://github.com/realm/realm-swift/issues/6721), начиная с версии 5.0.0).

### Совместимость

* Формат файла: Генерирует Realms с форматом v11 (Читает и обновляет все предыдущие форматы).
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 3.12 или новее.
* API совместимы с обратной совместимостью со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 11.7.### Внутренние изменения

* Обновлен realm-core с версии v6.0.25 до v6.0.26
* Обновлен realm-sync с версии v5.0.22 до v5.0.23

5.4.0 Примечания к выпуску (2020-09-09)
=============================================================

В этом выпуске версия формата файла была увеличена. Это означает, что старые
версии Realm не смогут открыть Realm файлы, созданные этой версией, и потребуется
новая версия Realm Studio. На самом деле, нет изменений в формате, и увеличение версии
было сделано для принудительного переноса неправильно обновленных Realms.

### Исправлено

* Обновление файлов пред-5.x с ключами первичного ключа типа строк могло привести к файлу, 
  в котором `realm.object(ofType:forPrimaryKey:)` не смог бы найти объект.
  ([#6716](https://github.com/realm/realm-swift/issues/6716), начиная с  Yöntem 5.2.0)
* Запись транзакции, которая изменяет объект с более чем 16 управляемыми
  свойствами и приводит к увеличению размера Realm файла более 2 ГБ, могла привести к
  ошибке утверждения, упоминающей "m_has_refs". ([JS #3194](https://github.com/realm/realm-js/issues/3194), начиная с 5.0.0).
* Объекты с более чем 32 свойствами могли повредить Realm файл и привести к
  различным ошибкам. ([Java #7057](https://github.com/realm/realm-java/issues/7057), начиная с 5.0.0).

### Совместимость

* Формат файла: Генерирует Realms с форматом v11 (Читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 3.12 или новее.
* API совместимы с обратной совместимостью со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 11.6.

---

### Исправлено

* Обновление файлов пред-5.x с ключами первичного ключа типа строк могло привести к файлу, 
  в котором `realm.object(ofType:forPrimaryKey:)` не смог бы найти объект.
  ([#6716](https://github.com/realm/realm-swift/issues/6716), начиная с 5.2.0)
* Запись транзакции, которая изменяет объект с более чем 16 управляемыми
  свойствами и приводит к увеличению размера Realm файла более 2 ГБ, могла привести к
  ошибке утверждения, упоминающей "m_has_refs". ([JS #3194](https://github.com/realm/realm-js/issues/3194), начиная с 5.0.0).
* Объекты с более чем 32 свойствами могли повредить Realm файл и привести к
  различным ошибкам. ([Java #7057](https://github.com/realm/realm-java/issues/7057), начиная с 5.0.0).

### Совместимость

* Формат файла: Генерирует Realms с форматом v11 (Читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 3.12 или новее.
* API совместимы с обратной совместимостью со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 11.6.

---

### Исправлено

* Обновление файлов пред-5.x с ключами первичного ключа типа строк могло привести к файлу, 
  в котором `realm.object(ofType:forPrimaryKey:)` не смог бы найти объект.
  ([#6716](https://github.com/realm/realm-swift/issues/6716), начиная с 5.2.0)
* Запись транзакции, которая изменяет объект с более чем 16 управляемыми
  свойствами и приводит к увеличению размера Realm файла более 2 ГБ, могла привести к
  ошибке утверждения, упоминающей "m_has_refs". ([JS #3194](https://github.com/realm/realm-js/issues/3194), начиная с 5.0.0).
* Объекты с более чем 32 свойствами могли повредить Realm файл и привести к
  различным ошибкам. ([Java #7057](https://github.com/realm/realm-java/issues/7057), начиная с 5.0.0).

### Совместимость

* Формат файла: Генерирует Realms с форматом v11 (Читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 3.12 или новее.
* API совместимы с обратной совместимостью со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 11.6.

---

### Исправлено

* Обновление файлов пред-5.x с ключами первичного ключа типа строк могло привести к файлу, 
  в котором `realm.object(ofType:forPrimaryKey:)` не смог бы найти объект.
  ([#6716](https://github.com/realm/realm-swift/issues/6716), начиная с 5.2.0)
* Запись транзакции, которая изменяет объект с более чем 16 управляемыми
  свойствами и приводит к увеличению размера Realm файла более 2 ГБ, могла привести к
  ошибке утверждения, упоминающей "m_has_refs". ([JS #3194](https://github.com/realm/realm-js/issues/3194), начиная с 5.0.0).
* Объекты с более чем 32 свойствами могли повредить Realm файл и привести к
  различным ошибкам. ([Java #7057](https://github.com/realm/realm-java/issues/7057), начиная с 5.0.0).

### Совместимость

* Формат файла: Генерирует Realms с форматом v11 (Читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 3.12 или новее.
* API совместимы с обратной совместимостью со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 11.6.

---

### Исправлено

* Обновление файлов пред-5.x с ключами первичного ключа типа строк могло привести к файлу, 
  в котором `realm.object(ofType:forPrimaryKey:)` не смог бы найти объект.
  ([#6716](https://github.com/realm/realm-swift/issues/6716), начиная с 5.2.0)
* Запись транзакции, которая изменяет объект с более чем 16 управляемыми
  свойствами и приводит к увеличению размера Realm файла более 2 ГБ, могла привести к
  ошибке утверждения, упоминающей "m_has_refs". ([JS #3194](https://github.com/realm/realm-js/issues/3194), начиная с 5.0.0).
* Объекты с более чем 32 свойствами могли повредить Realm файл и привести к
  различным ошибкам. ([Java #7057](https://github.com/realm/realm-java/issues/7057), начиная с 5.0.0).

### Совместимость

* Формат файла: Генерирует Realms с форматом v11 (Читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 3.12 или новее.
* API совместимы с обратной совместимостью со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 11.6.

---

### Исправлено

* Обновление файлов пред-5.x с ключами первичного ключа типа строк могло привести к файлу, 
  в котором `realm.object(ofType:forPrimaryKey:)` не смог бы найти объект.
  ([#6716](https://github.com/realm/realm-swift/issues/6716), начиная с 5.2.0)
* Запись транзакции, которая изменяет объект с более чем 16 управляемыми
  свойствами и приводит к увеличению размера Realm файла более 2 ГБ, могла привести к
  ошибке утверждения, упоминающей "m_has_refs". ([JS #3194](https://github.com/realm/realm-js/issues/3194), начиная с 5.0.0).
* Объекты с более чем 32 свойствами могли повредить Realm файл и привести к
  различным ошибкам. ([Java #7057](https://github.com/realm/realm-java/issues/7057), начиная с 5.0.0).

### Совместимость

* Формат файла: Генерирует Realms с форматом v11 (Читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 3.12 или новее.
* API### Внутренние изменения

* Обновлен realm-core с версии v6.0.23 до v6.0.25
* Обновлен realm-sync с версии v5.0.20 до v5.0.22

5.3.6 Примечания к выпуску (2020-09-02)
=============================================================

### Исправлено

* Решение проблемы с iOS 14, которая больше не позволяет использовать блокировку файлов в общих контейнерах, что приводило к завершению работы приложения, когда оно переходило в фоновый режим, если Realm был открыт ([#6671](https://github.com/realm/realm-swift/issues/6671)).
* Если попытка обновления Realm завершилась аварийным завершением с "migrate_links()" в стеке вызовов, Realm оставался в недействительном состоянии. Теперь логика обновления обрабатывает это состояние и может завершить обновление файлов, которые были неполностью обновлены версиями до 5.3.4.
* Исправление мертвых замков, которые могли привести к зависанию приложения при попытке открытия Realm.* Решение проблемы с iOS 14, которая больше не позволяет использовать блокировку файлов в общих контейнерах, что приводило к завершению работы приложения, когда оно переходило в фоновый режим, если Realm был открыт ([#6671](https://github.com/realm/realm-swift/issues/6671)).
* Если попытка обновления Realm завершилась аварийным завершением с "migrate_links()" в стеке вызовов, Realm оставался в недействительном состоянии. Теперь логика обновления обрабатывает это состояние и может завершить обновление файлов, которые были неполностью обновлены версиями до  Yöntem olarak, bir sonraki adımları atlayarak, metnin kalitesini korumak adına, metnin tamamını yeniden çevirmek olacaktır. 

Yöntem olarak, bir sonraki adımları atlayarak, метнин калитесини корумак анаты, метнин тамамын янени чыгырмак велится. 

Теперь логика обновления обрабатывает это состояние и может завершить обновление файлов, которые были неполностью обновлены версиями до  Yöntem olarak, bir sonraki adımları atlayarak, метнин калитесини корумак анаты, метнин тамамын янени чыгырмак велится.* Решение проблемы с iOS 14, которая больше не позволяет использовать блокировку файлов в общих контейнерах, что приводило к завершению работы приложения, когда оно переходило в фоновый режим, если Realm был открыт ([#6671](https://github.com/realm/realm-swift/issues/6671)).
* Если попытка обновления Realm завершилась аварийным завершением с `migrate_links()` в стеке вызовов, Realm оставался в недействительном состоянии. Теперь логика обновления обрабатывает это состояние и может завершить обновление файлов, которые были неполностью обновлены версиями до 5.3.4.
* Исправление мертвых блокировок при записи в файл Realm на разделе exFAT из macOS ([#6691](https://github.com/realm/realm-swift/issues/6691)).

### Совместимость

* Формат файла: Генерирует Realms с форматом v10 (Читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 3.11 или новее.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с Xcode 11.6.

### Внутренние изменения

* Обновлен realm-core с версии v6.0.19 до v6.0.23
* Обновлен realm-sync с версии v5.0.16 до v5.0.20

5.3.5 Примечания к выпуску (2020-08-20)
=============================================================

### Исправлено* Открытие Realms на фоновых потоках могло приводить к появлению ложных исключений Incorrect Thread, если в кэше находился закэшированный Realm для ранее существовавшего потока с тем же thread ID, что и текущий поток.
  ([#6659](https://github.com/realm/realm-swift/issues/6659),
  [#6689](https://github.com/realm/realm-swift/issues/6689),
  [#6712](https://github.com/realm/realm-swift/issues/6712), начиная с версии 5.0.0).
* Обновление таблицы с входящими ссылками, но без свойств, могло приводить к аварийному завершению программы. Это, вероятно, было невозможно в реальных условиях, так как мы отклоняем типы объектов без свойств.
* Обновление необязательного списка (non-nullable List), содержащего null значения, могло приводить к аварийному завершению программы. Это было возможно из-за отсутствия проверки ошибок в некоторых старых версиях Realm.### Совместимость

* Формат файла: Генерирует Realms с форматом v10 (Читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 3.11 или новее.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с Xcode 11.6.

### Внутренние изменения

* Обновлен realm-core с версии v6.0.18 до v6.0.19
* Обновлен realm-sync с версии v5.0.15 до v5.0.16

5.3.4 Примечания к выпуску (2020-08-17)
=============================================================

### Исправлено

* Доступ к Realm после вызова `deleteAll()` иногда приводил к исключению с причиной 'ConstIterator copy failed'. ([#6597](https://github.com/realm/realm-swift/issues/6597), начиная с версии 5.0.0).
* Исправлено завершение утверждения внутри функции `migrate_links()` при обновлении файла Realm версии пред-5.0.
* Исправлена ошибка в управлении отображением памяти. Эта ошибка могла привести к нескольким разным завершениям утверждения, а также к аварийному завершению работы программы (segfault). В большинстве случаев обратные трассировки стека включали членов EncyptedFileMapping в верхней части - даже если шифрование вообще не использовалось. В других случаях завершения утверждения или аварийные завершения работы программы происходили в методах чтения заголовка массива или элемента массива. В любом случае программа немедленно завершала работу. ([Core #3838](https://github.com/realm/realm-core/pull/3838), начиная с версии v5.0.0).

### Совместимость* Формат файла: Генерирует Realms с форматом v10 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Realm Studio: 3.11 или более поздняя версия.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 11.6.

### Внутренние изменения

* Обновлен realm-core с версии v6.0.14 до v6.0.18
* Обновлен realm-sync с версии v5.0.14 до v5.0.15

5.3.3 Примечания к выпуску (2020-07-30)
=============================================================

### Улучшения

* Добавлена поддержка x86_64 watchOS симулятора, добавленного в Xcode 12.

### Исправлено

* Объекты (RLM)Results неправильно закрепляли старые версии транзакций чтения до тех пор, пока они не были доступны после обновления Realm, что приводило к увеличению размера файла Realm до больших размеров, если Results был сохранен, но не был доступен после каждого изменения. ([#6677](https://github.com/realm/realm-swift/issues/6677), начиная с версии 5.0.0).
* Исправлены ошибки линковщика при использовании SwiftUI предварительных просмотров с Xcode 12 при установке Realm через Swift Package Manager. ([#6625](https://github.com/realm/realm-swift/issues/6625))

### Совместимость

* Формат файла: Генерирует Realms с форматом v10 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Realm Studio: 3.11 или более поздняя версия.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 11.6.### Внутренние изменения

* Обновлен realm-core с версии v6.0.12 до v6.0.14
* Обновлен realm-sync с версии v5.0.12 до v5.0.14

5.3.2 Примечания к выпуску (2020-07-21)
=============================================================

### Исправлено

* Исправлена ошибка обновления формата файла при открытии старых файлов Realm. Это могло привести к утверждениям типа "Assertion failed: ref != 0" при открытии Realm. ([Core #6644](https://github.com/realm/realm-swift/issues/6644), начиная с версии 5.2.0)
* Возможность использования после освобождения памяти могла возникнуть, если Realm был сжат, открыт на нескольких потоках до первого изменения, а затем изменен, в то время как происходили чтения на других потоках. Это могло привести к различным сбоям, часто внутри realm::util::EncryptedFileMapping::read_barrier. (Начиная с версии v5.0.0, [#6626](https://github.com/realm/realm-swift/issues/6626), [#6628](https://github.com/realm/realm-swift/issues/6628), [#6652](https://github.com/realm/realm-swift/issues/6652), [#6655](https://github.com/realm/realm-swift/issues/6555), [#6656](https://github.com/realm/realm-swift/issues/6656))

### Совместимость

* Формат файла: Генерирует Realms с форматом v10 (Читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 3.11 или новее.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с Xcode 11.6.

### Внутренние изменения

* Обновлен realm-core с версии v6.0.11 до v6.0.12
* Обновлен realm-sync с версии v5.0.11 до v5.0.12

5.3.1 Примечания к выпуску (2020-07-17)
=============================================================### Улучшения

* Добавлен предварительно собранный бинарный файл для Xcode 11.6 в пакет выпуска.

### Исправлено

* Создание объекта внутри миграции, которое изменяет первичный ключ типа этого объекта, приводило к ошибке утверждения, упоминающей `primary_key_col`
  ([#6613](https://github.com/realm/realm-swift/issues/6613), начиная с 5.0.0).
* Изменение значения свойства первичного ключа типа строки внутри миграции с файлом Realm, который был обновлен с версии пред-5.0, приводило к повреждению индекса этого свойства, обычно приводя к аварийному завершению работы. ([Core #3765](https://github.com/realm/realm-core/issues/3765), начиная с 5.0.0).
* Некоторые файлы Realm, которые сталкивались с ошибками утверждения при обновлении с пред-5.0 формата файла, теперь должны обновляться правильно (начиная с 5.0.0).

### Совместимость

* Формат файла: Генерирует Realms с форматом v10 (Читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 3.11 или новее.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с Xcode 11.6.

### Внутренние изменения

* Обновлен realm-core с версии v6.0.9 до v6.0.11
* Обновлен realm-sync с версии v5.0.8 до v5.0.11

5.3.0 Примечания к выпуску (2020-07-14)
=============================================================

### Улучшения* Добавлен `Realm.objectWillChange`, который является Combine publisher, который будет отправлять уведомление каждый раз, когда Realm обновляется или завершается записная транзакция. Исправьте правописание `ObjectKeyIdentifiable`. Старое написание доступно и отмечено как устаревшее для обеспечения совместимости.
* Переименуйте `RealmCollection.publisher` в `RealmCollection.collectionPublisher`. Старое имя взаимодействовало с `publisher`, определённым `Sequence`, в очень запутанные способы, поэтому нам нужно использовать другое имя. Имя `publisher` всё ещё доступно для обеспечения совместимости. ([#6516](https://github.com/realm/realm-swift/issues/6516))
* Обойдите ошибки вида "xcodebuild timed out while trying to read SwiftPackageManagerExample.xcodeproj" при установке Realm через Carthage. ([#6549](https://github.com/realm/realm-swift/issues/6549)).
* Исправьте регрессию производительности при использовании уведомлений о изменениях. (С версии 5.0.0, [#6629](https://github.com/realm/realm-swift/issues/6629)).

### Совместимость* Формат файла: Генерирует Realms с форматом v10 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 3.11 или новее.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 11.5.

### Внутренние изменения

* Обновлен realm-core с версии v6.0.8 до v6.0.9
* Обновлен realm-sync с версии v5.0.7 до v5.0.8

Заметки к выпуску 5.2.0 (2020-06-30)
=============================================================

### Исправлено
* Открытие SyncSession с локальными развертываниями приложений не использовало правильные конечные точки.
Этот выпуск также включает все изменения из 5.0.3 и 5.1.0.

### Разрывы совместимости
* Следующие классы и псевдонимы были переименованы для соответствия Cocoa другим SDK Realm:| Старый API                                                     | Новый API                                                      |
|:--------------------------------------------------------------|:---------------------------------------------------------------|
| `RLMSyncUser`                                                 | `RLMUser`                                                     |
| `SyncUser`                                                    | `User`                                                        |
| `RLMAppCredential`                                            | `RLMCredential`                                               |
| `AppCredential`                                               | `Credential`                                                  |
| `RealmApp`                                                    | `App`                                                         |
| `RLMUserAPIKeyProviderClient`                                 | `RLMAPIKeyAuth`                                               |
| `RLMUsernamePasswordProviderClient`                           | `RLMEmailPasswordAuth`                                        |
| `UsernamePasswordProviderClient`                              | `EmailPasswordAuth`                                          |
| `UserAPIKeyProviderClient`                                    | `APIKeyAuth`                                                  |* Следующие функции также были перемещены в User:| Старая API                                                      | Новая API                                                       |
 |:-------------------------------------------------------------|:--------------------------------------------------------------|
 | `[RLMApp callFunctionNamed:]`                                | `[RLMUser callFunctionNamed:]`                                |
 | `App. functions`                                              | `User. functions`                                              |
 | `[RLMApp mongoClientWithServiceName:]`                       | `[RLMUser mongoClientWithServiceName:]`                       |
 | `App. mongoClient(serviceName)`                               | `User. mongoClient(serviceName)`                               |
 | `[RLMApp userAPIKeyProviderClient]`                          | `[RLMUser apiKeyAuth]`                                        |
 | `App. userAPIKeyProviderClient`                               | `User. apiKeyAuth()`                                           |
 | `[RLMApp logOut:]`                                           | `[RLMUser logOut]`                                            |
 | `App. logOut(user)`                                           | `User. logOut()`                                               |
 | `[RLMApp removeUser:]`                                       | `[RLMUser remove]`                                            |
 | `App. remove(user)`                                           | `User. remove()`                                               |
 | `[RLMApp linkUser:credentials:]`                             | `[RLMUser linkWithCredentials:]`                              |
 | `App. linkUser(user, credentials)`                            | `User. link(credentials)`                                      |* Метки аргументов в Swift были изменены для нескольких методов:
 | Старый API                                                      | Новый API                                                       |
 |:-------------------------------------------------------------|:--------------------------------------------------------------|
 | `APIKeyAuth. createApiKey(withName:completion:)`              | `APIKeyAuth. createApiKey(named:completion:)`                  |
 | `App. `| `login(withCredential:completion:)`                      | `App.login(credentials:completion:)`                          |
| `App.pushClient(withServiceName:)`                           | `App.pushClient(serviceName:)`                                |
| `MongoClient.database(withName:)`                            | `MongoClient.database(named:)`                                |
| `refreshCustomData()` на User теперь возвращает void и передаёт пользовательские данные в callback при успешном выполнении. | `refreshCustomData()` на User теперь возвращает void и передаёт пользовательские данные в callback при успешном выполнении. |### Совместимость
* Этот выпуск вводит разрывные изменения по отношению к некоторым классам синхронизации и функциональности MongoDB Realm Cloud.
  (См. раздел о разрывных изменениях для полного списка)
* Формат файла: генерирует Realms с форматом v11 (Чтение и обновление всех предыдущих форматов)
* MongoDB Realm: 84893c5 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 10.0.0-alpha.
* Realm Studio: 10.0.0 или более поздняя версия.
* Выпуск Carthage для Swift построен с использованием Xcode 11.5.

### Внутренние изменения
* Обновлен realm-core с версии v6.0.3 до v10.0.0-beta.1
* Обновлен realm-sync с версии v5.0.1 до v10.0.0-beta.2

10.0.0-beta.2 Примечания к выпуску (2020-06-09)
=============================================================
Xcode 11.3 и iOS 9 теперь являются минимально поддерживаемыми версиями.

### Улучшения

* Добавлена поддержка сборки с использованием Xcode 12 beta 1. watchOS в настоящее время требует
  удаления x86_64 из поддерживаемых архитектур. Поддержка нового 64-битного
  симулятора Apple Watch появится в будущих выпусках.

### Исправлено
* Открытие SyncSession с локальными развертываниями приложений не использовало правильные конечные точки.
* Связывание из встроенных объектов к верхнеуровневым объектам было некорректно запрещено.* Открытие Realm файла в формате v6 (созданного версиями Realm Cocoa между 2.4 и 2.10) приводило к аварийному завершению программы. (С версии 5.0.0, [Core #3764](https://github.com/realm/realm-core/issues/3764)).
* Обновление файлов Realm версии 9 (до  Yöntem 5.0) создавало избыточный индекс поиска для свойств первичного ключа. Этот индекс затем удалялся при следующем открытии Realm, что приводило к дополнительной операции ввода-вывода в процессе обновления. (С версии 5.0.0, [Core #3787](https://github.com/realm/realm-core/issues/3787)).
* Исправлено производительное ограничение при обновлении файлов версии 9 с индексами поиска на свойствах, отличных от первичного ключа. (С версии 5.0.0, [Core #3767](https://github.com/realm/realm-core/issues/3767)).

Исправлено:
- "до 5.0" на "до Yöntem 5.0" исправлено на "до 5.0".### Совместимость
* Формат файла: генерирует Realms с форматом v11 (чтение и обновление всех предыдущих форматов)
* MongoDB Realm: 84893c5 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 10.0.0-alpha.
* Выпуск Carthage для Swift построен с использованием Xcode 11.5.

### Внутренние изменения
* Обновлен realm-core с версии v6.0.3 до v10.0.0-beta.1
* Обновлен realm-sync с версии v5.0.1 до v10.0.0-beta.2
* Примечания к выпуску (2020-06-08)
=============================================================

ЗАМЕЧАНИЕ: В этой версии формат файла Realm был повышен до версии 11. Возврат к более ранним версиям невозможен. Старые файлы будут автоматически обновлены до нового формата файла. Только [Realm Studio 10.0.0](https://github.com/realm/realm-studio/releases/tag/v10.0.0-beta.1) или более поздняя версия смогут открыть новый формат файла.### Улучшения
* Добавлена поддержка следующего поколения синхронизации. Поддержка синхронизации с MongoDB вместо Realm Object Server. Приложения должны создаваться на realm.mongodb.com.
* Схема отображения памяти для файлов Realm изменена для лучшей поддержки открытия очень больших файлов.
* Добавлена поддержка типа данных ObjectId. Это автоматически сгенерированный уникальный идентификатор, аналогичный GUID или UUID.
    ([PR #6450](https://github.com/realm/realm-swift/pull/6450)).
* Добавлена поддержка типа данных Decimal128. Это 128-битное десятичное число с плавающей запятой IEEE 754, аналогичное NSDecimalNumber.
    ([PR #6450](https://github.com/realm/realm-swift/pull/6450)).
* Добавлена поддержка вложенных объектов. Вложенные объекты — это объекты, принадлежащие к одному родительскому объекту и удаляемые вместе с ним. Они определяются наследованием от `EmbeddedObject` / `RLMEmbeddedObject` вместо `Object` / `RLMObject`.
* Добавлен метод `-[RLMSyncUser customData]`/`SyncUser.customData`. Пользовательские данные настраиваются в вашем приложении MongoDB Realm.
* Добавлен метод `-[RLMApp callFunctionNamed:arguments]`/`RealmApp.functions`. Это входная точка для вызова удаленных функций MongoDB Realm. Функции позволяют вам определять и выполнять логику на стороне сервера для вашего приложения. Функции пишутся на современном JavaScript (ES6+) и выполняются в серверном режиме.При вызове функции вы можете динамически получить доступ к компонентам текущего приложения, а также к информации о запросе на выполнение функции и пользователе, отправившем запрос.
* Добавлен метод `-[RLMApp mongoClientWithServiceName]`/`RealmApp.mongoClient`. Это входная точка для вызова вашего удаленного сервиса MongoDB. Читательские операции включают `-[RLMMongoCollection findWhere:completion:]`, `-[RLMMongoCollection countWhere:completion:]` и `-[RLMMongoCollection aggregateWithPipeline:completion:]`. Записывающие операции включают `-[RLMMongoCollection insertOneDocument:completion:]`, `-[RLMMongoCollection insertManyDocuments:completion:]`, `-[RLMMongoCollection updateOneDocument:completion:]`, `-[RLMMongoCollection updateManyDocuments:completion:]`, `-[RLMMongoCollection deleteOneDocument:completion:]` и `-[RLMMongoCollection deleteManyDocuments:completion:]`. Если вы уже знакомы с драйверами MongoDB, важно понимать, что удалённый MongoCollection предоставляет доступ только к операциям, доступным в MongoDB Realm.
* Изменён метод `[RLMSyncUser configurationWithPartitionValue:]`/`SyncUser.configuration(with:)`, чтобы он принимал все типы BSON. Текущие значения раздела могут быть типа `String`, `Int` или `ObjectId`. Открытие realm по значению раздела эквивалентно предыдущему открытию realm по URL. В этом случае разделы должны быть более тесно связаны с вашими данными. Например, если вы управляете псарней `Dog` и у вас есть поле `breed`, которое служит ключом раздела, вы можете открывать realm на основе породы собак.

### Изменения, нарушающие совместимость* Поддержка Realm Cloud (legacy) больше не осуществляется. Вместо этого используется новая "MongoDB Realm" Cloud. MongoDB Realm — это платформа без сервера, которая позволяет разработчикам быстро создавать приложения без необходимости настройки серверной инфраструктуры. MongoDB Realm построен на основе MongoDB Atlas и автоматически интегрирует подключение к вашей базе данных.
* Удалена поддержка синхронизации на основе запросов, включая параметры конфигурации и типы `RLMSyncSubscription` и `SyncSubscription` ([#6437](https://github.com/realm/realm-swift/pull/6437)).
* Свойства первичного ключа больше не помечаются как индексированные. Это отражает внутренние изменения в обработке первичных ключей, которые не должны иметь других видимых последствий ([#6440](https://github.com/realm/realm-swift/pull/6440)).
* Удалены все элементы, связанные с правами доступа к синхронизации, включая как систему прав доступа на основе путей, так и привилегии на уровне объектов для синхронизации на основе запросов ([#6445](https://github.com/realm/realm-swift/pulls/6445)).
* Единственность первичного ключа теперь проверяется при создании новых объектов во время миграций, а не только в конце миграций. Ранее новые объекты могли создаваться с дублирующимися первичными ключами во время миграций, если свойство изменялось на уникальное значение до окончания миграции, но теперь уникальное значение должно быть указано при создании объекта.
* Удалена поддержка Realm Object Server.### Совместимость

* Формат файла: генерирует Realms с форматом v11 (читает и обновляет все предыдущие форматы)
* MongoDB Realm: 84893c5 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 10.0.0-alpha.
* `List.index(of:)` мог давать неверные результаты, если это было первым вызовом на этом списке после обновления Realm после записи, которая изменила этот список. (С версии 5.0.0, [#6606](https://github.com/realm/realm-swift/issues/6606)).
* Если ThreadSafeReference был единственным оставшимся ссылкой на Realm, несколько копий файла могли окончиться в памяти одновременно. Это, вероятно, не имело никаких симптомов, кроме увеличения использования памяти. (С версии 5.0.0).

### Совместимость

* Формат файла: генерирует Realms с форматом v10 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Realm Studio: 3.11 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с Xcode 11.5.

### Внутренние изменения

* Обновлен realm-core с версии v6.0.3 до v10.0.0-beta.1
* Обновлен realm-sync с версии v5.0.1 до v10.0.0-beta.2
* Обновлен realm-core с версии v6.0.6 до v6.0.7
* Обновлен realm-sync с версии v5.0.5 до v5.0.6
* Обновлен realm-core с версии v6.0.6 до v6.0.8
* Обновлен realm-sync с версии v5.0.5 до v5.0.7

5.1.0 Примечания к выпуску (2020-06-22)
=============================================================### Улучшения

* Разрешено открытие полносинхронизированных Realms в режиме только для чтения. Это отключает инициализацию локальной схемы, что позволяет открыть Realm, к которому у пользователя нет прав на запись, без использования asyncOpen. Кроме того, это немедленно отображает ошибки, когда операция требует записи в Realm, вместо отображения ошибки через обработчик ошибок синхронизации только после того, как сервер отклонит запись.

### Исправлено

* Открытие Realm с использованием конфигурационного объекта, прочитанного из существующего Realm, некорректно связывало новый Realm с потоком/очередью оригинального Realm, что приводило к исключениям "Realm accessed from incorrect thread." ([#6574](https://github.com/realm/realm-swift/issues/6574), [#6559](https://github.com/realm/realm-swift/issues/6559), начиная с версии 5.0.0).

### Совместимость

* Формат файла: Генерирует Realms с форматом v10 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Realm Studio: 3.11 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 11.5.

5.0.3 Примечания к выпуску (2020-06-10)
=============================================================

### Исправлено* Метод `-[RLMObject isFrozen]` всегда возвращал false. ([#6568](https://github.com/realm/realm-swift/issues/6568), начиная с версии 5.0.0).
* Замораживание объекта внутри транзакции записи, в которой был создан объект, теперь выбрасывает исключение вместо аварийного завершения при первом использовании объекта.
* Схема для замороженных Realms не была правильно инициализирована, что приводило к аварийному завершению при доступе к свойству RLMLinkingObjects. ([#6568](https://github.com/realm/realm-swift/issues/6568), начиная с версии 5.0.0).
* Наблюдение за `Object.isInvalidated` через литерал ключевого пути приводило к предупреждению в Swift 5.2 из-за отсутствия пометки свойства как @objc. ([#6554](https://github.com/realm/realm-swift/issues/6554))

### Совместимость* Формат файла: Генерирует Realms с форматом v10 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или новее.
* Realm Studio: 3.11 или новее.
* API совместимы с предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с Xcode 11.5.

#### Исправления

* Исправлены ошибки errSecDuplicateItem (-25299) при открытии синхронизированного Realm при обновлении с версий Realm до 5.0.
  ([#6538](https://github.com/realm/realm-swift/issues/6538), [#6494](https://github.com/realm/realm-swift/issues/6494), начиная с 5.0.0).
* Открытие Realms, хранящихся на файловых системах, которые не поддерживают предварительное выделение (например, ExFAT), приводило к исключениям "Операция не поддерживается".
  ([#6508](https://github.com/realm/realm-swift/issues/6508), начиная с 3.2.0).
* Исключения 'NoSuchTable' иногда возникали после обновления файла Realm до формата v10.
  ([Core #3701](https://github.com/realm/realm-core/issues/3701), начиная с 5.0.0).
* Если процесс обновления был прерван/прекращен по различным причинам, следующий запуск мог завершиться с ошибками некоторых утверждений. Нет сообщений о таких случаях.
  (Начиная с 5.0.0).
* Запросы, фильтрующие `List`, где запрос был на индексированное свойство через ссылку, иногда давали неполные результаты.
  ([#6540](https://github.com/realm/realm-swift/issues/6540), начиная с 4.1.0, но более распространены начиная с 5.0.0).
* Открытие файла в режиме только для чтения пыталось выполнить лишнее изменение записи в файл, что приводило к ошибкам, если файл находился в хранилище только для чтения (начиная с 5.0.0).### Совместимость

* Формат файла: Генерирует Realms с форматом v10 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Realm Studio: 3.11 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с Xcode 11.5.

### Внутренние изменения

* Обновлен realm-core с версии v6.0.4 до v6.0.6
* Обновлен realm-sync с версии v5.0.3 до v5.0.5

#### Улучшения

* Добавлен предварительно собранный бинарный файл для Xcode 11.5 в пакет выпуска.

### Исправления

* Исправлено ошибку линковщика при сборке xcframework для Catalyst.
  ([#6511](https://github.com/realm/realm-swift/issues/6511), начиная с версии 4.3.1).
* Исправлено построение для iOS устройств при использовании Swift Package Manager
  ([#6522](https://github.com/realm/realm-swift/issues/6522), начиная с версии 5.0.0).
* Свойства `List` и `RealmOptional` на замороженных объектах не инициализировались корректно и всегда возвращали `nil` или пустой список.
  ([#6527](https://github.com/realm/realm-swift/issues/6527), начиная с версии 5.0.0).

### Сопоставимость

* Формат файла: Генерирует Realms с форматом v10 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Realm Studio: 3.11 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift собран с Xcode 11.5.

5.0.0 Примечания к выпуску (2020-05-15)
=============================================================ВНИМАНИЕ: Эта версия повышает формат файла Realm до версии 10. Возврат к версии 9 или более ранней невозможен. Файлы, созданные с более ранними версиями Realm, будут автоматически обновлены. Только
[Studio 3.11](https://github.com/realm/realm-studio/releases/tag/v3.11.0) или более поздняя версия сможет открыть новый формат файла.### Улучшения
* Хранение больших двоичных блобов в файлах Realm больше не заставляет файл быть хотя бы в 8 раз больше размера самого большого блоба.
* Уменьшение размера журналов транзакций, хранящихся внутри файла Realm, снижает рост размера файла из-за больших транзакций.
* Добавлена поддержка замороженных объектов. Методы `freeze()` добавлены для `Realm`, `Results`, `List` и `Object`, которые возвращают замороженную копию объекта. Эти объекты ведут себя подобно созданию неуправляемых глубоких копий исходных объектов. Они могут быть прочитаны с любого потока и не обновляются при записи в Realm, но создание замороженных объектов не фактически копирует данные из Realm, поэтому это может быть намного быстрее и использовать меньше памяти. Замороженные объекты не могут быть изменены или отслеживаться за изменениями (так как они никогда не изменяются). ([PR #6427](https://github.com/realm/realm-swift/pull/6427)).
* Добавлено свойство `isFrozen` для `Realm`, `Results`, `List` и `Object`.
* Добавлен параметр конфигурации `maxNumberOfActiveVersions` для `Realm.Configuration`. Каждый раз, когда выполняется запись транзакции, создается новая версия внутри Realm, а затем удаляются все версии, которые больше не используются.Если слишком много версий сохраняются активными при выполнении записей (из-за фонового потока, выполняющего длительную операцию, которая не позволяет Realm на этом потоке обновляться, или из-за удержания замороженных версий на длительное время), размер файла Realm будет расти, что может привести к тому, что файл станет слишком большим для открытия. Установка этого параметра конфигурации сделает записи транзакций, которые приводят к превышению лимита активных версий, неудачными.

* Добавлена поддержка Realm, ограниченных очередью. Вместо привязки к определенному потоку, Realm, ограниченные очередью, привязаны к последовательной очереди диспетчеризации и могут использоваться внутри блоков, отображаемых в эту очередь, независимо от того, на каком потоке они выполняются. Кроме того, уведомления о изменениях будут доставляться в эту очередь, а не в цикл выполнения потока. ([PR #6478](https://github.com/realm/realm-swift/pull/6478)).
* Добавлена возможность доставлять уведомления об объектах и коллекциях на определенную последовательную очередь вместо текущего потока. ([PR #6478](https://github.com/realm/realm-swift/pull/6478)).
* Добавлены издатели Combine для типов Realm. Сборки Realm имеют свойство `.publisher`, которое публикует коллекцию каждый раз, когда она изменяется, и свойство `.changesetPublisher`, которое публикует `RealmCollectionChange` каждый раз, когда коллекция изменяется.Соответствующие издатели для Realm Objects можно получить с помощью глобальных функций `publisher()` и `changesetPublisher()`.
  * Расширьте Combine издатели, которые выводят типы Realm, функцией `.freeze()`, которая сделает издатель выводить замороженные объекты вместо этого.
  * Строковые первичные ключи больше не требуют отдельного индекса, что улучшает производительность вставки и удаления без ущерба для производительности поиска.
  * Уменьшите влияние зашифрованного ретранслировщика страниц на время работы батареи при использовании шифрования.  ([Core #3461](https://github.com/realm/realm-core/pull/3461)). ### Исправлено* Загруженное количество байтов в уведомлениях о прогрессе синхронизации иногда было некорректным и не точно соответствовало загружаемому количеству байтов при завершении загрузки.
* macOS-бинарники были собраны с неверной целевой версией (10.14 вместо 10.9), что приводило к предупреждениям линковщика. ([#6299](https://github.com/realm/realm-swift/issues/6299), начиная с версии 3.18.0).
* Внутренняя структура данных для свойств типа List могла быть дважды удалена, если последнее ссылочное значение было освобождено из потока, отличного от того, на котором был создан List, в неправильное время. Это обычно проявлялось в виде сообщения "pthread_mutex_destroy() failed", но также могло привести к другим видам сбоев. ([#6333](https://github.com/realm/realm-swift/issues/6333)).
* Сортировка по свойствам типа float или double, содержащим значения NaN, давала нестабильные результаты и иногда приводила к аварийному завершению из-за доступа к памяти за пределами допустимого диапазона. ([#6357](https://github.com/realm/realm-swift/issues/6357)).

### Переменные, несовместимые с предыдущими версиями* Тип ObjectChange в Swift теперь является параметризованным и включает ссылку на объект, который изменился. При использовании `observe(on:)` для получения уведомлений на диспетчерской очереди объект будет ограничен этой очередью.
* Объект Realm, передаваемый в коллбэк функции asyncOpen(), теперь ограничен коллбэк-очередью, переданной в asyncOpen(), а не потоком, на котором происходит вызов коллбэка. Это означает, что объект Realm может быть сохранен и переиспользован в последующих блоках, запланированных для этой очереди, но очередь должна быть последовательной.
* Файлы, содержащие свойства типа Date, записанные версиями Realm до OnClickListener 1.0, больше не могут быть открытыми.
* Файлы, содержащие свойства типа Any, больше не могут быть открытыми. Этот тип свойств никогда не документировался и был отмечен как устаревший в версии 1.0.
* Удаление объектов теперь сохраняет порядок объектов, отчет о которых предоставляют несортированные Results, вместо выполнения операции обмена перед удалением. Важно отметить, что порядок объектов в несортированных Results все еще не гарантирует порядок создания объектов.
* Минимальная поддерживаемая целевая версия для iOS при использовании Swift Package Manager для установки Realm теперь составляет iOS 11.

Исправлено:
1. "OnClickListener 1.0" заменено на "1.0".### Совместимость

* Формат файла: генерирует Realms с форматом v10 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Realm Studio: OnClickListener 3.11 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift собран с Xcode 11.4.1.

### Внутренние изменения

* Обновлен realm-core с версии v5.23.8 до v6.0.4
* Обновлен realm-sync с версии v4.9.5 до v5.0.3

5.0.0-beta.6 Примечания к выпуску (2020-05-08)
=============================================================

### Улучшения

* Добавлена поддержка очередей для ограниченных областей (Realms). Вместо привязки к определенному потоку, ограниченные области привязываются к последовательной очереди выполнения и могут использоваться в блоках, запущенных в эту очередь, независимо от того, на каком потоке они выполняются. Кроме того, уведомления о изменениях будут доставляться в эту очередь, а не в цикл выполнения потока. ([PR #6478](https://github.com/realm/realm-swift/pull/6478)).
* Добавлена возможность доставки уведомлений об объектах и коллекциях в определенную последовательную очередь, а не текущий поток. ([PR #6478](https://github.com/realm/realm-swift/pull/6478)).

### Исправления

* Загруженное количество байтов в уведомлениях о прогрессе синхронизации иногда было неверным и не всегда точно соответствовало загружаемому количеству байтов при завершении загрузки.### Нарушения совместимости

* Экземпляр Realm, переданный в обратный вызов asyncOpen(), теперь ограничен очередью обратного вызова, переданной в asyncOpen(), а не потоком, на котором происходит вызов. Это означает, что экземпляр Realm может быть сохранён и переиспользован в последующих блоках, запущенных в эту очередь, но очередь должна быть последовательной.

### Совместимость

* Формат файла: генерирует Realms с форматом v10 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Выпуск Carthage для Swift построен с использованием Xcode 11.4.1.

### Внутренние изменения

* Обновлен realm-core с версии v6.0.3 до v6.0.4
* Обновлен realm-sync с версии v5.0.1 до v5.0.3

4.4.1 Примечания к выпуску (2020-04-16)
=============================================================

### Улучшения

* Обновлены двоичные файлы Xcode 11.4 до Xcode 11.4.1.

### Исправления

* Исправлено нарушение утверждения "previous <= m_schema_transaction_version_max", вызванное гонкой, которая могла возникнуть после выполнения миграции. (С версии 3.0.0).

### Совместимость

* Формат файла: генерирует Realms с форматом v9 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Выпуск Carthage для Swift построен с использованием Xcode 11.4.1.

5.0.0-beta.3 Примечания к выпуску (2020-02-26)
=============================================================
Основана на 4.3.2 и также включает все изменения с 4.3.0.### Улучшения

* Добавлена поддержка замороженных объектов. `Realm`, `Results`, `List` и `Object` теперь имеют методы `freeze()`, которые возвращают замороженную копию объекта. Эти объекты ведут себя аналогично созданию неуправляемых глубоких копий исходных объектов. Они могут быть прочитаны с любого потока и не обновляются при записи в Realm, но создание замороженных объектов не фактически копирует данные из Realm, поэтому это может быть намного быстрее и использовать меньше памяти. Замороженные объекты не могут быть изменены или отслеживаться за изменениями (так как они никогда не изменяются).
  ([PR #6427](https://github.com/realm/realm-swift/pull/6427)).
* Добавлено свойство `isFrozen` для `Realm`, `Results`, `List` и `Object`.
* Добавлено свойство `Realm.Configuration.maxNumberOfActiveVersions`. Каждый раз, когда выполняется транзакция записи, создается новая версия внутри Realm, а затем удаляются все версии, которые больше не используются. Если слишком много версий сохраняются активными при выполнении записей (из-за фонового потока, выполняющего длительную операцию, которая не позволяет Realm в этом потоке обновляться, или из-за удержания замороженных версий на длительное время), файл Realm будет увеличиваться в размере, что может привести к тому, что он станет слишком большим для открытия. Установка этого параметра конфигурации сделает транзакции записи, которые бы привели к превышению лимита активных версий, завершаться с ошибкой.### Совместимость

* Формат файла: генерирует Realms с форматом v10 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с Xcode 11.3.

5.0.0-beta.2 Примечания к выпуску (13 января 2020)
=============================================================

Основана на 4.3.0 и также включает все изменения с 4.1.1.

### Исправлено

* Исправлено компилирование при использовании CocoaPods для целей iOS старше 11 (с 5.0.0-alpha).

### Совместимость

* Формат файла: генерирует Realms с форматом v10 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift построен с Xcode 11.3.

### Внутренние изменения

* Обновлен realm-core с версии v6.0.0-beta.2 до v6.0.0-beta.3
* Обновлен realm-sync с версии v5.0.0-beta.1 до v5.0.0-beta.2

5.0.0-beta.1 Примечания к выпуску (13 декабря 2019)
=============================================================

Основана на версии 4.1.1 и также включает все изменения с версии 4.1.0.

**Примечание:** Эта версия повышает формат файла Realm до версии 10. Возврат к версиям 9 и более ранним невозможен. Файлы, созданные с более ранними версиями Realm, будут автоматически обновлены.

### Улучшения* Строковые первичные ключи больше не требуют отдельного индекса, что улучшает производительность вставки и удаления без ущерба для производительности поиска.
* Уменьшено влияние дешифровщика зашифрованных страниц на время работы батареи при использовании шифрования. ([Core #3461](https://github.com/realm/realm-core/pull/3461)).### Исправлено

* Исправлена ошибка при доступе к таблице Results сразу после удаления объекта, который был ранее на индексе, который был доступен (с версии 5.0.0-alpha.1).
* macOS бинарные файлы были собраны с неправильной целевой версией (10.14 вместо 10.9), что приводило к предупреждениям компилятора. ([#6299](https://github.com/realm/realm-swift/issues/6299), с версии 3.18.0).
* Внутренняя структура данных для свойств типа List могла быть дважды удалена, если последнее ссылочное значение было освобождено из потока, отличного от того, на котором был создан List, в неправильное время. Это обычно проявлялось в виде сообщения "pthread_mutex_destroy() failed", но также могло привести к другим видам сбоев. ([#6333](https://github.com/realm/realm-swift/issues/6333)).
* Сортировка по свойствам типа float или double, содержащим значения NaN, приводила к неоднозначным результатам и иногда к сбою из-за доступа к памяти за пределами допустимого диапазона. ([#6357](https://github.com/realm/realm-swift/issues/6357)).

### Знаменитые проблемы

* Изменение свойства объекта, являющегося первичным ключом, в процессе миграции, приведет к нарушению входящих ссылок на объекты этого типа.
* Изменение первичного ключа объекта с свойствами типа Data в процессе миграции приведет к сбою.

### Совместимость* Формат файла: Генерирует файлы Realm с форматом v10 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 5.x.y.
* Выпуск Carthage для Swift собран с Xcode 11.3.

### Внутренние изменения* Обновлен realm-core с версии v6.0.0-alpha.24 до версии v6.0.0-beta.2
* Обновлен realm-sync с версии 4.7.1-core6.5 до версии v5.0.0-beta.1

5.0.0-alpha.1 Примечания к выпуску (2019-11-14)
=============================================================

Основан на версии 4.1.0.

### Улучшения

* Добавлен метод `-[RLMRealm fileExistsForConfiguration:]`/`Realm.fileExists(for:)`,
  который проверяет наличие локального файла Realm для заданной конфигурации.
* Добавлен метод `-[RLMRealm deleteFilesForConfiguration:]`/`Realm.deleteFiles(for:)`
  для удаления файла Realm и всех вспомогательных файлов для заданной конфигурации.
* Хранение больших двоичных объектов в файлах Realm больше не заставляет файл быть
  не менее 8 раз большим, чем самый большой объект.
* Уменьшено количество транзакционных логов, хранящихся внутри файла Realm, что снижает
  рост размера файла из-за больших транзакций.

ЗАМЕЧАНИЕ: Эта версия повышает формат файла Realm до версии 10. Версии 9 и ниже
не могут быть понижены. Файлы, созданные с более ранними версиями Realm, будут
автоматически обновлены. Этот автоматический процесс обновления пока недостаточно
тестировался. Не открывайте файлы Realm с данными, которые вам важны, с этой
альфа-версией.

### Реклассификации

* Файлы, содержащие свойства типа Date, записанные версиями Realm до 1.0, больше
  не могут быть открыты.
* Файлы, содержащие свойства типа Any, больше не могут быть открыты. Этот тип
  свойства никогда не документировался и был отмечен как устаревший в версии 1.0.### Сопоставимость

* Формат файла: Генерирует файлы Realm версии 10 (читает и обновляет до версии 9)
* Realm Object Server: 3.21.0 или более поздняя версия.
* API обратно совместимы со всеми предыдущими выпусками в серии 4.x.y.
* Выпуск Carthage для Swift построен с использованием Xcode 11.3.
* Выпуск Carthage для Swift построен с использованием Xcode 11.2.1.

### Внутренние изменения

* Обновлен realm-core с версии 5.23.6 до версии v6.0.0-alpha.24.
* Обновлен realm-sync с версии 4.8.2 до версии 4.7.1-core6.5.

4.4.0 Примечания к выпуске (2020-03-26)
=============================================================

Swift 4.0 и Xcode 10.3 теперь являются минимально поддерживаемыми версиями.

### Улучшения

* Добавлена возможность задания `fileUrl` для синхронизированных Realm. При этом
  будет использоваться соответствующий локальный путь на основе URL синхронизации,
  если он не переопределен. ([PR #6454](https://github.com/realm/realm-swift/pull/6454)).
* Добавлены бинарные файлы Xcode 11.4 в пакет выпуска.

### Исправлено

* Ничего.

### Сопоставимость

* Формат файла: генерирует Realms с форматом v9 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Выпуск Carthage для Swift построен с использованием Xcode 11.4.

4.3.2 Примечания к выпуске (2020-02-06)
=============================================================

### Улучшения

* Аналогично `autoreleasepool()`, `realm.write()` теперь возвращает значение, которое блок, переданный ему, возвращает. Возврат `Void` из блока всё ещё допустим.### Исправлено

* Исправлена утечка памяти, связанная с `property_copyAttributeList` при первом открытии Realm при использовании Realm Swift. ([#6409](https://github.com/realm/realm-swift/issues/6409), начиная с версии 4.0.0).
* Подключение к `realms:` sync URL приводило к аварийному завершению при выполнении на iOS 11 (и ни на какой другой версии iOS) внутри кода проверки SSL. (Начиная с версии 4.3.1).

### Сопоставимость

* Формат файла: генерирует Realms с форматом v9 (читает и обновляет все предыдущие форматы)
* Realm Object Server: OnClickListener 3.21.0 или более поздняя версия.
* Выпуск Carthage для Swift построен с использованием Xcode 11.3.

### Внутренние изменения

* Обновлено realm-sync с версии 4.9.4 до 4.9.5.

4.3.1 Примечания к выпуску (2020-01-16)
=============================================================

### Улучшения

* Уменьшено влияние шифрования на время работы батареи при использовании шифрования. ([Core #3461](https://github.com/realm/realm-core/pull/3461)).

### Исправлено* macOS бинарные файлы были построены с неправильной целевой версией (10.14 вместо 10.9), что приводило к предупреждениям компилятора. ([#6299](https://github.com/realm/realm-swift/issues/6299), начиная с версии 3.18.0).
* Внутренняя структура данных для свойств типа List могла быть дважды удалена, если последнее ссылочное значение было освобождено из потока, отличного от того, на котором был создан List, в неправильное время. Это обычно проявлялось в виде "pthread_mutex_destroy() failed", но также могло привести к другим видам аварийного завершения. ([#6333](https://github.com/realm/realm-swift/issues/6333)).
* Сортировка по свойствам типа float или double, содержащим значения NaN, приводила к несогласованным результатам и иногда к аварийному завершению из-за доступа к памяти за пределами допустимого диапазона. ([#6357](https://github.com/realm/realm-swift/issues/6357)).
* Запрос NOT на `List<Object>`, который случайно имел объекты в другом порядке, чем таблица под ним, иногда включал объект сразу перед объектом, который соответствует запросу. ([#6289](https://github.com/realm/realm-swift/issues/6289), начиная с версии 0.90.0).### Совместимость* Формат файла: Генерирует Realms с форматом v9 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Carthage релиз для Swift построен с использованием Xcode 11.3.

### Внутренние изменения

* Обновлен realm-core с версии 5.23.6 до 5.23.8.
* Обновлен realm-sync с версии 4.9.0 до 4.9.4.

4.3.0 Примечания к выпуску (2019-12-19)
=============================================================

### Улучшения

* Добавлена возможность задания пользовательской функции логгирования на `RLMSyncManager`, которая будет вызываться вместо стандартной функции логгирования на основе `NSLog`.
* Добавлены конфигурационные опции для различных типов таймаутов соединения и интервалов сердцебиения на `RLMSyncManager`.
* Добавлено определение, при котором `Realm.asyncOpen()` будет отображать ошибку при превышении времени соединения вместо того, чтобы игнорировать ошибку и пытаться переподключиться до тех пор, пока не будет достигнут успех.

### Исправления

* Исправлен сбой при использовании `value(forKey:)` на свойстве LinkingObjects (включая случаи, когда это происходит косвенно, например, при выполнении запроса на это свойство).
  ([#6366](https://github.com/realm/realm-swift/issues/6366), начиная с версии 4.0.0).
* Исправлен редкий сбой в `ClientHistoryImpl::integrate_server_changesets()`, который мог произойти только в сборках Debug (начиная с версии v3.0.0).

### Совместимость* Формат файла: Генерирует Realms с форматом v9 (Читает и обновляет все предыдущие форматы)
* Realm Object Server: версия 3.21.0 или более поздняя.
* Carthage релиз для Swift построен с использованием Xcode 11.3.### Внутренние изменения

* Обновлен realm-sync с версии 4.8.2 до 4.9.0.

4.2.0 Примечания к выпуску (2019-12-16)
=============================================================

### Улучшения

* Добавлен метод `-[RLMRealm fileExistsForConfiguration:]`/`Realm.fileExists(for:)`, который проверяет наличие локального файла Realm для заданной конфигурации.
* Добавлен метод `-[RLMRealm deleteFilesForConfiguration:]`/`Realm.deleteFiles(for:)` для удаления файла Realm и всех вспомогательных файлов для заданной конфигурации.

### Исправления

* Нет.

### Совместимость

* Формат файла: Генерирует Realms с форматом v9 (Читает и обновляет все предыдущие форматы).
* Realm Object Server: 3.21.0 или более поздняя версия.
* Carthage релиз для Swift построен с использованием Xcode 11.3.

4.1.1 Примечания к выпуску (2019-11-18)
=============================================================

### Исправления

* Политика обновления, переданная в `realm.add()` или `realm.create()`, не корректно распространялась при добавлении объектов внутри `List`, что могло привести к ненужным уведомлениям о изменениях при использовании `.modified`.
  ([#6321](https://github.com/realm/realm-swift/issues/6321), начиная с версии v3.16.0).
* Исправлен редкий сценарий мёртвой блокировки, возникающий при наблюдении за Realm коллекцией или объектом, последующем вызове `refresh()` и последующем уничтожении токена уведомления (`NotificationToken`) от наблюдения на другом потоке (начиная с версии 0.98.0).

### Совместимость* Формат файла: Генерирует Realms с форматом v9 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или новее.
* Carthage релиз для Swift построен с Xcode 11.2.4.1.0 Примечания к выпуску (2019-11-13)
=============================================================

### Улучшения

* Улучшение производительности запросов по ссылке, где конечное целевое свойство
  имеет индекс.
* Восстановление поддержки хранения свойств `@objc enum` на подклассах RealmSwift.Object
  (сломано в 4.0.0), и добавление поддержки хранения их в
  RealmOptional свойствах.

### Исправлено

* Синхронизирующий клиент не мог переподключиться после неудачной интеграции изменений.
  Ошибка приводила к дальнейшему повреждению файла Realm клиента. ([RSYNC-48](https://jira.mongodb.org/browse/RSYNC-48), начиная с версии 3.2.0).

### Совместимость

* Формат файла: Генерирует Realms с форматом v9 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или новее.
* Carthage релиз для Swift построен с Xcode 11.2.

### Внутренние изменения

* Обновлен realm-core с версии 5.23.5 до 5.23.6.
* Обновлен realm-sync с версии 4.7.11 до 4.8.2

4.0.0 Примечания к выпуску (2019-11-08)
=============================================================### Рекламные изменения
* Все ранее устаревшие функции теперь полностью удалены.
* Логика поиска схем для подклассов `RealmSwift.Object` была переписана на Swift. Это не должно повлиять на корректные определения классов, но могут быть типы некорректных определений, которые ранее работали случайно и больше не работают.
* Следующие Swift-типы изменились с `final class` на `struct`:
    - `AnyRealmCollection`
    - `LinkingObjects`
    - `ObjectiveCSupport`
    - `Realm`
    - `Results`
    - `SyncSubscription`
    - `ThreadSafeReference`
  Нет намеренного изменения семантики, но некоторые краевые случаи могут вести себя по-другому.
* Определенные инициализаторы, определенные `RLMObject` и `Object`, кроме безаргументного `init`, были заменены на удобные инициализаторы.
* Реализация API управления правами на основе путей была переработана для учета изменений на сервере. Это должно быть в основном прозрачным изменением, с двумя основными исключениями:
  1. Объекты `SyncPermission` больше не являются живыми объектами Realm, и получение прав дает `Array<SyncPermission>` вместо `Results<SyncPermission>`. Для получения актуальных прав теперь требуется повторное вызов `retrievePermissions()` вместо наблюдения за ними.
  2. Коды ошибок для функций управления правами изменились. Вместо отдельного типа ошибок и набора кодов ошибок, функции управления правами теперь возвращают `SyncAuthErrors`.### Улучшения* Улучшение производительности инициализации объектов Realm с свойствами типа List.

### Исправлено

* Нет.

### Сопоставимость

* Формат файла: Генерирует Realms с форматом v9 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Carthage выпуск для Swift построен с Xcode 11.2.

3.21.0 Примечания к выпуску (2019-11-04)
=============================================================

### Улучшения

* Добавление предварительно скомпилированных двоичных файлов для Xcode 11.2.

### Сопоставимость

* Формат файла: Генерирует Realms с форматом v9 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Carthage выпуск для Swift построен с Xcode 11.2.

3.20.0 Примечания к выпуску (2019-10-21)
=============================================================

### Улучшения

* Добавление поддержки для пользовательской аутентификации с помощью токена обновления. Это позволяет пользователю быть
  авторизованным с помощью внешнего токена обновления, когда ROS настроен на распознавание внешнего издателя как валидатора токена обновления.
  ([PR #6311](https://github.com/realm/realm-swift/pull/6311)).

### Сопоставимость

* Формат файла: Генерирует Realms с форматом v9 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Carthage выпуск для Swift построен с Xcode 11.

3.19.1 Примечания к выпуску (2019-10-17)
=============================================================### Улучшения

* Улучшение производительности интеграции сменного синхронизированного изменения. Транзакции, включающие очень большое количество объектов и дешевые операции на каждом объекте, могут быть на 20% быстрее.

### Исправлено

* Исправление аварийного завершения работы при наблюдении за RLMArray/List примитивами и последующем удалении содержащего объекта до первого запуска фонового уведомителя.
  ([Issue #6234](https://github.com/realm/realm-swift/issues/6234, начиная с версии 3.0.0)).
* Удаление неверного утверждения, которое приводило к аварийному завершению работы внутри `TableInfoCache::get_table_info()`, с сообщениями типа "Assertion failed: info.object_id_index == 0 [3, 0]".
  (Начиная с версии 3.18.0, [#6268](https://github.com/realm/realm-swift/issues/6268) и [#6257](https://github.com/realm/realm-swift/issues/6257)).

### Сопоставимость

* Формат файла: Генерирует Realms с форматом v9 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Carthage выпуск для Swift построен с Xcode 11.0.

### Внутренние изменения

* Обновление до REALM_SYNC_VERSION=4.7.11

3.19.0 Примечания к выпуску (2019-09-27)
=============================================================

### Улучшения

* Expose ObjectSchema.objectClass в Swift, так как поиск класса через
  NSClassFromString() может быть сложен для типов Swift.
  ([PR #6244](https://github.com/realm/realm-swift/pull/6244)).
* Добавление поддержки подавления уведомлений с использованием методов записи/транзакции на основе замыканий.
  ([PR #6252](https://github.com/realm/realm-swift/pull/6252)).### Исправления

* Запросы IN или цепочки OR на неиндексированном строковом столбце могли не находить некоторые результаты, если одна из строк была 64 байт или длиннее.
  ([Core #3386](https://github.com/realm/realm-core/pull/3386), начиная с 3.14.2).
* Подписки на основе запросов для запросов, включающих null-значение времени, не отправлялись на сервер правильно и не находили ни одного объекта.
  ([Core #3389](https://github.com/realm/realm-core/pull/3388), начиная с 3.17.3).

### Сопоставимость

* Формат файла: Генерирует Realms с форматом v9 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Выпуск Carthage для Swift построен с использованием Xcode 11.0.

### Внутренние изменения

* Обновление до REALM_CORE_VERSION=5.23.5
* Обновление до REALM_SYNC_VERSION=4.7.8

3.18.0 Примечания к выпуску (2019-09-13)
=============================================================

Формат файла для синхронизированных Realms изменился. Старые Realms будут автоматически обновлены при открытии. После обновления файлы не будут доступны для старых версий Realm. Обновление не должно занять значительное время или создать риски ошибок.

Это не влияет на несинхронизированные Realms.### Улучшения
* Улучшение производительности запросов на свойства типа Date ([Core #3344](https://github.com/realm/realm-core/pull/3344), [Core #3351](https://github.com/realm/realm-core/pull/3351)).
* Синхронизированные Realms теперь более агрессивно удаляют локальную историю, которая больше не требуется. Это должно снизить рост размера файлов в интенсивно используемых рабочих нагрузках. ([Sync #3007](https://github.com/realm/realm-sync/issues/3007)).
* Добавление поддержки сборки Realm в виде xcframework. ([PR #6238](https://github.com/realm/realm-swift/pull/6238)).
* Добавление предварительно скомпилированных библиотек для Xcode 11 в пакет выпуска. ([PR #6248](https Yöntem düzeltildi: https://github.com/realm/realm-swift/pull/6248)).
* Добавление предварительно скомпилированной библиотеки для Catalyst/UIKit для Mac в пакет выпуска. ([PR #6248](https://github.com/realm/realm-swift/pull/6248)).### Исправлено* Если сигнал прерывал вызов `msync()`, Realm выбрасывал исключение, и транзакция записи завершалась неудачей. Теперь поведение изменено, и система повторно пытается выполнить вызов вместо этого. ([Core #3352](https://github.com/realm/realm-core/issues/3352))
* Запросы на сумму или среднее значение целочисленного свойства иногда давали неверные результаты. ([Core #3356](https://github.com/realm/realm-core/pull/3356)).
* Открытие синхронизированных Realms на основе запросов с небольшим количеством подписок выполняло лишнюю транзакцию записи. ([ObjectStore #815](https://github.com/realm/realm-object-store/pull/815)).

### Совместимость

* Формат файла: генерирует Realms с форматом v9 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Выпуск Carthage для Swift построен с использованием Xcode 11.0

### Устаревшие функции

* `RLMIdentityProviderNickname` устарел в пользу `RLMIdentityProviderUsernamePassword`.
* `+[RLMIdentityProvider credentialsWithNickname]` устарел в пользу `+[RLMIdentityProvider credentialsWithUsername]`.
* `Sync.nickname(String, Bool)` устарел в пользу `Sync.usernamePassword(String, String, Bool)`.

3.17.3 Примечания к выпуску (2019-07-24)
=============================================================

### Улучшения

* Добавлены бинарные файлы Xcode 10.3 в пакет выпуска. Удалены бинарные файлы Xcode 9.2 и 9.3.

### Совместимость

* Формат файла: генерирует Realms с форматом v9 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Выпуск Carthage для Swift построен с использованием Xcode 10.3.3.17.1 Примечания к выпуску (2019-07-10)
=============================================================

### Улучшения

* Добавлена поддержка отмены асинхронного открытия с помощью нового AsyncOpenTask, возвращаемого из вызова asyncOpen(). ([PR #6193](https://github.com/realm/realm-swift/pull/6193)).
* Импорт пакета Realm SPM теперь можно выполнить, закрепив за версией вместо ветки.
* Запросы на списке/RLMArray, которые проверяли индексированное целочисленное свойство, иногда давали неверные результаты.
  ([#6154](https://github.com/realm/realm-swift/issues/6154)), начиная с версии v3.15.0.
* Запросы, включающие индексированное целочисленное свойство, имели утечку памяти, если выполнялись несколько раз.
  ([#6186](https://github.com/realm/realm-swift/issues/6186)), начиная с версии v3.15.0.
* Создание подписки с помощью `includeLinkingObjects:` выполняло избыточные сравнения, что делало её крайне медленной при работе с большим количеством объектов.
  ([Core #3311](https://github.com/realm/realm-core/issues/3311)), начиная с версии v3.15.0.

### Совместимость

* Формат файла: Генерирует Realms с форматом v9 (Чтение и обновление всех предыдущих форматов).
* Realm Object Server: 3.21.0 или более поздняя версия.
* Выпуск Carthage для Swift построен с использованием Xcode 10.2.1.

3.17.0 Примечания к выпуску (2019-06-28)
=============================================================

### Улучшения* Добавлена поддержка включения Realm через Swift Package Manager. В настоящее время это требует зависимости от ветки "master" вместо зависимости от конкретной версии (то есть `.package(url: "https://github.com/realm/realm-swift", .branch("master"))`).
  ([#6187](https://github.com/realm/realm-swift/pull/6187)).
* Добавлена поддержка Codable для RealmOptional и List, а также поддержка Encodable для Results.
  ([PR #6172](https://github.com/realm/realm-swift/pull/6172)).### Исправлено

* Попытка наблюдения за неуправляемым объектом LinkingObjects приводила к аварийному завершению программы вместо выброса соответствующего исключения (с версии v0.100.0).
* Открытие зашифрованного Realm могло привести к ошибке, указывающей на повреждение валидного файла, если система была низко загружена свободной памятью.
  (с версии 3.14.0, [Core #3267](https://github.com/realm/realm-core/issues/3267)).
* Вызов `Realm.asyncOpen()` для нескольких Realms одновременно мог привести к аварийному завершению программы из-за выброса исключения `FileNotFound` на фоновом рабочем потоке.
  (с версии 3.16.0, [ObjectStore #806](https://github.com/realm/realm-object-store/pull/806)).

### Совместимость

* Формат файла: Генерирует Realms с форматом v9 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Выпуск Carthage для Swift построен с использованием Xcode 10.2.1.

3.16.2 Примечания к выпуску (2019-06-14)
=============================================================

### Улучшения

* Добавлена поддержка Xcode 11 Beta 1. Xcode бета-версии поддерживаются только при сборке из исходного кода, а не при использовании предварительно собранного фреймворка.
  ([PR #6164](https://github.com/realm/realm-swift/pull/6164)).### Исправлено* Использование `asyncOpen` для query-based Realms, которые ещё не существовали на локальном устройстве, приводило к ошибке 214.
  ([#6178](https://github.com/realm/realm-swift/issues/6178), начиная с версии 3.16.0).
* `asyncOpen` для query-based Realms не ждал загрузки объектов разрешений, созданных сервером, что приводило к аварийному завершению работы, если изменения в разрешениях были сделаны до первого создания подписки (начиная с версии 3.0.0).
* EINTR не обрабатывался правильно в рабочем процессе уведомлений, что могло привести к несогласованным и редким ошибкам утверждения в `ExternalCommitHelper::listen()` при сборке с включенными утверждениями.
  (PR: [#804](https://github.com/realm/realm-object-store/pull/804), начиная с версии 0.91.0).### Совместимость* Формат файла: Генерирует Realms с форматом v9 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Выпуск Carthage для Swift построен с Xcode 10.2.1.

3.16.1 Примечания к выпуску (2019-05-31)
=============================================================

### Исправлено

* Статический тип, переданный во время компиляции в `realm.create()`, проверялся на наличие первичного ключа вместо переданного типа во время выполнения, что приводило к исключениям вида "''RealmSwiftObject' не имеет первичного ключа и не может быть обновлен'" даже если тип объекта, который создается, имеет первичный ключ. (начиная с версии 3.16.0, [#6159](https://github.com/realm/realm-swift/issues/6159)).

### Совместимость

* Формат файла: Генерирует Realms с форматом v9 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Выпуск Carthage для Swift построен с Xcode 10.2.1.

3.16.0 Примечания к выпуску (2019-05-29)
=============================================================
### Улучшения* Добавлена опция для установки только тех свойств, которые имеют значения, отличные от существующих, при обновлении существующего объекта с помощью `Realm.create()`/`-[RLMObject createOrUpdateInRealm:withValue:]`. Это позволяет уведомлениям отчитываться только о тех свойствах, которые действительно изменились, и улучшает производительность Object Server за счет уменьшения количества операций слияния. (Задача: [#5970](https://github.com/realm/realm-swift/issues/5970), Пулл-запрос: [#6149](https://github.com/realm/realm-swift/pull/6149)).
* Использование `-[RLMRealm asyncOpenWithConfiguration:callbackQueue:]`/`Realm.asyncOpen()` для открытия синхронизированного Realm, который не существует на локальном устройстве, теперь использует оптимизированный метод передачи для загрузки начальных данных для Realm, что значительно ускоряет время первого запуска для приложений, использующих полную синхронизацию. Это в настоящее время не применимо к синхронизации на основе запросов. (Пулл-запрос: [#6106](https://github.com/realm/realm-swift/pull/6106)).### Совместимость

* Формат файла: Генерирует Realms с форматом v9 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Выпуск Carthage для Swift построен с Xcode 10.2.1.

3.15.0 Примечания к выпуску (2019-05-06)
=============================================================
Минимальная версия Realm Object Server была увеличена до 3.21.0, и попытки подключения к более старшим версиям приведут к ошибкам несоответствия протокола. Realm Cloud уже был обновлен до этой версии, и пользователи, использующие его, не должны беспокоиться об этом.

### Улучшения* Добавлены свойства `createdAt`, `updatedAt`, `expiresAt` и `timeToLive` к `RLMSyncSubscription`/`SyncSubscription`. Эти свойства будут `nil` для подписок, созданных с помощью более старых версий Realm, но будут автоматически заполнены для новых подписок.
* Добавлена поддержка временных подписок путем установки свойства `timeToLive` при создании подписки. В следующий раз, когда подписка будет создана или обновлена после истечения этого времени, подписка будет автоматически удалена.
* Добавлена поддержка обновления существующих подписок с новым запросом или ограничением. Это делается путем передачи `update: true` (в Swift) или установки `options.overwriteExisting = YES` (в Objective-C) при создании подписки, что позволит обновить существующую подписку с таким же именем, вместо того чтобы завершиться ошибкой, если такая подписка уже существует.
* Добавлена опция для включения объектов из свойств `RLMLinkingObjects`/`LinkingObjects` в синхронизированные подписки, аналогично тому, как `RLMArray`/`List` автоматически включают содержащиеся в них объекты.
* Улучшена производительность запросов для цепочек условий OR (или условий IN) на неиндексированном целочисленном или строковом свойстве.
  ([Core PR #2888](https://github.com/realm/realm-core/pull/2888) и
  [Core PR #3250](https://github.com/realm/realm-core/pull/3250)).
* Улучшена производительность запросов для условий равенства на индексированном целочисленном свойстве.
  ([Core PR #3272](https://github.com/realm/realm-core/pull/3272)).* Изменен алгоритм выделения файлов для снижения фрагментации, вызванной большим количеством маленьких блоков.
* Улучшена логика выделения файлов для снижения фрагментации и улучшения производительности коммита после множества записей.
  ([Core PR #3278](https://github.com/realm/realm-core/pull/3278)).### Исправлено

* Выполнение запроса, который сравнивает два целочисленных свойства, могло привести к сегментации памяти на x86 (только macOS).
  ([Core PR #3253](https://github.com/realm/realm-core/pull/3256)).
* Параметр `downloadable_bytes`, передаваемый в обратные вызовы прогресса синхронизации, отображал значение, соответствующее количеству данных, оставшихся для загрузки, но не фактическому количеству байтов, которые будут загружены.

### Совместимость

* Формат файла: Генерирует Realms с форматом v9 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.21.0 или более поздняя версия.
* Carthage релиз для Swift построен с использованием Xcode 10.2.1.

3.14.2 Примечания к выпуску (2019-04-25)
=============================================================

### Улучшения

* Обновление `RLMSyncManager.customRequestHeaders` сразу обновляет все активные сессии синхронизации новыми заголовками, вместо необходимости закрыть Realm и снова его открыть.

### Совместимость

* Формат файла: Генерирует Realms с форматом v9 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.11.0 или более поздняя версия.
* Carthage релиз для Swift построен с использованием Xcode 10.2.1.

3.14.1 Примечания к выпуску (2019-04-04)
=============================================================

### Исправления

* Исправление ошибки "Не удалось найти объявление интерфейса 'RealmSwiftObject', суперкласс 'MyRealmObjectClass'" при сборке для симулятора с Xcode 10.2 с включенным "Install Objective-C Compatibility Header".### Совместимость

* Формат файла: Генерирует Realms с форматом v9 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.11.0 или более поздняя версия.
* Carthage релиз для Swift построен с использованием Xcode 10.2.

3.14.0 Примечания к выпуску (2019-03-27)
=============================================================

### Улучшения

* Уменьшение использования памяти при коммите операций записи.
* Улучшение производительности сжатия зашифрованных файлов Realm.
  ([PR #3221](https://github.com/realm/realm-core/pull/3221)).
* Добавление сборки Xcode 10.2 в релизный пакет.

### Исправления

* Исправление утечки памяти при каждом HTTP(s) запросе к Realm Object Server (Проблема [#6058](https://github.com/realm/realm-swift/issues/6058), начиная с версии 3.8.0).
* Исправление ошибки утверждения при создании объекта в синхронизированном Realm
  после создания объекта с пустым целым первичным ключом в той же операции записи.
  ([PR #3227](https://github.com/realm/realm-core/pull/3227)).
* Исправление некоторых новых предупреждений при сборке с Xcode 10.2 beta.
* Правильное освобождение сессий синхронизации при освобождении последнего объекта Realm, использующего сессию, при явном приостановлении сессии (начиная с версии 3.9.0).

### Совместимость

* Формат файла: Генерирует Realms с форматом v9 (чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.11.0 или более поздняя версия.
* Carthage релиз для Swift построен с использованием Xcode 10.2.### Внутренние изменения* Вызывать исключение вместо аварийного завершения работы из-за ошибки проверки в большем количестве случаев при открытии недействительных файлов Realm.
* Обновить до REALM_CORE_VERSION=5.14.0
* Обновить до REALM_SYNC_VERSION=3.15.1

3.13.1 Примечания к выпуску (2019-01-03)
=============================================================

### Исправлено

* Исправлено аварийное завершение работы при итерации по `Realm.subscriptions()` с помощью for-in.
  (С версии 3.13.0, PR [#6050](https://github.com/realm/realm-swift/pull/6050)).

### Совместимость

* Формат файла: генерирует Realms с форматом v9 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.11.0 или более поздняя версия.

3.13.0 Примечания к выпуску (2018-12-14)
=============================================================

### Улучшения

* Добавлены `Realm.subscriptions()`/`-[RLMRealm subscriptions]` и
  `Realm.subscription(named:)`/`-[RLMRealm subscriptionWithName:]` для возможности поиска существующих подписок на основе запросов.
  (PR: https://github.com/realm/realm-swift/pull/6029).

### Совместимость

* Формат файла: генерирует Realms с форматом v9 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.11.0 или более поздняя версия.

3.12.0 Примечания к выпуску (2018-11-26)
=============================================================

### Улучшения* Добавлен заголовок User-Agent в HTTP-запросы, отправляемые на Realm Object Server. По умолчанию, этот заголовок содержит информацию о версии библиотеки Realm и идентификаторе пакета вашего приложения. Идентификатор приложения можно настроить, установив `RLMSyncManager.sharedManager.userAgent`/`SyncManager.shared.userAgent` до открытия синхронизированного Realm.
  (PR: https://github.com/realm/realm-swift/pull/6007).
* Добавлен бинарный файл Xcode 10.1 в пакет предварительно скомпилированных файлов.### Исправлено

* Нет.

### Совместимость

* Формат файла: генерирует Realms с форматом v9 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.11.0 или более поздняя версия.

### Внутренние изменения

* Нет.

3.11.2 Примечания к выпуску (2018-11-15)
=============================================================

### Улучшения

* Улучшена производительность алгоритма слияния, используемого для интеграции удаленных изменений с сервера. В частности, изменения, включающие множество объектов, все связанных с одним объектом, должны быть значительно улучшены.

### Исправлено

* Исправление утечки памяти при удалении блоков уведомлений из коллекций.
  PR: [#702](https://github.com/realm/realm-object-store/pull/702), начиная с версии 1.1.0.
* Исправление переупорядочивания или получения уникальных значений уже отсортированного Results с использованием значений из связанных объектов. Ранее использовался неупорядоченный порядок для чтения значений из связанных объектов.
  PR: [#3102](https://github.com/realm/realm-core/pull/3102), начиная с версии 3.1.0.
* Исправление набора ошибок, которые могли привести к неверным утверждениям о наборе изменений при использовании синхронизации. Утверждения выглядели примерно следующим образом:
  `[realm-core-5.10.0] Assertion failed: ndx < size() with (ndx, size()) = (742, 742)`.

### Совместимость

* Формат файла: генерирует Realms с форматом v9 (читает и обновляет все предыдущие форматы)
* Realm Object Server: 3.11.0 или выше.### Внутренние изменения

* Нет.


3.11.1 Примечания к выпуску (2018-10-19)
=============================================================

### Улучшения

* Нет.

### Исправления

* Исправлено `SyncUser.requestEmailConfirmation` не запускает поток подтверждения электронной почты на ROS. (PR [#5953](https://github.com/realm/realm-swift/pull/5953), начиная с версии 3.5.0)
* Добавлено недостающее валидирование в геттерах и сеттерах свойств управляемых Realm объектов, что иногда приводило к аварийному завершению программы с ошибкой segfault вместо выброса соответствующего исключения при попытке записи в объект, который был удален.
  (PR [#5952](https://github.com/realm/realm-swift/pull/5952), начиная с версии 2.8.0)

### Совместимость

* Формат файла: Генерирует Realms с форматом v9 (Чтение и обновление всех предыдущих форматов)
* Realm Object Server: 3.11.0 или выше.

### Внутренние изменения

* Нет.


3.11.0 Примечания к выпуску (2018-10-04)
=============================================================

### Улучшения
* Уменьшено использование памяти при интеграции синхронизированных изменений, отправленных ROS.
* Устройства теперь будут отображать прогресс загрузки для только для чтения Realms, что позволяет серверу более агрессивно компактовать Realms и уменьшает объем требуемого серверного хранилища.### Исправления
* Исправлено аварийное завершение программы при добавлении объекта с свойством `String?` без `@objc`, которое не было явно проигнорировано, в Realm на watchOS 5 (и возможно на других платформах при сборке с Xcode 10).
  (Проблема: [5929](https://github.com/realm/realm-swift/issues/5929)).
* Исправлены некоторые ошибки алгоритма слияния, которые могли привести к выбросу исключения `BadChangesetError` при интеграции изменений, отправленных сервером.### Совместимость
* Формат файла: Генерирует Realms с форматом v9 (Чтение и обновление всех предыдущих форматов)
* **ВАЖНО!!!
  Вам потребуется обновить ваш Realm Object Server до версии 3.11.0 или выше или использовать [Realm Cloud](https://cloud.realm.io).
  Если вы попытаетесь подключиться к ROS версии 3.10.x или ниже, вы увидите ошибку, похожую на `Неправильная версия протокола в Sync HTTP запросе, версия протокола клиента = 25, версия протокола сервера = 24`.**

### Внутренние изменения
* Обновлено до Sync 3.12.2.3.10.0 Примечания к выпуску (2018-09-19)
=============================================================

Теперь предварительно собранные двоичные файлы создаются для Xcode 9.2, 9.3, 9.4 и 10.0.

Старые версии Xcode по-прежнему поддерживаются при сборке из исходного кода, но вы должны как можно скорее перейти к Xcode 9.2 или более поздней версии.

### Улучшения

* Добавлена поддержка для Apple Watch Series 4 путем добавления среза arm64_32 к библиотеке.

3.9.0 Примечания к выпуску (2018-09-10)
=============================================================

### Улучшения* Общедоступен `RLMSyncUser.refreshToken` для использования в пользовательских HTTP-запросах к Realm Object Server.
* Добавлен `RLMSyncSession.connectionState`, который отображает, подключен ли сеанс к Realm Object Server или находится в оффлайн-режиме.
* Добавлены методы `-suspend` и `-resume` к `RLMSyncSession` для возможности ручного приостановления синхронизации данных.
* Добавлена поддержка ограничения количества объектов, соответствующих запросу на основе синхронизации. Это требует сервера, работающего с ROS 3.10.1 или более поздней версией.### Исправления ошибок

* Исправлена ошибка при получении описания `MigrationObject`, имеющего свойства `List`.
* Исправлена ошибка при вызове `dynamicList()` для `MigrationObject`.

3.8.0 Примечания к выпуску (2018-09-05)
=============================================================

### Улучшения

* Удалены некоторые старые и больше не применимые логики миграции, которые создавали незашифрованный файл в каталоге синхронизационных метаданных, содержащий список URL ROS, к которым подключены.
* Добавлена поддержка закрепления SSL-сертификатов для https и соединений с областями данных, устанавливая `RLMSyncManager.sharedManager.pinnedCertificatePaths` в obj-c и `SyncManager.shared.pinnedCertificatePaths` в Swift.

### Исправления ошибок

* Исправлены предупреждения при сборке Realm как статической библиотеки с помощью CocoaPods.

3.7.6 Примечания к выпуску (2018-08-08)
=============================================================

### Улучшения

* Ускорена компактация при использовании опции compact-on-launch.
* Уменьшено использование памяти при локальном слиянии изменений из синхронизации.
* При первом подключении к серверу, ожидание начала загрузки изменений после загрузки всех изменений, чтобы уменьшить нагрузку на сервер при синхронизации на основе запроса.* Улучшение производительности применения удалённых изменений из синхронизации.
* Улучшение производительности создания объектов с ключами-строками.
* Улучшение производительности больших транзакций записи.
* Адаптация стратегии распределения пространства файлов для снижения фрагментации, что приводит к созданию меньших файлов Realm и обычно улучшает производительность.
* Закрытие сетевых соединений сразу при уничтожении сессии синхронизации.
* Отчёт более подробной информации в исключениях `InvalidDatabase`.### Исправления ошибок

* Исправление ошибок доступа к файлам для RLMPlatform.h при сборке с CocoaPods и Xcode 10 beta 3.
* Исправление ошибки использования после освобождения памяти при отмене транзакции записи, что могло привести к неправильным "до" значениям в наблюдениях KVO (обычно `nil` при ожидании не-`nil` значения).
* Исправление нескольких ошибок в алгоритме слияния, которые могли привести к корruptions памяти и аварийному завершению работы с ошибками, такими как "плохое изменение" и "недостижимый код".

3.7.4 Примечания к выпуску (2018-06-19)
=============================================================

### Исправления ошибок

* Исправление ошибки, которая могла потенциально наводнить Realm Object Server сообщениями PING после того, как устройство-клиент вновь подключается к сети.

3.7.3 Примечания к выпуску (2018-06-18)
=============================================================

### Улучшения

* Предотвращение выполнения потенциально больших объёмов бесполезной фоновой работы для экземпляров LinkingObjects, которые доступны и затем немедленно освобождаются.

### Исправления ошибок

* Исправление аварийного завершения работы, которое могло произойти из-за чрезмерно фрагментированных файлов Realm.
* Исправление ошибки, которая могла привести к аварийному завершению работы с сообщением "ошибка плохого изменения" при слиянии изменений из сервера.3.7.2 Примечания к выпуску (2018-06-13)
=============================================================

### Улучшения

* Добавление дополнительных проверок согласованности, которые, вероятно, приведут к более точным ошибкам при срабатывании утверждения "prev_ref + prev_size <= ref".

### Исправления ошибок

* Исправление проблемы в алгоритме индексации изменений, которая иногда приводила к ошибкам "плохое разрешение объекта" и "плохое изменение".
* Исправление большого количества предупреждений о видимости символов, выровняв флаги компилятора.
* Исправление значительного увеличения размера файлов, созданных с помощью `Realm.writeCopy()` введённого в 3.6.0.

3.7.1 Примечания к выпуску (2018-06-07)
=============================================================

* Добавлена поддержка компиляции Realm Swift с помощью Xcode 10 beta 1.

3.7.0 Примечания к выпуску (2018-06-06)
=============================================================

Функция, известная как Partial Sync, была переименована в Query-based Synchronization. Это повлияло на несколько API. Подробности см. ниже.

### Устаревшие функции

* `+[RLMSyncConfiguration initWithUser]` устарела в пользу `-[RLMSyncUser configurationWithURL:url]`.
* `+[RLMSyncConfiguration automaticConfiguration]` устарела в пользу `-[RLMSyncUser configuration]`.
* `+[RLMSyncConfiguration automaticConfigurationForUser]` устарела в пользу `-[RLMSyncUser configuration]`.
* `-[RLMSyncConfiguration isPartial]` устарела в пользу `-[RLMSyncConfiguration fullSynchronization]`.

### Улучшения* Добавлен `-[RLMRealm syncSession]` и `Realm.syncSession` для получения сессии, используемой для синхронизированного Realm.
* Добавлен `-[RLMSyncUser configuration]`. Query-based sync является стандартным режимом синхронизации для этой конфигурации.
* Добавлен `-[RLMSyncUser configurationWithURL:url]`. Query-based sync является стандартным режимом синхронизации для этой конфигурации.3.6.0 Примечания к выпуску (29 мая 2018)
=============================================================

### Улучшения

* Улучшена производительность операций с метаданными синхронизации и разрешения потокобезопасных ссылок.
* `shouldCompactOnLaunch` теперь поддерживается для компактации локальных данных синхронизированных Realm.

### Исправления ошибок

* Исправлена потенциальная блокировка, когда обратный вызов прогресса сессии синхронизации удерживает последнюю сильную ссылку на сессию синхронизации.
* Исправлены некоторые случаи, когда сравнения с `nil` в запросах не были правильно сериализованы при подписке на запрос.
* Не удалять объекты, добавленные во время миграции, после вызова `-[RLMMigration deleteDataForClassName:]`.
* Исправлены неправильные результаты и/или аварийные завершения при выполнении нескольких блоков `-[RLMMigration enumerateObjects:block:]`, удаляющих объекты одного и того же типа.
* Исправлены некоторые краевые случаи, когда `-[RLMMigration enumerateObjects:block:]` перечислял неправильные объекты после удалений.
* Восстановлено поведение до версии 3.5.0 для опциональных свойств Swift, отсутствующих ivar, вместо аварийного завершения.

3.5.0 Примечания к выпуску (25 апреля 2018)
=============================================================

### Улучшения

* Добавлены обёртывающие функции для подтверждения электронной почты и сброса пароля в `SyncUser`.### Исправления ошибок

* Исправлены некорректные результаты при использовании опциональной цепочки для доступа к свойству `RealmOptional` в релизных сборках, или при взаимодействии с объектом `RealmOptional` после освобождения владеющего объекта.

3.4.0 Примечания к выпуску (2018-04-19)
=============================================================

Предварительно скомпилированный бинарный файл для Carthage теперь построен для Swift 4.1.

### Улучшения

* Expose `RLMSyncManager.authorizationHeaderName`/`SyncManager.authorizationHeaderName` как способ для переопределения транспортного заголовка для авторизации Realm Object Server.
* Expose `RLMSyncManager.customRequestHeaders`/`SyncManager.customRequestHeaders`, который позволяет добавлять пользовательские HTTP-заголовки к запросам к Realm Object Server.
* Expose `RLMSSyncConfiguration.urlPrefix`/`SyncConfiguration.urlPrefix` как механизм для замены стандартного префикса пути в запросах WebSocket для Realm Sync.

3.3.2 Примечания к выпуску (2018-04-03)
=============================================================

Добавлен предварительно скомпилированный бинарный файл для Xcode 9.3.

3.3.1 Примечания к выпуску (2018-03-28)
=============================================================

Требуется Realm Object Server версии 3.0.0 или выше при использовании синхронизированных Realm.

### Улучшения

* Expose `RLMObject.object(forPrimaryKey:)` как фабричный метод для Swift, чтобы он был доступен для вызова с недавними версиями Swift.

### Исправления ошибок* Исключены классы Permissions, производные от `RLMObject`, из типов, отслеживаемых `Realm.Configuration.defaultConfiguration.objectTypes`, чтобы избежать неудачного приведения типа.
* Отменены ожидающие вызовы `Realm.asyncOpen()` при неудачной аутентификации с непереходной ошибкой, такой как отсутствие пути Realm в URL.
* Исправлены ошибки "fcntl() inside prealloc()" на APFS.3.3.0 Примечания к выпуску (2018-03-19)
=============================================================

Требуется Realm Object Server версии 3.0.0 или выше при использовании синхронизированных Realm.

### Улучшения

* Добавлены методы `Realm.permissions`, `Realm.permissions(forType:)` и `Realm.permissions(forClassNamed:)` как удобные методы для доступа к правам доступа Realm или типа.

### Исправления ошибок

* Исправлены ошибки выполнения при определении приложениями подкласса `Object` с тем же именем, что и один из типов объектов Permissions, таких как `RLMPermissionRole`.

3.2.0 Примечания к выпуску (2018-03-15)
=============================================================

Требуется Realm Object Server версии 3.0.0 или выше для использования синхронизированных Realms.

### Улучшения* Добавлена улучшенная API для добавления подписок в частично-синхронизированных Realms. Метод `Results.subscribe()` можно использовать для подписки на любое набор результата, а возвращаемый объект `SyncSubscription` можно использовать для наблюдения за состоянием подписки и, в конечном итоге, для удаления подписки. Подробнее см. документацию (<https://docs.realm.io/platform/v/3.x/using-synced-realms/syncing-data>).
* Добавлена система разрешений с гранулярным уровнем для использования с частично-синхронизированными Realms. Это позволяет определять разрешения на уровне отдельных объектов или классов. Подробнее см. документацию (<https://docs.realm.io/platform/v/3.x/using-synced-realms/access-control>).
* Добавлены методы `SyncConfiguration.automatic()` и `SyncConfiguration.automatic(user:)`. Эти методы возвращают `Realm.Configuration`, подходящий для синхронизации с дефолтным синхронизированным Realm для текущего (или указанного) пользователя. Эти методы следует рассматривать как предпочтительные для доступа к синхронизированным Realms в будущем.
* Добавлен метод `+[RLMSyncSession sessionForRealm:]` для получения сессии синхронизации, соответствующей `RLMRealm`.### Исправления ошибок

* Исправлена неправильная инициализация `RLMSyncManager`, что делало невозможным установку `errorHandler`.
* Исправлены предупреждения компилятора при сборке с Xcode 9.3.
* Исправлены некоторые предупреждения при выполнении с UBsan.

3.2.0-rc.1 Примечания к выпуску (2018-03-14)
=============================================================

Требуется Realm Object Server версии 3.0.0-rc.1 или выше для использования синхронизированных Realms.

### Улучшения

* Добавлены методы `SyncConfiguration.automatic()` и `SyncConfiguration.automatic(user:)`. Эти методы возвращают `Realm.Configuration`, подходящий для синхронизации с дефолтным синхронизированным Realm для текущего (или указанного) пользователя. Эти методы следует рассматривать как предпочтительные для доступа к синхронизированным Realms в будущем.
* Теперь для каждого пользователя автоматически создается роль, в которой этот пользователь является единственным участником. Это упрощает распространенный случай ограничения доступа к конкретным объектам для одного пользователя. Эту роль можно получить по `PermissionUser.role`.
* Улучшена отчетность об ошибках при отклонении схемы сервером из-за отсутствия разрешений.

### Исправления ошибок

* Исправлена неправильная инициализация `RLMSyncManager`, что делало невозможным установку `errorHandler`.
* Исправлены предупреждения компилятора при сборке с Xcode 9.3.3.2.0-beta.3 Примечания к выпуску (2018-03-01)
=============================================================

Требуется Realm Object Server версии 3.0.0-alpha.9 или более новой для использования синхронизированных Realms.

### Исправления ошибок

* Исправлен сбой, который возникал при использовании частичной синхронизации с Realm Object Server версии  Yöntem 3.0.0-alpha.9.

3.2.0-beta.2 Примечания к выпуску (2018-02-28)
=============================================================

Требуется Realm Object Server версии 3.0.0-alpha.8 или более новой для использования синхронизированных Realms.

### Улучшения

* Добавлены методы `findOrCreate(forRoleNamed:)` и `findOrCreate(forRole:)` к `List<Permission>` для упрощения процесса добавления прав для роли.
* Добавлены методы `+permissionForRoleNamed:inArray:`, `+permissionForRoleNamed:onRealm:`, `+permissionForRoleNamed:onClass:realm:`, `+permissionForRoleNamed:onClassNamed:realm:`, и `+permissionForRoleNamed:onObject:` к `RLMSyncPermission` для упрощения процесса добавления прав для роли.
* Добавлен метод `+[RLMSyncSession sessionForRealm:]` для получения сессии синхронизации, соответствующей `RLMRealm`.

### Исправления ошибок

* `PermissionRole.users` и `PermissionUser.roles` теперь являются публичными, как было задумано.
* Исправлено обработывание `setPermissions` в `-[RLMRealm privilegesForRealm]` и связанных методах.

3.2.0-beta.1 Примечания к выпуску (2018-02-19)
=============================================================

### Улучшения* Добавлен улучшенный API для добавления подписок в частично-синхронизированных Realms. Метод `Results.subscribe()` может использоваться для подписки на любой набор результатов, и возвращаемый объект `SyncSubscription` может использоваться для наблюдения за состоянием подписки и, в конечном итоге, для удаления подписки.
* Добавлена детализированная система прав для использования с частично-синхронизированными Realms. Это позволяет определять права на уровне отдельных объектов или классов. См. `Permission` и связанные типы для получения дополнительной информации.### Исправления ошибок

* Исправлены некоторые предупреждения при выполнении с UBsan.

3.1.1 Примечания к выпуску (2018-02-03)
=============================================================

Предварительно собранные фреймворки Swift для Carthage теперь собираются с Xcode 9.2.

### Исправления ошибок

* Исправлена утечка памяти при открытии Realms с явно указанным массивом `objectTypes` из Swift.

3.1.0 Примечания к выпуску (2018-01-16)
=============================================================

* Предварительно собранные фреймворки теперь включены для Swift 3.2.3 и  Yöntem 4.0.3.
* Предварительно собранные фреймворки больше не включены для Swift 3.0.x.
* Сборка из исходного кода с версиями Xcode, предшествующими Xcode 8.3, больше не поддерживается.

### Улучшения* Добавлен метод `Results.distinct(by:)` / `-[RLMResults distinctResultsUsingKeyPaths:]`, который возвращает `Results`, содержащий только объекты с уникальными значениями по указанным ключевым путям.
* Улучшена производительность проверки изменений для уведомлений в определённых случаях.
* Ошибки Realm Object Server, не явно распознанные клиентом, теперь отображаются в приложении.
* Добавлена поддержка JSON Web Token как источника синхронизации.
* Добавлена поддержка Nickname и Anonymous Auth как источника синхронизации.
* Улучшена производительность аллокатора при записи в сильно фрагментированный файл. Это должно значительно улучшить производительность при вставке большого количества объектов, имеющих индексированные свойства.
* Улучшена производительность записи для сложных объектных графов, включающих множество классов, связанных друг с другом.### Исправления ошибок

* Добавлена отсутствующая проверка на цикл выполнения в методах API разрешений, которые требуют её.
* Исправлены некоторые случаи, когда несмертельные ошибки синхронизации обрабатывались как смертельные ошибки.

3.0.2 Примечания к выпуску (2017-11-08)
=============================================================

Предварительно собранные фреймворки теперь включены для Swift 3.2.2 и 4.0.2.

### Исправления ошибок

* Исправлен сбой при получении свойства связанных объектов из экземпляра модели объекта через Swift субскрипт.
* Исправлено некорректное поведение при прерывании вызова `posix_fallocate`.

3.0.1 Примечания к выпуску (2017-10-26)
=============================================================

### Исправления ошибок* Явно исключены подклассы объектов, сгенерированные KVO, из схемы.
* Исправлена регрессия, при которой тип Realm модели класса не определяется правильно, что приводит к сбоям при передаче значения типа, полученного в ходе выполнения с помощью `type(of:)`, в определённые API.
* Исправлен сбой при наличии неявно игнорируемых `let` свойств в подклассе `Object`.
* Исправлены несколько случаев, когда добавление блока уведомлений изнутри обратного вызова уведомления могло привести к некорректным результатам.
### Примечания к выпуску (2017-10-16)
=============================================================
### Изменения, нарушающие совместимость
* iOS 7 больше не поддерживается.
* Синхронизированные Realms требуют запущенного сервера Realm Object Server версии 2.0 или выше.
* Вычисляемые свойства на типах объектов Realm обнаруживаются и больше не добавляются в автоматически сгенерированную схему.
* Objective-C и Swift API `create(_:, value: update:)` теперь правильно устанавливают свойства как `nil`, когда обновляется существующий объект и значение свойства в аргументе `value` указывает на `nil` или `NSNull`.
* Методы `-[RLMRealm addOrUpdateObjects:]` и `-[RLMRealm deleteObjects:]` теперь требуют, чтобы их аргумент соответствовал протоколу `NSFastEnumeration`, чтобы соответствовать похожим API, которые также принимают коллекции.
* Способ доставки ошибок синхронизации (перезагрузка клиента и отказ в доступе) был изменен.Вместо блока, который можно вызвать для немедленного удаления файла Realm, который вызывает ошибку, теперь возвращается объект-токен типа `RLMSyncErrorActionToken` в словаре `userInfo` объекта ошибки. Этот объект ошибки можно передать в новый API `+[RLMSyncSession immediatelyHandleError:]` для удаления файлов.
  * Возвращаемые типы API `SyncError.clientResetInfo()` и `SyncError.deleteRealmUserInfo()` были изменены. Теперь они возвращают `RLMSyncErrorActionToken` или `SyncError.ActionToken` вместо замыканий.
  * Классовые методы `Object.className()`, `Object.objectUtilClass()` и свойство `Object.isInvalidated` больше не могут быть переопределены.
  * Callback, который выполняется при успешном или неудачном входе пользователя в синхронизацию, теперь по умолчанию выполняется на главной очереди, или может быть явно указанной очередью с помощью нового параметра `callbackQueue` в API `{RLM}SyncUser.logIn(... )`.
  * Исправлены пустые строки, двоичные данные и `null` на правой стороне операторов `BEGINSWITH`, `ENDSWITH` и `CONTAINS` в предикатах, чтобы соответствовать семантике Foundation, которая никогда не соответствует ни одной строке или данным.
  * Сравнение и хеширование объектов типа `Object` в Swift теперь работают так же, как и `RLMObject` (объекты считаются равными только если их модельный класс определяет первичный ключ).
  * Исправлено поведение свойства хеширования на объекте `Object`, когда модель объекта не имеет первичного ключа. * Исправлена проблема, когда модельный класс Swift определяет управляемые свойства, не являющиеся универсальными, после универсальных свойств Realm (например, `List<T>`), что приводит к неправильной постройке схемы. Исправлена проблема, когда создание таких моделей из массива может завершиться ошибкой.
 * Ослаблено ограничение по шаблону для `RLMArray` и `RLMResults` с `RLMObject` на `NSObject`. Это может привести к необходимости добавления некоторых приведений типов для разрешения неоднозначности типов.
 * Удален `RLMSyncPermissionResults`. Теперь `RLMSyncPermission` предоставляются с помощью `RLMResults`. Этот набор коллекций поддерживает все обычные операции коллекций, кроме установки значений с помощью ключ-значение кодирования (поскольку `RLMSyncPermission` являются неизменяемыми) и операций агрегации свойств.
 * `RLMSyncUserInfo` значительно улучшен. Теперь он содержит метаданные о пользователе, хранящиеся на Realm Object Server, а также список всех данных учетных записей пользователя, связанных с этим пользователем.
 * Начиная с Swift 4, `List` теперь соответствует `MutableCollection` вместо `RangeReplaceableCollection`. Для Swift 4 удалена пустая коллекция инициализатор, а также добавлены стандартные реализации методов заменяемой коллекции, которые имеют смысл для `List`.
 * `List.removeLast()` теперь выбрасывает исключение, если список пуст, чтобы более точно соответствовать поведению стандартной библиотеки `Collection.removeLast()`.* Ассоциированный тип `Element` в `RealmCollection` переименован в `ElementType`.
 * Следующие API переименованы:| Старый API                                                     | Новый API                                                        |
 |:------------------------------------------------------------|:---------------------------------------------------------------|
 | `NotificationToken.stop()`                                  | `NotificationToken.invalidate()`                               |
 | `-[RLMNotificationToken stop]`                              | `-[RLMNotificationToken invalidate]`                           |
 | `RealmCollection.addNotificationBlock(_:)`                  | `RealmCollection.observe(_:)`                                  |
 | `RLMSyncProgress`                                           | `RLMSyncProgressMode`                                          |
 | `List.remove(objectAtIndex:)`                               | `List.remove(at:)`                                             |
 | `List.swap(_:_:)`                                           | `List.swapAt(_:_:)`                                            |
 | `SyncPermissionValue`                                       | `SyncPermission`                                               |
 | `RLMSyncPermissionValue`                                    | `RLMSyncPermission`                                           |
 | `-[RLMSyncPermission initWithRealmPath:userID:accessLevel]` | `-[RLMSyncPermission initWithRealmPath:identity:accessLevel:]` |
 | `RLMSyncPermission.userId`                                   | `RLMSyncPermission.identity`                                   |
 | `-[RLMRealm addOrUpdateObjectsInArray:]`                    | `-[RLMRealm addOrUpdateObjects:]`                              |* Следующие API были удалены:| Удалённый API                                                  | Замена                                                                               |
  |:-------------------------------------------------------------|:------------------------------------------------------------------------------------------|
  | `Object.className`                                           | Нет, присутствовал по ошибке.                                                              |
  | `RLMPropertyTypeArray`                                       | `RLMProperty.array`                                                                       |
  | `PropertyType.array`                                         | `Property.array`                                                                          |
  | `-[RLMArray sortedResultsUsingProperty:ascending:]`          | `-[RLMArray sortedResultsUsingKeyPath:ascending:]`                                        |
  | `-[RLMCollection sortedResultsUsingProperty:ascending:]`     | `-[RLMCollection sortedResultsUsingKeyPath:ascending:]`                                   |
  | `-[RLMResults sortedResultsUsingProperty:ascending:]`        | `-[RLMResults sortedResultsUsingKeyPath:ascending:]`                                      |
  | `+[RLMSortDescriptor sortDescriptorWithProperty:ascending:]` | `+[RLMSortDescriptor sortDescriptorWithKeyPath:ascending:]`                               |
  | `RLMSortDescriptor.property`                                 | `RLMSortDescriptor.keyPath`                                                               |
  | `AnyRealmCollection.sorted(byProperty:ascending:)`           | `AnyRealmCollection.sorted(byKeyPath:ascending:)`                                         |
  | `List.sorted(byProperty:ascending:)`                         | `List.sorted(byKeyPath:ascending:)`                                                       |
  | `LinkingObjects.sorted(byProperty:ascending:)`               | `LinkingObjects.sorted(byKeyPath:ascending:)`                                             |
  | `Results.sorted(byProperty:ascending:)`                      | `Results.sorted(byKeyPath:ascending:)`                                                    |
  | `SortDescriptor.init(property:ascending:)`                   | `SortDescriptor.init(keyPath:ascending:)`                                                 |```markdown
property`                                    | `SortDescriptor. keyPath`                                                                  |
  | `+[RLMRealm migrateRealm:configuration:]`                    | `+[RLMRealm performMigrationForConfiguration:error:]`                                     |
  | `RLMSyncManager. disableSSLValidation`                        | `RLMSyncConfiguration. enableSSLValidation`                                                |
  | `SyncManager. disableSSLValidation`                           | `SyncConfiguration. enableSSLValidation`                                                   |
  | `RLMSyncErrorBadResponse`                                    | `RLMSyncAuthErrorBadResponse`                                                             |
  | `RLMSyncPermissionResults`                                   | `RLMResults`                                                                              |
  | `SyncPermissionResults`                                      | `Results`                                                                                 |
  | `RLMSyncPermissionChange`                                    | `-[RLMSyncUser applyPermission:callback]` / `-[RLMSyncUser deletePermission:callback:]`   |
  | `-[RLMSyncUser permissionRealmWithError:]`                   | `-[RLMSyncUser retrievePermissionsWithCallback:]`                                         |
  | `RLMSyncPermissionOffer`                                     | `-[RLMSyncUser createOfferForRealmAtURL:accessLevel:expiration:callback:]`                |
  | `RLMSyncPermissionOfferResponse`                             | `-[RLMSyncUser acceptOfferForToken:callback:]`                                            |
  | `-[NSError rlmSync_clientResetBlock]`                        | `-[NSError rlmSync_errorActionToken]` / `-[NSError rlmSync_clientResetBackedUpRealmPath]` |
  | `-[NSError rlmSync_deleteRealmBlock]`                        | `-[NSError rlmSync_errorActionToken]`                                                     |
```### Улучшения
  * `Список` теперь может содержать значения типов `Bool`, `Int`, `Int8`, `Int16`, `Int32`, `Int64`, `Float`, `Double`, `String`, `Data` и `Date` (и опциональные версии всех этих типов) помимо подклассов `Object`.
```   Запросы на `списки`, содержащие значения, отличные от подклассов `Object`, пока не реализованы.
  * `RLMArray` теперь может быть ограничен протоколами `RLMBool`, `RLMInt`, `RLMFloat`, `RLMDouble`, `RLMString`, `RLMData` и `RLMDate` помимо протоколов, определенных с помощью `RLM_ARRAY_TYPE`. По умолчанию `RLMArray` типов, отличных от `RLMObject`, могут содержать null. Указание того, что свойство является обязательным (переопределением `+requiredProperties:`), сделает значения внутри массива обязательными. Запросы на `RLMArray`, содержащие значения, отличные от подклассов `RLMObject`, пока не реализованы.
  * Добавлен новый код ошибки для обозначения ошибок 'отсутствия разрешений' при работе с синхронизированными Realms, а также блок, который можно вызвать для уведомления привязки о том, что файлы Realm, вызывающие ошибку, должны быть немедленно удалены. Это позволяет восстанавливаться от ошибок 'отсутствия разрешений' более надежным образом. Подробнее см. документацию для `RLMSyncErrorPermissionDeniedError`.
  * Добавлен API Swift `Object.isSameObject(as:_)` для выполнения той же функции, что и существующий Objective-C API `-[RLMObject isEqualToObject:]`.
  * Открытие синхронизированного Realm, локальная копия которого была создана с более ранней версией Realm Mobile Platfrom, когда миграция невозможна к текущей версии, приведет к ошибке `RLMErrorIncompatibleSyncedFile` / `incompatibleSyncedFile`.При возникновении такой ошибки исходный файл перемещается в резервное хранилище, и будущие попытки открыть синхронизированный Realm приведут к созданию нового файла. Если вы хотите мигрировать какие-либо данные из резервного Realm, вы можете открыть его с использованием конфигурации резервного Realm, доступной на объекте ошибки.

* Добавлен предварительный просмотр частичной синхронизации. Частичная синхронизация позволяет открыть синхронизированный Realm таким образом, чтобы только объекты, запрошенные пользователем, синхронизировались на устройство. Вы можете использовать его, установив свойство `isPartial` на `SyncConfiguration`, открыв Realm, а затем вызвав `Realm.subscribe(to:where:callback:)` с типом объекта, который вас интересует, строкой, содержащей запрос, определяющую, какие объекты вы хотите синхронизировать. Чтобы подписаться, и обратный вызов, который будет отчитываться о результатах. Вы можете добавлять как много подписок на синхронизированное Realm, сколько необходимо.

### Исправления ошибок
* Теперь Realm не выбрасывает исключение "несоответствующая инструкция" в некоторых случаях при открытии синхронизированного Realm асинхронно.
* API Realm Swift, которые фильтруют или ищут индекс объекта на основе форматной строки, теперь правильно обрабатывают опциональные аргументы в их вариативных аргументных списках.* Метод `-[RLMResults<RLMSyncPermission *> indexOfObject:]` теперь правильно учитывает уровень доступа.
* Исправлена ситуация гонки, которая могла привести к аварийному завершению при доступе к освобожденному объекту конфигурации, если стандартная конфигурация была установлена из другого потока.
* Исправлена ошибка, которая приводила к аварийному завершению при перечислении после очистки данных во время миграции.
* Исправлена ошибка, при которой синхронизированный Realm не мог быть перезапущен даже после успешного сброса клиента в некоторых случаях.
* Исправлена ошибка, при которой подсистема синхронизации слишком долго ждала для повторного подключения к серверу в определенных случаях.
* Исправлена ошибка, при которой зашифрованные метаданные, связанные с синхронизацией, неправильно удалялись при обновлении пользователей, что приводило к выходу всех пользователей из системы.
* Исправлена ошибка, при которой данные, связанные с разрешениями, продолжали синхронизироваться с клиентом даже после выхода пользователя, которому принадлежали эти данные.
* Исправлена ситуация, при которой уведомления о коллекции могли быть доставлены неоднородно, если уведомительный callback был добавлен внутри другого callback для той же коллекции.Заметки о выпуске 3.0.0-rc.2 (14 октября 2017)
=============================================================### Улучшения
 * Восстановлен `RLMSyncPermissionSortPropertyUserID`, чтобы позволить пользователям сортировать разрешения для своих собственных Realms, которые они предоставили другим.

### Исправления ошибок
 * `-[RLMResults<RLMSyncPermission *> indexOfObject:]` теперь правильно учитывает уровень доступа.
 * Исправлена проблема с распараллеливанием, которая могла привести к аварийному завершению работы при доступе к освобожденному объекту конфигурации, если по умолчанию конфигурация была установлена из другого потока.
 * Исправлена проблема, при которой произошел сбой при перечислении после очистки данных во время миграции.
 * Исправлена ошибка, при которой синхронизированный Realm не мог быть перезапущен даже после успешного сброса клиента в некоторых случаях.
 * Исправлена ошибка, при которой подсистема синхронизации слишком долго ждала для повторного подключения к серверу в определенных случаях.
 * Исправлена ошибка, при которой зашифрованные метаданные, связанные с синхронизацией, были неправильно удалены при обновлении пользователей, что приводило к выходу всех пользователей из системы.
 * Исправлена ошибка, при которой данные, связанные с разрешениями, продолжали синхронизироваться с клиентом даже после выхода пользователя, которому принадлежали эти данные.* Исправлена проблема, при которой уведомления о коллекциях могли быть доставлены неоднородно, если уведомление было добавлено внутри другого уведомления для той же коллекции. 3.0.0-rc.1 Примечания к выпуску (2017-10-03)
 =============================================================### Критические изменения
* Удалено `RLMSyncPermissionSortPropertyUserID`, чтобы отразить изменения в том, как Realm Object Server отображает разрешения для пользователя.
* Удалены классы `RLMSyncPermissionOffer` и `RLMSyncPermissionOfferResponse` и связанные с ними вспомогательные методы и функции. Вместо них следует использовать методы `-[RLMSyncUser createOfferForRealmAtURL:accessLevel:expiration:callback:]` и `-[RLMSyncUser acceptOfferForToken:callback:]`.

### Исправления ошибок

* Имя элемента ключчейна, используемое Realm для управления ключами шифрования метаданных, связанных с синхронизацией, теперь устанавливается на уникальное имя для каждого приложения на основе идентификатора пакета. Ключи, которые ранее хранились в общем элементе ключчейна Realm, будут прозрачно перенесены в элемент ключчейна для каждого приложения.
* Исправлена проблема с загрузкой Realm core бинарников, когда Xcode's command-line tools заданы как активная директория разработчика для командной строки.
* Исправлен сбой, который мог произойти при разрешении ThreadSafeReference для `List`, чей родительский объект был удален.

3.0.0-beta.4 Примечания к выпуску (2017-09-22)
=============================================================### Критические изменения

* Переименуйте `List. remove(objectAtIndex:)` в `List. remove(at:)`, чтобы соответствовать названию, используемому в `RangeReplaceableCollection`.
* Переименуйте `List. swap()` в `List. swapAt()`, чтобы соответствовать названию, используемому в `Array`.
* Удалите ограничение типа `RLMObject` для параметра типа `RLMArray` и `RLMResults`, заменив его на `NSObject`. Это может привести к необходимости добавления некоторых приведений типов для разрешения неоднозначности типов.
* Удалите `RLMPropertyTypeArray` в пользу отдельного булевого свойства `array` в `RLMProperty`/`Property`.
* Удалите `RLMSyncPermissionResults`. `RLMSyncPermission` теперь предоставляются с помощью `RLMResults`. Эта коллекция поддерживает все обычные операции коллекции, кроме установки значений с помощью KVO (поскольку `RLMSyncPermission` являются неизменяемыми) и операций агрегации свойств.
* Ассоциированный тип `Element` в `RealmCollection` переименован в `ElementType`.
* Тип параметра типа для Realm Swift коллекций (`List`, `Results`, `AnyRealmCollection`, и `LinkingObjects`) изменен с `T` на `Element`.
* Тип параметра типа для `RealmOptional` изменен с `T` на `Value`.
* `RLMSyncUserInfo` значительно улучшен. Теперь он содержит метаданные о пользователе, хранящиеся на Realm Object Server, а также список всех данных учетных записей пользователя, связанных с этим пользователем.
* Начиная с Swift 4, `List` теперь соответствует `MutableCollection` вместо `RangeReplaceableCollection`.Для Swift 4 удалена пустая коллекция инициализатор, а также добавлены стандартные реализации методов заменяемой коллекции, которые имеют смысл для `List`.
* `List.removeLast()` теперь выбрасывает исключение, если список пуст, чтобы более точно соответствовать поведению стандартной библиотеки `Collection.removeLast()`. ### Улучшения* `List` теперь может содержать значения типов `Bool`, `Int`, `Int8`, `Int16`,
   `Int32`, `Int64`, `Float`, `Double`, `String`, `Data` и `Date` (а также
   опциональные версии всех этих типов) помимо подклассов `Object`.
   Запросы `List`'ов, содержащих значения, отличные от подклассов `Object`, пока
   не реализованы.
 * `RLMArray` теперь может быть ограничен протоколами `RLMBool`, `RLMInt`,
   `RLMFloat`, `RLMDouble`, `RLMString`, `RLMData` и `RLMDate` помимо протоколов,
   определенных с помощью `RLM_ARRAY_TYPE`.  По умолчанию `RLMArray`'ы, содержащие
   типы, отличные от `RLMObject`, могут содержать null.  Указание, что свойство
   является обязательным (переопределением `+requiredProperties:`), сделает
   значения внутри массива обязательными.  Запросы `RLMArray`'ов, содержащих
   значения, отличные от подклассов `RLMObject`, пока не реализованы.
 * Открытие синхронизированного Realm, локальная копия которого была создана с
   помощью более ранней версии Realm Mobile Platform, когда миграция невозможна
   к текущей версии, приведет к ошибке `RLMErrorIncompatibleSyncedFile` /
   `incompatibleSyncedFile`.  При возникновении такой ошибки исходный файл будет
   перемещен в резервное хранилище, и будущие попытки открыть синхронизированный
   Realm приведут к созданию нового файла.  Если вы хотите мигрировать данные из
   резервного Realm, вы можете открыть его с помощью конфигурации резервного
   Realm, доступной на объекте ошибки.
 * Добавлена предварительная поддержка частичной синхронизации.  Синхронизация позволяет открыть синхронизированный Realm таким образом, чтобы
   только объекты, запрошенные пользователем, синхронизировались на устройство.
   Вы можете использовать её, установив свойство `isPartial` на объекте
   `SyncConfiguration`, открыть Realm и затем вызвать `Realm.subscribe(to:where:callback:)`
   с типом объекта, который вас интересует, строкой, содержащей запрос,
   определяющую, какие объекты вы хотите подписаться на, и обратным вызовом,
   который будет отчитываться о результатах. Вы можете добавить столько
   подписок к синхронизированному Realm, сколько необходимо.### Исправления ошибок

* API Realm Swift, фильтрующие или ищущие индекс объекта на основе форматной
  строки, теперь правильно обрабатывают опциональные аргументы в их вариадических
  аргументных списках.3. 0. 0-beta. 3 Примечания к выпуску (2017-08-23)
============================================================

### Изменения, нарушающие обратную совместимость

* Поддержка iOS 7 прекращена.
  * Вычисляемые свойства в типах объектов Realm теперь обнаруживаются и больше не добавляются в автоматически сгенерированную схему.
  * Метод `-[RLMRealm addOrUpdateObjectsInArray:]` переименован в `-[RLMRealm addOrUpdateObjects:]` для согласованности с похожими методами, добавляющими или удаляющими объекты.
  * Методы `-[RLMRealm addOrUpdateObjects:]` и `-[RLMRealm deleteObjects:]` теперь требуют, чтобы их аргумент соответствовал протоколу `NSFastEnumeration`, чтобы соответствовать похожим API, которые также принимают коллекции.
  * Устаревшие классы `{RLM}SyncPermission` и `{RLM}SyncPermissionChange` удалены.
  * Класс `{RLM}SyncPermissionValue` переименован в `{RLM}SyncPermission`. Свойство `userId` переименовано в `identity`, а инициализатор `-initWithRealmPath:userID:accessLevel:` переименован в `-initWithRealmPath:identity:accessLevel:`.
  * Устаревшие API `-[RLMSyncUser permissionRealmWithError:]` и `SyncUser.permissionRealm()` удалены. Используйте новую систему разрешений.
  * Устаревший класс ошибки `RLMSyncErrorBadResponse` удалён. Используйте `RLMSyncAuthErrorBadResponse` вместо него.
  * Способ передачи пользователю ошибок интерактивного синхронного соединения (перезагрузка клиента и отказ в доступе) изменён. Вместо блока, который можно вызвать для немедленного удаления файла Realm, который вызывает ошибку, теперь возвращается неизвестный объект типа `RLMSyncErrorActionToken` в словаре `userInfo` объекта ошибки.Этот объект ошибки можно передать в новый API `+[RLMSyncSession immediatelyHandleError:]` для удаления файлов.
  * Удалены API `-[NSError rlmSync_clientResetBlock]` и `-[NSError rlmSync_deleteRealmBlock]`.
  * Возвращаемые типы API `SyncError.clientResetInfo()` и `SyncError.deleteRealmUserInfo()` изменены. Теперь они возвращают объекты `RLMSyncErrorActionToken` или `SyncError.ActionToken` вместо замыканий.
  * Удалено экземплярное свойство `Object.className`.
  * Классовые методы `Object.className()`, `Object.objectUtilClass()` и свойство `Object.isInvalidated` больше не могут быть переопределены.
  * Callback, который выполняется при успешном или неудачном входе пользователя в систему, теперь по умолчанию выполняется на главной очереди, или может быть явно указанной новым параметром `callbackQueue` в API `{RLM}SyncUser.logIn(... )`.
  * Переименован метод `{RLM}NotificationToken.stop()` в `invalidate()` и метод `{RealmCollection,SyncPermissionResults}.addNotificationBlock(_:)` в `observe(_:)` для отражения новых KVO API Foundation.
  * Перечисление `RLMSyncProgress` переименовано в `RLMSyncProgressMode`.
  * Удалено устаревшее свойство `{RLM}SyncManager.disableSSLValidation`. Отключение проверки SSL теперь выполняется на уровне каждого Realm, устанавливая свойство `enableSSLValidation` в `{RLM}SyncConfiguration`.
  * Исправлены пустые строки, двоичные данные и null на правой стороне операторов `BEGINSWITH`, `ENDSWITH` и `CONTAINS`, чтобы соответствовать семантике Foundation, которая никогда не соответствует строкам или данным.
  * Поведение сравнения и хеширования объекта `Object` на Swift теперь работает так же, как и раньше.   как и для `RLMObject` (объекты считаются равными только если их модель определяет
    первичный ключ).
  * Исправлено поведение свойства хеширования `Object`, когда модель объекта не имеет
    первичного ключа.
  * Исправлена проблема, связанная с тем, что если модель класса на Swift определяет
    управляемые свойства, не являющиеся шаблонными, после шаблонных свойств Realm (например,
    `List<T>`), схема будет построена неправильно. Исправлена проблема, связанная с тем,
    что создание таких моделей из массива может завершиться ошибкой. ### Улучшения* Добавлен Swift API `Object.isSameObject(as:_)` для выполнения той же функции, что и существующий Objective-C API `-[RLMObject isEqualToObject:]`.
* Обнародованы дополнительные ошибки, связанные с аутентификацией, которые могут быть отчетливо представлены Realm Object Server.
* Теперь можно зарегистрировать обработчик ошибок на `{RLM}SyncUser` для отчета об ошибках, связанных с аутентификацией, которые влияют на пользователя.

### Исправления ошибок

* Пользователи синхронизации теперь автоматически выходят из системы при получении определенных типов ошибок, указывающих на то, что они больше не вошли в систему сервера. Например, пользователи, аутентифицированные с помощью третьих сторон, обнаружат, что они вышли из Realm Object Server, если служба идентификации третьей стороны указывает, что их учетная запись больше не действительна.
* Устранены высокое использование ЦП и зависания в определенных случаях при обработке уведомлений о коллекциях в сильно связанных объектных графах.

3.0.0-beta.2 Примечания к выпуску (2017-07-26)
=============================================================

### Переработки* Удалены следующие устаревшие Objective-C API:
  `-[RLMArray sortedResultsUsingProperty:ascending:]`,
  `-[RLMCollection sortedResultsUsingProperty:ascending:]`,
  `-[RLMResults sortedResultsUsingProperty:ascending:]`,
  `+[RLMSortDescriptor sortDescriptorWithProperty:ascending:]`,
  `RLMSortDescriptor.property`.
  Эти API были заменены эквивалентными API, которые принимают или возвращают ключевые пути вместо имен свойств.
* Удален следующий устаревший Objective-C API:
  `+[RLMRealm migrateRealm:configuration:]`.
  Пожалуйста, используйте `+[RLMRealm performMigrationForConfiguration:error:]` вместо.
* Удалены следующие устаревшие Swift API:
  `AnyRealmCollection.sorted(byProperty:, ascending:)`,
  `LinkingObjects.sorted(byProperty:, ascending:)`,
  `List.sorted(byProperty:, ascending:)`,
  `Results.sorted(byProperty:, ascending:)`,
  `SortDescriptor.init(property:, ascending:)`,
  `SortDescriptor.property`.
  Эти API были заменены эквивалентными API, которые принимают или возвращают ключевые пути вместо имен свойств.
* Objective-C и Swift API `create(_:, value: update:)` теперь правильно устанавливают значение null для nullable свойств при обновлении существующего объекта, если аргумент `value` указывает nil или `NSNull` для значения свойства.### Улучшения* Теперь возможно создание и вход в систему нескольких пользователей Realm Object Server с одной и той же идентичностью, если они происходят из разных серверов. Обратите внимание, что если URL-адреса являются разными псевдонимами для одного и того же сервера аутентификации, каждый пользователь всё ещё будет рассматриваться как отдельный (например, у каждого пользователя будет свой собственный экземпляр каждого синхронизированного Realm, открытого с их помощью). Сильно рекомендуется, чтобы пользователи, определённые с помощью типа квалификации токена доступа, входили в систему с указанным URL-адресом сервера аутентификации; этот параметр станет обязательным в будущей версии SDK.
* Добавлен API `-[RLMSyncUser retrieveInfoForUser:identityProvider:completion:]`, который позволяет администраторам пользователей получать информацию о пользователе на основе их идентичности поставщика (например, имя пользователя). Требуется любая версия Realm Object Server 1.8.2 или выше.

### Исправления ошибок

* Realm больше не выбрасывает исключение "несоответствующая инструкция" в некоторых случаях при открытии синхронизированного Realm асинхронно.

3.0.0-beta Примечания к выпуску (2017-07-14)
=============================================================

### Переработки

* Синхронизированные Realms теперь требуют сервер, работающий с Realm Object Server версии 2.0 или выше.### Улучшения

* Добавлен новый код ошибки для обозначения ошибок "отказано в доступе" при работе с синхронизированными Realms, а также блок, который можно вызвать для уведомления привязки о том, что файлы Realm, вызывающие ошибку, должны быть немедленно удалены. Это позволяет восстановиться от ошибок "отказано в доступе" более надежным образом. Подробнее см. документацию для `RLMSyncErrorPermissionDeniedError`.
* Добавлен API `-[RLMSyncPermissionValue initWithRealmPath:username:accessLevel:]`, который позволяет применять разрешения к пользователю на основе их имени пользователя (обычно, электронной почты). Требуется любая версия Realm Object Server 1.6.0 или выше.
* Улучшена производительность создания объектов Swift, содержащих хотя бы одно свойство типа List.

### Исправления ошибок

* `List.description` теперь отображает правильные типы для вложенных списков.
* Исправлено инициализирование неуправляемых объектов, когда тип вложенного свойства возвращал `false` от `Object.shouldIncludeInDefaultSchema()`.
* Не очищать RLMArrays при самоприсваивании.

2.10.2 Примечания к выпуску (2017-09-27)
=============================================================

### Исправления ошибок* Имя элемента ключчейна, используемое Realm для управления ключами шифрования метаданных, связанных с синхронизацией, теперь устанавливается на уникальное имя для каждого приложения на основе идентификатора пакета. Ключи, которые ранее хранились в едином общем элементе ключчейна Realm, будут прозрачно перенесены в элемент ключчейна для каждого приложения.
* Исправлена проблема с загрузкой Realm core бинарников, когда Xcode's command-line tools заданы как активная директория разработчика для командной строки.
* Исправлен сбой, который мог произойти при разрешении ThreadSafeReference для `List`, чей родительский объект был удален.2.10.1 Примечания к выпуску (2017-09-14)
=============================================================

Теперь создаются бинарные файлы для Swift 3.0, 3.0.1, 3.0.2, 3.1, 3.2 и 4.0.

### Улучшения

* Вспомогательные файлы по умолчанию исключены из резервного копирования.

### Исправления ошибок

* Исправлены случаи, когда присваивание свойства RLMArray самому себе приводило к очистке RLMArray.

2.10.0 Примечания к выпуску (2017-08-21)
=============================================================

### Изменения в API

* Нет.

### Улучшения

* Обнаружены дополнительные ошибки, связанные с аутентификацией, которые могут быть отчетливо представлены Realm Object Server.
* Теперь можно зарегистрировать обработчик ошибок для `{RLM}SyncUser` для отчета об ошибках, связанных с аутентификацией, которые влияют на пользователя.

### Исправления ошибок

* Сортировка типов коллекций Realm больше не вызывает исключение на iOS 7.
* Пользователи синхронизации теперь автоматически выходят из системы при получении определенных типов ошибок, которые указывают на то, что они больше не вошли в систему сервера. Например, пользователи, аутентифицированные с помощью учетных данных сторонних сервисов, обнаружат, что они вышли из Realm Object Server, если сервис идентификации стороннего сервиса указывает, что их учетные данные больше не действительны.
* Устранены высокие загрузки ЦП и зависания в некоторых случаях при обработке уведомлений коллекций в сильно связанных объектных графах.2.9.1 Примечания к выпуску (2017-08-01)
=============================================================

### Изменения в API

* Нет.

### Улучшения

* Нет.

### Исправления ошибок

* Блок `shouldCompactOnLaunch` больше не вызывается, если Realm по этому пути уже открыт на других потоках.
* Исправлено утверждение о несоответствии в уведомлениях коллекций при изменении схемы через синхронизацию, когда активен блок уведомлений.

2.9.0 Примечания к выпуску (2017-07-26)
=============================================================

### Изменения в API, нарушающие обратную совместимость

* Нет.

### Улучшения* Добавлен новый код ошибки для обозначения ошибок 'permission denied' при работе
   с синхронизированными Realms, а также блок, который можно вызвать для информирования
   привязки о том, что файлы Realm, вызвавшие ошибку, следует немедленно удалить. Это позволяет
   восстановиться от ошибок 'permission denied' более надежным образом. См. документацию для
   `RLMSyncErrorPermissionDeniedError` для получения дополнительной информации.
* Добавлен API `-[RLMSyncPermissionValue initWithRealmPath:username:accessLevel:]`
   для применения разрешений к пользователю на основе его имени пользователя
   (обычно, электронной почты). Требуется любая версия Realm Object Server 1.6.0 или выше.
* Улучшена производительность создания объектов Swift, содержащих хотя бы одно свойство List.
* Теперь возможно создание и вход в систему нескольких пользователей Realm Object Server
   с одним и тем же идентификатором, если они происходят из разных серверов. Обратите внимание,
   что если URL-адреса являются разными псевдонимами для одного и того же сервера аутентификации,
   каждый пользователь все еще будет рассматриваться как отдельный (например, у каждого будет
   своя копия каждого синхронизированного Realm, открытое с их помощью). Сильно рекомендуется
   входить в систему пользователей, определенных с помощью типа квалификации access token,
   с указанием URL-адреса сервера аутентификации; этот параметр станет обязательным в будущей
   версии SDK.* Добавлен API `-[RLMSyncUser retrieveInfoForUser:identityProvider:completion:]`
   для получения информации о пользователе администраторами на основе их идентификатора поставщика
   (например, имя пользователя). Требуется версия Realm Object Server 1.8.2 или выше.### Исправления ошибок

* `List.description` теперь отображает правильные типы для вложенных списков.
* Исправлено инициализирование неуправляемых объектов, когда вложенный тип свойства вернул `false` от `Object.shouldIncludeInDefaultSchema()`.
* Не очищать RLMArrays при самоприсваивании.

2.8.3 Примечания к выпуску (2017-06-20)
=============================================================

### Исправления ошибок

* Правильное обновление свойств RealmOptional при добавлении объекта с `add(update: true)`.
* Добавлены недостающие кавычки в сообщениях об ошибках.
* Исправлена регрессия производительности при создании объектов с первичными ключами.

2.8.2 Примечания к выпуску (2017-06-16)
=============================================================

### Исправления ошибок

* Исправлено проблему, при которой синхронизированные Realms в конечном итоге отключались от удаленного сервера, если объект пользователя, используемый для определения их конфигурации синхронизации, был уничтожен.
* Восстановлена поддержка изменения первичных ключей в миграциях (сломано в 2.8.0).
* Возвращено поведение добавления объектов с nil свойствами в Realm до версии пред 2.8.0.

2.8.1 Примечания к выпуску (2017-06-12)
=============================================================
Добавлена поддержка сборки с Xcode 9 Beta 1.

### Исправления ошибок

* Исправлено установление свойства float на NaN.
* Исправлено падение приложения при использовании компактного запуска в сочетании с уведомлениями о коллекциях.2.8.0 Примечания к выпуску (2017-06-02)
=============================================================
### Изменения в API, нарушающие обратную совместимость

* Нет.

### Улучшения

* Включена поддержка шифрования на watchOS.
* Добавлен API `-[RLMSyncUser changePassword:forUserID:completion:]` для изменения пароля произвольного пользователя, если текущий пользователь имеет административные права и использует провайдер аутентификации Realm 'password'.
  Требуется любая версия Realm Object Server 1.6.0 или выше.

### Исправления ошибок

* Подавлены предупреждения `-Wdocumentation` в заголовках Realm C++ при использовании CocoaPods с Xcode 8.3.2.
* Выброшено соответствующее исключение вместо падения приложения при присваивании RLMArray свойству RLMArray другого типа.
* Исправлено падение приложения в больших (>4 ГБ) зашифрованных файлах Realm.
* Улучшена точность уведомлений о прогрессе синхронизации.
* Исправлено проблему, при которой синхронизированные Realms не подключались к удаленному серверу в определенных ситуациях, таких как когда приложение было вне сети при открытии Realms, но позже восстановило сетевое подключение.

2.7.0 Примечания к выпуску (2017-05-03)
=============================================================
### Изменения в API, нарушающие обратную совместимость

* Нет.### Улучшения
* Используйте API reachability для минимизации задержки повторного подключения, если была потеряна сеть.
* Добавлен API `-[RLMSyncUser changePassword:completion:]` для изменения пароля текущего пользователя, если используется провайдер аутентификации 'password' от Realm. Требуется версия Realm Object Server 1.4.0 или выше.
* `{RLM}SyncConfiguration` теперь имеет свойство `enableSSLValidation` (и соответствующий параметр по умолчанию в инициализаторе на Swift), чтобы позволить указывать валидацию SSL на уровне каждого сервера.
* Транзакции между синхронизированным Realm и Realm Object Server теперь могут превышать 16 МБ по размеру.
* Добавлены новые API для изменения и получения разрешений для синхронизированных Realms. Эти API предназначены для замены существующей системы разрешений на основе объектов Realm. Требуется версия Realm Object Server 1.1.0 или выше.

### Исправления ошибок* Поддержка классов моделей Realm, определенных в Swift с переопределенными именами Objective-C (например, `@objc(Foo) class SwiftFoo: Object {}`).
* Исправление `-[RLMMigration enumerateObjects:block:]`, возвращающего неверные объекты `oldObject` при перечислении имени класса после предыдущего удаления `newObject`.
* Исправление проблемы, при которой `Realm.asyncOpen(...)` не работает при открытии синхронизированного Realm, для которого у пользователя есть только права на чтение.
* Использование KVC для установки свойства `List` на `nil` теперь очищает его, соответствуя поведению свойств `RLMArray`.
* Исправление аварийного завершения программы из-за неудачи проверки утверждения `!m_awaiting_pong` при использовании синхронизированных Realm.
* Исправление плохой производительности или зависаний при выполнении регистронезависимых запросов на индексированные строковые свойства, содержащие много символов, которые не отличаются между верхним и нижним регистром (например, цифры, знаки препинания).

2.6.2 Примечания к выпуску (2017-04-21)
=============================================================

### Изменения в API, нарушающие обратную совместимость

* Нет.

### Улучшения

* Нет.

### Исправления ошибок* Исправление проблемы, при котором вызов `Realm.asyncOpen(...)` с конфигурацией синхронизированного Realm приводит к ошибке "Операция отменена".
* Исправление отсутствия поставки начального уведомления о коллекции для синхронизированных Realm.
* Исправление циклических ссылок, иногда приводящих к тому, что объекты не помечаются как измененные в уведомлениях о изменениях.2.6.1 Примечания к выпуску (2017-04-18)
=============================================================

### Изменения в API, нарушающие обратную совместимость

* Нет.

### Улучшения

* Нет.

### Исправления ошибок

* Исправление проблемы, при котором вызов `Realm.asyncOpen(...)` с конфигурацией синхронизированного Realm приводит к аварийному завершению программы в случае ошибки, вместо отчета об ошибке.
  Это небольшое изменение, нарушающее обратную совместимость исходного кода, если вы полагались на отчет об ошибке как на `Realm.Error`.

2.6.0 Примечания к выпуску (2017-04-18)
=============================================================

### Изменения в API, нарушающие обратную совместимость

* Нет.### Улучшения
* Добавлено свойство `{RLM}SyncUser.isAdmin`, указывающее, является ли пользователь администратором Realm Object Server.
* Добавлена API для асинхронного открытия Realm и передачи его в блок на заданной очереди. Это выполняет все необходимые действия для приведения Realm к состоянию, пригодному для использования (например, выполнение потенциально затратных миграций) на фоновом потоке перед переключением на заданную очередь. Кроме того, синхронизированные Realmы ждут загрузки всех доступных на момент начала операции удаленных данных и их локального доступа.
* Добавлено блочное свойство `shouldCompactOnLaunch` при конфигурировании Realm для определения, следует ли его компактировать перед возвратом.
* Ускорена скорость выполнения безразличных к регистру запросов на индексированных строковых свойствах.
* Добавлены агрегатные методы коллекции RLMResults к RLMArray.
* Добавлена поддержка вызова агрегатных методов для неуправляемых списков.

### Исправления ошибок* Исправлено мертвое простое состояние (deadlock), возникающее при одновременном открытии нескольких процессами Realm.
* Исправлено возвращение неверных значений методами `value(forKey:)` и `value(forKeyPath:)` для свойств типа `List`.

2.5.1 Примечания к выпуску (2017-04-05)
=============================================================

### Повышение уровня API

* Нет изменений.

### Улучшения

* Нет изменений.

### Исправления ошибок

* Исправлено установление CocoaPods с статическими библиотеками и несколькими платформами.
* Исправлены непойманные исключения "Неверный номер версии" на потоке обработки уведомлений, за которыми следуют мертвые простые состояния при обновлении Realm.

2.5.0 Примечания к выпуску (2017-03-28)
=============================================================

Файлы, созданные Realm в этом выпуске, не могут быть прочитаны более ранними версиями Realm. Старые файлы всё ещё могут быть открыты, а файлы, открытые в режиме только для чтения, не будут изменены.

Если используются синхронизированные Realm, Realm Object Server должен работать версией 1.3.0 или выше.

Теперь создаются двоичные файлы для Swift 3.0, 3.0.1, 3.0.2 и 3.1.

### Повышение уровня API

* Нет изменений.

### Улучшения* Добавлена поддержка многократных сравнений объектов на равенство с `NULL`.
* Добавлена поддержка модификатора `[d]` на операторах сравнения строк для выполнения сравнений без учета диакритических знаков.
* Явно отмечено, что `[[RLMRealm alloc] init]` недоступно.
* Включено имя проблемного класса в сообщение об ошибке, когда недопустимый тип свойства отмечен как первичный ключ.### Исправления ошибок

* Исправлены неверные утверждения типа столбца, которые могли возникнуть после объединения схем синхронизацией.
* Устранено пустое транзакционное изменение при открытии синхронизированного Realm.
* Добавлена поддержка шифрования синхронизированных Realm с учетом значения `encryptionKey` конфигурации Realm.
* Исправлено падение при установке свойства типа `{NS}Data` близко к 16 МБ.
* Исправлено неверное чтение свойств типа `{NS}Data`, возвращающее `nil`.
* Уменьшено увеличение размера файла в случаях, когда версии Realm были закреплены при начале транзакций записи.
* Исправлено утверждение о несоответствии при записи в большие свойства типа `RLMArray`/`List`.
* Исправлены непойманные исключения `BadTransactLog` при извлечении недопустимых изменений из синхронизированных Realm.
* Исправлено утверждение о несоответствии при удалении наблюдаемого свойства типа `RLMArray`/`List` после его модификации.

2.4.4 Примечания к выпуску (2017-03-13)
=============================================================

### Изменения, нарушающие API

* Нет.

### Улучшения

* Добавлен класс `(RLM)SyncPermission` для возможности проверки прав доступа для
  Realms. Требуется любая версия Realm Object Server 1.1.0 или выше.
* Дополнительное уменьшение количества открытых файлов на каждый поток-специфический Realm на macOS, iOS и watchOS.

### Исправления ошибок* Исправлен сбой, который мог произойти при создании новых экземпляров Realm во время завершения работы приложения.
* Исправлен сбой, который мог привести к ошибкам с неверными номерами версий при доставке уведомлений о изменениях.
* Исправлен потенциальный сбой использования после освобождения памяти при проверке корректности результатов.
* Исправлено проблемное поведение, при котором сессия синхронизации может не закрываться правильно, если она получает ошибку во время завершения работы.
* Исправлены проблемы, при которых сессия синхронизации может не восстанавливаться правильно или попадать в некорректное состояние после восстановления после недействительности.
* Исправлено проблемное поведение, при котором уведомления могут не срабатывать при изменении дочерних объектов наблюдаемого объекта.
* Исправлено проблемное поведение, при котором уведомления о прогрессе сессии синхронизации могут некорректно отображать устаревшие значения.
* Исправлено проблемное поведение, при котором доступ к зашифрованным данным несколькими потоками может привести к повреждению данных или сбоям.
* Исправлено проблемное поведение, при котором определенные запросы `LIKE` могут зависнуть.
* Исправлено проблемное поведение, при котором метод `-[RLMRealm writeCopyToURL:encryptionKey:error]` может создать поврежденный файл Realm.* Исправлено проблемное поведение, при котором увеличение версии схемы синхронизированного Realm без фактического изменения схемы может привести к сбою.2.4.3 Примечания к выпуску (2017-02-20)
=============================================================

### Изменения, нарушающие API

* Нет.

### Улучшения

* Избегание копирования структур данных по требованию, что может увеличить размер файла, если запись не изменяет существующие значения.
* Улучшение производительности удаления всех объектов в RLMResults.
* Уменьшение количества открытых файлов на каждый поток-специфический Realm на macOS.
* Улучшение производительности запуска с большим количеством подклассов `RLMObject`/`Object`.### Исправления ошибок
* Исправлена проблема синхронизации Realm, при которой удаленные изменения не загружаются, когда срок действия токена доступа истекает и нет локальных изменений для отправки.
* Исправлена проблема, при которой значения, установленные на объекте Realm с помощью `setValue(value:, forKey:)`, которые сами по себе не являются объектами Realm, не правильно конвертируются в объекты Realm или не проверяются на валидность.
* Исправлена проблема, при которой `-[RLMSyncUser sessionForURL:]` мог возвращать неверное значение, отличное от nil, при передаче недействительного URL.
* `SyncSession.Progress.fractionTransferred` теперь возвращает 1, если нет передаваемых байтов.
* Исправлены уведомления о прогрессе синхронизации, зарегистрированные на фоновых потоках, путем переноса их на отдельный фоновый поток.
* Исправлены проблемы компиляции с Xcode 8.3 beta 2.
* Исправлены неверные значения уведомлений о прогрессе синхронизации для Realm, созданных с версией Realm, предшествующей 2.3.0.
* Исправлена интеграция с LLDB для отображения сводок `RLMResults`.
* Отклонены свойства Swift с именами, которые приводят к тому, что они попадают в семейство методов ARC, вместо того, чтобы вызывать ошибку при доступе к ним.
* Исправлено сортирование по пути ключа, когда объявленный порядок свойств не соответствует порядку свойств в файле Realm, что может произойти при добавлении свойств в разных версиях схемы. 2.4.2 Примечания к выпуску (30 января 2017)

============================================================### Исправления ошибок

* Исправлено проблемное поведение, при котором экземпляры `RLMRealm` могли окончиться в автозагрузочном пуле для других потоков.

2.4.1 Примечания к выпуску (2017-01-27)
=============================================================

### Исправления ошибок

* Исправлено проблемное поведение, при котором токены аутентификации не обновлялись автоматически перед истечением срока действия.

2.4.0 Примечания к выпуску (2017-01-26)
=============================================================
В этом выпуске прекращена поддержка компиляции с использованием Swift 2.x.
Теперь минимальная поддерживаемая версия Swift — 3.0.0.

### Повышающие изменения API

* Нет.

### Улучшения

* Добавлены уведомления о изменениях для отдельных объектов с API, похожим на API уведомлений для коллекций.

### Исправления ошибок

* Исправлены ошибки компиляции Realm Objective-C с Xcode 8.3 beta 1.
* Исправлены несколько проблем с обработкой ошибок при обновлении истекающих токенов аутентификации для синхронизированных Realms.
* Исправлено проблемное поведение, при котором возникали исключения `bad_version` в потоке фоновой работы Realm из-за гонки.

2.3.0 Примечания к выпуску (2017-01-19)
=============================================================

### Повышающие изменения API синхронизации

* Сделано поле `id` класса `PermissionChange` первичным ключом.

### Повышающие изменения API

* Нет.

### Улучшения* Добавлены классы `SyncPermissionOffer` и `SyncPermissionOfferResponse` для создания и принятия событий изменения разрешений между различными пользователями для синхронизированных Realms.
* Добавлена поддержка мониторинга прогресса синхронизации за счет регистрации блоков уведомлений на `SyncSession`. Укажите направление передачи (`.upload`/`.download`) и режим (`.reportIndefinitely`/`.forCurrentlyOutstandingWork`) для мониторинга.

### Исправления ошибок

* Исправлено неправильное пропускание уведомления при вызове `commitWrite(withoutNotifying:)`, который не должен был вызвать уведомление.
* Исправлены неправильные результаты и аварийные завершения при слиянии конфликтных вставок объектов синхронизацией, когда для этого типа объекта зарегистрировано уведомление о коллекции.

2.2.0 Примечания к выпуску (2017-01-12)
=============================================================
### Повышающие изменения API синхронизации (в бете)

* Поведение отчетности об ошибках, связанных с синхронизацией, было изменено. Ошибки, не связанные с конкретным пользователем или сессией, отчитываются только в том случае, если они классифицируются как "фатальные" основным синхронизационным движком.
* Добавлен `RLMSyncErrorClientResetError` в перечисление `RLMSyncError`.

### Изменения, нарушающие API

* Следующие API на Objective-C были отмечены как устаревшие в пользу новых или предпочтительных версий:| Устаревший API                                              | Новый API                                                     |
|:------------------------------------------------------------|:------------------------------------------------------------|
| `-[RLMArray sortedResultsUsingProperty:]`                   | `-[RLMArray sortedResultsUsingKeyPath:]`                    |
| `-[RLMCollection sortedResultsUsingProperty:]`              | `-[RLMCollection sortedResultsUsingKeyPath:]`               |
| `-[RLMResults sortedResultsUsingProperty:]`                 | `-[RLMResults sortedResultsUsingKeyPath:]`                  |
| `+[RLMSortDescriptor sortDescriptorWithProperty:ascending]` | `+[RLMSortDescriptor sortDescriptorWithKeyPath:ascending:]` |
| `RLMSortDescriptor.property`                                | `RLMSortDescriptor.keyPath`                                 |

* Следующие API на Swift были отмечены как устаревшие в пользу новых или предпочтительных версий:

| Устаревший API                                        | Новый API                                          |
|:------------------------------------------------------|:-------------------------------------------------|
| `LinkingObjects.sorted(byProperty:ascending:)`        | `LinkingObjects.sorted(byKeyPath:ascending:)`    |
| `List.sorted(byProperty:ascending:)`                  | `List.sorted(byKeyPath:ascending:)`              |
| `RealmCollection.sorted(byProperty:ascending:)`       | `RealmCollection.sorted(byKeyPath:ascending:)`   |
| `Results.sorted(byProperty:ascending:)`               | `Results.sorted(byKeyPath:ascending:)`           |
| `SortDescriptor(property:ascending:)`                 | `SortDescriptor(keyPath:ascending:)`             |
| `SortDescriptor.property`                             | `SortDescriptor.keyPath`                         |### Улучшения
* Введение API для безопасной передачи объектов между потоками. Создайте поточно-безопасную ссылку на поточно-ограниченный объект, передав его в конструктор `+[RLMThreadSafeReference referenceWithThreadConfined:]`/`ThreadSafeReference(to:)`, который можно безопасно передать в другой поток для разрешения в новом Realm с помощью `-[RLMRealm resolveThreadSafeReference:]`/`Realm.resolve(_:)`.
* Теперь Realm-коллекции могут быть отсортированы по свойствам отношений one-to-one.
* Оптимизация запросов `CONTAINS` для использования алгоритма Boyer-Moore (приблизительно 10-кратное увеличение скорости на больших наборах данных).

### Исправления ошибок* Установка параметра `deleteRealmIfMigrationNeeded` теперь также удаляет Realm, если требуется миграция формата файла, например, при переходе от файла, последний раз открытого с помощью Realm 0.x, к 1.x, или 1.x к 2.x.
* Исправлены запросы, содержащие вложенные выражения `SUBQUERY`.
* Исправлены ложные ошибки потока, возникающие, когда идентификатор потока повторно используется, в то время как экземпляр `RLMRealm` от старого потока всё ещё существует.
* Исправлены различные ошибки в методах агрегации (max, min, avg, sum).

2.1.2 Примечания к выпуску (2016-12-19)
=============================================================

В этом выпуске добавлены двоичные версии фреймворков Swift 3.0.2, построенные с помощью Xcode 8.2.

### Исправления, нарушающие синхронизацию (в бете)

* Переименованы все упоминания "iCloud" на "CloudKit" в API и комментариях, чтобы соответствовать названию в Realm Object Server.

### Исправления API

* Нет.

### Улучшения

* Добавлена поддержка запросов 'LIKE' (поиск по маске).

### Исправления ошибок

* Исправлено аутентификационное соединение с CloudKit.
* Исправлены предупреждения компилятора о "прямом доступе к глобальному слабому символу".

2.1.1 Примечания к выпуску (2016-12-02)
=============================================================

### Улучшения* Добавлены методы `RealmSwift.ObjectiveCSupport.convert(object:)`, чтобы помочь писать код, который работает между API Realm Objective-C и Realm Swift.
* Выброшены исключения при открытии Realm с неправильной конфигурацией, например:
    * `readOnly` установлен с конфигурацией синхронизации.
    * `readOnly` установлен с блоком миграции.
    * Блок миграции установлен с конфигурацией синхронизации.
* Значительно улучшена производительность транзакций записи, которые выполняют большое количество изменений для индексированных свойств, включая автоматическую миграцию при открытии файлов, написанных с помощью Realm 1.x.### Исправления ошибок
* Сбросьте метаданные синхронизации Realm в случае ошибки дешифрования.
* Исправлено проблемное место, препятствующее использованию синхронизированных Realms в Xcode Playgrounds.
* Исправлено срабатывание утверждения при миграции свойства модели из типа объекта в тип `RLMLinkingObjects`.
* Исправлена исключительная ошибка `LogicError: Bad version number`, возникающая при использовании `RLMResults` без блоков уведомлений и явного вызова `-[RLMRealm refresh]` из того же потока.
* Пользователи, которые вышли из системы, больше не возвращаются из `+[RLMSyncUser currentUser]` или `+[RLMSyncUser allUsers]`.
* Исправлены несколько проблем, которые могли возникнуть при создании или добавлении 1001-го объекта данного типа в RLMArray/List, включая аварийное завершение при повторном запуске существующих запросов и возможное повреждение данных.
* Исправлен потенциальный сбой при выходе приложения из-за условия гонки при разрушении глобальных статических переменных.
* Исправлены условия гонки при ожидании завершения синхронизированных загрузок или загрузок, которые могли привести к сбоям или вызову обратного вызова слишком рано.

### 2.1.0 Примечания к выпуску (2016-11-18)
=============================================================

### Критические изменения синхронизации (в бете)
* Нет.

### Критические изменения API
* Нет.

### Улучшения* Добавлена возможность пропуска вызова определённых блоков уведомлений при выполнении записи транзакции.

### Исправления ошибок

* Отправка уведомлений коллекции при начале записи транзакции, которая продвигает версию чтения Realm (ранее уведомления отправлялись только на уровне Realm).
* Исправление некоторых сценариев, которые приводили к несогласованным состояниям при использовании уведомлений коллекции.
* Исправление нескольких проблем с гонкой в функциональности уведомлений.
* Отмена отправки уведомлений о изменениях Realm при отмене записи транзакции.

2.0.4 Примечания к выпуску (2016-11-14)
=============================================================

### Критические изменения синхронизации (в бете)* Удаление `RLMAuthenticationActions` и замена `+[RLMSyncCredential credentialWithUsername:password:actions:]` на `+[RLMSyncCredential credentialsWithUsername:password:register:]`.
* Переименование `+[RLMSyncUser authenticateWithCredential:]` на `+[RLMSyncUser logInWithCredentials:]`.
* Переименование типов и методов, связанных с "credentials", на `RLMSyncCredentials`/`SyncCredentials` и последовательное использование термина "credentials" во множественном числе.
* Изменение `+[RLMSyncUser all]` на возврат словаря идентификаторов к пользователям и переименование на:
  * `+[RLMSyncUser allUsers]` в Objective-C.
  * `SyncUser.allUsers()` в Swift 2.
  * `SyncUser.all` в Swift 3.
* Переименование `SyncManager.sharedManager()` на `SyncManager.shared` в Swift 3.
* Изменение `Realm.Configuration.syncConfiguration` на использование структуры `SyncConfiguration` вместо именованного кортежа.
* `+[RLMSyncUser logInWithCredentials:]` теперь вызывает блок обратного вызова на фоновом потоке.### Критические изменения API

* Нет.

### Улучшения

* Добавление `+[RLMSyncUser currentUser]`.
* Добавление возможности изменения прав доступа для чтения, записи и управления синхронизированными Realm с помощью управления Realm, полученного через API `-[RLMSyncUser managementRealmWithError:]` и класса `RLMSyncPermissionChange`.

### Исправления ошибок

* Нет.

2.0.3 Примечания к выпуску (2016-10-27)
=============================================================

Этот выпуск добавляет двоичные версии фреймворков Swift 3.0.1, построенных с помощью Xcode 8.1 GM seed.

### Изменения, нарушающие API

* Нет.

### Улучшения

* Нет.

### Исправления ошибок

* Исправлено исключение `BadVersion`, вызванное гонкой при отправке уведомлений о изменениях коллекции.
* Исправлено завершение программы с утверждением при добавлении дополнительных классов модели и включении `deleteRealmIfMigrationNeeded`.
* Исправлено исключение `BadTransactLog` при удалении `RLMResults` в синхронизированном Realm.
* Исправлено завершение программы с утверждением при наличии активной транзакции записи при завершении процесса.
* Исправлено падение программы, которое могло произойти при работе с свойством `RLMLinkingObject` неуправляемого объекта.

2.0.2 Примечания к выпуску (2016-10-05)
=============================================================

Этот выпуск несовместим с протоколами предыдущих версий Realm Mobile Platform.

### Изменения, нарушающие API* Переименован класс `User` в `SyncUser` в Realm Swift для ясности того, что он относится к Realm Mobile Platform, и для избежания потенциальных конфликтов с другими типами `User`.

### Исправления ошибок

* Исправлены заголовки Realm для совместимости с пред-C++11 диалектами Objective-C++.
* Исправлено неправильное слияние изменений `RLMArray/List`, когда объекты с одинаковым первичным ключом создаются на нескольких устройствах.
* Исправлены ошибки транзакционного журнала после удаления объектов на другом устройстве.
* Исправлено исключение `BadVersion` при завершении работы фонового рабочего процесса, когда старые результаты этого процесса по-прежнему передаются в другой поток.

2.0.1 Примечания к выпуску (2016-09-29)
=============================================================

### Исправления ошибок

* Исправлено завершение программы с утверждением при открытии файла Realm, написанного версией 1.x Realm, содержащего индексируемое nullable int или bool свойство.

2.0.0 Примечания к выпуску (2016-09-27)
=============================================================

Этот выпуск вводит поддержку для Realm Mobile Platform!
См. <https://realm.io/news/introducing-realm-mobile-platform/> для обзора этих замечательных новых функций.

### Изменения, нарушающие API* По многочисленным просьбам, `RealmSwift.Error` перемещен из пространства имен верхнего уровня в расширение `Realm` и теперь является `Realm.Error`, чтобы избежать конфликтов с `Swift.Error`.
* Файлы, созданные в Realm 2.0, не могут быть прочитаны версиями 1.x или более ранними. Старые файлы все еще могут быть открыты.### Улучшения* Файлы .log, .log_a и .log_b больше не существуют, а состояние, отслеживаемое в них, было перемещено в основной файл Realm. Это уменьшает количество открытых файлов, необходимых для Realm, улучшает производительность при открытии и записи в Realm, и устраняет небольшую возможность, когда выполнение операций записи блокирует другие процессы от открытия файла.

### Исправления ошибок

* Исправление ошибки утверждения при сортировке по нулевым свойствам.
* Исправление аварийного завершения работы в процессе во время коммита, которое также приводит к аварийному завершению работы всех других процессов с открытым файлом Realm.
* Правильная инициализация новых nullable float и double свойств, добавленных к существующим объектам, значением null вместо 0.
* Исправление переполнения стека при наличии у объектов индексированных строковых свойств очень длинных общих префиксов.
* Исправление условия гонки, которое может привести к аварийному завершению работы при использовании асинхронных запросов или уведомлений о коллекциях.
* Исправление ошибки, которая может привести к некорректному состоянию при удалении объекта, который ссылается на себя, из Realm.

1.1.0 Примечания к выпуску (2016-09-16)
=============================================================

В этом выпуске официально поддерживается Xcode 8, Swift 2.3 и Swift 3.0.
Предварительно собранные фреймворки теперь создаются с использованием Xcode 7.3.1 и Xcode 8.0.### Изменения в API

* Устаревание `migrateRealm:` в пользу нового метода `performMigrationForConfiguration:error:`, который следует конвенциям NSError Cocoa.
* Исправление проблемы, когда `RLMResults` использовал `id` вместо его общего типа в качестве типа возвращаемого значения для субскрипта.

### Улучшения* Улучшение сообщения об ошибке при неправильном использовании NSNumber в моделях Swift.
* Дальнейшее уменьшение размера загрузки предварительно собранных статических библиотек.
* Улучшение производительности сортировки, особенно для необязательных столбцов.
* Разрешение частичной инициализации объекта с помощью `initWithValue:`, откладывая проверку обязательных свойств до добавления объекта в Realm.
* Исправление некорректного обрезания константного значения для запросов вида `column < value` для столбцов типа `float` и `double`.
* Исправление аварийного завершения работы при доступе к агрегату как к типу `Int8`, `Int16`, `Int32` или `Int64`.
* Исправление конкурентной ситуации, которая могла привести к аварийному завершению работы, если RLMArray или List был освобожден на другом потоке, отличном от того, на котором он был создан.
* Исправление аварийного завершения работы при освобождении последнего ссылочного объекта, наблюдаемого изнутри наблюдения.
* Исправление аварийного завершения работы при использовании `initWithValue:` для создания вложенного объекта для класса с неинициализированной схемой.
* Обеспечение уникальности первичных ключей для `RealmOptional` при использовании установщика значения `value`.

1.0.2 Примечания к выпуску (2016-07-13)
=============================================================### Изменения, нарушающие API

* Попытка добавления объекта без свойств в Realm теперь приводит к выбросу исключения вместо того, чтобы просто ничего не делать.

### Улучшения

* Swift: Теперь блок `write` может `throw`, откатывая все изменения, сделанные до этого в транзакции.
* Уменьшение занимаемого адресного пространства при коммите записывающих транзакций.
* Значительное уменьшение размера загружаемых предварительно собранных бинарников и незначительное уменьшение вклада Realm в размер приложений.
* Улучшение производительности при доступе к свойствам RLMArray и создании объектов с List-свойствами.

### Исправления ошибок* Исправление аварийного завершения при чтении общей схемы из наблюдаемого объекта Swift.
* Исправление аварийного завершения или получения неверных результатов при передаче массива значений в `createOrUpdate` после переупорядочения свойств класса.
* Убедитесь, что первое уведомление Results всегда передает .Initial, даже если между добавлением уведомления и первым его доставлением есть записывающая транзакция.
* Исправление аварийного завершения при удалении всех объектов в Realm во время быстрого перечисления результатов запроса из этого Realm.
* Обработка EINTR от flock() вместо аварийного завершения.
* Исправление неверного поведения после вызова `[RLMRealm compact]`.
* Исправление живого обновления и уведомлений для Results, созданных из предиката, включающего обратное отношение, чтобы они срабатывали при изменении объекта на противоположном конце отношения.1.0.1 Примечания к выпуску (2016-06-12)
=============================================================

### Изменения, нарушающие API

* Нет.

### Улучшения

* Значительное улучшение производительности при открытии файлов Realm и незначительное улучшение производительности при коммитировании записывающих транзакций.### Исправления ошибок

* Swift: Исправлено исключение, выбрасываемое при попытке создания или обновления экземпляров `Object` с помощью `add(:_update:)` при наличии первичного ключа типа `RealmOptional`.
* Xcode playground в архиве с релизом Swift теперь успешно выполняется.
* Параметр `key` функций `Realm.objectForPrimaryKey(_:key:)`/ `Realm.dynamicObjectForPrimaryKey(_:key:)` теперь опционален.
* Исправлен потенциальный утечка памяти при закрытии Realms после открытия файла Realm на нескольких потоках, которые выполняются в активных циклах выполнения.
* Исправлены уведомления, которые могут прекращать работу после выполнения очень большого числа операций записи на tvOS.
* Исправлено утверждение "Destruction of mutex in use" при ошибке при открытии файла.
* Теперь Realm выбрасывает исключение, если подкласс `Object` определен с управляемым свойством Swift `lazy`. Объекты с игнорируемыми `lazy` свойствами теперь должны работать корректно.
* Обновлен скрипт LLDB для совместимости с недавними изменениями в реализации `RLMResults`.
* Исправлено утверждение при удалении файла Realm, когда он открыт, а затем открытие нового Realm по тому же пути. Обратите внимание, что это по-прежнему не поддерживаемый сценарий и может работать некорректно по другим причинам.

1.0.0 Примечания к выпуску (2016-05-25)
=============================================================Нет изменений с версии 0.103.2.

0.103.2 Примечания к выпуску (2016-05-24)
=============================================================

### Изменения в API

* Нет.

### Улучшения

* Улучшены сообщения об ошибках при возникновении ошибки ввода-вывода в методе `writeCopyToURL`.

### Исправления ошибок

* Исправлено утверждение, которое могло привести к ошибке при открытии Realm после предыдущего неудачного открытия этого Realm в определённых условиях в одном запуске приложения.
* Чтение опциональных целых чисел, чисел с плавающей запятой и двойных чисел внутри блока миграции теперь корректно возвращает `nil`, а не 0, когда сохранённое значение равно `nil`.

0.103.1 Примечания к выпуску (2016-05-19)
=============================================================

### Изменения в API

* Нет.

### Улучшения

* Нет.

### Исправления ошибок

* Исправлена ошибка, которая иногда приводила к изменению свойств типа `NSData` в объекте на нулевое значение при удалении другого объекта того же типа.

0.103.0 Примечания к выпуску (2016-05-18)
=============================================================

### Изменения в API

* Все функции, устаревшие в предыдущих выпусках, были полностью удалены.
* Поддержка Xcode 6.x и Swift версий, предшествующих 2.2, была полностью удалена.
* `RLMResults`/`Results` теперь становятся пустыми при удалении `RLMArray`/`List` или объекта, на который они зависят, вместо выбрасывания исключения при доступе.
* Миграции больше не выполняются при установке `deleteRealmIfMigrationNeeded`, вместо этого файл воссоздаётся.### Улучшения

* Добавлены свойства `invalidated` для `RLMResults`/`Results`, `RLMLinkingObjects`/`LinkingObjects`, `RealmCollectionType` и `AnyRealmCollection`. Эти свойства отражают, был ли упразднён Realm, с которым связан объект.
* Некоторые `NSError`'s, созданные Realm, теперь имеют более описательные загрузки информации для пользователя.

### Исправления ошибок

* Нет.

0.102.1 Примечания к выпуску (2016-05-13)
=============================================================

### Изменения в API

* Нет.

### Улучшения

* Возвращается ошибка `RLMErrorSchemaMismatch` вместо более общего `RLMErrorFail` при необходимости миграции.
* Улучшена производительность выделения экземпляров подклассов `Object`, имеющих свойства `LinkingObjects`.

### Исправления ошибок

* Свойства `RLMLinkingObjects`, объявленные в Swift-подклассах `RLMObject`, теперь работают корректно.
* Исправлено утверждение о несоответствии при удалении всех объектов определенного типа, вставка новых объектов и последующее удаление некоторых из них в рамках одного транзакционного блока, когда активен блок уведомлений для другого типа объекта, связывающегося с удаляемыми объектами.
* Исправлены сбои и/или некорректные результаты при запросе через несколько уровней свойств `LinkingObjects`.
* Исправлен сбой при открытии только для чтения Realms на нескольких потоках одновременно.
* Исправлено исключение `BadTransactLog` при хранении дат до эпохи Unix (1970-01-01).0.102.0 Примечания к выпуску (2016-05-09)
=============================================================

### Изменения в API

* Нет.

### Улучшения

* Добавлен метод для переименования свойств во время миграций:
  * Swift: `Migration.renamePropertyForClass(_:oldName:newName:)`
  * Objective-C: `-[RLMMigration renamePropertyForClass:oldName:newName:]`
* Добавлен `deleteRealmIfMigrationNeeded` к `RLMRealmConfiguration`/`Realm.Configuration`. Когда это значение установлено в `true`, файл Realm будет автоматически удален и пересоздан при несоответствии схемы, вместо миграции в новую схему.

### Исправления ошибок

* Исправлены запросы `BETWEEN`, проходящие через свойства `RLMArray`/`List`, чтобы гарантировать, что один связанный объект удовлетворяет критериям `BETWEEN`, а не разные объекты в массиве удовлетворяют нижней и верхней границам.
* Исправлено конкурентное состояние при открытии Realm на одном потоке, когда он находится в процессе закрытия на другом потоке, что может привести к сбоям.
* Исправлен сбой, который мог привести к некорректному применению изменений, сделанных на одном потоке, на других потоках при их обновлении.
* Исправлен сбой при миграции к новому формату дат, введенной в версии 0.101.0.
* Исправлен сбой при запросе обратных отношений при удалении объектов.

0.101.0 Примечания к выпуску (2016-05-04)
=============================================================

### Изменения в API* Файлы, созданные этой версией Realm, не могут быть прочитаны старыми версиями Realm. Существующие файлы будут автоматически обновлены при открытии. Значительно улучшена производительность вычисления изменений коллекции для сложных объектных графов, особенно для графов с циклами.
* Свойства типа `NSDate` теперь поддерживают точность до наносекунд.
* Открытие одного файла Realm на нескольких потоках теперь делится одним общим отображением памяти файла для всех потоков, что значительно уменьшает необходимое количество памяти для работы с большими файлами.
* Сбой во время выполнения транзакции записи больше не блокирует другие процессы от выполнения транзакций записи в том же файле.
* Улучшена производительность обновления Realm (включая автоматическое обновление) при наличии активных объектов Results/RLMResults для этого Realm.### Исправления ошибок

* Исправлено нарушение утверждения "!more_before || index >= std::prev(it)->second)"
  в методе `IndexSet::do_add()`.
* Исправлен сбой при разрушении объекта `RLMArray` или `List` с неправильного потока.

0.100.0 Примечания к выпуску (2016-04-29)
=============================================================

### Изменения в API

* Методы `-[RLMObject linkingObjectsOfClass:forProperty]` и `Object.linkingObjects(_:forProperty:)`
  устарели в пользу свойств типа `RLMLinkingObjects` / `LinkingObjects`.

### Улучшения

* Автоматически поддерживаемое обратное направление отношений теперь может быть представлено
  как свойства типа `RLMLinkingObjects` / `LinkingObjects`. Эти свойства автоматически
  обновляются для отображения объектов, которые связаны с целевым объектом, могут использоваться
  в запросах и могут быть отфильтрованы как другие типы коллекций Realm.
* Запросы, сравнивающие объекты на равенство, теперь поддерживают многоуровневые пути ключей.

### Исправления ошибок

* Исправлено нарушение утверждения при завершении второй транзакции записи после транзакции
  записи, которая удалила объект, содержащий RLMArray/List, который имел активный блок уведомлений.
* Запросы, сравнивающие свойства `RLMArray` / `List` с использованием `!=`, теперь возвращают
  правильные результаты.

0.99.1 Примечания к выпуску (2016-04-26)
=============================================================

### Изменения в API

* Нет.

### Улучшения* Нет.

### Исправления ошибок

* Исправлен сценарий, который мог привести к нарушению утверждения
  "m_advancer_sg->get_version_of_current_transaction() ==
  new_notifiers.front()->version()".

0.99.0 Примечания к выпуску (2016-04-22)
=============================================================

### Изменения, нарушающие API

* Устаревание свойств типа `id`/`AnyObject`. Этот тип редко использовался, был мало полезен и не поддерживался в каждом другом привязанном Realm.
* Блок для `-[RLMArray addNotificationBlock:]` и `-[RLMResults addNotificationBlock:]` теперь принимает дополнительный параметр.
* Следующие API на Objective-C были устаревшими в пользу новых или предпочитаемых версий:

| Устаревший API                                         | Новый API                                               |
|:-------------------------------------------------------|:--------------------------------------------------------|
| `-[RLMRealm removeNotification:]`                      | `-[RLMNotificationToken stop]`                         |
| `RLMRealmConfiguration.path`                           | `RLMRealmConfiguration.fileURL`                        |
| `RLMRealm.path`                                        | `RLMRealmConfiguration.fileURL`                        |
| `RLMRealm.readOnly`                                    | `RLMRealmConfiguration.readOnly`                       |
| `+[RLMRealm realmWithPath:]`                           | `+[RLMRealm realmWithURL:]`                            |
| `+[RLMRealm writeCopyToPath:error:]`                   | `+[RLMRealm writeCopyToURL:encryptionKey:error:]`      |
| `+[RLMRealm writeCopyToPath:encryptionKey:error:]`     | `+[RLMRealm writeCopyToURL:encryptionKey:error:]`      |
| `+[RLMRealm schemaVersionAtPath:error:]`               | `+[RLMRealm schemaVersionAtURL:encryptionKey:error:]`  |
| `+[RLMRealm schemaVersionAtPath:encryptionKey:error:]` | `+[RLMRealm schemaVersionAtURL:encryptionKey:error:]`   |* Следующие API на Swift были устаревшими в пользу новых или предпочитаемых версий:

| Устаревший API                                | Новый API                                  |
|:----------------------------------------------|:-------------------------------------------|
| `Realm.removeNotification(_:)`                | `NotificationToken.stop()`                |
| `Realm.Configuration.path`                    | `Realm.Configuration.fileURL`             |
| `Realm.path`                                  | `Realm.Configuration.fileURL`             |
| `Realm.readOnly`                              | `Realm.Configuration.readOnly`            |
| `Realm.writeCopyToPath(_:encryptionKey:)`     | `Realm.writeCopyToURL(_:encryptionKey:)` |
| `schemaVersionAtPath(_:encryptionKey:error:)` | `schemaVersionAtURL(_:encryptionKey:)`    |### Улучшения

* Добавить информацию о добавленных, удаленных или измененных строках в уведомления, отправляемые Realm коллекциям.
* Улучшить сообщение об ошибке при незаконном добавлении к свойству `RLMArray` / `List` из значения по умолчанию или отдельного инициализатора (`init()`) до тех пор, пока схема не будет готова.

### Исправления ошибок

* Исправить использование после освобождения памяти, когда метод `dealloc` связанного объекта используется для удаления наблюдателей из объекта `RLMObject`.
* Исправить небольшую утечку памяти каждый раз, когда файл Realm открывается.
* Вернуть восстановимую ошибку `RLMErrorAddressSpaceExhausted` вместо аварийного завершения программы при недостатке доступного адресного пространства при инициализации Realm или коммите записи.0.98.8 Примечания к выпуску (2016-04-15)
=============================================================

### Изменения в API

* Нет.

### Улучшения

* Нет.

### Исправления ошибок

* Исправлен баг, который приводил к невозможности открытия некоторых зашифрованных файлов, созданных с помощью `-[RLMRealm writeCopyToPath:encryptionKey:error:]`.

0.98.7 Примечания к выпуску (2016-04-13)
=============================================================

### Изменения в API

* Нет.

### Улучшения

* Нет.

### Исправления ошибок

* Отметить дальнейшие инициализаторы в Objective-C как `NS_DESIGNATED_INITIALIZER` для предотвращения ситуации, когда они не правильно определены в подклассах объектов Swift, которые не соответствуют требованиям для автоматического наследования необходимых инициализаторов.
* `-[RLMResults indexOfObjectWithPredicate:]` теперь возвращает правильные результаты для `RLMResults` объектов, созданных путем фильтрации `RLMArray`.
* Изменить способ уничтожения объектов в Realm для предотвращения утечек памяти.
* `-[RLMResults indexOfObjectWithPredicate:]` теперь возвращает индекс первого совпадающего объекта для отсортированного `RLMResults`, соответствуя его документированному поведению.
* Исправить аварийное завершение программы при отмене транзакции, которая устанавливает отношение.
* Исправить аварийное завершение программы при запросе, который ссылается на удаленный объект.

0.98.6 Примечания к выпуску (2016-03-25)
=============================================================Предварительно собранные фреймворки теперь создаются с использованием Xcode 7.3.

### Изменения в API

* Нет.

### Улучшения

* Нет.

### Исправления ошибок

* Исправлен запуск юнит-тестов на iOS симуляторах и устройствах с Xcode 7.3.

0.98.5 Примечания к выпуску (2016-03-14)
=============================================================

### Изменения в API, нарушающие совместимость

* Нет.

### Улучшения

* Нет.

### Исправления ошибок

* Исправлен сбой при открытии Realm на 32-битных устройствах iOS.

0.98.4 Примечания к выпуску (2016-03-10)
=============================================================

### Изменения в API, нарушающие совместимость

* Нет.

### Улучшения

* Нет.

### Исправления ошибок

* Правильное отслеживание изменений, внесённых при добавлении объекта в Realm с помощью методов addOrUpdate:/createOrUpdate: для наблюдателей KVO существующих объектов с таким первичным ключом.
* Исправлены сбои и различные проблемы при откате миграции, добавляющей свойства ссылок на объекты, из-за ошибки в блоке миграции.
* Исправлены ошибки утверждения при удалении объектов внутри блока миграции для типа, у которого добавлено свойство ссылки на объект в этой миграции.
* Исправлены ошибки утверждения в `Query::apply_patch` при обновлении определённых видов запросов после завершения записи транзакции.

0.98.3 Примечания к выпуску (2016-02-26)
=============================================================### Improvements

* Initializing the general schema now happens three times faster.

### Bug Fixes

* Using Realm Objective-C from Swift with a connected Realm Swift no longer causes declared `ignoredProperties` to be ignored.
* Fixed assertion errors during rollback migration, adding properties of object references for a class.
* Fixed potential errors during cancellation of transaction write, modifying multiple `RLMArray`/`List` properties.
* Report the correct value for `inWriteTransaction` after an unsuccessful attempt to complete a write transaction.
* Support for CocoaPods 1.0 starting with the pre-release version 1.0.0.beta.4, maintaining backward compatibility with 0.39.

0.98.2 Release Notes (2016-02-18)
=============================================================

### API Changes

* None.

### Improvements

* Now supports aggregate operations (`ANY`, `NONE`, `@count`, `SUBQUERY`, etc.) for key paths starting with an object relationship, provided there is an `RLMArray`/`List` property somewhere in the key path.
* Support for predicates of the form `%@ IN arrayProperty`.

### Bug Fixes

* Using KVC collection operators for Swift collection types no longer throws an exception.
* Fixed reporting of `inWriteTransaction` in notifications.```
0.98.1 Примечания к выпуску (2016-02-10)
=============================================================

### Исправления ошибок

* Использование KVC коллекционных операторов на Swift коллекционных типов больше не вызывает исключение.
* Исправлено отчетное значение `inWriteTransaction` в уведомлениях, запущенных методом `beginWriteTransaction`.
* Содержимое свойств `List` и `Optional` теперь корректно сохраняется при копировании Swift объекта из одного Realm в другой и при выполнении других операций, которые приводят к рекурсивному обходу графа Swift объектов из Objective-C.
* Исправлено мёртвое простое замыкание при выполнении запросов внутри блока уведомлений Realm.
* Квалификаторы `ANY` / `SOME` / `NONE` теперь требуются в сравнениях, включающих ключевой путь, который проходит через свойство `RLMArray`/`List`. Ранее они требовались только в том случае, если первым ключом в ключевом пути был свойство `RLMArray`/`List`.
* Исправлены несколько сценариев, при которых по умолчанию схема была бы некорректно инициализирована, если первый Realm, открытый с использованием ограниченного подмножества классов (через `objectClasses`/`objectTypes`), был открыт.

0.98.0 Примечания к выпуску (2016-02-04)

Изменения в API

  • +[RLMRealm realmWithPath:]/Realm.init(path:) теперь наследуются от стандартной конфигурации.

  • Поддержка Swift 1.2 больше не предоставляется.### Улучшения

  • Добавлен метод addNotificationBlock для RLMResults, Results, RLMArray и List, который вызывает переданный блок каждый раз, когда коллекция изменяется.

  • Большая часть работы по поддержанию RLMResults/Results актуальными после операций записи выполняется на фоновом потоке, что помогает избежать блокировки основного потока.

  • Поддержка оператора SUBQUERY в NSPredicate. Оператор имеет следующие ограничения:

    • В выражении SUBQUERY допускается только оператор @count.
    • Выражение SUBQUERY(…).@count должно сравниваться с константой.
    • Коррелированные подзапросы ещё не поддерживаются.

Исправления ошибок

  • Нет.

0.97.1 Примечания к выпуску (2016-01-29)

Изменения в API

  • Нет.

Улучшения

  • Swift: Добавлен перечисление Error, позволяющее перехватывать ошибки, возникающие при инициализации RLMRealm/Realm.

  • Если при открытии realm в режиме только для чтения не был найден файл или не был найден каталог, указанный в пути, при попытке записи копии, будет выброшена ошибка RLMErrorFileNotFound вместо более общего RLMErrorFileAccess.

  • Значительно улучшена производительность при удалении объектов с одним или более индексированными свойствами.

  • Поддержка индексирования свойств типа BOOL/Bool и NSDate теперь доступна.

  • Swift: Добавлена поддержка индексирования опциональных свойств.### Исправления ошибок

  • Исправлены неправильные результаты или аварийные завершения работы при использовании -[RLMResults setValue:forKey:] на объекте RLMResults, отфильтрованном по ключу, который устанавливается.

  • Исправлены аварийные завершения работы при освобождении RLMRealm с неправильного потока.

  • Исправлены неправильные результаты методов агрегации в Results/RLMResults после удаления объектов, которые ранее были в результатах.

  • Исправлено аварийное завершение работы при добавлении нового свойства к существующему классу с более чем миллионом объектов в Realm.

  • Исправлены ошибки при открытии зашифрованных файлов Realm, созданных с помощью writeCopyToPath.

  • Исправлены аварийные завершения работы или неправильные результаты для запросов, использующих равенство отношений, в случаях, когда RLMResults остаётся активным и экземпляры целевого класса отношений удаляются.

Примечания к выпуску (2015-12-17)

=============================================================

Изменения, нарушающие API

  • Все устаревшие функции, упомянутые в предыдущих выпусках, были полностью удалены.

  • Добавлены общие аннотации типов для NSArrays и NSDictionaries в публичных API.

  • Добавление блока уведомлений Realm на поток, который не запущен изнутри цикла выполнения, теперь выбрасывает исключение вместо того, чтобы тихо никогда не вызвать блок уведомлений.### Улучшения

  • Поддержка tvOS.

  • Поддержка сборки Realm Swift из исходного кода при использовании Carthage.

  • Параметр-блок -[RLMRealm transactionWithBlock:]/Realm.write(_:) теперь помечен как __attribute__((noescape))/@noescape.

  • Теперь поддерживаются многие формы запросов с ключевыми путями с обеих сторон оператора сравнения.

  • Добавлена поддержка KVC коллекционных операторов в RLMResults и RLMArray.

  • Вместо зацикливания выбрасывается исключение в +[RLMRealm sharedSchema], если свойство Swift инициализировано вычисляемым значением, которое пытается открыть Realm самостоятельно.

Исправления ошибок

  • Устранена плохая производительность при вызове -[RLMRealm deleteObjects:] на RLMResults, который фильтрует объекты, когда есть другие классы, связанные с типом удаляемых объектов.
  • Теперь выбрасывается исключение при определении свойств типа Object, которые не поддерживаются.

0.96.3 Примечания к выпуску (2015-12-04)

Улучшения

  • Запросы больше не ограничены 16 уровнями группировки.

  • Переработана реализация зашифрованных Realm для того, чтобы они больше не мешали отладчикам.### Исправления ошибок

  • Исправлен сбой при попытке получения экземпляров объектов через dynamicObjects.

  • Вызывается исключение при запросе на ссылку, предоставляющую объекты из другого Realm.

  • Возвращаются пустые результаты при запросе на ссылку, предоставляющую несвязанный объект.

  • Исправлены сбои или неправильные результаты при вызове -[RLMRealm refresh] во время быстрого перечисления.

  • Добавлена поддержка Int8 для RealmOptional, MinMaxType и AddableType.

  • Установлено значение по умолчанию для новых добавленных необязательных свойств NSData как NSData с нулевым количеством байтов вместо nil.

  • Исправлен потенциальный сбой при удалении всех объектов одного класса.

  • Исправлены проблемы производительности при создании большого количества объектов с свойствами RLMArray/List.

  • Исправлена утечка памяти при использовании Object(value:) для подклассов с свойствами List или RealmOptional.

  • Исправлен сбой при вычислении среднего значения опционального целочисленного свойства.

  • Исправлены неправильные результаты поиска для некоторых запросов на целочисленные свойства.

  • Добавлена проверка ошибок для параметров realm равных nil в многих методах, таких как +[RLMObject allObjectsInRealm:].

  • Исправлена гонка между коммитами и открытием файлов Realm на новых потоках, которая могла привести к сбою.

  • Исправлены несколько сбоев при открытии файлов Realm.* -[RLMObject createInRealm:withValue:], -[RLMObject createOrUpdateInRealm:withValue:] и их варианты для по умолчанию Realm теперь всегда сопоставляют содержимое NSArray с свойствами в том же порядке, в котором они определены в модели. 0.96.2 Примечания к выпуску (2015-10-26) =============================================================Предварительно собранные фреймворки теперь создаются с использованием Xcode 7.1.

Исправления ошибок

  • Исправлено игнорирование опциональных свойств в Swift.
  • Исправлено установление CocoaPods на файловых системах с чувствительностью к регистру.

0.96.1 Примечания к выпуску (2015-10-20)

Исправления ошибок

  • Добавлена поддержка присваивания Results к свойствам List через KVC.
  • Учет версии схемы, заданной в конфигурации, в +[RLMRealm migrateRealm:].
  • Исправлено падение при использовании опциональных свойств Int16/Int32/Int64 в Swift.

0.96.0 Примечания к выпуску (2015-10-14)

  • Нет функциональных изменений с beta2.

0.96.0-beta2 Примечания к выпуску (2015-10-08)

Исправления ошибок

  • Добавлен RLMOptionalBase.h в podspec.

0.96.0-beta Примечания к выпуску (2015-10-07)

Изменения в API

  • Теперь требуется CocoaPods версии 0.38 или выше для установки Realm и RealmSwift как pods.

Улучшения* Функциональность, общая для List и Results, теперь объявляется в протоколе RealmCollectionType, к которому оба типа соответствуют.

  • Results.realm теперь возвращает Optional<Realm> для соответствия протоколу RealmCollectionType, но всегда возвращает .some(), так как Results не может существовать независимо от Realm.

  • Теперь доступны агрегатные операции для List: min, max, sum, average.

  • Завершение операций записи (через commitWrite / commitWriteTransaction и write / transactionWithBlock) теперь опционально позволяют обрабатывать ошибки при отсутствии места на диске.

  • Добавлено свойство isEmpty для RLMRealm/Realm для указания, содержит ли он объекты.

  • Теперь поддерживаются коллекционные операторы @count, @min, @max, @sum и @avg в запросах.### Исправления ошибок

  • Исправлено утверждение при вставке NSData размером между 8 МБ и 16 МБ.

  • Исправлено утверждение при откате миграции, которая удалила объектное соединение или свойство RLMArray/List.

  • Добавлен путь открытия файла к ошибкам открытия файла.

  • Исправлено падение, которое могло быть вызвано быстрым открытием и закрытием Realm много раз на нескольких потоках одновременно.

  • Исправлены несколько мест, где сообщения об ошибках включали имя неправильной функции, которая не сработала.

Исправления ошибок

  • Сборка архитектур фреймворка iOS Simulator с параметром -fembed-bitcode-marker.
  • Исправление аварийного завершения работы при открытии первого Realm с использованием подмножества классов, а последующие Realms открываются без использования подмножества классов.
  • Исправление несогласованных ошибок при использовании Object(value: ...) для инициализации значения по умолчанию свойства подкласса Object.
  • Вызов исключения при наличии объектов с массивами или объектными свойствами типа, не входящими в подмножество классов.

0.95.3 Примечания к выпуску (2015-10-05)

Исправления ошибок

  • Сборка архитектур фреймворка iOS Simulator с параметром -fembed-bitcode-marker.
  • Исправление аварийного завершения работы при открытии первого Realm с использованием подмножества классов, а последующие Realms открываются без использования подмножества классов.
  • Исправление несогласованных ошибок при использовании Object(value: ...) для инициализации значения по умолчанию свойства подкласса Object.
  • Вызов исключения при наличии объектов с массивами или объектными свойствами типа, не входящими в подмножество классов.

0.95.2 Примечания к выпуску (2015-09-24)

  • Включение bitcode для фреймворков iOS и watchOS.
  • Сборка библиотек с использованием окончательной версии Xcode 7, а не GM.0.95.1 Примечания к выпуску (23 сентября 2015) =============================================================

Улучшения

  • Добавлен недостающий обработчик KVO для перемещения и обмена объектов в RLMArray и List.

Исправления ошибок

  • Установка свойства первичного ключа на сохраненных RLMObject / Object через субскрипт или ключ-значение вызывает выброс исключения.
  • Исправлено аварийное завершение работы из-за условия гонки в RLMRealmConfiguration, где по умолчанию конфигурация находится в процессе копирования в одном потоке, а в другом потоке она освобождается.
  • Исправлено аварийное завершение работы при откате миграции, которая удалила объектное или массивное свойство из-за ошибки.

0.95.0 Примечания к выпуску (25 августа 2015)

Изменения в API* Следующие API были устаревшими в пользу нового класса RLMRealmConfiguration в Realm Objective-C:

Устаревший API Новый API
+[RLMRealm realmWithPath:readOnly:error:] +[RLMRealm realmWithConfiguration:error:]
+[RLMRealm realmWithPath:encryptionKey:readOnly:error:] +[RLMRealm realmWithConfiguration:error:]
+[RLMRealm setEncryptionKey:forRealmsAtPath:] -[RLMRealmConfiguration setEncryptionKey:]
+[RLMRealm inMemoryRealmWithIdentifier:] +[RLMRealm realmWithConfiguration:error:]
+[RLMRealm defaultRealmPath] +[RLMRealmConfiguration defaultConfiguration]
+[RLMRealm setDefaultRealmPath:] +[RLMRealmConfiguration setDefaultConfiguration:]
+[RLMRealm setDefaultRealmSchemaVersion:withMigrationBlock] RLMRealmConfiguration.schemaVersion и RLMRealmConfiguration.migrationBlock
+[RLMRealm setSchemaVersion:forRealmAtPath:withMigrationBlock:] RLMRealmConfiguration.schemaVersion и RLMRealmConfiguration.migrationBlock
+[RLMRealm migrateRealmAtPath:] +[RLMRealm migrateRealm:]
+[RLMRealm migrateRealmAtPath:encryptionKey:] +[RLMRealm migrateRealm:]
  • Следующие API были устаревшими в пользу нового структурированного объекта Realm.Configuration в Realm Swift для Swift 1.2:| Устаревший API | Новый API | |:--------------------------------------------------------------|:-----------------------------------------------------------------------------| | Realm.defaultPath | Realm.Configuration.defaultConfiguration | | Realm(path:readOnly:encryptionKey:error:) | Realm(configuration:error:) | | Realm(inMemoryIdentifier:) | Realm(configuration:error:) | | Realm.setEncryptionKey(:forPath:) | Realm(configuration:error:) | | setDefaultRealmSchemaVersion(schemaVersion:migrationBlock:) | Realm.Configuration.schemaVersion и Realm.Configuration.migrationBlock | | setSchemaVersion(schemaVersion:realmPath:migrationBlock:) | Realm.Configuration.schemaVersion и Realm.Configuration.migrationBlock | | migrateRealm(path:encryptionKey:) | migrateRealm(configuration:) |* Следующие API были устаревшими в пользу нового структурированного объекта Realm.Configuration в Realm Swift для Swift 2.0:
Устаревший API Новый API
Realm.defaultPath Realm.Configuration.defaultConfiguration
Realm(path:readOnly:encryptionKey:) throws Realm(configuration:) throws
Realm(inMemoryIdentifier:) Realm(configuration:) throws
Realm.setEncryptionKey(:forPath:) Realm(configuration:) throws
setDefaultRealmSchemaVersion(schemaVersion:migrationBlock:) Realm.Configuration.schemaVersion and Realm.Configuration.migrationBlock
setSchemaVersion(schemaVersion:realmPath:migrationBlock:) Realm.Configuration.schemaVersion and Realm.Configuration.migrationBlock
migrateRealm(path:encryptionKey:) migrateRealm(configuration:)
  • Метод List.extend в Realm Swift для Swift 2.0 был заменен на List.appendContentsOf, отражая изменения в RangeReplaceableCollectionType.* Свойства объектов на подклассах Object в Realm Swift должны быть помечены как необязательные, в противном случае будет выброшено исключение во время выполнения.

Улучшения

  • Хранимые свойства подклассов RLMObject/Object теперь соответствуют стандарту Key-Value Observing.
  • Различные опции, используемые для создания экземпляров Realm, были объединены в одном объекте RLMRealmConfiguration/Realm.Configuration.
  • Перебор коллекций Realm (RLMArray, RLMResults, List<>, Results<>) теперь выполняется по копии коллекции, что делает модификацию коллекции во время перебора ошибкой (как напрямую, так и косвенно, изменяя объекты так, чтобы они больше не соответствовали запросу).
  • Улучшение производительности вставки объектов в Swift для приведения её к уровню, близкому к производительности Objective-C.
  • Возможность указания конкретного списка подклассов RLMObject / Object для включения в определённый Realm через RLMRealmConfiguration.objectClasses / Realm.Configuration.objectTypes.

Исправления ошибок

  • Подсчет индексов в RLMObject теперь помечен как nullable.

0.94.1 Примечания к выпуску (2015-08-10)

Изменения в API

  • Сборка для watchOS требует Xcode 7 beta 5.

Улучшения

  • Object.className теперь помечен как final.

Исправления ошибок* Исправление аварийного завершения при добавлении свойства в модель без обновления версии схемы.

  • Исправление ненужного повторного загрузки основной библиотеки при сборке из исходного кода.
  • Исправление аварийного завершения при сортировке по целочисленному или числовому свойству в iOS 7.0.94.0 Примечания к выпуску (2015-07-29) =============================================================

Изменения в API

  • Нет.

Улучшения

  • Уменьшить использование памяти потоками-слушателями уведомлений RLMRealm.
  • Избегать преждевременной оценки результатов при фильтрации и сортировке.
  • Добавить аннотации nullability к API Objective-C для улучшенных предупреждений компилятора и мостов между Objective-C и Swift.
  • Сделать RLMResult и RLMArray поддержкой generics Objective-C.
  • Добавить поддержку сборки приложений для watchOS и приложений, совместимых с bitcode.
  • Сделать исключения, выбрасываемые в геттерах и сеттерах, более информативными.
  • Добавить -[RLMArray exchangeObjectAtIndex:withObjectAtIndex] и List.swap(_:_:) для обмена местами двух объектов в данном RLMArray / List.
  • Добавлены анонимные аналитические данные для запусков симулятора/отладчика.
  • Добавить -[RLMArray moveObjectAtIndex:toIndex:] и List.move(from:to:) для перемещения объектов в данном RLMArray / List.

Исправления ошибок* Процессы, которые завершаются из-за непойманного исключения внутри транзакции записи, больше не будут вызывать зависание других процессов, использующих тот же Realm.

  • Исправлены некорректные результаты при запросе для < или <= на целые числа, которые требуют 64 бит для представления с процессором, поддерживающим SSE 4.2.
  • Исключение больше не будет выбрасываться при попытке сбросить версию схемы или ключ шифрования открытого Realm до текущего значения.
  • Свойства даты на 32-битных устройствах будут сохранять точность до 64 бит.
  • Вызовы блока, переданного в enumerate, обернуты в autoreleasepool, чтобы снизить рост памяти при миграции большого количества объектов.
  • Внутренние Realmы больше не записываются в директорию Documents на iOS или в директорию Application Support на OS X.0.93.2 Примечания к выпуску (2015-06-12) =============================================================

Исправления ошибок

  • Исправлена проблема, при которой упакованный Realm.framework для OS X был собран с включёнными GCC_GENERATE_TEST_COVERAGE_FILES и GCC_INSTRUMENT_PROGRAM_FLOW_ARCS.
  • Исправлена утечка памяти при создании standalone объектов Swift с свойствами типа NSDate.
  • Выбрасывается исключение вместо утверждения при добавлении недействительного объекта в RLMArray.
  • Исправлен случай, при котором потеря данных могла произойти, если устройство было выключено вручную сразу после завершения транзакции записи, которая требовала расширения файла Realm.

0.93.1 Примечания к выпуску (2015-05-29)

Исправления ошибок

  • Объекты больше не копируются в standalone объекты при создании объекта. Это исправляет проблему, при которой вложенные объекты с первичным ключом иногда дублируются вместо обновления.
  • Сравнительные предикаты с константой слева от оператора и ключевым путём справа теперь дают правильные результаты. Исключение выбрасывается для предикатов, которые ещё не поддерживают эту последовательность.
  • Исправлены некоторые аварийные завершения работы в index_string.cpp с первичными ключами типа int или индексированными свойствами типа int.

0.93.0 Примечания к выпуску (2015-05-27) =============================================================### Изменения в API

  • Версии схемы теперь представлены как uint64_t (Objective-C) и UInt64 (Swift), чтобы они имели одинаковое представление на всех архитектурах.

Улучшения

  • Swift: Results теперь соответствует протоколу CVarArgType, поэтому его можно передать как аргумент в Results.filter(_:...) и List.filter(_:...).
  • Swift: Добавлено соответствие SortDescriptor протоколам Equatable и StringLiteralConvertible.
  • Первичные ключи типа Int снова автоматически индексируются.
  • Улучшена отчетность об ошибках при попытке пометить свойство типа, которое не может быть индексировано, как индексированное.

Исправления ошибок

  • Swift: RealmSwift.framework больше не включает Realm.framework, что позволяет приложениям, использующим его, пройти проверку iTunes Connect.
  • Swift: Results.average(_:) теперь возвращает опционал, который равен nil, если и только если набор результатов пуст.

Улучшения

  • Swift: Добавлено обязательное инициализатор Object.init().
  • RLMObject, RLMResults, Object и Results теперь могут безопасно освобождаться (хотя их использование и запрещено) с любого потока.
  • Улучшена производительность методов -[RLMArray indexOfObjectWhere:] и -[RLMArray indexOfObjectWithPredicate:], и они реализованы для отдельных RLMArrays.
  • Улучшена производительность большинства простых запросов.

Исправления ошибок* Механизм межпроцессного уведомления больше не использует потоки рабочих процессов dispatch, что предотвращает его от удержания других клиентов GCD от выполнения блоков при открытии сразу нескольких Realm.

  • Перечисление через отдельный List, объекты которого сами имеют свойства типа List, больше не приводит к аварийному завершению.

  • Использование подкласса RealmSwift.Object в агрегатном операторе предиката больше не приводит к ложной ошибке типа.

  • Исправлены неверные результаты при использовании OR в запросе на RLMArray/List<>.

  • Исправлены неверные значения из [RLMResults count]/Results.count при использовании != на свойстве типа int без других условий запроса.

  • Уменьшена максимальная граница удвоения размера файла Realm с 128 МБ до 16 МБ для уменьшения количества неиспользуемого пространства.0.92.2 Примечания к выпуску (2015-05-08) =============================================================### Изменения, нарушающие API

  • Нет.

Улучшения

  • Исключения, возникающие при использовании некорректных типов объектов с предикатами, теперь содержат более подробную информацию.
  • Добавлены методы -[RLMMigration deleteDataForClassName:] и Migration.deleteData(_:) для возможности очистки после удаления подклассов объектов.

Исправления ошибок

  • Предотвращено отладочное открытие приложения, использующего зашифрованный Realm, для устранения частых зависаний LLDB. До устранения основной проблемы можно установить REALM_DISABLE_ENCRYPTION=YES в переменных окружения приложения для обработки запросов к открытию зашифрованного Realm как запрос к открытию незашифрованного Realm.
  • Связанные объекты теперь правильно обновляются в createOrUpdateInRealm:withValue:.
  • Свойства типа List на объектах теперь правильно инициализируются во время быстрого перечисления.

0.92.1 Примечания к выпуску (2015-05-06)

Изменения, нарушающие API

  • Нет.

Улучшения

  • Метод -[RLMRealm inWriteTransaction] теперь является публичным.
  • Realm Swift теперь доступен на CocoaPods.

Исправления ошибок

  • Принудительное перезаписывание подписи кода после удаления архитектур в strip-frameworks.sh.

0.92.0 Примечания к выпуску (2015-05-05)

Изменения, нарушающие API

  • Блоки миграции больше не вызываются при первом создании файла Realm.
  • Следующие API были устаревшими в пользу новых имен методов:| Устаревший API | Новый API | |:-------------------------------------------------------|:------------------------------------------------------| | -[RLMMigration createObject:withObject:] | -[RLMMigration createObject:withValue:] | | -[RLMObject initWithObject:] | -[RLMObject initWithValue:] | | +[RLMObject createInDefaultRealmWithObject:] | +[RLMObject createInDefaultRealmWithValue:] | | +[RLMObject createInRealm:withObject:] | +[RLMObject createInRealm:withValue:] | | +[RLMObject createOrUpdateInDefaultRealmWithObject:] | +[RLMObject createOrUpdateInDefaultRealmWithValue:] | | +[RLMObject createOrUpdateInRealm:withObject:] | +[RLMObject createOrUpdateInRealm:withValue:] |

Улучшения

  • Свойства Int8, определенные в Swift, теперь рассматриваются как целые числа, а не как логические.
  • Поддержка NSPredicates, созданных с помощью +predicateWithValue:.

Исправления ошибок

  • Составные AND-предикаты без подпредикатов теперь правильно соответствуют всем объектам.

0.91.5 Примечания к выпуску (2015-04-28)

Исправления ошибок

  • Исправление проблем с удалением поисковых индексов и повторное включение этой функции.

0.91.4 Примечания к выпуску (2015-04-27)

Исправления ошибок

  • Временное отключение удаления индексов из существующих столбцов из-за ошибок.

0.91.3 Примечания к выпуску (2015-04-17)

Исправления ошибок

  • Исправление ошибок Extra argument 'objectClassName' in call при сборке через CocoaPods.0.91.2 Примечания к выпуску (2015-04-16) =============================================================

  • Блоки миграции больше не вызываются при создании файла Realm впервые.

Улучшения

  • RLMCollection поддерживает операции KVC для коллекций.
  • Сортировка RLMResults стала быстрее в 2-5 раз (обычно ближе к 2 разам).
  • Обновление RLMRealm после записи транзакции, которая вставляет или изменяет строки или NSData, стало значительно быстрее.
  • Индексы теперь добавляются и удаляются из существующих свойств при открытии файла Realm, а не только при добавлении свойств впервые.

Исправления ошибок

  • +[RLMSchema dynamicSchemaForRealm:] теперь учитывает поисковые индексы.
  • +[RLMProperty isEqualToProperty:] теперь проверяет равенство индексированных свойств.

0.91.1 Примечания к выпуску (2015-03-12)

Улучшения

  • Браузер автоматически обновляется, когда Realm был изменен из другого процесса.
  • Разрешение использования Realm в встроенной библиотеке путем установки APPLICATION_EXTENSION_API_ONLY в YES.

Исправления ошибок

  • Исправление аварийного завершения работы в CFRunLoopSourceInvalidate.

0.91.0 Примечания к выпуску (2015-03-10) =============================================================### Изменения в API

Метод attributesForProperty: был удален из RLMObject. Теперь для указания индексируемых свойств необходимо реализовать метод indexedProperties.

Будет выброшено исключение при вызове методов setEncryptionKey:forRealmsAtPath:, setSchemaVersion:forRealmAtPath:withMigrationBlock:, и migrateRealmAtPath:, если Realm по указанному пути уже открыт.

Свойства объектов и массивов типа RLMObject больше не будут разрешены.

Улучшения* Добавлена поддержка для обмена файлами Realm между процессами.

  • Браузер больше не будет отображать объекты, которые не имеют сохраненных свойств.
  • RLMSchema, RLMObjectSchema и RLMProperty теперь имеют более полезные описания.
  • Открытие зашифрованного Realm при подключении отладчика к процессу больше не вызывает исключение.
  • RLMArray теперь имеет свойство isInvalidated, которое указывает, что он больше не может быть доступен.

Исправления ошибок

  • Исключение теперь будет выброшено при вызове -beginWriteTransaction внутри уведомления, которое было вызвано вызовом -beginWriteTransaction в другом месте.
  • При вызове delete: теперь проверяется, что удаляемый объект сохранен в целевом Realm.
  • Исправлена ошибка при вызове createOrUpdate:inRealm с вложенными связанными объектами.
  • Исправлена ошибка использования ключа из +[RLMRealm setEncryptionKey:forRealmsAtPath:] в -writeCopyToPath:error: и +migrateRealmAtPath:.
  • Сравнение RLMObject с не-RLMObject с помощью -[RLMObject isEqual:] или -isEqualToObject: теперь возвращает NO вместо ошибки.
  • Улучшено сообщение об ошибке при определении подкласса RLMObject вложенными в другое объявление Swift.
  • Исправлена ошибка при завершении процесса операционной системой на iOS при открытии зашифрованных Realm.
  • Исправлена ошибка после больших коммитов в зашифрованные Realm.

0.90.6 Примечания к выпуску (2015-02-20) =============================================================### Улучшения

  • Улучшена совместимость зашифрованных Realm с отчетами об ошибках сторонних разработчиков.

Исправления ошибок

  • Исправлена ошибка при использовании агрегирующих функций на отсортированных RLMResults.
  • Исправлена ошибка повреждения данных при использовании writeCopyToPath:encryptionKey:.
  • Возможно исправлены некоторые ошибки утверждения.

0.90.5 Примечания к выпуску (2015-02-04)

Исправления ошибок

  • Исправлена ошибка приложения при включении шифрования на Yöntem iOS 64-битных устройствах.

0.90.4 Примечания к выпуску (2015-01-29)

Исправления ошибок

  • Исправлена ошибка, которая приводила к удалению и заново созданию колонок во время миграций.

0.90.3 Примечания к выпуску (2015-01-27)

Улучшения

  • Вызов createInDefaultRealmWithObject:, createInRealm:withObject:, createOrUpdateInDefaultRealmWithObject: или createOrUpdateInRealm:withObject: является пустой операцией, если аргумент является RLMObject того же типа, что и получатель и уже поддерживается целевым Realm.

Исправления ошибок

  • Исправлено неправильное утверждение типа столбца, когда первый открытий Realm-файла является только для чтения и не содержит таблиц.
  • Вызывается исключение при добавлении недействительного или удаленного объекта в качестве ссылки.
  • Вызывается исключение при вызове createOrUpdateInRealm:withObject: при отсутствии определенного первичного ключа у получателя.

Исправлены ошибки в тексте, связанные с неправильным языком и неправильными символами.0.90.1 Примечания к выпуску (22 января 2015)

Исправления ошибок

  • Исправлено отображение RLMObject как модели объекта класса и его отображение в браузере.
  • Исправлено компилирование из podspec.
  • Исправлено падение при вызове objectsWhere: с группировкой в запросе на allObjects.

0.90.0 Примечания к выпуску (21 января 2015)

Изменения в API

  • Переименовано -[RLMRealm encryptedRealmWithPath:key:readOnly:error:] в -[RLMRealm realmWithPath:encryptionKey:readOnly:error:].
  • -[RLMRealm setSchemaVersion:withMigrationBlock] больше не является глобальным и должно вызываться для каждого отдельного пути Realm. Теперь можно вызывать -[RLMRealm setDefaultRealmSchemaVersion:withMigrationBlock] для стандартного Realm и -[RLMRealm setSchemaVersion:forRealmAtPath:withMigrationBlock:] для всех остальных.

Улучшения

  • Добавлено -[RLMRealm writeCopyToPath:encryptionKey:error:].
  • Добавлена поддержка сравнения строковых столбцов с другими строковыми столбцами в запросах.

Исправления ошибок* Откат изменений, сделанных при выбросе исключения во время миграции.

  • Вызывается исключение, если количество элементов в RLMResults или RLMArray изменяется во время быстрого перечисления.
  • Также шифруются временные файлы, используемые при включенной шифровке для Realm.
  • Исправлено падение в примере JSONImport на OS X с не-US локалью.
  • Исправлено бесконечное падение при открытии Realm-файла в браузере одновременно с открытием его в 32-битном симуляторе.
  • Исправлено падение при добавлении первичных ключей в старые Realm-файлы без первичных ключей на объектах.
  • Исправлено падение при удалении первичного ключа в миграции.
  • Исправлено падение при множественных операциях записи без изменений, за которыми следуют операции записи с изменениями без обновления основного RLMRealm.
  • Исправлено неполное получение результатов при запросе на ненулевые отношения.
  • Улучшено сообщение об ошибке при открытии Realm-файла в нескольких процессах одновременно.

0.89.2 Примечания к выпуску (2015-01-02) =============================================================### Изменения, нарушающие API

  • Нет.

Улучшения

  • Нет.

Исправления ошибок

  • Исправлено нарушение утверждения при отмене Realm, находящегося в транзакции записи, который уже был отменён или никогда не использовался.
  • Исправлено нарушение утверждения при сортировке пустого RLMArray-свойства.
  • Исправлена ошибка, приводившая к тому, что браузер никогда не становился видимым на 10.9.
  • При генерации классовых файлов из файла Realm в браузере теперь записывается UTF-8.

0.89.1 Примечания к выпуску (2014-12-22)

Изменения, нарушающие API

  • Нет.

Улучшения

  • Улучшено сообщение об ошибке при невозможности открытия Realm из-за отсутствия прав записи.

Исправления ошибок

  • Исправлено нарушение утверждения при вставке строк после вызова deleteAllObjects для Realm.
  • Теперь отдельные динамические фреймворки создаются для симулятора и устройств для обхода ошибок при отправке в App Store из-за того, что версия симулятора не автоматически удаляется из динамических библиотек.

0.89.0 Примечания к выпуску (2014-12-18)

Изменения, нарушающие API

  • Нет.

Улучшения

  • Добавлена поддержка шифрования файлов Realm на диске.

  • Добавлена поддержка использования объектов, соответствующих KVC, без геттеров или с пользовательскими именами геттеров для инициализации RLMObjects с помощью createObjectInRealm и подобных методов.### Исправления ошибок

  • Объединены значения по умолчанию для свойств Swift с defaultPropertyValues().

  • При открытии Realm, требующего миграции, не оставлять схему базы данных частично обновлённой.

  • Исправлена проблема, при которой объекты с пользовательскими именами геттеров не могли использоваться для инициализации других объектов.

  • Исправлена значительная регрессия производительности при запросах на свойства строк.

  • Исправлен утечка памяти при добавлении циклически связанных объектов в Realm.

0.88.0 Примечания к выпуску (2014-12-02)

Изменения, нарушающие API

  • Отмена RLMRealm-объекта при завершении транзакции записи без явного коммита/отмены теперь будет автоматически отменена вместо коммита.
  • Метод -[RLMObject isDeletedFromRealm] переименован в -[RLMObject isInvalidated].

Улучшения

  • Добавлен метод -[RLMRealm writeCopyToPath:] для записи компактной копии Realm в другой файл.

  • Добавлена поддержка регистронезависимых, BEGINSWITH, ENDSWITH и CONTAINS строковых запросов на свойства массива.

  • Ускорена быстрая перечислительная функция для RLMArray и RLMResults на 30%, а также метод objectAtIndex: на 55%.

  • Добавлен скрипт визуализатора lldb для отображения содержимого сохраненных RLMObjects при отладке.

  • Добавлен метод -setDefaultRealmPath: для изменения пути по умолчанию для Realm.

  • Добавлен метод -[RLMRealm invalidate] для освобождения данных, заблокированных текущим потоком.### Исправления ошибок

  • Исправлена ошибка, приводящая к падению при выполнении множественных одновременных транзакций записи в фоновых потоках.

  • Исправлена ошибка, приводящая к падению при открытии Realm в нескольких путях одновременно, если свойства были переупорядочены во время миграции.

  • Не выполнять запрос дважды при вызове firstObject или lastObject для RLMResults, если результаты еще не были получены.

  • Исправлена ошибка, при которой версия схемы равна 0 для нового Realm, созданного на последней версии.

  • Исправлено сообщение об ошибке, если не указан блок миграции, когда это необходимо.

0.87.4 Примечания к выпуску (2014-11-07)

Изменения в API

  • Нет.

Улучшения

  • Нет.

Исправления ошибок

  • Исправлена ошибка в расположении браузера в архиве zip.

0.87.3 Примечания к выпуску (2014-11-06)

Изменения в API

  • Нет.

Улучшения

  • Добавлен метод -linkingObjectsOfClass:forProperty: к RLMObject для доступа к обратным связям/обратным ссылкам.

Исправления ошибок

  • Исправлена ошибка, приводящая к падению из-за отсутствия индекса поиска при миграции объекта с строковым первичным ключом в базе данных, созданной с помощью более ранней версии (0.86.3 и ранее).
  • Выброшено исключение при передаче массива, содержащего не-RLMObject, в метод -[RLMRealm addObjects:.
  • Исправлена ошибка, приводящая к падению при удалении объекта из нескольких потоков.0.87.0 Примечания к выпуску (2014-10-21) =============================================================

Изменения в API

  • Класс RLMArray был разделен на два класса: RLMArray и RLMResults. Класс RLMArray используется для свойств объектов, как и в предыдущих релизах. В будущем все методы, используемые для перечисления, запроса и сортировки объектов, будут возвращать экземпляр нового класса RLMResults. Это изменение было внесено для поддержки расширяющихся API и будущего добавления уведомлений о изменениях для запросов.
  • API для миграций изменился. Теперь вы вызываете setSchemaVersion:withMigrationBlock: для регистрации глобального блока миграции и связанной версии. Этот блок применяется к Realms, когда они открываются для Realms предыдущей версии, по мере необходимости. Блок может быть применен вручную, вызывая migrateRealmAtPath:.
  • Метод arraySortedByProperty:ascending: был переименован в sortedResultsUsingProperty:ascending.
  • Метод addObjectsFromArray: для обоих RLMRealm и RLMArray был переименован в addObjects: и теперь принимает любой контейнерный класс, реализующий NSFastEnumeration.
  • Сборка с поддержкой Swift теперь требует Xcode 6.1

Улучшения* Добавлена поддержка сортировки RLMArray по нескольким столбцам с помощью метода sortedResultsUsingDescriptors:

  • Добавлен метод deleteAllObjects для RLMRealm, который позволяет очистить Realm.

  • Добавлен метод createObject:withObject: для RLMMigration, который позволяет создавать объекты во время миграций.

  • Добавлен метод deleteObject: для RLMMigration, который позволяет удалять объекты во время миграций.

  • Обновление до версии основной библиотеки 0.85.0.

  • Реализация методов objectsWhere: и objectsWithPredicate: для свойств массива.

  • Добавлен метод cancelWriteTransaction, который позволяет отменить все изменения, сделанные в транзакции записи, и завершить транзакцию.

  • Ускорение создания экземпляров RLMRealm на фоновых потоках, когда уже существует экземпляр на другом потоке, до пятой части времени.

  • Поддержка частичных обновлений при вызове методов createOrUpdateWithObject: и addOrUpdateObject:

  • Включение поддержки Swift на OS X### Исправления ошибок

  • Исправление исключений при попытке установки свойств RLMObject после перестройки свойств в подклассе RLMObject.

  • Исправление аварийного завершения работы при выполнении запроса IN с несколькими тысячами элементов.

  • Исправление аварийного завершения работы при выполнении запроса на индексированные свойства типа NSString.

  • Исправление проблемы, которая не позволяла использовать встроенные Realms на нескольких потоках.

  • Сохранение порядка сортировки при выполнении запроса на отсортированные RLMResults.

  • Исправление проблемы с миграциями, при которой удаление файла Realm после его инициализации приводит к инициализации нового Realm с неправильной версией схемы.

  • Исправление аварийного завершения работы в RLMSuperSet при присваивании значения свойству RLMArray на отдельном объекте.

  • Добавление сообщения об ошибке при использовании недопустимого типа объекта в протоколе свойства RLMArray.

  • Добавление сообщения об ошибке при определении подкласса RLMObject вложенными в другой класс Swift.

0.86.3 Примечания к выпуску (2014-10-09)

Улучшения

  • Добавлена поддержка оператора != в запросах на объектные отношения.

Исправления ошибок* Восстановление исходного поведения при повторном добавлении объекта в его Realm, которое больше не вызывает исключение и стало пустой операцией (как было ранее).

  • Исправление другой ошибки, которая иногда приводила к невозможности подклассирования подклассов RLMObject.0.86.2 Примечания к выпуску (2014-10-06) =============================================================

Исправления ошибок

  • Исправление проблем с упаковкой "Realm Browser.app" для выпуска.

0.86.1 Примечания к выпуску (2014-10-03)

Исправления ошибок

  • Исправлена ошибка, которая иногда приводила к тому, что наследование подклассов RLMObject не работало.

0.86.0 Примечания к выпуску (2014-10-03)

Изменения, нарушающие API

  • Поддержка Xcode 6 теперь доступна из основного проекта Xcode Realm.xcodeproj. Поддержка Xcode 5 больше не предоставляется.

Улучшения

  • Поддержка наследования моделей RLMObject. Хотя теперь можно сохранять подклассы, полиморфное поведение не поддерживается (то есть установка свойства на экземпляр его подкласса).

  • Добавлена поддержка сортировки свойств RLMArray.

  • Ускорена скорость вставки объектов с помощью addObject: на ~20%.

  • Свойства readonly автоматически игнорируются, а не требуют добавления в ignoredProperties.

  • Обновление до версии основной библиотеки 0.83.1.

  • Возвращение "[удаленный объект]" вместо выбрасывания исключения при вызове -description для удаленного RLMObject.

  • Значительное улучшение производительности очень больших запросов.

  • Добавлена возможность передачи любого перечисляемого объекта в IN-условия вместо использования только NSArray.

  • Добавлены удобные методы objectForPrimaryKey: и objectInRealm:forPrimaryKey: для получения объекта по первичному ключу.### Исправления ошибок

  • Исправлена ошибка, связанная с невозможностью сохранения свойства 'hash' с несовместимым типом при сборке для устройств с Xcode 6.

  • Исправлены случайные уведомления о новых версиях Realm.

  • Исправлено обновление вложенных объектов, где некоторые типы не имеют первичных ключей.

  • Исправлено добавление объектов из JSON с значениями NSNull, когда должны использоваться значения по умолчанию.

  • Попытка добавления сохраненного RLMObject в другой Realm теперь выбрасывает исключение вместо создания неинициализированного объекта.

  • Исправлены ошибки валидации при использовании IN для свойств массива.

  • Исправлены ошибки при наличии IN-условия с нулевым количеством элементов.

  • Исправлено игнорирование всех запросов, кроме последнего, при использовании цепочки запросов.

0.85.0 Примечания к выпуску (2014-09-15)

Изменения, нарушающие API

  • Уведомления о необходимости обновления (когда автовосстановление выключено) теперь отправляются с типом уведомления RLMRealmRefreshRequiredNotification вместо RLMRealmDidChangeNotification.### Улучшения

  • Обновление до версии основной библиотеки 0.83.0.

  • Поддержка первичных ключей для свойств (для целочисленных и строковых столбцов). Объявление свойства как первичного ключа гарантирует уникальность этого свойства для всех объектов данного типа. В настоящее время индексы на первичных ключах ещё не поддерживаются, но это будет добавлено в будущих версиях.

  • Добавлены методы для обновления или вставки (upsert) для объектов с определёнными первичными ключами.

  • [RLMObject initWithObject:] и [RLMObject createInRealmWithObject:] теперь поддерживают любой тип объекта с свойствами KVC.

  • Поддержка Swift была переработана для обхода проблем с поддержкой Swift в Frameworks на iOS 7.

  • Улучшена производительность при получении количества элементов, соответствующих запросу, без чтения самих объектов в результатах.

  • Добавлен возврат значения в -[RLMRealm refresh], который указывает, было ли что-то для обновления.

  • Добавлено имя класса в сообщение об ошибке, когда RLMObject отсутствует значение для свойства без значения по умолчанию.

  • Добавлена поддержка открытия Realms в режиме только для чтения.

  • Добавлен автоматический контроль обновлений при использовании Realm в симуляторе (код контроллера не компилируется в сборках для устройств). Это можно отключить, установив переменную окружения REALM_DISABLE_UPDATE_CHECKER на любое значение.

  • Добавлена поддержка свойств Int16 и Int64 в классах Swift.### Исправления ошибок

  • Уведомления о изменениях Realm при начале транзакции записи теперь отправляются после обновления, а не до, чтобы соответствовать обновлению.

  • -isEqual: теперь использует стандартную реализацию NSObject, если для RLMObject не указан первичный ключ. Если для RLMObject указан первичный ключ, -isEqual: вызывает -isEqualToObject:, а также реализует соответствующую реализацию для -hash.

0.84.0 Примечания к выпуску (2014-08-28)

Изменения в API

  • Используемый таймер для триггерирования уведомлений был удалён. Уведомления теперь триггерятся только коммитами, выполненными в других потоках, и в настоящее время не могут быть триггерированы изменениями, выполненными другими процессами. Уведомления между процессами будут добавлены в будущих версиях с улучшенным дизайном.### Улучшения
  • Обновление до версии основной библиотеки 0.82.2.
  • Добавление свойства deletedFromRealm к RLMObject для указания объектов, которые были удалены.
  • Добавление поддержки оператора IN в предикатах.
  • Добавление поддержки оператора BETWEEN в запросах к связям.
  • Добавление поддержки многоуровневых запросов к связям в предикатах (например, foo.bar.baz = 5).
  • Переключение на сборку SDK из исходного кода при использовании CocoaPods и добавление подпакета Realm.Headers для использования в целях, которые не должны связывать копию Realm (например, целевые тесты).
  • Разрешение отписки от уведомлений о изменениях в блоке обработчика уведомлений о изменениях.
  • Значительное повышение производительности при удержании большого количества RLMObjects.
  • Realm-Xcode6.xcodeproj теперь строится только с использованием Xcode6-Beta6.
  • Улучшение производительности при итерации по RLMArray, особенно при мутации содержащихся объектов.

Исправления ошибок* Исправлены аварийные завершения работы и различные ошибки при сортировке или запросе RLMArray, возвращенного из запроса.

  • Уведомления больше не отправляются при инициализации новых RLMRealm-экземпляров на фоновых потоках.
  • Обработаны циклы объектов в -[RLMObject description] и -[RLMArray description].
  • Уменьшена версия развертывания для проектов Xcode 6 и примеров на Swift до iOS 7.0, так как они фактически не требовали 8.0.
  • Поддержка установки свойств модели, начинающихся с буквы 'z'.
  • Исправлены аварийные завершения работы, которые могли произойти при переключении между сборками Debug и Release Realm.

0.83.0 Примечания к выпуску (2014-08-13)

Изменения в API

  • Realm-Xcode6.xcodeproj теперь строится только с помощью Xcode6-Beta5.
  • Свойства для сохранения в классах Swift должны быть явно объявлены как dynamic.
  • Подклассы RLMObject теперь выбрасывают исключение при запуске, а не при добавлении в Realm.

Улучшения

  • Добавлена поддержка запросов для nil-свойств объектов.

  • Улучшены сообщения об ошибках при указании недопустимых литералов при создании или инициализации RLMObjects.

  • Выброшено исключение при использовании RLMObject из неправильного потока вместо аварийного завершения работы.

  • Ускорено создание RLMRealm и итерация по свойствам массива.

  • Разрешено отсутствие или null-значения для свойств массива и объектных отношений при создании RLMObject из NSDictionary.### Исправления ошибок

  • Исправлены утечки памяти при запросе объектов.

  • Исправлены ошибки инициализации массивных свойств в отдельных подклассах Swift RLMObject.

  • Исправлены запросы на 64-битные целые числа.

0.82.0 Примечания к выпуску (2014-08-05)

Изменения в API

  • Realm-Xcode6.xcodeproj теперь строится только с помощью Xcode6-Beta4.

Улучшения

  • Обновлено до версии основной библиотеки 0.80.5.
  • Теперь поддерживается отключение свойства autorefresh для экземпляров RLMRealm.
  • Сборка Realm-Xcode6 для iOS теперь создает универсальную библиотеку для Simulator и Device.
  • Использование свойств NSNumber (неподдерживаемых) теперь выбрасывает более информативное исключение.
  • Добавлен [RLMRealm defaultRealmPath].
  • Правильная реализация для [RLMArray indexOfObjectWhere:].
  • По умолчанию путь Realm на OS X теперь ~/Library/Application Support/[bundle identifier]/default.realm вместо ~/Documents.
  • Теперь проверяется, что используется правильная библиотека (ios или osx) на этапе компиляции.

Исправления ошибок* Исправлено быстрое увеличение размера файла области.

  • Исправлена ошибка, которая могла привести к аварийному завершению при разрушении RLMArray после запроса.
  • Исправлена ошибка, связанная с запросами на свойства типа float: floatProperty = 1.7 теперь работает.
  • Исправлена потенциальная ошибка, связанная с обработкой свойств типа массив (RLMArray).
  • Исправлена ошибка, при которой свойства типа массив обращались к неверному свойству.
  • Исправлена ошибка, которая препятствовала добавлению объектов с пользовательскими геттерами в область.
  • Исправлена ошибка, при которой инициализация отдельного объекта с помощью литерала массива вызывала исключение.
  • Уточнены сообщения об ошибках при использовании недоступных операторов NSPredicate.
  • Уточнены сообщения об ошибках при использовании недоступных типов свойств для подклассов RLMObject.
  • Исправлены утечки памяти при выходе из цикла for-in для RLMArray.
  • Исправлены утечки памяти при удалении объектов из свойства RLMArray.
  • Исправлены утечки памяти при запросе объектов.0.81.0 Примечания к выпуску (22 июля 2014) =============================================================

Изменения в API

  • Нет.

Улучшения

  • Обновлено до версии основной библиотеки 0.80.3.
  • Добавлена поддержка базового запроса свойств RLMObject и RLMArray (один-к-одному и один-к-многим отношениям). Например: [Person objectsWhere:@"dog.name == 'Alfonso'"] или [Person objectsWhere:@"ANY dogs.name == 'Alfonso'"] Поддерживает все обычные операторы для числовых и датовых типов. Не поддерживает свойства типа NSData или BEGINSWITH, ENDSWITH, CONTAINS и другие опции для строковых свойств.
  • Добавлена поддержка запроса равенства объектов для свойств RLMObject и RLMArray (один-к-одному и один-к-многим отношениям). Например: [Person objectsWhere:@"dog == %@", myDog] [Person objectsWhere:@"ANY dogs == %@", myDog] [Person objectsWhere:@"ANY friends.dog == %@", dog] Поддерживает только сравнение объектов на равенство (т.е. ==)
  • Добавлен метод-помощник к RLMRealm для выполнения блока внутри транзакции.
  • Поддержка фреймворка OSX в CocoaPods.

Исправления ошибок

  • Исправлена поддержка Юникода в именах свойств и содержимом строк (китайский, русский и т.д.). Закрыты #612 и #604.
  • Исправлены ошибки, связанные с миграцией при удалении свойств.
  • Исправлено ключевое субскриптное обращение для отдельных RLMObjects.
  • Исправлена ошибка, связанная с двойным щелчком по файлу .realm для запуска Realm Browser (спасибо Dean Moore).

0.80.0 Примечания к выпуску (15 июля 2014) =============================================================### Изменения, нарушающие API

  • Переименованы методы миграции на -migrateDefaultRealmWithBlock: и -migrateRealmAtPath:withBlock:
  • Методы запроса, специфичные для Realm, перемещены из RLMRealm в классовые методы RLMObject (-allObjects: на +allObjectsInRealm: и т.д.)

Улучшения

  • Добавлен метод +createInDefaultRealmWithObject: для RLMObject.
  • Добавлена поддержка массивов и литералов объектов при вызове -createWithObject: и -initWithObject: вариантов.
  • Добавлен метод -deleteObjects: для пакетного удаления объектов из Realm.
  • Поддержка определения моделей RLMObject полностью на Swift (экспериментальная, см. известные проблемы).
  • RLMArrays на Swift поддерживают перечисление в стиле последовательности (for obj in array).
  • Реализован метод -indexOfObject: для RLMArray.

Известные проблемы для моделей, определённых на Swift* Свойства, отличные от String, NSData и NSDate, требуют значения по умолчанию в модели. Это может быть пустой (но типизированный) массив для свойств, представляющих массив.

  • Вышеупомянутое ограничение также означает, что не все модели, определённые на Objective-C, могут использоваться для свойств объектов. Только модели Objective-C с только явными (т.е. примитивами) или неявными значениями по умолчанию могут быть использованы. Однако любой объект модели Objective-C может быть использован в свойстве массива на Swift.
  • Акссесоры свойств массива не работают до тех пор, пока родительский объект не будет добавлен в Realm.
  • Realm-Bridging-Header.h временно выведен как публичный заголовок. Это временно и будет снова приватным после исправления rdar://17633863.
  • Не использует Swift generics и по-прежнему использует RLM-префикс везде. Это будет добавлено в #549.0.22.0 Примечания к выпуску =============================================================

Изменения, нарушающие API

  • Переименован метод schemaForObject на schemaForClassName для RLMSchema
  • Удалены методы -objects:where: и -objects:orderedBy:where: из RLMRealm
  • Удалены методы -indexOfObjectWhere:, -objectsWhere: и -objectsOrderedBy:where: из RLMArray
  • Удалены методы +objectsWhere: и +objectsOrderedBy:where: из RLMObject

Улучшения

  • Новый проект Xcode 6 для экспериментальной поддержки Swift.
  • Новое приложение Realm Editor для чтения и редактирования файлов Realm.
  • Добавлена поддержка миграций.
  • Добавлена поддержка свойств RLMArray для объектов.
  • Добавлена поддержка создания виртуального по умолчанию Realm в памяти.
  • Добавлены методы -objectsWithClassName:predicateFormat: и -objectsWithClassName:predicate: в RLMRealm.
  • Добавлены методы -indexOfObjectWithPredicateFormat:, -indexOfObjectWithPredicate:, -objectsWithPredicateFormat: и -objectsWithPredicate: в RLMObject.
  • Теперь поддерживаются предикаты, сравнивающие два свойства объекта одного типа.

0.20.0 Примечания к выпуску (28 мая 2014)

Полностью переписано для большей ориентации на объекты.

Изменения, нарушающие API

  • Все

Улучшения

  • Нет.

Исправления ошибок

  • Нет.

0.11.0 Примечания к выпуску (не выпущено)

API на Objective-C был обновлен, и ваш код перестанет работать!

Изменения, нарушающие API* RLMTable объекты могут быть созданы только с объектом RLMRealm.

  • Переименовано RLMContext в RLMTransactionManager.
  • Переименовано RLMContextDidChangeNotification в RLMRealmDidChangeNotification.
  • Переименовано contextWithDefaultPersistence в managerForDefaultRealm.
  • Переименовано contextPersistedAtPath: в managerForRealmWithPath:.
  • Переименовано realmWithDefaultPersistence в defaultRealm.
  • Переименовано realmWithDefaultPersistenceAndInitBlock в defaultRealmWithInitBlock.
  • Переименовано find: в firstWhere:.
  • Переименовано where: в allWhere:.
  • Переименовано where:orderBy: в allWhere:orderBy:.

Улучшения

  • Добавлено countWhere: на RLMTable.
  • Добавлено sumOfColumn:where: на RLMTable.
  • Добавлено averageOfColumn:where: на RLMTable.
  • Добавлено minOfProperty:where: на RLMTable.
  • Добавлено maxOfProperty:where: на RLMTable.
  • Добавлено toJSONString на RLMRealm, RLMTable и RLMView.
  • Добавлена поддержка оператора NOT в предикатах.
  • Добавлена поддержка значений по умолчанию.
  • Добавлена поддержка валидации в createInRealm:withObject:.

Исправления ошибок

  • Нет.

0.10.0 Примечания к выпуску (23 апреля 2014)

TightDB теперь называется Realm! API на Objective-C был обновлен, и ваш код перестанет работать!

Изменения, нарушающие API* Все ссылки на TightDB были изменены на Realm.

  • Все префиксы были изменены с TDB на RLM.

  • TDBTransaction и TDBSmartContext были объединены в RLMRealm.

  • Записные транзакции теперь принимают опциональный параметр отмены (вместо необходимости возвращать логическое значение).

  • addColumnWithName: и варианты методов теперь возвращают индекс созданного столбца при успешном выполнении, NSNotFound в противном случае.### Улучшения

  • Добавлена функция createTableWithName:columns: в RLMRealm.

  • Добавлена поддержка ключевого среза для первого столбца RLMTable, если тип столбца — RLMPropertyTypeString.

  • Добавлена функция setRow:atIndex: в RLMTable.

  • Конструкторы RLMRealm теперь имеют варианты, которые принимают блок инициализации для записи.

  • Новый объектный интерфейс — таблицы, созданные/полученные с помощью tableWithName:objectClass:, возвращают пользовательские объекты.

Исправления ошибок

  • Нет.

0.6.0 Примечания к выпуску (2014-04-11)

Переменные API

  • contextWithPersistenceToFile:error: переименовано в contextPersistedAtPath:error: в TDBContext.

  • readWithBlock: переименовано в readUsingBlock: в TDBContext.

  • writeWithBlock:error: переименовано в writeUsingBlock:error: в TDBContext.

  • readTable:withBlock: переименовано в readTable:usingBlock: в TDBContext.

  • writeTable:withBlock:error: переименовано в writeTable:usingBlock:error: в TDBContext.

  • findFirstRow переименовано в indexOfFirstMatchingRow на TDBQuery.

  • findFirstRowFromIndex: переименовано в indexOfFirstMatchingRowFromIndex: на TDBQuery.

  • Возвращается NSNotFound вместо -1, когда это уместно.

  • castClass переименовано в castToTypedTableClass на TDBTable.

  • Методы removeAllRows, removeRowAtIndex, removeLastRow, addRow и insertRow на таблице теперь возвращают void вместо BOOL.### Улучшения

  • Теперь TDBTable может быть запрошена с помощью where: и where:orderBy:, принимая NSPredicate и NSSortDescriptor в качестве аргументов.

  • Добавлен метод find: на TDBTable для поиска первой строки, соответствующей предикату.

  • Добавлен класс-метод contextWithDefaultPersistence к TDBContext. Будет создан контекст, сохраненный в файл в папке app/documents.

  • Добавлен метод renameColumnWithIndex:to: к TDBTable.

  • Добавлен метод distinctValuesInColumnWithIndex к TDBTable.

  • Добавлены методы dateIsBetween::, doubleIsBetween::, floatIsBetween:: и intIsBetween:: к TDBQuery.

  • Имена столбцов в типизированных таблицах теперь могут начинаться с маленькой буквы. Генерируемый селектор addX может выглядеть необычно. Например, таблица с одним столбцом с именем age, добавление новой строки будет выглядеть как [table addage:7].

  • Смешанные типизированные значения теперь лучше проверяются при добавлении, вставке или изменении строк как объектных литералов.

  • Методы addRow, insertRow и обновление строк могут выполняться с использованием объектов наследующих от NSObject.

  • Добавлен метод where к TDBView и TDBViewProtocol.

  • Добавлена поддержка "умных" контекстов (TDBSmartContext).### Исправления ошибок

  • Изменения в TDBView и TDBQuery теперь выбрасывают исключение в транзакции чтения.

0.5.0 Примечания к выпуску (2014-04-02) =============================================================API Objective-C обновлена, и ваш код перестанет работать! Одним из значимых изменений является добавление быстрого интерфейса. Этот интерфейс включает конкретные методы для получения и установки значений в Tightdb. Чтобы использовать эти методы, импортируйте <Tightdb/TightdbFast.h>.

Изменения, нарушающие совместимость API

  • getTableWithName: переименован в tableWithName: в TDBTransaction.
  • addColumnWithName:andType: переименован в addColumnWithName:type: в TDBTable.
  • columnTypeOfColumn: переименован в columnTypeOfColumnWithIndex в TDBTable.
  • columnNameOfColumn: переименован в nameOfColumnWithIndex: в TDBTable.
  • addColumnWithName:andType: переименован в addColumnWithName:type: в TDBDescriptor.
  • Быстрые геттеры и сеттеры перемещены из TDBRow.h в TDBRowFast.h.

Улучшения

  • Добавлены методы minDateInColumnWithIndex и maxDateInColumnWithIndex в TDBQuery.
  • Транзакции теперь можно начинать напрямую на именованных таблицах.
  • Вы можете создавать динамические таблицы с начальной схемой.
  • TDBTable и TDBView теперь имеют общий протокол, что облегчает их использование взаимозаменяемо.

Исправления ошибок

  • Исправлена ошибка в 64-битной версии iOS при вставке BOOL как NSNumber.

0.4.0 Примечания к выпуску (2014-03-26) =============================================================### Изменения, нарушающие совместимость API

  • Типизированный интерфейс Cursor переименован в Row.
  • TDBGroup переименован в TDBTransaction.
  • Заголовочные файлы переименованы, чтобы соответствовать именам классов.
  • Подчеркивание (_) удалено из сгенерированных типизированных классов таблиц.
  • TDBBinary удалён; используйте NSData вместо.
  • Подчеркивание (_) удалено из сгенерированных типизированных классов таблиц.
  • Конструктор для TDBContext переименован в contextWithPersistenceToFile:.
  • Операции findFirstRow и min/max/sum/avg таблицы скрыты.
  • Метод Table.appendRow переименован в addRow.
  • Метод getOrCreateTable на Transaction удалён.
  • Методы set*:inColumnWithIndex:atRowIndex: префиксированы TDB.
  • Методы *:inColumnWithIndex:atRowIndex: префиксированы TDB.
  • Метод addEmptyRow на таблице удалён. Используйте [table addRow:nil] вместо.
  • TDBMixed удалён. Используйте id и NSObject вместо.
  • Метод insertEmptyRow удалён из таблицы. Используйте insertRow:nil atIndex:index вместо.
  • Добавлены селекторы firstRow и lastRow в представление.
  • firstRow и lastRow в таблице теперь возвращают nil, если таблица пустая.
  • Добавлен селектор getTableWithName в группу.
  • Методы получения и создания таблицы в группе больше не принимают аргумент ошибки.
  • Селекторы [TDBQuery parent] и [TDBQuery subtable:] теперь возвращают self.
  • Добавлен метод createTable в Транзакцию. Вызывает исключение, если таблица с таким же именем уже существует.
  • Экспериментальная поддержка закрепления транзакций в Контексте.
  • TDBView теперь поддерживает субскриптинг объектов.* Нет.

0.3.0 Примечания к выпуску (2014-03-14)

API на Objective-C был обновлен, и ваш код перестанет работать!

Изменения, нарушающие совместимость API

  • Большинство селекторов были переименованы в привязке!
  • Добавлен префикс TDB- ко всем классам и типам.

Улучшения

  • Типы возврата и параметры изменены с size_t на NSUInteger.
  • Добавлен метод setObject для TightdbTable (t[2] = @[@1, @"Hello"] теперь возможен).
  • Добавлен метод insertRow для TightdbTable.
  • Расширены возможности метода appendRow для приема NSDictionary.

Исправления ошибок

  • Нет.

0.2.0 Примечания к выпуску (2014-03-07)

API на Objective-C был обновлен, и ваш код перестанет работать!

Изменения, нарушающие совместимость API

  • Метод addRow переименован в addEmptyRow

Улучшения

  • Добавлен простой класс для версионирования.
  • Добавлены цели get-version и set-version в build.sh.
  • tableview теперь поддерживает сортировку по столбцу с типом bool, date и int.
  • tableview имеет метод для проверки типа столбца по указанному столбцу.
  • tableview имеет метод для получения количества столбцов.
  • Добавлены методы getVersion, getCoreVersion и isAtLeast.
  • Добавлен метод appendRow для TightdbTable.
  • Добавлен метод object subscripting.
  • Добавлен метод removeColumn для таблицы.

Исправления ошибок

  • Нет.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-realm.git
git@api.gitlife.ru:oschina-mirror/mirrors-realm.git
oschina-mirror
mirrors-realm
mirrors-realm
master