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
Минимальная поддерживаемая версия Xcode теперь 15.3.### Улучшения
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.[AnyHashable: Any]
на Document
. Эти функции должны были всегда возвращать Document
, а старый тип возврата больше не компилируется из-за отсутствия отправляемости.@MainActor
.Эти типы были неявно @MainActor
в Swift 5, но стали неизолированными при использовании Xcode 16 в режиме Swift 5 из-за удаления неявной изоляции при использовании property wrappers для членов класса. Это привело к появлению новых предупреждений отправляемости в Xcode 16 (или ошибок в режиме Swift 6).(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.
>
, >=
, <
, <=
).
Это чувствительное к регистру лексикографическое сравнение.
(#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.
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
Изменения ролей и разрешений на стороне сервера больше не требуют сброса клиента для обновления локального 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).shouldCompactOnLaunch
) для зашифрованного файла Realm могла привести к созданию недействительного файла, если ключ шифрования не был допустимой строкой, завершённой нулём.
(Core #7842, начиная с версии v10.52.0).@ObservedSectionedResults.remove(atOffsets:section:)
, который позволяет удалять объект Realm при использовании onDelete
в ForEach
в SwiftUI List
.Realm.asyncWrite()
и Realm.asyncRefresh()
теперь используют новую функцию #isolation
для избежания предупреждений о sendability при сборке с Xcode 16 (#8618).@ObservedSectionedResults
в SwiftUI
, могло привести к аварийному завершению работы во время диффа View
. (#8294, начиная с версии v10.29.0)Realm.asyncOpen()
для гибко синхронизированного Realm иногда не ждал завершения ожидаемых подписок, что приводило к тому, что он не ждал загрузки всех данных. (Core #7720, начиная с введения гибкой синхронизации).List<AnyRealmValue>.clear()
приводил к неудаче проверки при использовании на файле, созданном версией Realm старше v10.49.0. (Core #7771, начиная с версии 10.49.0)### Совместимость* Realm Studio: 15.0.0 или новее.Добавлена поддержка хранения вложенных коллекций (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).
@AutoOpen
и @AsyncOpen
не использовали initialSubscriptions
из конфигурации, переданной им (PR #8572, начиная с версии v10.50.0).App.baseURL
всегда был nil
(PR #8573, начиная с версии v10.50.0).Поддержка Xcode 14 отменена, так как он больше не может использоваться для отправки приложений в App Store. Теперь минимальная поддерживаемая версия Xcode — 15.1.
App.currentUser
внутри обратного вызова App.subscribe
приводил к мёртвому замку.### УлучшенияSyncConfiguration. initialSubscriptions
, описывающее начальную конфигурацию подписки, переданную при создании SyncConfiguration
(#8548).@_spi(Private)
@_spi(RealmSwiftExperimental) import RealmSwift попытайся ожидать, что app. updateBaseUrl(to: "https://services. cloud. mongodb. com")
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).Assertion failed: new_size % (1ULL << m_page_shift) == 0
при открытии зашифрованного Realm размером менее 64Мб, сгенерированного на платформе с другим размером страницы. (Core #7322, начиная с v10.42.0)DecryptionFailed
, выбрасываемое при открытии маленького Realm (<4к данных), сгенерированного на устройстве с размером страницы 4к, если оно было включено и открыто на устройстве с большим размером страницы (с самого начала).DecryptionFailed
или утверждения: encrypted_file_mapping.hpp:183: Assertion failed: local_ndx < m_page_state.size()
. (Core #7319)rlm_valueType
устарел в пользу rlm_anyValueType
, который теперь включает коллекции (List и Dictionary).AppConfiguration
был обновлен для указания на services.cloud.mongodb.com
. Подробнее см. https://www.mongodb.com/docs/atlas/app-services/domain-migration/ (#8512)Исправлено утверждение "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.
10.49.0 Примечания к выпуску (2024-03-22) =============================================================В этом выпуске введен новый формат файлов Realm (v24). Открытие существующих файлов Realm автоматически обновляет их, делая невозможным открытие старыми версиями. Процесс обновления обычно происходит очень быстро, за исключением случаев, когда у вас есть большие наборы AnyRealmValue, String или Data, которые должны быть перезаписаны.Автоматически создается резервная копия рядом с Realm перед выполнением обновления. При возврате к более старым версиям Realm будет автоматически восстановлена резервная копия, или она будет удалена через три месяца.
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.
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))
baseURL
конфигурации AppConfiguration
теперь может быть обновлено, вместо сохранения значения между запусками приложения в хранилище метаданных. (Core #7201).Encodable
для @Persisted
не позволяла энкодеру кастомизировать кодировку значений, что приводило к проблемам с использованием JSONEncoder
's dateEncodingStrategy
(#8425).Package.swift
на Linux для поддержки инструментов, таких как Dependabot, которые требуют сборки описания пакета, но не самого пакета (#8458, начиная с версии v10.40.1).schemaVersion
в Realm.Configuration
теперь всегда должно быть равно нулю для синхронизированных Realm. Схемы версий в настоящее время не применимы к синхронизированным Realm, и поле ранее не читалось.realm-core
с версии 13.25.1 до 13.26.010.45.2 Примечания к выпуску (2023-12-22) =============================================================### Улучшения
SyncSession.ProgressDirection
и SyncSession.ProgressMode
не имели Sendable
аннотаций (PR #8435).Realm.Error.subscriptionFailed
отображался с неправильным доменом ошибки, что делало его невозможным для перехвата (с версии 10.42.2, PR #8435).Вызов 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.
10.45.0 Примечания к выпуску (2023-12-15) =============================================================### Улучшения
try realm.write {
realm.add(Person())
}
try await realm.syncSession?.wait(for: .upload)
Обратите внимание, что это обычно не следует использовать — синхронизация в конечном итоге является последовательной и должна использоваться как таковая. Однако, есть специальные случаи (в частности, в тестировании), где это может быть использовано.
KeyNotFound
.(Core #7090, начиная с версии v10.28.2)MutableSet<String>.formIntersection()
иногда приводил к ошибке использования после освобождения памяти, если он был запрошен для пересечения множества с самим собой (начиная с версии v10.0.0).List<Object>
или List<AnyRealmValue>
, которые выполнялись на индексах, которые не были добавлены в процессе восстановления, ссылки на объект, который был удален другим клиентом в оффлайн-режиме, воссоздавались восстанавливающим клиентом, но объекты этих ссылок имели только заполненный первичный ключ, а все остальные поля имели значения по умолчанию. Теперь, вместо создания этих "зомби" объектов, списки, восстанавливающиеся, пропускают такие удаленные ссылки. (Core #7112), начиная с реализации восстановления сброса клиента в версии v10.25.0).sort()
или distinct()
для MutableSet<Object>
, содержащего неразрешённые ссылки (то есть объекты, которые были удалены другим синхронизированным клиентом), приводил к появлению результата с повторяющимися записями. * Устранено автоматическое восстановление сброса клиента при восстановлении записи, которая внесла неразрешимые изменения в список (например, модификация или удаление существующей записи), за которым следовало изменение подписки, а затем добавление записи в список, что приводило к дублированию вставок в списке
(Core #7155, с момента введения автоматического восстановления сброса клиента для гибкой синхронизации).App
из коллбэка слушателя User
(Core #7183, с момента версии v10.42.0).SyncSession.reconnect()
, который запрашивает немедленное повторное подключение, если
сессия в данный момент отключена, а не ожидает обычного времени задержки повторного подключения.Обновление подписок не запускало автоматическое обновление 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.
Добавлен 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).
-Wl,-ld_classic
к OTHER_LDFLAGS
для вашего приложения до тех пор, пока Apple не исправит ошибку.MultipleSyncAgents
при открытии синхронизированного Realm в нескольких процессах одновременно больше не оставляет синхронизационный клиент в недопустимом состоянии. (Core #6868, начиная с версии v10.36.0)Realm.Configuration.maximumNumberOfActiveVersions
теперь корректно обрабатывает промежуточные версии, которые были очищены, и проверяет количество активных версий вместо количества версий между самой старой активной версией и текущей версией (начиная с версии 10.35.0).localAppName
и поле localAppVersion
класса RLMApp
никогда не использовались и теперь устарели.RLMSyncAuthError
не использовался с версии 10.0.0 и теперь устарел.realm-core
с версии 13.17.1 до версии 13.20.110.42.0 Примечания к выпуску (2023-07-30) =============================================================### Улучшения
.binaryTarget()
SPM, теперь публикуются как часть выпусков на Github.Projections
, которое не уведомляет о изменении свойства.
(#8276, начиная с версии v10.34.0).UIKit
при связывании Realm с фреймворком с использованием SPM.
(#8308, начиная с версии v10.41.0).--use-xcframeworks
не поддерживаются. Убедитесь, что вы используете --use-xcframeworks
, если устанавливаете через Carthage.Исправлено:
"Yöntem 5 минут" на "5 минут".
Удалено лишнее слово "Yöntem".### Исправления
Удалены предупреждения для устаревших API внутреннего использования. (#8251, начиная с версии v10.39.0)
Исправлено ошибочное поведение при асинхронном открытии и сбросе клиента, если свойства добавлены в схему. Это исправление также применимо к миграции синхронизации на основе разделов в гибкую синхронизацию, если используется асинхронное открытие. (Core #6707, начиная с версии v10.28.2)
REALM_BASE_URL
для зеркального отображения бинарных файлов, вам может потребоваться скорректировать логику зеркального отображения.10.41.0 Примечания к выпуску (2023-06-26)
=============================================================Параметры времени ожидания синхронизации теперь можно задавать в RLMAppConfiguration
вместе с другими настройками конфигурации приложения (PR #8282).### Исправлено
Импорт как RLMRealm_Private.h
в качестве модуля вызывал проблемы при использовании Realm как подзависимости.
(#8164, начиная с 10.37.0)
Отключено установление пользовательского логгера по умолчанию для синхронизированного клиента при создании менеджера синхронизации. Это перекрывало по умолчанию установленный логгер с помощью RLMLogger.defaultLogger
. (начиная с v10.39.0).
RLMSyncTimeouts.appConfiguration
было удалено. Это было непротестированным только для чтения свойством, которое не имело смысла в контексте содержащего типа (PR #8282).Actor.preconditionIsolated()
теперь используется для проверки актора в режиме выполнения, когда это возможно (то есть при сборке с Xcode 15 и запуске на iOS 17) вместо менее надежного обходного пути.Поддержка Xcode 13 отменена, добавлена поддержка Xcode 14.3.1. Xcode 14.1 теперь является минимально поддерживаемой версией.
Object
и подклассов, вложенных в другие типы, чтобы объяснить, как сделать их работоспособными, вместо утверждения, что это невозможно. (#5662).Добавлена поддержка 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
устарели в пользу
установки стандартного логгера.AnyRealmValue
, не имеющего индексации, на 30%. (Core #6506)EventsConfiguration
, фактически не использовался (начиная с версии v10.26.0).Переход на построение выпуска Carthage с использованием Xcode 14.3.### Улучшения
URL.path
в Realm.Configuration.fileURL
при использовании строкового ключа раздела в синхронизации на основе разделов (#8195), начиная с версии v10.0.0.10.37.2 Примечания к выпуску (2023-03-29) =============================================================### Исправлено
RLMRealmConfiguration
не копировало несколько полей. Это приводило к передаче неверного типа объекта при миграциях в Swift при использовании стандартной конфигурации (с версии v10.34.0) или асинхронного открытия (с версии v10.37.0). Это также приводило к проблемам при использовании API событий в этих двух сценариях (с версии v10.26.0 для стандартной конфигурации и v10.37.0 для асинхронного открытия). (#8190)* Значительное (~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).
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).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.
Events.beginScope()
теперь возвращает объект Scope
, который используется для подтверждения или
отмены этой области, и если активно более одной области, события отчитываются всем активным областям.List
на более высокий индекс в SwiftUI, что приводило к неправильному целевому индексу
(#7956, начиная с версии v10.6.0).searchable
с @ObservedResults
в iOS 16 приводило к отмене подписки на наблюдение за коллекцией
(#8096, начиная с версии 10.21.0).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
В этой версии версия формата файла Realm увеличена до 23. Файлы Realm, созданные этой версией, не могут быть прочитаны старыми версиями Realm.### Улучшения
Set<AnyRealmValue>
и List<AnyRealmValue>
считали строку и двоичные данные, содержащие эту строку, закодированной в UTF-8, эквивалентными. Это могло привести к тому, что запись в списке не изменит тип при присваивании, и клиент будет несогласован с сервером, если строка и некоторые двоичные данные с эквивалентным содержимым были вставлены из Atlas.
(Core #4860 и
Core #6201, начиная с версии v10.8.0)@preconcurrency
, которые приводили к ошибкам сборки
с Xcode 14.0 при импорте через SPM или CocoaPods
(#8104, начиная с версии v10.34.0).Swift 5.5 больше не поддерживается. Минимальная поддерживаемая версия — Swift 5.6 (Xcode 13.3).
Предварительно собранный бинарный файл для Carthage теперь построен с использованием Xcode 14.2.
cancelAsyncOpenOnNonFatalErrors
.@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 в настоящее время несовместим.Состояние гибкого синхронного подписки изменится на
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
RLMUserAPIKey.key
/UserAPIKey.key
неправильно возвращали имя API-ключа вместо ключа сам по себе. (#8021, начиная с версии v10.0.0)Переход на построение выпуска Carthage с использованием Xcode 14.1.
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).Примечания к выпуску 10.32.0 (10 октября 2022)
=============================================================### Улучшения
Добавьте .recoverUnsyncedChanges
(RLMClientResetModeRecoverUnsyncedChanges
) и
.recoverOrDiscardUnsyncedChanges
(RLMClientResetModeRecoverOrDiscardUnsyncedChanges
) поведение к ClientResetMode
(RLMClientResetMode
).
ClientResetMode.discardUnsyncedChanges
, если процесс восстановления неудачен в .recoverOrDiscardUnsyncedChanges
.ClientResetMode.manual
, если процесс восстановления неудачен в .recoverUnsyncedChanges
..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
.
Причина заключается в том, что название лучше отражает эффект этого режима сброса. В действительности поведение не изменилось.Предварительно скомпилированный бинарный файл для Carthage теперь построен с использованием Xcode 14.0.1.### Улучшения
List
с Results
больше не вызывает исключениенераспознанного селектора (начиная с версии 10.8.0-beta.2).
RLMProgressNotificationToken
и ProgressNotificationToken
теперь удерживают
сильную ссылку на сессию синхронизации, что позволяет ей оставаться активной
до тех пор, пока токен не будет освобожден или аннулирован, как и другие
токены уведомлений.
(#7831, начиная с версии v2.3.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.
10.30.0 Примечания к выпуску (2022-09-20)
=============================================================### Исправлено* Входящие ссылки из свойств RealmAny
не обрабатывались правильно при миграции типа объекта с верхнего уровня на встроенный. В настоящий момент свойства RealmAny
не могут ссылаться на встроенные объекты.
(Core #5796, начиная с версии 10.8.0).
Realm.refresh()
иногда не переходил к самой последней версии. Он пытался быть полуасинхронным способом, что приводило к путанице и иногда к переходу к более новой, но не самой последней версии. Иногда он блокировался до тех пор, пока не будут готовы уведомители, чтобы затем перейти к самой последней версии. Это поведение было не документировано и не работало корректно, поэтому теперь он всегда блокируется, если это необходимо для перехода к самой последней версии.
(#7625, начиная с версии v0.98.0).AsymmetricObject
с синхронизацией на основе разделов теперь возвращает осмысленную ошибку намного раньше в процессе. Асимметричная синхронизация требует использования flexibly synced.
(Core #5691, начиная с версии 10.29.0).-[RLMASLoginDelegate authenticationDidCompleteWithError:]
был переименован
в -[RLMASLoginDelegate authenticationDidFailWithError:]
для соответствия новым
требованиям App Store. Это затрагивает только API на Objective-C.
(#7945)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).
Исправлена ошибка архивирования сборок 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.
SubscriptionSet
, когда записи не были сделаны в Realm с момента последнего доступа.m_schema_version != ObjectStore::NotVersioned
позже.* Обновлен realm-core с версии 12.4.0 до 12.5.0(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.
initialSubscription
и rerunOnOpen
в метод copyWithZone
класса RLMRealmConfiguration
. Это привело к некорректным значениям при использовании RLMRealmConfiguration.defaultConfiguration
.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.
try await subscriptions.update {
subscriptions.append(QuerySubscription<SwiftPerson>(name: "all_people"))
}
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)
[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];
objectClasses
/objectTypes
в конфигурации.async
входа и FunctionCallables, чтобы соответствовать остальным async
функциям. (#7791)'Failed to build module 'RealmSwift'; this SDK is not supported by the compiler'
, когда XCFramework был построен с помощью более старой версии Xcode и затем использовался с более поздней версией. (#7313, начиная с версии 3.18.0)discardLocal
, одновременно с тем, как другой поток обрабатывал сброс клиента. Это, вероятно, не вызывало функциональных проблем на практике, и окно времени для срабатывания было очень узким (начиная с версии 10.25.0).discardLocal
могли теоретически не быть выполнены из-за конфликта данных. Время для этого, вероятно, было не достижимо на практике (начиная с версии 10.25.0).[RLMRealm freeze]
/Realm.freeze
для Realm, созданного из writeCopy
, не приводил к созданию замороженного Realm. (#7697, начиная с версии 5.0.0)objectTypes
был установлен при открытии Realm приводил к выбросу исключения.(#7786).List<AnyRealmValue>
содержал недействительный объект вместо null, когда
связанный объект был удален с помощью синхронизирующего клиента
(Core #5215, начиная с версии v10.8.0).Файлы Realm, созданные этой версией, не могут быть открыты старыми версиями Realm. Существующие файлы будут автоматически обновлены при открытии.
Несинхронизированные файлы Realm остаются совместимыми с предыдущими версиями.### Улучшения
@ObservedResults
, что позволяет фильтровать результаты с помощью параметра where
.MutableSet
с StateRealmObject
в SwiftUI.SyncConfiguration.clientResetMode
и RLMSyncConfiguration.clientResetMode
.
ClientResetMode
.clientResetMode
по умолчанию равно .manual
, если не указано иное.ClientResetMode
и RLMClientResetMode
.
SyncConfiguration.clientResetMode
и RLMSyncConfiguration.clientResetMode
, соответственно..manual
и RLMClientResetModeManual
rlmSync_clientResetBackedUpRealmPath
и SyncError.clientResetInfo()
используются для доступа к каталогу восстановления..discardLocal
и RLMClientResetDiscardLocal
.discardLocal
и RLMClientResetDiscardLocal
discardLocal(((Realm) -> Void)? = nil, ((Realm, Realm) -> Void)? = nil)
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 {
/* . . . пользовательский механизм восстановления . . . */
}
}
}
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.
Переход на сборку Carthage-бинарника с использованием Xcode 13.3. В этом выпуске нет функциональных изменений по сравнению с версией 10.24.0.
@ObservedResults
, что позволяет фильтровать результаты с помощью параметра where
.### Исправлено* Если список объектов содержит ссылки на объекты, не включенные в синхронизированную часть, уведомления о изменении коллекции для этого списка могут быть некорректными (Core #5164, начиная с v10.0.0).Realm.invalidate()
изнутри уведомления о изменении Realm может привести к тому, что транзакция записи, которая вызвала уведомление, не будет сохранена на диске (начиная с v10.22.0).Добавлен метод Realm.writeCopy(configuration:)
/[RLMRealm writeCopyForConfiguration:]
, который обеспечивает следующую функциональность:
RLMUser
/User
.Добавлен параметр 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.
Теперь отображается полезное сообщение об ошибке при открытии синхронизированного 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.
10.21.1 Примечания к выпуску (12 января 2022) =============================================================### Исправлено* Синхронный клиент теперь очищает очередь получения при неудачной отправке с ошибкой ECONNRESET, что гарантирует получение и обработку любого сообщения об ошибке от сервера. (#5078)
@sum
и @avg
на словарях с плавающей точкой или двойной точностью использовали слишком много точности для промежуточных значений, что приводило к неправильному округлению (с версии 10.5.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 или новее.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)
PersistableEnum
как тип значения для всех коллекций Realm.AnyRealmCollection
теперь соответствует Encodable
.where()
.where()
..count
теперь поддерживается для всех типов Map вместо только числовых типов в where()
.@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)
}
}
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")
}
"phoneNumbers['Jane'] == '123-3456-123'"
) при использовании NSPredicate для запросов.RLMApp
с 6 секунд на 60 секунд.Realm
часто давала экземпляр Realm, который фактически не мог быть использован и выбрасывал неправильные исключения потока. Теперь это @MainActor
, и он всегда возвращает экземпляр Realm, который работает на основном акторе. Неработающий параметр queue:
был удален (с версии 10.15.0).writeCopy()
для синхронизированного Realm, что приводит к созданию локального несинхронизированного Realm
(#7513).'SSL/TLS protocol not supported'
при использовании Realm Sync.
(#7474)..count
для уникального коллектива возвращал общее количество объектов в коллекции вместо уникального счета при первом вызове.
(#7481, начиная с версии 10.8.0).realm.delete(collection.distinct(...))
удалял все объекты в коллекции вместо первого объекта с каждым уникальным значением в свойстве, если уникальные результаты не были прочитаны хотя бы один раз (начиная с версии 10.8.0)..distinct()
на коллекции, доступ к Results, а затем передача Results в realm.delete()
приводил к удалению правильных объектов, но после этого количество объектов в Results отображалось как ноль, даже если в Results все еще присутствовали объекты (начиная с версии 10.8.0).@AsyncOpen
и @AutoOpen
.
Установка текущего пользователя на нового пользователя теперь автоматически перезапускает Realm с новым пользователем.defaultConfiguration
по умолчанию в @AsyncOpen
и @AutoOpen
, если пользователь не предоставляет его.
Это устанавливает неправильный путь, который не соответствует конфигурации пользователя (начиная с версии v10.12.0).AsyncOpenPublisher
после успешного возврата Realm.Добавлен новый свойственный обёртка @ThreadSafe
. Объекты и коллекции, обёрнутые с помощью @ThreadSafe
, могут передаваться между потоками. Это позволяет использовать локальные переменные и параметры функций в многопоточной среде.### Совместимость
Realm Studio: 11.0.0 или новее.
API совместимы с предыдущими выпусками в серии 10.x.y.
Выпуск Carthage для Swift построен с Xcode 13.0.
CocoaPods: 1.10 или новее.
Xcode: 12.2-13.0.
EmailPasswordAuth.callResetPasswordFunction
и User.linkUser
.MongoCollection
.Исправление ошибки компиляции, возникающей при наличии 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.
Realm.asyncOpen
и App.login
.@StateRealmObject
, приводило к исключению "Cannot add an object with observers to a Realm"
.RealmCollectionChange
ссылалась на индексы в модификациях как на 'новую' коллекцию. Это неверно, и теперь документация указывает, что модификации относятся к предыдущей версии коллекции. (Cocoa #7390)RLMSyncConfiguration.initWithUser
при отображении ошибок, когда пользователь отключен/удален из панели управления MongoDB Realm. (Cocoa #7399, начиная с версии v10.0.0)keyPaths:
для @ObservedResults
не работал (начиная с версии v10.12.0).### Совместимость* Realm Studio: 11.0.0 или новее.observe
для объектов и RealmCollections, которые принимают параметр типа PartialKeyPath
.PersistableEnum
теперь могут быть индексированы или использованы в качестве первичного ключа, если значение RawValue
является индексируемым или первичным ключом.Map<Key, Value>
не соответствовал Codable
.
(Cocoa #7418, начиная с версии v10.8.0)AnyRealmValue
, которое уже существует локально. (Core #4873, начиная с версии v10.8.0)ServiceErrorCode
для случая неправильного имени пользователя/пароля при использовании App.login
.
(Core #7380)MongoCollection.findOneDocument(filter:)
, который возникал, когда для заданного фильтра не находилось результатов.
(Cocoa #7380, начиная с версии v10.0.0)ObjectKeyIdentifiable
вместо Identifiable
.
(Cocoa #7372, начиная с версии v10.6.0)swiftinterface
-файла для Combine на 32-битной iOS в бете Xcode 13.
(Cocoa #7368)Object.observe()
и RealmCollection.observe()
теперь включают необязательный параметр keyPaths
, который фильтрует уведомления о изменениях, оставляя только те, которые происходят на указанном пути ключа или путях ключей. Подробности о поведении фильтрации см. в документации метода.ObservedResults<ResultsType>
теперь включает необязательный параметр keyPaths
, который фильтрует уведомления о изменениях, оставляя только те, которые происходят на указанном пути ключа или путях ключей. Например: @ObservedResults(MyObject.self, keyPaths: ["myList.property"])
.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)Добавлены безопасные методы для:
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
.@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).Добавлены 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).
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.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. Ключи должны всегда быть строками.@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
.
RLMDictionary
/Map<>
. Это коллекция типа словаря, используемая для хранения пар ключ-значение.Добавлен тип данных RLMSet
/MutableSet<>
. Это коллекция типа множества, используемая для хранения уникальных значений.
Добавлена поддержка типа данных id<RLMValue>
/AnyRealmValue
.
Добавлена поддержка типа данных UUID
/NSUUID
.### Исправления
Нет.
RealmOptional
устарел в пользу RealmProperty
.Минимальная поддерживаемая версия Xcode — 12.2.
Теперь можно отменять реалмы, открытые в режиме только для чтения (хотя это маловероятно быть полезным).* Исправлено предупреждение о доступности при сборке 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 или более поздняя версия.
теперь будет загружать этот XCFramework вместо старых фреймворков при использовании --use-xcframeworks
.
throws
для обратной совместимости.
(#4548)@StateRealmObject
или @ObservedObject
в нескольких представлениях с неуправляемым объектом каждое представление подписывалось на объект. Когда каждое представление отписывалось (обычно при возврате через стек представлений), наши свойства-обёртки пытались удалять KVO для каждого отписывания, хотя это должно было выполняться только один раз. Теперь мы правильно удаляем KVO только один раз. (#7131)isInvalidated
, которое не возвращало правильное значение после удаления объекта из Realm при использовании пользовательской схемы. Схема объекта не обновлялась при добавлении объекта в Realm. Теперь мы правильно обновляем схему объекта при добавлении его в Realm.
(#7181)b
равно nil
, если c
не имел индекса и не имел его, если c
был индексирован. Оба теперь соответствуют поведению NSPredicate. (Core #4460, начиная с версии 4.3.0).Добавлена поддержка отсутствующих операций запроса для свойств данных:
Реализованы запросы, которые фильтруют списки, отличные от ссылок на объекты (списки объектов уже поддерживались). Все поддерживаемые операторы для обычных свойств теперь поддерживаются для списков (например, "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).
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 логирует сообщения об ошибках, полученные от сервера, а не только размер сообщения об ошибке.realm.objects(ClasSName.self)
без фильтра/сортировки и т. д.) на 50x.objectTypes
теперь немедленно отображается как ошибка при открытии Realm, и сироты автоматически исключаются из автоматически обнаруженной схемы, когда objectTypes
не указан. ### Исправлено* Чтение из результата, поддерживаемого напрямую таблицей (то есть realm.object(ClasSName.self)
без фильтра/сортировки и т.д.) могло давать неверные результаты, если результат был создан и доступен до создания нового объекта с первичным ключом меньше наименьшего первичного ключа, который ранее существовал. (#7014, начиная с версии OnClickListener 5.0.0).Добавлена поддержка "размораживания" объектов. 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).
User
.10.5.0 Примечания к выпуску (2020-12-14) =============================================================### Улучшения
objectWillChange
, которое излучает каждый раз, когда состояние объекта изменяется (например, при входе или выходе пользователя). (PR #6977).Идентификатор пользователя был добавлен в путь к файлу для синхронизированных Realms дважды и выполнялось лишнее экранирование значения раздела. Это не вызывало функциональных проблем, но делало имена файлов более запутанными, чем это было необходимо. Существующие файлы Realm будут продолжать находиться по старому пути, в то время как новые файлы будут создаваться по более короткому пути. (С версии v10.0.0).### Совместимость
Realm Studio: 10.0.0 или более поздняя версия.
API обратно совместимы со всеми предыдущими выпусками в серии 10.x.y.
Выпуск Carthage для Swift построен с использованием Xcode 12.2.
CocoaPods: 1.10 или более поздняя версия.
RLMRealmConfiguration.deleteRealmIfMigrationNeeded
/Realm.Config.deleteRealmIfMigrationNeeded
при включенной синхронизации. Это не работало так, как ожидалось, так как не удаляло
соответствующее состояние сервера и сломалось в запутанных способах (PR #6931).10.1.2 Примечания к выпуску (2020-11-06) =============================================================### Улучшения
List<Float?>
или List<Double?>
были некорректно обрабатывались как не-null в некоторых местах. Неизвестно, вызывало ли это какие-либо функциональные проблемы при использовании публичного API. (Core PR #3987, начиная с версии v5.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
ObjectKeyIdentifiable
(PR #6890, начиная с версии v10.0.0).Теперь для установки Realm требуется CocoaPods версии 1.10 или выше.
Realm.asyncOpen()
.Этот выпуск функционально идентичен 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
.RLMSyncSubscription
и SyncSubscription
(#6437).Result<Value, Error>
вместо двух отдельных параметров Value?
и Error?
.### Улучшения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 обновляется.onOpen(event:)
сразу после открытия WatchPublisher
, чтобы зарегистрировать обратный вызов, который будет вызван один раз, когда поток событий изменения открыт.onOpen(event:)
сразу после открытия WatchPublisher
для
регистрации обратного вызова, который будет вызван один раз при открытии потока изменений.идентификаторы в виде 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.
[RLMUser emailPasswordAuth]
=> RLMUser.emailPasswordAuth
[RLMUser identities]
=> RLMUser.identities
[RLMUser allSessions]
=> RLMUser.allSessions
[RLMUser apiKeysAuth]
=> RLMUser.apiKeysAuth
nullable
был удален из RLMUser.identifier
nullable
был удален из RLMUser.customData
[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")
, и т.д.+ (instancetype)credentialsWithFunctionPayload:(NSDictionary *)payload error:(NSError **)error;
. Теперь он определен как + (instancetype)credentialsWithFunctionPayload:(NSDictionary<NSString *, id<RLMBSON>> *)payload;
.Credentials(googleToken:)
=> Credentials(googleAuthCode:)
[RLMCredentials credentialsWithGoogleToken:]
=> [RLMCredentials credentialsWithGoogleAuthCode:]
В этом выпуске также включены следующие изменения от 5.4.0 - 5.4.6:
realm. object(ofType:forPrimaryKey:)
не сможет найти объект.
(#6716, начиная с 5. 2. 0)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`), был открыт.
+[RLMRealm realmWithPath:]
/Realm.init(path:)
теперь наследуются от стандартной конфигурации.
Поддержка Swift 1.2 больше не предоставляется.### Улучшения
Добавлен метод addNotificationBlock
для RLMResults
, Results
, RLMArray
и List
, который вызывает переданный блок каждый раз, когда коллекция изменяется.
Большая часть работы по поддержанию RLMResults
/Results
актуальными после операций записи выполняется на фоновом потоке, что помогает избежать блокировки основного потока.
Поддержка оператора SUBQUERY
в NSPredicate
. Оператор имеет следующие ограничения:
SUBQUERY
допускается только оператор @count
.SUBQUERY(…).@count
должно сравниваться с константой.Swift: Добавлен перечисление Error
, позволяющее перехватывать ошибки, возникающие при инициализации RLMRealm
/Realm
.
Если при открытии realm в режиме только для чтения не был найден файл или не был найден каталог, указанный в пути, при попытке записи копии, будет выброшена ошибка RLMErrorFileNotFound
вместо более общего RLMErrorFileAccess
.
Значительно улучшена производительность при удалении объектов с одним или более индексированными свойствами.
Поддержка индексирования свойств типа BOOL
/Bool
и NSDate
теперь доступна.
Swift: Добавлена поддержка индексирования опциональных свойств.### Исправления ошибок
Исправлены неправильные результаты или аварийные завершения работы при использовании -[RLMResults setValue:forKey:]
на объекте RLMResults, отфильтрованном по ключу, который устанавливается.
Исправлены аварийные завершения работы при освобождении RLMRealm с неправильного потока.
Исправлены неправильные результаты методов агрегации в Results
/RLMResults
после удаления объектов, которые ранее были в результатах.
Исправлено аварийное завершение работы при добавлении нового свойства к существующему классу с более чем миллионом объектов в Realm.
Исправлены ошибки при открытии зашифрованных файлов Realm, созданных с помощью writeCopyToPath
.
Исправлены аварийные завершения работы или неправильные результаты для запросов, использующих равенство отношений, в случаях, когда RLMResults остаётся активным и экземпляры целевого класса отношений удаляются.
=============================================================
Все устаревшие функции, упомянутые в предыдущих выпусках, были полностью удалены.
Добавлены общие аннотации типов для 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
, которые не поддерживаются.Запросы больше не ограничены 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.
Results
к свойствам List
через KVC.+[RLMRealm migrateRealm:]
.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 много раз на нескольких потоках одновременно.
Исправлены несколько мест, где сообщения об ошибках включали имя неправильной функции, которая не сработала.
-fembed-bitcode-marker
.Object(value: ...)
для инициализации значения по умолчанию свойства подкласса Object
.-fembed-bitcode-marker
.Object(value: ...)
для инициализации значения по умолчанию свойства подкласса Object
.RLMArray
и List
.RLMObject
/ Object
через субскрипт или ключ-значение вызывает выброс исключения.RLMRealmConfiguration
, где по умолчанию конфигурация находится в процессе копирования в одном потоке, а в другом потоке она освобождается.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:] |
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.RLMRealmConfiguration
/Realm.Configuration
.RLMArray
, RLMResults
, List<>
, Results<>
) теперь выполняется
по копии коллекции, что делает модификацию коллекции во время перебора ошибкой (как напрямую,
так и косвенно, изменяя объекты так, чтобы они больше не соответствовали запросу).RLMObject
/ Object
для включения в
определённый Realm через RLMRealmConfiguration.objectClasses
/ Realm.Configuration.objectTypes
.RLMObject
теперь помечен как nullable.Object.className
теперь помечен как final
.RLMResult
и RLMArray
поддержкой generics Objective-C.-[RLMArray exchangeObjectAtIndex:withObjectAtIndex]
и List.swap(_:_:)
для обмена местами двух объектов в данном RLMArray
/ List
.-[RLMArray moveObjectAtIndex:toIndex:]
и List.move(from:to:)
для перемещения объектов в данном RLMArray
/ List
.enumerate
, обернуты в autoreleasepool
, чтобы снизить рост памяти при миграции большого количества объектов.GCC_GENERATE_TEST_COVERAGE_FILES
и GCC_INSTRUMENT_PROGRAM_FLOW_ARCS
.index_string.cpp
с первичными ключами типа int или индексированными свойствами типа int.0.93.0 Примечания к выпуску (2015-05-27) =============================================================### Изменения в API
uint64_t
(Objective-C) и UInt64
(Swift), чтобы они имели одинаковое представление на всех архитектурах.Results
теперь соответствует протоколу CVarArgType
, поэтому его можно передать как аргумент в Results.filter(_:...)
и List.filter(_:...)
.SortDescriptor
протоколам Equatable
и StringLiteralConvertible
.Int
снова автоматически индексируются.RealmSwift.framework
больше не включает Realm.framework
, что позволяет приложениям, использующим его, пройти проверку iTunes Connect.Results.average(_:)
теперь возвращает опционал, который равен nil
, если и только если набор результатов пуст.Object.init()
.RLMObject
, RLMResults
, Object
и Results
теперь могут безопасно освобождаться (хотя их использование и запрещено) с любого потока.-[RLMArray indexOfObjectWhere:]
и -[RLMArray indexOfObjectWithPredicate:]
, и они реализованы для отдельных RLMArrays.Перечисление через отдельный 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_DISABLE_ENCRYPTION=YES
в переменных окружения приложения для обработки запросов к открытию зашифрованного Realm как запрос к открытию незашифрованного Realm.createOrUpdateInRealm:withValue:
.-[RLMRealm inWriteTransaction]
теперь является публичным.strip-frameworks.sh
.-[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, теперь рассматриваются как целые числа, а не как логические.+predicateWithValue:
.Исправление ошибок Extra argument 'objectClassName' in call
при сборке через CocoaPods.0.91.2 Примечания к выпуску (2015-04-16)
=============================================================
Блоки миграции больше не вызываются при создании файла Realm впервые.
RLMCollection
поддерживает операции KVC для коллекций.RLMResults
стала быстрее в 2-5 раз (обычно ближе к 2 разам).RLMRealm
после записи транзакции, которая вставляет или изменяет строки или NSData
, стало значительно быстрее.+[RLMSchema dynamicSchemaForRealm:]
теперь учитывает поисковые индексы.+[RLMProperty isEqualToProperty:]
теперь проверяет равенство индексированных свойств.APPLICATION_EXTENSION_API_ONLY
в YES.0.91.0 Примечания к выпуску (2015-03-10) =============================================================### Изменения в API
Метод attributesForProperty:
был удален из RLMObject
. Теперь для указания индексируемых свойств необходимо реализовать метод indexedProperties
.
Будет выброшено исключение при вызове методов setEncryptionKey:forRealmsAtPath:
, setSchemaVersion:forRealmAtPath:withMigrationBlock:
, и migrateRealmAtPath:
, если Realm по указанному пути уже открыт.
Свойства объектов и массивов типа RLMObject
больше не будут разрешены.
RLMSchema
, RLMObjectSchema
и RLMProperty
теперь имеют более полезные описания.RLMArray
теперь имеет свойство isInvalidated
, которое указывает, что он больше не может быть доступен.-beginWriteTransaction
внутри уведомления, которое было вызвано вызовом -beginWriteTransaction
в другом месте.delete:
теперь проверяется, что удаляемый объект сохранен в целевом Realm.createOrUpdate:inRealm
с вложенными связанными объектами.+[RLMRealm setEncryptionKey:forRealmsAtPath:]
в -writeCopyToPath:error:
и +migrateRealmAtPath:
.RLMObject
с не-RLMObject
с помощью -[RLMObject isEqual:]
или -isEqualToObject:
теперь возвращает NO вместо ошибки.RLMObject
вложенными в другое объявление Swift.0.90.6 Примечания к выпуску (2015-02-20) =============================================================### Улучшения
writeCopyToPath:encryptionKey:
.createInDefaultRealmWithObject:
, createInRealm:withObject:
, createOrUpdateInDefaultRealmWithObject:
или createOrUpdateInRealm:withObject:
является пустой операцией, если аргумент является RLMObject
того же типа, что и получатель и уже поддерживается целевым Realm.createOrUpdateInRealm:withObject:
при отсутствии определенного первичного ключа у получателя.RLMObject
как модели объекта класса и его отображение в браузере.podspec
.objectsWhere:
с группировкой в запросе на allObjects
.-[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:]
.0.89.2 Примечания к выпуску (2015-01-02) =============================================================### Изменения, нарушающие API
deleteAllObjects
для Realm.Добавлена поддержка шифрования файлов Realm на диске.
Добавлена поддержка использования объектов, соответствующих KVC, без геттеров или с пользовательскими именами геттеров для инициализации RLMObjects с помощью createObjectInRealm
и подобных методов.### Исправления ошибок
Объединены значения по умолчанию для свойств Swift с defaultPropertyValues()
.
При открытии Realm, требующего миграции, не оставлять схему базы данных частично обновлённой.
Исправлена проблема, при которой объекты с пользовательскими именами геттеров не могли использоваться для инициализации других объектов.
Исправлена значительная регрессия производительности при запросах на свойства строк.
Исправлен утечка памяти при добавлении циклически связанных объектов в Realm.
-[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, созданного на последней версии.
Исправлено сообщение об ошибке, если не указан блок миграции, когда это необходимо.
-linkingObjectsOfClass:forProperty:
к RLMObject для доступа к обратным связям/обратным ссылкам.-[RLMRealm addObjects:
.RLMArray
был разделен на два класса: RLMArray
и RLMResults
. Класс RLMArray
используется для свойств объектов, как и в предыдущих релизах. В будущем все методы, используемые для перечисления, запроса и сортировки объектов, будут возвращать экземпляр нового класса RLMResults
. Это изменение было внесено для поддержки расширяющихся API и будущего добавления уведомлений о изменениях для запросов.setSchemaVersion:withMigrationBlock:
для регистрации глобального блока миграции и связанной версии. Этот блок применяется к Realms, когда они открываются для Realms предыдущей версии, по мере необходимости. Блок может быть применен вручную, вызывая migrateRealmAtPath:
.arraySortedByProperty:ascending:
был переименован в sortedResultsUsingProperty:ascending
.addObjectsFromArray:
для обоих RLMRealm
и RLMArray
был переименован в addObjects:
и теперь принимает любой контейнерный класс, реализующий NSFastEnumeration
.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.
!=
в запросах на объектные отношения.RLMObject
.0.86.2 Примечания к выпуску (2014-10-06)
=============================================================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-условия с нулевым количеством элементов.
Исправлено игнорирование всех запросов, кроме последнего, при использовании цепочки запросов.
Уведомления о необходимости обновления (когда автовосстановление выключено) теперь отправляются с типом уведомления 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
.
deletedFromRealm
к RLMObject для указания объектов, которые были удалены.foo.bar.baz = 5
).dynamic
.Добавлена поддержка запросов для nil-свойств объектов.
Улучшены сообщения об ошибках при указании недопустимых литералов при создании или инициализации RLMObjects.
Выброшено исключение при использовании RLMObject из неправильного потока вместо аварийного завершения работы.
Ускорено создание RLMRealm и итерация по свойствам массива.
Разрешено отсутствие или null-значения для свойств массива и объектных отношений при создании RLMObject из NSDictionary.### Исправления ошибок
Исправлены утечки памяти при запросе объектов.
Исправлены ошибки инициализации массивных свойств в отдельных подклассах Swift RLMObject.
Исправлены запросы на 64-битные целые числа.
autorefresh
для экземпляров RLMRealm.[RLMRealm defaultRealmPath]
.[RLMArray indexOfObjectWhere:]
.floatProperty = 1.7
теперь работает.[Person objectsWhere:@"dog.name == 'Alfonso'"]
или [Person objectsWhere:@"ANY dogs.name == 'Alfonso'"]
Поддерживает все обычные операторы для числовых и датовых типов. Не поддерживает свойства типа NSData или BEGINSWITH
, ENDSWITH
, CONTAINS
и другие опции для строковых свойств.[Person objectsWhere:@"dog == %@", myDog]
[Person objectsWhere:@"ANY dogs == %@", myDog]
[Person objectsWhere:@"ANY friends.dog == %@", dog]
Поддерживает только сравнение объектов на равенство (т.е. ==)0.80.0 Примечания к выпуску (15 июля 2014) =============================================================### Изменения, нарушающие API
schemaForObject
на schemaForClassName
для RLMSchema
-objects:where:
и -objects:orderedBy:where:
из RLMRealm
-indexOfObjectWhere:
, -objectsWhere:
и -objectsOrderedBy:where:
из RLMArray
+objectsWhere:
и +objectsOrderedBy:where:
из RLMObject
RLMArray
для объектов.-objectsWithClassName:predicateFormat:
и -objectsWithClassName:predicate:
в RLMRealm
.-indexOfObjectWithPredicateFormat:
, -indexOfObjectWithPredicate:
, -objectsWithPredicateFormat:
и -objectsWithPredicate:
в RLMObject
.Полностью переписано для большей ориентации на объекты.
API на Objective-C был обновлен, и ваш код перестанет работать!
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:
.TightDB теперь называется Realm! API на Objective-C был обновлен, и ваш код перестанет работать!
Все префиксы были изменены с TDB
на RLM
.
TDBTransaction
и TDBSmartContext
были объединены в RLMRealm
.
Записные транзакции теперь принимают опциональный параметр отмены (вместо необходимости возвращать логическое значение).
addColumnWithName:
и варианты методов теперь возвращают индекс созданного столбца при успешном выполнении, NSNotFound
в противном случае.### Улучшения
Добавлена функция createTableWithName:columns:
в RLMRealm
.
Добавлена поддержка ключевого среза для первого столбца RLMTable
, если тип столбца — RLMPropertyTypeString
.
Добавлена функция setRow:atIndex:
в RLMTable
.
Конструкторы RLMRealm
теперь имеют варианты, которые принимают блок инициализации для записи.
Новый объектный интерфейс — таблицы, созданные/полученные с помощью tableWithName:objectClass:
, возвращают пользовательские объекты.
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>
.
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
теперь имеют общий протокол, что облегчает их использование взаимозаменяемо.BOOL
как NSNumber
.0.4.0 Примечания к выпуску (2014-03-26) =============================================================### Изменения, нарушающие совместимость API
NSData
вместо.contextWithPersistenceToFile:
.findFirstRow
и min/max/sum/avg
таблицы скрыты.Table.appendRow
переименован в addRow
.getOrCreateTable
на Transaction
удалён.set*:inColumnWithIndex:atRowIndex:
префиксированы TDB
.*:inColumnWithIndex:atRowIndex:
префиксированы TDB
.addEmptyRow
на таблице удалён. Используйте [table addRow:nil]
вместо.id
и NSObject
вместо.insertEmptyRow
удалён из таблицы. Используйте insertRow:nil atIndex:index
вместо.firstRow
и lastRow
в представление.firstRow
и lastRow
в таблице теперь возвращают nil
, если таблица пустая.getTableWithName
в группу.[TDBQuery parent]
и [TDBQuery subtable:]
теперь возвращают self
.createTable
в Транзакцию. Вызывает исключение, если таблица с таким же именем уже существует.API на Objective-C был обновлен, и ваш код перестанет работать!
API на Objective-C был обновлен, и ваш код перестанет работать!
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )