12.5.0 (2025-01-02)
호환성이 손상되는 변경
- Windows SDK가 더 이상 32비트 ARM을 지원하지 않기 때문에 arm32 의 UWP에 대한 지원이 제거되었습니다. (PR #3683)
- Xamarin 프로젝트에 대한 지원은 더 이상 사용되지 않습니다. SDK가 작동할 것으로 예상되지만, 5월 이후 Microsoft 에서 Xamarin의 수명을 종료했기 때문에 더 이상 적극적으로 Xamarin 테스트를 수행하지 않습니다. (PR #3683)
- .NET 6 에 대한 지원은 더 이상 사용되지 않습니다. 여전히 모든 것이 작동할 것으로 예상되지만, 향후 출시하다 에서 SDK의 대상을 최신 LTS 버전(8.0)으로 변경할 예정입니다. (PR #3683)
고정
- 로거 로그 수준이 정보보다 높게 설정하다 경우 클라이언트 앱 종료 중 충돌을 수정합니다. (코어 14.12.1)
- File::rw_lock()이 파일 열지 못하는 경우 예외 메시지에는 파일 이름이 포함되지 않습니다. (코어 14.12.1)
- 기본 이름의 길이가 240 ~ 250 사이인 경우 해시 파일 이름으로의 대체가 실패합니다. (코어 14.12.1)
- 여러 조건자가 포함된 쿼리 함께 OR 연결하면 일부 플랫폼에서 충돌이 발생할 수 있습니다(iphone에서는 엄격하게 약한 순서 검사 실패). (코어 14.13.0)
호환성
- Realm Studio: 15.0.0 이상.
내부
- 코어 14.13.0 사용 .
12.4.1 (2024-09-16)
고정
- managed 웹 소켓을 사용할 때 잘못된 바이너리 메시지로 인해 서버 가 연결을 끊고 클라이언트 가 다시 연결하고 다시 업로드해야 하는 과부하로 인해 동기화 트래픽이 중단될 수 있는 문제를 수정했습니다. (이슈 #3671).
호환성
- Realm Studio: 15.0.0 이상.
내부
- 코어 14.12.0 사용 .
12.4.0 (2024-08-25)
개선 사항
SyncTimeoutOptions
에ReconnectBackoffOptions
속성 을 도입하여 다시 연결을 시도하기 전에 동기화 클라이언트 가 적용하는 지연을 제어할 수 있습니다. (PR #3661).- 더 이상 역할 및 권한 변경으로 인해 로컬 영역 을 업데이트 하기 위해 클라이언트 재설정 할 필요가 없습니다. (코어 14.11.0)
- Windows 장치에서 Device Sync는 연결을 설정할 때 Windows 신뢰할 수 있는 루트 인증 기관 인증서 저장소에서 SSL 인증서를 추가로 조회합니다. (코어 14.11.0)
- 이제 동기화 로그 문에 접두사(예:
Connection[1:<connection id>] Session[1]: log message
)에 앱 서비스 연결 ID가 포함되어 문제를 해결하는 동안 동기화 활동을 서버 로그와 더 쉽게 연관시킬 수 있습니다. (코어 14.11.2) - 내장된 객체에 대한 복제 로그에서 테이블 선택 수를 줄여 동기화 부트스트랩 성능을 개선합니다. (코어 14.12.0)
- 커밋 후에도 변경 가능한 구독 기간 동안 고정된 읽기 잠금 (read lock) 을 해제합니다. 이렇게 하면 리소스를 더 일찍 확보하고 시작 상태 가 큰 동기화 부트스트랩의 성능이 향상될 수 있습니다. (코어 14.12.0)
- 이제 클라이언트 재설정 주기 감지는 이전 복구 시도가 동일한 코어 버전으로 수행되었는지 확인하고, 그렇지 않은 경우 다시 복구를 시도합니다. (코어 14.12.0)
- 번들로 제공되는 OpenSSL 버전을 3.3.1 으로 업데이트했습니다. (코어 14.12.0)
고정
- 동기화 다운로드 진행률은 부트스트랩이 완료될 때만 업데이트되어 첫 번째 완료 전에 항상 0 , 이후 계속 1 으로 진행되었습니다. (코어 14.11.0)
- Sync client can crash if a session is resumed while the session is being suspended. (코어 14.11.0)
- 부트스트랩을 다운로드하는 동안 연결이 끊어지거나 다시 시작되어 동기화 세션 이 중단된 경우, 세션이 다시 연결되어 부트스트랩을 다운로드할 때 이전 부트스트랩의 오래된 데이터가 포함될 수 있습니다. 이로 인해 데이터베이스 에 저장된 객체가 서버 의 실제 상태 와 일치하지 않아 잠재적으로 보상 쓰기가 발생할 수 있습니다. (코어 14.11.0)
- 확인할 다운로드 가 없을 때 불필요한 서버 왕복을 수정했습니다. (코어 14.11.0)
- 로그인 시 사용자 프로필이 검색되기 전에 앱 구독 콜백 이 실행되어 콜백 을 사용할 때 빈 사용자 프로필이 생성되었습니다. (코어 14.11.1)
- 동기화 클라이언트 가 중복 보상 쓰기 (write) 오류를 보고할 수 있습니다. (코어 14.11.2)
- Fixed an "invalid column key" exception when using a RQL "BETWEEN" query on an int or timestamp property across links. (코어 14.12.0)
- ArrayErase 및 지우기 명령어와 관련된 충돌 해결 버그가 수정되었으며, 이로 인해 동기화를 방지하기 위해 '유효하지 않은 사전 크기' 예외가 발생할 수 있습니다. (코어 14.12.0)
- 충돌 해결 중 궁극적 일관성 을 방해하는 버그를 수정했습니다. 영향을 받는 클라이언트는 결과적으로 데이터 분산과 잠재적인 일관성 오류를 경험하게 됩니다. (코어 14.12.0)
- Linux ARMv7 시스템에서 네이티브 Realm 라이브러리가 번들 OpenSSL에 링크될 때
unexpected reloc type 0x03
과 같은 오류를 유발하는 문제를 수정했습니다. (코어 14.12.0) Realm.Copy()
소스 Realm 이 동기화된 Realm 일 때 업로드되지 않은 로컬 변경 사항이 있다고 주장하는 예외가 때때로 잘못 발생하는 경우가 있습니다. (코어 14.12.0)
호환성
- Realm Studio: 15.0.0 이상.
내부
- 코어 14.12.0 사용 .
12.3.0 (2024-07-17)
지원 중단
Logger
은 현재Logger
에서 파생된RealmLogger
로 대체되어 더 이상 사용되지 않습니다. (PR #3634)Logger.LogLevel
set
및get
접근자는 더 이상 사용되지 않습니다.RealmLogger.SetLogLevel()
및RealmLogger.GetLogLevel()
를 사용하세요(아래 개선 사항 참조).Logger.Function(Action<LogLevel, string> logFunction)
는 더 이상 사용되지 않습니다.RealmLogger.Function(Action<LogLevel, LogCategory, string> logFunction)
을(를) 사용하세요(아래 개선 사항 참조).
개선 사항
RealmConfiguration
SyncConfiguration
에ShouldCompactOnLaunch
을 설정하다 하도록 허용합니다. (이슈 #3617)- 객체를 생성하여 생성되는 로컬 트랜잭션 로그 의 크기를 줄이고 삽입이 많은 트랜잭션(Core 14.10.0)의 성능을 개선합니다.
- 정수 및 타임스탬프에 대한 범위 쿼리의 성능이 향상되었습니다.
Realm.All<T>().Filter(...)
에서 "BETWEEN" 작업을 사용해야 합니다. (코어 14.10.1) RealmConfiguration
SyncConfiguration
에ShouldCompactOnLaunch
을 설정하다 수 있도록 허용했습니다. (이슈 #3617)LogCategory
이 도입되어 기록해야 하는 메시지 카테고리와 중요도 수준을 더 잘 제어할 수 있습니다. (PR #3634)- 지정된
LogCategory
에 대해LogLevel
설정 및 가져오기가 허용됩니다. 카테고리 계층 구조는LogCategory.Realm
에서 시작합니다.RealmLogger.SetLogLevel(LogLevel.Warn, LogCategory.Realm.Sync); RealmLogger.GetLogLevel(LogCategory.Realm.Sync.Client.Session); // LogLevel.Warn
- 호출 시
LogLevel
,LogCategory
및 메시지를 수신하는 콜백 을 허용하는 함수 로거를 추가했습니다.RealmLogger.Default = RealmLogger.Function((level, category, message) => /* custom implementation */);
- 카테고리를 사용하는
RealmLogger.Log()
오버로드를 추가했습니다. 기존Log()
API 는LogCategory.Realm.SDK
에 암시적으로 로그 합니다.RealmLogger.Default.Log(LogLevel.Warn, LogCategory.Realm, "A warning message");
- 지정된
- Windows 장치에서 Device Sync는 연결을 설정할 때 Windows 신뢰할 수 있는 루트 인증 기관 인증서 저장소에서 SSL 인증서를 추가로 조회합니다. (코어 14.11.0)
- 더 이상 역할 및 권한 변경으로 인해 로컬 영역 을 업데이트 하기 위해 클라이언트 재설정 할 필요가 없습니다. (코어 14.11.0)
고정
ForCurrentlyOutstandingWork
진행률 알림은 등록 후 콜백을 즉시 호출하지 않습니다. 대신 첫 번째 업데이트를 받기 위해 일부 데이터가 수신될 때까지 기다려야 합니다. 알림. (코어 14.8.0)- 압축 후 파일 업그레이드 가 트리거됩니다.
ShouldDeleteIfMigrationNeeded
이(가)true
(으)로 설정하다 경우 데이터가 손실될 수 있습니다. (이슈 #3583, 코어 14.9.0) - 삭제된 객체 를 대체 인수로
.Filter()
에 전달하면invalid RQL for table
로 시작하는 메시지와 함께 혼동스러운 오류가 발생합니다. 이제 대신 더 설명적인 오류가 발생합니다. (이슈 #3619) - 첫 번째 조건이 완료되기 전에 새 클라이언트 재설정 조건(예: flexible 동기화 마이그레이션 롤백)이 발생한 경우 AutoClientResetFailed 로 인해 실패할 수 있는 일부 클라이언트 재설정(예: flexible 동기화 로 마이그레이션)을 수정합니다. (코어 14.10.0)
- Windows 에서 암호화된 파일은 64비트 Windows 에서 32비트 유형인
off_t
의 내부 사용량으로 인해 x64 에서도 최대 2GB 였습니다. (코어 14.10.0) - 암호화 코드는 더 이상 시스템 페이지 크기에 따라 다르게 작동하지 않으므로 페이지 크기가 다른 플랫폼 간에 암호화됨 Realm 파일 복사와 관련된 버그의 반복적인 원인이 완전히 제거될 것입니다. 알려진 미해결 버그 중 하나는 (RNET-1141) 쓰기 시스템보다 큰 페이지 크기를 가진 시스템에서 파일을 열면 기록된 적이 없는 파일 섹션을 읽으려고 시도하는 버그입니다. (코어 14.10.0)
- 다중 프로세스 시나리오에서는 암호화됨 파일에서 오래된 읽기가 발생할 수 있는 몇 가지 복잡한 시나리오가 있습니다. 이는 적중하기가 매우 어려웠으며 일반적으로 어설션 실패 또는 DecryptionFailure 발생으로 인해 충돌로 이어질 수 있습니다. (코어 14.10.0)
- 암호화된 파일에는 다른 스레드가 제한된 범위 의 메모리에 쓰는 동안 메모리 차단 을 memcpy할 수 있는 정상적인 데이터 경쟁이 있습니다. 이런 일이 발생하면 범위 에서 데이터를 읽는 것은 논리적으로 불가능하지만, Thread Sanitizer는 이에 대해 상당히 합리적으로 불평합니다. 이제 Tsan으로 실행 때 더 느린 작업을 수행하여 이러한 경합을 피합니다. (코어 14.10.0)
- 전체 텍스트 검색 을 위해 문자열을 토큰화하면 [-1, 255] 범위 를 벗어난 값이
isspace()
로 전달될 수 있으며, 이는 정의되지 않은 동작입니다. (코어 14.10.0) - Flexible Sync Realm 을 비동기적으로 열면 모든 데이터를 다운로드 할 때까지 기다리지 않을 수 있습니다. (코어 14.10.1)
- 업그레이드된 파일에서
RealmValue
목록을 지우면 어설션이 실패합니다. (코어 14.10.1) - 중첩된 컬렉션 에 할당할 때 예기치 않은 병합 결과가 발생할 수 있습니다. (코어 14.10.2)
- 링크가 중첩된 목록, 중첩된 사전, 최상위 사전 또는
RealmValue
목록에서 가져오고 소스 테이블에 256 개 이상의 객체가 있는 경우 잘못된 객체에서 역링크를 제거하는 문제가 수정되었습니다. 이는 객체 를 제거할 때array_backlink.cpp:112: Assertion failed: int64_t(value >> 1) == key.value
로 나타날 수 있습니다. (코어 14.10.3) - 링크가 있는 중첩된 컬렉션이 포함된 클러스터의 축소/재결합을 수정했습니다. 이는 객체 를 제거할 때
array.cpp:319: Array::move() Assertion failed: begin <= end [2, 1]
로 나타날 수 있습니다. (코어 14.10.3) Session.WaitForUpload()
업로드할 변경 세트를 생성하지 않는 커밋을 처리하는 방식이 일관되지 않았습니다. 이전에는 업로드 대기 중인 모든 커밋이 비어 있으면 즉시 완료되거나 서버 왕복을 기다릴 때도 있었습니다. 이제 항상 즉시 완료됩니다. (코어 14.10.3)- 속성 을 다시 매핑할 때 내부 이름으로
.Filter("... SORT/DISTINCT(mapped-to-name)")
을(를) 호출하면Cannot sort on key path 'NAME': property 'PersonObject.NAME' does not exist
과 같은 오류가 발생할 수 있습니다. (코어 14.10.4) - Sync client can crash if a session is resumed while the session is being suspended. (코어 14.11.0)
- 부트스트랩을 다운로드하는 동안 연결이 끊어지거나 다시 시작되어 동기화 세션 이 중단된 경우, 세션이 다시 연결되어 부트스트랩을 다운로드할 때 이전 부트스트랩의 오래된 데이터가 포함될 수 있습니다. 이로 인해 데이터베이스 에 저장된 객체가 서버 의 실제 상태 와 일치하지 않아 잠재적으로 보상 쓰기가 발생할 수 있습니다. (코어 14.11.0)
- 확인할 다운로드 가 없을 때 불필요한 서버 왕복을 수정했습니다. (코어 14.11.0)
호환성
- Realm Studio: 15.0.0 이상.
내부
- Core v14.10.3 사용.
12.2.0 (2024-05-22)
개선 사항
SyncProgress.ProgressEstimate
의 계산이 개선되었습니다. (이슈 #3580)마이그레이션 전 Realm의 객체에 해당하는 마이그레이션 후 Realm의 객체를 조회할 수 있는 헬퍼인
Migration.FindInNewRealm
에 대한 지원이 추가되었습니다. (이슈 #3600)생성된 클래스의 필드 및 속성 이름을 변경하는 난독화 도구와의 호환성을 개선하기 위해 생성된
RealmSchema
필드에[System.Reflection.Obfuscation]
을 추가했습니다. (이슈 #3574)RealmValue
(IList<RealmValue>
및IDictionary<string, RealmValue>
) 의 목록 및 사전에 대한 지원 이RealmValue
에 포함되도록 추가되었습니다. 목록과 딕셔너리는 컬렉션 자체에 임의의 수의 컬렉션을 포함할 수 있습니다. 새로운 정적 메서드RealmValue.List
및RealmValue.Dictionary
를 사용하거나List
,RealmValue[]
또는Dictionary
와 같은 일반적인 유형에서 변환하는 경우 암시적 연산자를 사용하여 기존 컬렉션 을RealmValue
로 변환할 수 있습니다. 마지막으로 새로운 변환 메서드AsList
및AsDictionary
를 사용하여 포함된 컬렉션을 가져올 수 있습니다. 예를 예시 다음과 같습니다.var list = new List<RealmValue> { 1, true, "stringVal" }; var rvo = realm.Write(() => { return realm.Add(new RealmValueObject { RealmValueProperty = list}); }); var retrievedList = rvo.RealmValueProperty.AsList();
(PR #3441)
고정
User.Changed
알림 내에서App.CurrentUser
에 액세스하면 교착 상태가 발생합니다. (코어 14.7.0)- 사전의 동일한 키에 대한 동일한 링크를 두 번 이상 삽입하면 객체 에 대한 역링크가 여러 개 잘못 생성됩니다. 이로 인해 나중에 충돌이 발생하지는 않았지만
RealmObject.BacklinksCount
에서 반환하는 값과 역링크 수와 관련된 쿼리에 영향을 미쳤을 것입니다. (코어 14.7.0) - 컬렉션에 기본 값이 포함된 경우
RealmObject.DynamicApi.GetList/Set/Dictionary
가 실패하는 문제를 수정했습니다. (이슈 #3597)
호환성
- Realm Studio: 15.0.0 이상.
내부
- 코어 14.7.0 사용 .
12.1.0 (2024-05-01)
개선 사항
- 런타임에 애플리케이션 의 기본 URL을 업데이트 하는 실험적 API 가 추가되었습니다 -
App.UpdateBaseUriAsync()
. 이는 에지 서버 와 cloud 간의 로밍에 사용하기 위한 것입니다. (이슈 #3521)
고정
MongoClient.Collection.FindOneAsync
에서 반환된 값은 이제 필터하다 와 일치하는 객체 가 없는 경우null
이 반환될 수 있음을 더 명시적으로 전달하기 위해 null을 허용하는 문서 입니다. (PR #3586)- 이미 제거된 사전 키의 제거를 통합할 때 충돌이 수정되었습니다. (코어 14.5.2)
App.AllUsers
앱 인스턴스 가 존재하는 동안 로그아웃한 경우에만 로그아웃한 사용자가 포함되었습니다. 이제 항상 로그아웃한 모든 사용자가 포함됩니다. (코어 14.6.0)- 암호화됨 파일 이식성과 관련된 몇 가지 문제를 수정했습니다('번들로 구성된' 암호화됨 Realm 을 한 장치에서 다른 장치로 복사): (Core 14.6.0)
- 현재 플랫폼과 페이지 크기가 다른 플랫폼에서 생성된 64Mb 미만의 암호화된 Realm을 열 때
Assertion failed: new_size % (1ULL << m_page_shift) == 0
가 수정되었습니다. - 페이지 크기가 4k인 기기에서 생성된 작은(<4k의 데이터) Realm 을 번들로 제공하여 페이지 크기가 더 큰 기기에서 열 때 발생하는
DecryptionFailed
예외를 수정했습니다. - 상위 참조가 페이지 끝에서 ~50 바이트 이내에 있는 경우 일부 드문 할당 패턴에 대해 암호화됨 Realm 을 이후에 열 때 발생하는 문제를 수정했습니다. 이는 DecryptionFailed 예외 또는 어설션
encrypted_file_mapping.hpp:183: Assertion failed: local_ndx < m_page_state.size()
)으로 나타날 수 있습니다.
- 현재 플랫폼과 페이지 크기가 다른 플랫폼에서 생성된 64Mb 미만의 암호화된 Realm을 열 때
- 동기화 클라이언트 가 Realm 파일 프로세스 여는 동안 다운로드한 변경 세트를 적용한 경우 스키마 초기화가 어설션 실패할 수 있습니다. (코어 14.6.0)
- UUID/ 유형에 대한 '체인된 OR 동일성'ObjectId RQL 쿼리 및 string/int/uuid/ObjectId 유형에 대한 구문 분석 'IN' 쿼리의 성능을 개선합니다. (코어 14.6.0)
- 조건에서 빈
x == 1 OR x == 2 OR x == 3
이 string string 있는 속성을 평가할 때 IN 쿼리(또는 패턴의 쿼리)를 실행할 때 발생하는 버그가 수정되었습니다.Atlas Search 빈 string 과의 일치는 대신 null string 을 검색하는 것처럼 평가됩니다. (코어 14.6.1)
호환성
- Realm Studio: 15.0.0 이상.
내부
- 코어 14.6.1 사용 .
12.0.0 (2024-04-17)
파일 형식 버전이 상향 조정되었습니다. 이전 파일은 자동으로 업그레이드되지만 다운그레이드하거나 이전 버전의 .NET SDK 로 열 수는 없습니다.
호환성이 손상되는 변경
MongoClient.Collection
에서 메서드를 사용할 때MongoDB.Bson
속성으로 클래스에 주석을 달지 않고도 Realm 클래스의 자동 직렬화 및 역직렬화를 추가했습니다. 이 기능 은 다양한 유형(DateTimeOffset
포함)에 대한 기본값 직렬화를 변경하는 데 필요했습니다. 이전 직렬화를 사용하려면 모든 종류의 직렬화가 완료되기 전에Realm.SetLegacySerialization
를 호출해야 하며, 그렇지 않으면 예상대로 작동하지 않을 수 있습니다. #3459SyncProgress.TransferredBytes
및SyncProgress.TransferableBytes
은SyncProgress.ProgressEstimate
을 위해 제거되었으며, 현재 진행 상황의 백분율 추정치를 나타내는 0.0 과 1.0 사이의 double 값입니다. (이슈 #3478)- RealmCore v5.23.9 에서 생성된 Realm 파일에서의 업그레이드 지원 (Realm .NET v5.0.1) 이전 버전은 더 이상 지원되지 않습니다. (코어 14.0.0)
String
및byte[]
은 이제 비교 및 쿼리에 강력하게 유형화됩니다. 이 변경 사항은RealmValue
속성 에서 string 상수를 쿼리할 때 특히 관련이 있는데, 이제 문자열만 반환되기 때문입니다. 이진 데이터를 검색하려면 상수로 해당 유형을 지정해야 합니다. RQL (.Filter()
)에서 이진 상수를 지정하는 새로운 방법은RealmValueProp = bin('xyz')
또는RealmValueProp = binary('xyz')
를 사용하는 것입니다. (코어 14.0.0)- 문자열 정렬 순서가 유사한 영어 문자를 함께 그룹화하는 대신 표준 유니코드 코드포인트 순서를 사용하도록 변경되었습니다. 눈에 띄는 변경 사항은 'aAbBzZ'에서 'ABZabz'로 변경됩니다. (코어 14.0.0)
- RQL(
Filter()
)에서@type
연산을 사용하여 쿼리하려면objectlink
를 사용하여 링크를 객체와 일치시켜야 합니다.object
는 사전 유형용으로 예약되어 있습니다. (코어 14.0.0) - 파일 형식이 23 이하인 Realm(Realm .NET 버전 12.0.0 이전)을 읽기 전용 모드로 열면 충돌이 발생합니다. (코어 14.0.0)
개선 사항
RealmValue
의 메모리 사용량 감소. (PR #3441)IRealmCollection.SubscribeForNotifications
사용 시 키 경로 컬렉션 (KeyPathsCollection
) 전달에 대한 지원 을 추가합니다.KeyPathsCollection
를 전달하면 알림을 발생시킬 속성 변경 사항을 지정할 수 있습니다.다음을 통해
KeyPathsCollection
을(를) 얻을 수 있습니다.KeyPathsCollection.Of
또는KeyPathsCollection.Of<T>
메서드를 사용하여 명시적으로 빌드합니다.List
또는KeyPath
배열 또는 문자열에서의 변환을 사용하여 암시적으로 빌드합니다.- 전체 알림과 얕은 알림 에 대해 각각 정적 값
Full
및Shallow
중 하나를 가져옵니다.
KeyPath
는 string 에서 암시적으로 변환하여 얻거나KeyPath.ForExpression<T>
메서드를 사용하여 표현식에서 작성할 수 있습니다.예를 들면 다음과 같습니다.
var query = realm.All<Person>(); KeyPath kp1 = "Email"; KeyPath kp2 = KeyPath.ForExpression<Person>(p => p.Name); KeyPathsCollection kpc; //Equivalent declarations kpc = KeyPathsCollection.Of("Email", "Name"); kpc = KeyPathsCollection.Of<Person>(p => p.Email, p => p.Name); kpc = new List<KeyPath> {"Email", "Name"}; kpc = new List<KeyPath> {kp1, kp2}; query.SubscribeForNotifications(NotificationCallback, kpc);
(PR #3501 )
Realm 객체에서 역직렬화할 수 있는 MongoDB의 문서 컬렉션을 가져오는
MongoClient.GetCollection<T>
메서드가 추가되었습니다. 이 메서드는MongoClient.GetDatabase(dbName).GetCollection(collectionName)
와 동일하게 작동하지만 데이터베이스 이름과 컬렉션 이름은 Realm 객체 클래스에서 자동으로 파생됩니다. #3414>, >=, <, <=, 연산자를 사용하여 연결되지 않은 속성에 대한 ( ) 쿼리의 성능이 개선되었으며, 이전에는 null이 일치하지 않는 null RQL
.Filter()
string string 이 모든 것보다 작은 것으로 평가되어야 하는 동작을 수정했습니다. . (코어 13.27.0)번들로 제공되는 OpenSSL 버전을 3.2.0 으로 업데이트했습니다. (코어 13.27.0)
10진수128 속성의 저장이 최적화되어 개별 값이 필요에 따라 0 비트(모두 null인 경우), 32 비트, 64 비트 또는 128 비트를 차지합니다. (코어 14.0.0)
RQL (
Filter()
) 쿼리에서 컬렉션 인덱스에 대한 지원 을 추가합니다. 예를 예시 다음과 같습니다.var people = realm.All<Person>(); //People whose first dog is called "Fluffy" var query1 = people.Filter("ListOfDogs[FIRST].Name = $0", "Fluffy") //People whose last dog is called "Fluffy" var query2 = people.Filter("ListOfDogs[LAST].Name = $0", "Fluffy") //People whose second dog is called "Fluffy" var query3 = people.Filter("ListOfDogs[2].Name = $0", "Fluffy") //People that have a dog called "Fluffy" var query4 = people.Filter("ListOfDogs[*].Name = $0", "Fluffy") //People that have 3 dogs var query5 = people.Filter("ListOfDogs[SIZE] = $0", 3)
(코어 14.0.0)
인덱싱된
RealmValue
속성에 대한 지원 이 추가되었습니다. (PR #3544)복잡한 스키마와 처리해야 할 매우 간단한 변경 사항이 있는 객체 알림의 성능을 최대 20% 향상시킵니다. (코어 14.2.0)
최대 75%의 매우 많은 수의 알림으로 성능을 개선합니다. (코어 14.2.0)
페이지 크기가 4k보다 큰 플랫폼( 예시: arm64 Apple 플랫폼)에서 256 페이지 미만인 파일에 대해 파일 압축 성능을 개선합니다. (코어 14.4.0)
AppConfiguration
의 기본 기본 URL이services.cloud.mongodb.com
을(를) 가리키도록 업데이트되었습니다. https://www.mongodb.com/ko-kr/docs/atlas/app-services/domain-migration/을 참조하세요. 을(를) 참조하세요. (이슈 #3551)
고정
indexed_property == NONE {x}
와(과) 같이 x가 아닌 x에서만 실수로 일치하는 RQL(.Filter()
) 쿼리를 수정했습니다. 이는 동등성(== 또는 IN)을 가진 인덱싱된 속성이 한 항목 목록의NONE
와 일치하는 경우에만 적용됩니다. 상수 목록에 둘 이상의 값이 포함되어 있으면 올바르게 작동하는 것입니다. (코어 13.27.0)- 자동 클라이언트 재설정 복구 중에 복구된 변경 세트를 업로드하면 '잘못된 서버 버전' 오류와 새 클라이언트 재설정이 발생할 수 있습니다. (코어 13.27.0)
- 일치하는 항목이 없는 접두사 검색 을 사용할 때 전체 텍스트 인덱스 에서 충돌이 발생하는 문제를 수정했습니다. (코어 13.27.0)
- 동기화 세션 시작 중 어설션
failed: m_initiated
과의 충돌을 수정했습니다. (코어 13.27.0) - 사용자 스레드가 동기화 이벤트 루프를 사용하여 m_finalized를 읽기 위해 경쟁할 수 있는 TSAN 위반을 수정했습니다. (코어 13.27.0)
- 클라이언트 재설정 전에 Realm 파일을 백업할 때 기존 파일 을 덮어쓸 수 있는 사소한 경쟁 조건을 수정합니다. (코어 13.27.0)
- 컬렉션 이 지워질 때 참인 부울 속성
ChangeSet.IsCleared
이 이제IDictionary
에 대해서도 발생하여ISet
및IList
에 정렬합니다. (코어 14.0.0) - 인덱스가 있는
RealmValue
속성에 대한 동일성 쿼리를 수정했습니다. (코어 14.0.0) - 8388606 개 이상의 링크가 특정 객체 를 가리킬 때 발생하는 충돌을 수정했습니다.
IDictionary
에서NULL
값을 쿼리할 때 잘못된 결과가 수정되었습니다. (코어 14.0.0)- Apple이 아닌 ARM 64 기기에서 생성되어 다른 플랫폼으로(또는 그 반대로) 복사된 Realm 은 정렬 순서 차이로 인해 이식성이 없었습니다. 이는 ASCII가 아닌 문자에서 첫 번째 차이를 갖는 문자열 또는 바이너리에 영향을 미칩니다. 이러한 항목은 설정하다 또는 문자열에 긴 공통 접두사(> 200 문자)가 있는 경우 인덱싱된 열에서 찾을 수 없습니다. (코어 14.0.0)
- LnkLst에서 항목을 제거할 때 무효화된 링크가 표시되어 나중에 해당 목록 항목에 액세스할 때 충돌이나 예외가 발생할 수 있는 문제가 수정되었습니다. 이는 다른 클라이언트 가 이전에 1000 개 이상의 링크가 있는 링크 목록에서 링크를 제거한 후 동일한 목록에서 추가 로컬 제거로 인해 목록의 항목이 1000 개 미만인 동기화 Realm에 영향을 줍니다. (코어 14.2.0)
- 프로세스가 종료되는 동안 백그라운드 스레드에서 Realm을 여는 것과 관련된 가짜 충돌을 수정합니다. (코어 14.3.0)
- 오프라인 상태에서 캐시된 사용자로 Realm을 열면 치명적인 오류가 발생하고 세션이 연결을 다시 시도하지 않는 문제를 수정합니다. (코어 14.4.0)
- 다른 스레드에서 파일을 닫는 동안 Realm을 여는 것과 관련된 것으로 보이는 어설션 실패 "m_lock_info && m_lock_info->m_file.get_path() == m_filename"을 수정합니다. (코어 14.5.0)
- 기본값 null 값(내장된 객체 포함)을 설정할 때 복제 코드의 버그로 인한 기록 분기가 수정되었습니다. (코어 14.5.0)
- 로그아웃할 때 널 포인터 예외가 트리거될 수 있으며 비동기 커밋 콜백이 실행되지 않습니다. (코어 14.5.0)
호환성
- Realm Studio: 15.0.0 이상.
내부
- 코어 14.5.1 사용 .
11.7.0 (2024-02-05)
개선 사항
- 이제 자동 클라이언트 재설정 복구가 업로드되지 않은 로컬 변경 사항이 커밋된 후 서버에서 변경 세트를 다운로드했을 때 변경 사항을 더 잘 복구합니다. 클라이언트 재설정 전에 로컬 Realm이 서버를 완전히 최신 상태로 유지한 경우, 이제 자동 복구는 클라이언트 재설정이 포함되지 않은 것처럼 항상 정확히 동일한 상태를 생성해야 합니다. (코어 13.24.1)
- 이제 부트스트랩 적용 중에 발생한 예외는 처리되지 않은 예외로 프로그램을 종료하는 대신 사용자에게 표시됩니다. (코어 13.25.0)
- string 상수에 대한
Realm.Filter()
쿼리에서>
,>=
,<
,<=
연산자 사용을 허용합니다. 대소문자를 구분하는 사전순 비교입니다. >, >=, <, <=, 연산자를 사용하여 연결되지 않은 속성 에 대한 RQL () 쿼리의 성능이.Filter()
string string 개선되었으며, null 이 모든 것보다 작은 것으로 평가되어야 하는 동작이 수정되었으며, 이전에는 null이 일치하지 않았습니다. . (코어 13.26.0-14-gdf25f) Session.GetProgressObservable
이제 Flexible Sync와 함께 사용할 수 있습니다. (이슈 #3478)
고정
- 자동 클라이언트 재설정 복구는 목록에 복구할 수 없는 변경을 가한 쓰기 (write) 를 복구 할 때 목록에 삽입된 항목을 복제합니다(예: 기존 항목 수정 또는 삭제), 구독 변경, 목록에 항목을 추가한 쓰기 (write) 순으로 이루어집니다. (코어 13.24.0)
- 클라이언트 재설정 복구 중에 링크 세트에 항목이 누락되거나 복구를 방해하는 예외가 발생할 수 있습니다. (코어 13.24.0)
- 복구에 추가되지 않은 인덱스에 대해 작업한
IList<RealmObject>
또는IList<RealmValue>
에서 이동 또는 설정 작업을 복구할 때 복구를 사용하여 클라이언트를 재설정하는 동안 오프라인 상태에서 다른 클라이언트가 삭제한 객체에 대한 링크는 복구 클라이언트에 의해 다시 생성됩니다. 그러나 이러한 링크의 객체에는 프라이머리 키만 채워지고 다른 모든 필드는 기본값이 됩니다. 이제 이러한 좀비 객체를 생성하는 대신 복구 중인 목록은 삭제된 링크를 건너뜁니다. (코어 13.24.0) - 파티션 기반 동기화 Realms에서 클라이언트 재설정 복구를 위해 로컬 변경 사항을 다시 적용하는 동안 오류가 발생하면 클라이언트 재설정 시도가 기록되지 않아 클라이언트 재설정 을 자동으로 복구하려고 시도하고 실패하는 무한 루프가 발생할 수 있습니다. (코어 13.24.0)
- 로컬 시계가 2015-01-01T00:00:00Z보다 뒤처지는 경우 변경 세트에 잘못된 타임스탬프가 있는 것입니다. 이제 동기화 클라이언트에서 예외가 발생하면 예외가 발생합니다. (코어 13.24.1)
- Flexible sync Realm 을 처음 열 때 클라이언트 재설정이 트리거된 경우, 구성에 재설정 콜백 전후에 초기 구독 콜백이 있었으며, 초기 구독 콜백이 종료하지 않고 읽기 트랜잭션(read transaction)을 시작했습니다(일반적으로 경우), 재설정 후 콜백을 위해 동결된 Realm 을 열면 BadVersion 예외가 trigger 됩니다. (코어 13.24.1)
- 유연한 동기화 의 자동 클라이언트 재설정 복구 Realms는 여러 쓰기 (write) 트랜잭션(write transaction)에 복구된 변경 사항을 적용 하여 그 사이에 쓰기 잠금( 쓰기 락 (write lock) )을 해제합니다. (코어 13.24.1)
- 클래스 이름 길이가 57 인 경우 56 제한이 잘못 적용되어 클라이언트 재설정 이 충돌할 수 있습니다. (코어 13.24.1)
- Apple/ 를 사용하고 exFAT 파일 시스템에 Realm을 저장하는 동안 동일한 프로세스에서 암호화된 파일을 여러 개 열 때 발생할 수 있는 '복호화 실패' 예외의 여러 원인을 수정했습니다.Realm Linux (코어 13.24.1)
- 동기화 클라이언트 충돌을 일으킬 수 있는 몇 가지 오류를 수정했습니다. (코어 13.25.0)
- 많은 역링크와 관련된 초기 동기화 다운로드 의 성능이 저하됩니다. (코어 13.25.1)
- 4.3.0 이 취약한 것으로 표시됨에 따라 System.Net.Security의 최소 버전을 4.3.2 으로 명시적으로 상향했습니다(자세한 내용은 NuGet 페이지 의 사용 중단 알림에서 확인할 수 있습니다).
- posix_fallocate()를 사용할 때 EOPNOTSUPP를 처리하고 수동으로 공간을 사용하도록 대체합니다. 이렇게 활성화 Android 사용자가 제한적인 파일 시스템에서 Realm 을 열 수 있습니다. (코어 13.26.0)
- 다운로드 메시지가 부트스트랩 메시지로 오인되면 애플리케이션이 Incoming_changesets.size() != 0 (으)로 충돌을 일으킬 수 있습니다. 동기화 세션이 일시 중지되었다가 특정 시간에 재개된 경우 이 문제가 발생할 수 있습니다. (코어 13.26.0)
- ARMv7 Linux (Core 13.26.0)에서
__atomic_is_lock_free
과 같은 기호가 누락된다는 오류를 수정했습니다. - 자동 클라이언트 재설정 복구 중에 복구된 변경 세트를 업로드하면 '잘못된 서버 버전' 오류와 새 클라이언트 재설정이 발생할 수 있습니다. (코어 13.26.0-14-gdf25f)
- 구독 이 이미 실패한 후 구독 변경 알림을 등록할 때 오류 이유 string 의 잘못된 데이터를 수정했습니다. (코어 13.26.0-14-gdf25f)
호환성
- Realm Studio: 13.0.0 이상.
내부
- Core v13.26.0-14-gdf25사용 f.
11.6.1 (2023-11-17)
고정
- 부트스트랩 중에 세션이 중단된 경우 FLX 구독이 서버로 전송되지 않던 문제를 수정했습니다. (코어 13.23.3)
- 구독 이 커밋된 후 동기화 클라이언트 가 새 구독을 확인하기 전에 업로드 메시지가 전송된 경우 FLX 구독이 서버 로 전송되지 않던 문제를 수정했습니다. (코어 13.23.3)
- 클라이언트 재설정 후 구독이 완료로 표시될 때 'KeyNotFound' 예외와 함께 애플리케이션 충돌이 발생하는 문제를 수정했습니다. (코어 13.23.3)
- FLX Realm에서 DiscardLocal 클라이언트를 재설정하는 동안 매우 특정 시간에 충돌이 발생하면 구독이 유효하지 않은 상태로 남을 수 있습니다. (코어 13.23.4)
- 오프라인 상태에서 로컬로 변경된 스키마 를 복구하기 위해 개발 모드 에서 복구와 함께 자동 클라이언트 재설정 을 사용할 때 발생하는 "유효하지 않은 스키마 변경(업로드): 존재하지 않는 테이블에 대한 AddColumn 명령을 프로세스 할 수 없음" 오류가 수정되었습니다. (코어 13.23.4)
호환성
- Realm Studio: 13.0.0 이상.
내부
- 코어 13.23.4 사용 .
11.6.0 (2023-11-03)
개선 사항
지정된 이메일에 대해 서버에서 확인 함수를 다시 실행할 수 있도록
App.EmailPasswordAuth.RetryCustomConfirmationAsync
메서드를 추가했습니다. (이슈 #3463)사용자에 대한 무언가가 변경되었음을 구독자에게 알리는 데 사용할 수 있는
User.Changed
이벤트 가 추가되었습니다(일반적으로 사용자 상태 또는 액세스 토큰 등이 해당됨). (이슈 #3429)Realm 모델의 특정 생성 속성에 적용되는 무시 속성 사용자 지정에 대한 지원 이 추가되었습니다. 구성 옵션의 이름은
realm.custom_ignore_attribute
이며 글로벌 구성 파일에서 설정하다 수 있습니다(글로벌 구성 파일 에 대한 자세한 내용은 .NET 설명서 참조). Realm 생성기는 이를 불투명 string 로 처리하여 해당 멤버에 이미 적용된IgnoreDataMember
및XmlIgnore
속성에 추가됩니다. 속성은 해당 속성이 있는 네임스페이스 가 글로벌 using 파일 에 추가되지 않는 한 정규화되어야 합니다. 예를 예시System.Text.Json
JsonIgnore
를 추가하는 방법은 다음과 같습니다.realm.custom_ignore_attribute = [System.Text.Json.Serialization.JsonIgnore]
(이슈 #2579)
이제 모델 클래스의 컬렉션이 속성 이니셜라이저나 생성자에서 null이 아닌 값에 할당되면 Realm 소스 생성기에 오류가 발생합니다. Realm 컬렉션은 내부적으로 초기화되며 속성에 null이 아닌 값을 할당하는 것은 지원되지
null!
않습니다. (이슈 #3455)AppConfiguration.UseManagedWebSockets = true
사용 시 WebSocket 오류 로깅이 더욱 상세해졌습니다. #3459
고정
- 인터페이스 기반 Realm 클래스를 8.0 보다 낮은 언어 버전에서 사용할 때 발생하는 오류가 추가되었습니다. 동시에 생성된 코드에서
not
사용을 제거하여 최소 C# 버전의 8.0 과 호환되도록 합니다. (이슈 #3265) - 여러 인증 제공자를 사용하여 단일 사용자로 로그인하면 인증 제공자 당 별도의 SyncUser가 생성됩니다. 이 방법은 대부분 효과가 있었지만 몇 가지 단점이 있었습니다.
- 동기화 세션은 세션을 생성하는 데 사용된 특정 SyncUser와 반드시 연결될 필요는 없습니다. 따라서 사용자에게 해당 세션을 쿼리하면 잘못된 결과가 나올 수 있으며, 한 사용자를 로그아웃하면 잘못된 세션이 종료될 수 있습니다.
- 8월부터 11월까지 2020 에 Realm 버전을 사용하여 만든 기존 로컬 동기화 Realm 파일이 제대로 열리지 않고 대신 다시 다운로드되는 경우가 있었습니다.
- SyncUsers 중 하나를 제거하면 해당 사용자의 모든 SyncUsers에 대한 모든 로컬 Realm 파일이 삭제됩니다.
- SyncUsers 중 하나를 통해 서버 측 사용자를 삭제하면 다른 SyncUsers는 유효하지 않은 상태 가 됩니다.
- 원래 익명 로그인을 통해 생성된 후 ID에 연결된 SyncUser는 여전히 익명 사용자로 취급되며 로그아웃 시 완전히 제거됩니다. (코어 13.21.0)
- 액세스 토큰 새로 고침이 진행 중일 때 사용자가 로그아웃한 경우, 새로 고침이 완료되면 사용자가 다시 로그인한 것으로 표시되고 사용자는 일관성 없는 상태가 됩니다(Core 13.21.0).
- 유형 속성 이 'Point'(대소문자 구분 없음) 이외의 것으로 설정하다 일부 객체가 있는 지리 공간적 데이터 세트를 쿼리하는 경우 예외가 발생했습니다. 이제 쿼리 를 중단하는 대신 해당 객체를 무시합니다. (코어 13.21.0)
- 서버에서 write_not_allowed 오류를 수신하면 충돌이 발생할 수 있습니다. (코어 13.22.0)
- 구독을 업데이트해도 trigger Realm 자동 새로 고침이 되지 않아 다른 사람이 다른 쓰기를 수행할 때까지 비동기 새로 고침이 중단되는 경우가 있었습니다. (코어 13.23.1)
- 동시 영역 파일 액세스에 대한 프로세스 간 잠금을 수정하여 FAT32/exFAT 파일 시스템에서 프로세스 간 교착 상태를 유발합니다. (코어 13.23.1)
호환성
- Realm Studio: 13.0.0 이상.
내부
- 코어 13.23.1 사용 .
11.5.0 (2023-09-15)
개선 사항
SessionException
에서 보고된 일부 오류 코드를 간소화했습니다. 몇 가지 오류 코드가 결합되었으며, 일부 오류 코드는 서버에서 더 이상 보고하지 않아 사용이 중단되었습니다. (이슈 #3295)- Full Text Search 는 접두사 검색만 지원합니다. 예: "description TEXT 'alex*'". (코어 13.18.0)
- 유효한 오류 조치도 수신된 경우, Atlas Device Sync에서 알 수 없는 프로토콜 오류가 수신되더라도 더 이상 애플리케이션이 충돌하지 않습니다. 알 수 없는 오류 작업은 ApplicationBug 오류 작업으로 처리되며 동기화 오류 처리기를 통해 오류와 함께 동기화가 실패하게 됩니다. (코어 13.18.0)
- 동기화 프로토콜 버전 10 에서 활성화하는 서버 로그 메시지에 대한 지원 이 추가되었습니다. Appservices 요청 ID는 향후 서버 출시하다 에서 서버 로그 메시지에 제공될 예정입니다. (코어 13.19.0)
고정
- 동적 API를 사용하여 존재하지 않는 속성에 액세스하려고 할 때
MissingMemberException
이(가) 발생하는 메시지가 수정되었습니다. (PR #3432) - .NET 네이티브를 사용할 때
Cannot marshal generic Windows Runtime types with a non Windows Runtime type as a generic type argument
빌드 오류가 수정되었습니다. ( 11.4.0 이후 이슈 #3434} ) - 알 수 없는 앱 서버 오류로 인해 실패한 어설션을 수정합니다. (코어 13.17.2)
- 사전에서 @keys에 대해 쿼리를 실행하면 예외가 발생합니다. (코어 13.17.2)
- 슬래브 할당자(
Assertion failed: ref + size <= next->first
)의 충돌을 수정했습니다. (코어 13.20.1) - 빈 UPLOAD 메시지를 전송하면 '잘못된 서버 버전' 오류 및 클라이언트 재설정이 발생할 수 있습니다. (코어 13.20.1)
호환성
- Realm Studio: 13.0.0 이상.
내부
- 코어 13.20.1 사용 .
11.4.0 (2023-08-16)
개선 사항
SubscriptionSet.Add
사용에 대한 약어로IQueryable.SubscribeAsync
API 를 추가했습니다. 이는 대략적으로 다음과 같이 번역되는 구문 설탕입니다.
동기화를 기다릴 때마다 기다릴지 아니면 구독 이 처음 추가될 때만 기다릴지 제어하는 매개변수와 취소 토큰 지원 을 제공합니다. (PR #3403)realm.Subscriptions.Update(() => { realm.Subscriptions.Add(query); }); await realm.Subscriptions.WaitForSynchronization(); // This can now be expressed as await query.SubscribeAsync();
- 선택적
cancellationToken
인수를Session.WaitForDownloadAsync/WaitForUploadAsync
에 추가했습니다. (PR #3403) - 선택적
cancellationToken
인수를SubscriptionSet.WaitForSynchronization
에 추가했습니다. (PR #3403) - 드문드문 스트리밍 형식의 파일 손상을 수정했습니다(종종 압축, 변환 또는 새 파일로 복사 후). (코어 13.17.1)
- 추가 스키마 변경의 결과로 생성된 전체 텍스트 인덱스를 검색 하려고 시도하는 경우(예: 로컬 스키마 와 동기화된 영역의 스키마 간의 차이를 적용하면 오류 코드
Column has no fulltext index
과 함께 불법적인 운영 오류가 발생할 수 있습니다. (코어 13.17.1) - 서버 상태에서 다운로드 메시지의 동기화 진행률이 잘못 업데이트되었습니다. 이로 인해 서버에 추가 왕복이 발생했을 수 있습니다. (코어 13.17.1)
- 동기화 트래픽에 Realm의 내장 WebSocket 클라이언트 대신 managed WebSocket(
System.Net.WebSockets.ClientWebSocket
)을 사용하는 옵션이 추가되었습니다. 관리형 WebSocket은 인증 이 필요한 프록시 및 방화벽에 대한 향상된 지원 을 제공합니다. 이 기능 은 현재 옵트인되어 있으며AppConfiguration.UseManagedWebSockets
를 true로 설정하여 활성화할 수 있습니다. 관리되는 WebSocket은 향후 버전에서 기본값 이 될 것입니다. (PR #3412). realm.SyncSession.PropertyChanged
구독자가 있는 경우에도realm.SyncSession
가비지 수집이 발생하는 문제를 수정했습니다.
고정
- 비동기 쓰기 트랜잭션(write transaction)을 취소하는 것과 Realm 파일을 닫는 것 사이의 경합 상태로 인해
ObjectDisposedException : Safe handle has been closed
이(가) 발생하는 문제를 수정했습니다. (PR #3400) - 매우 드문 경우지만
Realm.RefreshAsync
에서 예외가 발생하는 경우 해당 예외는 무시되고false
가 반환되었을 수 있는 문제가 수정되었습니다. (PR #3400) - 구독 세트에 구독이 없는 경우
null
이 반환됨을 올바르게 나타내도록SubscriptionSet.Find
의 null 허용 여부 주석을 수정했습니다. (PR #3403) - 다시 매핑된 속성을 사용하여
Filter
쿼리를 실행할 때 관리되는 이름이 아닌 네이티브 이름에서만 작동하는 문제가 수정되었습니다. 이제 두 가지 모두 작동합니다 - 예:
(이슈 #3149)partial class MyModel : IRealmObject { [MapTo("Bar")] public int Foo { get; set; } } // Both of these are valid now realm.All<MyModel>().Filter("Foo > 5"); realm.All<MyModel>().Filter("Bar > 5");
호환성
- Realm Studio: 13.0.0 이상.
내부
- 코어 13.17.1사용
11.3.0 (2023-07-26)
호환성이 손상되는 변경
AppConfiguration.LocalAppName
및AppConfiguration.LocalAppVersion
는 더 이상 사용되지 않으며 향후 버전에서 제거될 예정입니다. SDK에서 제공한 값이 서버 로 전송되지 않았으므로 효과가 없었습니다. (PR #3387)
개선 사항
AppConfiguration
에 제공된 값을 반환하는App.BaseFilePath
,App.BaseUri
및App.Id
속성이 추가되었습니다. (PR #3385)App.Create
에서 반환된App
인스턴스를 캐시할지 여부를 제어하는AppConfiguration.UseAppCache
속성이 추가되었습니다. 일반적으로 설정하지 않는 것이 좋습니다(예: 기본값true
을 그대로 유지), 단위 테스트를 작성할 때 유용할 수 있습니다. (이슈 #3382).
고정
Realm.GetInstanceAsync
작업이 진행 중인 동안 도메인을 다시 로드할 때 Unity 에디터가 충돌하는 문제를 수정했습니다. (이슈 #3344)- 특히
App
인스턴스가 캐시된 경우 올바른 결과를 반환하도록App.Equals
및App.GetHashCode
구현을 수정했습니다. (PR #3385) - Unity에서 Android용 빌드가 실패하고 "사용자 어셈블리를 분석할 수 없습니다. 객체 참조가 객체의 인스턴스로 설정되지 않았습니다." (이슈 #3380)
- 이제 GeoBox는 이에 상응하는 GeoPolygon의 단축키일 뿐입니다. 이를 통해 일관된 쿼리 결과와 오류 검사를 제공합니다. (코어 13.15.2)
- 여러 모서리 케이스를 수정했습니다(예: 유효하지 않은 점이 geoWithin 쿼리 와 일치하는 경우 (코어 13.15.2)
- 스키마에 속성이 추가된 경우 비동기 열기 및 클라이언트 재설정 중 오류가 수정되었습니다. 이 수정 사항은 비동기 열기가 사용되는 경우 PBS에서 FLX로의 마이그레이션에 적용됩니다. (코어 13.16.1)
호환성
- Realm Studio: 13.0.0 이상.
내부
- 코어 13.17.0사용
11.2.0 (2023-07-07)
개선 사항
- 지리 공간적 유형 생성자에 유효성 검사를 추가했습니다. 즉, 이제 잘못된 지리 공간적 도형을 쿼리에서 사용할 때가 아니라 생성할 때 예외가 발생합니다. (PR #3362)
- null을 허용하지 않는 유형의 컬렉션에서
IndexOf(null)
을(를) 호출할 때 일부 유효성 검사가 완화되었습니다. 이전에는ArgumentNullException
이(가) 발생했지만 이제는-1
을(를) 반환합니다. 이는 바인딩 엔진이 이를IndexOf(SelectedItem)
로 호출하여SelectedItem
이null
일 때 예외가 발생하는 데이터 바인딩 시나리오에 특히 유용합니다. (PR #3369) NotSupportedException
를 발생시키는 대신 실제 결과를 반환하도록RealmSet.IndexOf
구현 을 변경했습니다. 지속형 세트의 순서는 여전히 비결정적이지만 쓰기 트랜잭션( 쓰기 (write) transaction) 간에 안정적입니다. 다시 말하지만, 이는 설정하다 가 바인딩 컨텍스트로 컬렉션 컨트롤에 전달되는 데이터 바인딩 시나리오에 주로 유용합니다. (PR #3369)
고정
- 기반 Unity 에서 Windows 위버가 과도한 터미널 trigger 을 Windows 열도록 하는 문제를 수정했습니다. (Issue [3364]https://github.com/ 영역/realm-dotnet/issues/3364)
- CI 기반 Unity에서
Could not analyze the user's assembly. Cannot access a closed Stream.
오류와 함께 위빙이 실패하는 문제를 수정했습니다. (Issue [3364]https://github.com/realm/realm-dotnet/issues/3364) - 배치 모드 에서 Unity 의 클래스를 구성할 때 발생하는
NullReferenceException
문제를 수정했습니다. (이슈 #3363)
호환성
- Realm Studio: 13.0.0 이상.
내부
- 코어 13.15.0사용
11.1.2 (2023-06-20)
고정
'Realm' is a namespace but is used like a type
으로 인해 Maui Android 프로젝트를 빌드 하지 못하게 하는 네임스페이스 문제를 수정했습니다. (이슈 #3351)
호환성
- Realm Studio: 13.0.0 이상.
내부
- 코어 13.15.0사용
11.1.1 (2023-06-19)
고정
'Realm' is a namespace but is used like a type
으로 인해 Unity 프로젝트 빌드에 실패하는 네임스페이스 문제를 수정했습니다. (이슈 #3351)- 비영구 속성에 Realm 속성을 추가할 때 발생하는 경고 메시지가 개선되었습니다. (이슈 #3352)
호환성
- Realm Studio: 13.0.0 이상.
내부
- 코어 13.15.0 사용 .
11.1.0 (2023-06-17)
개선 사항
Realm.SourceGenerator
및Realm.Fody
패키지를 더 이상 사용하지 않습니다. 소스 생성 및 위버 어셈블리는 이제 메인Realm
패키지 에 포함되어 있습니다. 이는Realm
패키지 만 참조한 사용자에게는 투명하게 변경될 것이지만Realm.SourceGenerator
또는Realm.Fody
에 패키지 참조를 명시적으로 추가한 경우 이를 제거 해야 합니다. (PR #3319)- 여러 상위 상위 항목이 참조하는 객체를 복제하고 '고아' 객체를 제거하여
RealmObject
->EmbeddedObject
마이그레이션을 자동으로 처리하다 합니다. (이슈 #2408) - 이제 쓰기 트랜잭션(write transaction)에서 실제로 변경 사항이 적용될 때까지 쓰기 트랜잭션(write transaction)에 새 알리미를 등록할 수 있습니다. 이렇게 하면 쓰기 트랜잭션(write transaction)을 시작하여 트리거되는 변경 알림 내에 새 알림을 등록할 수 있습니다(이전 콜백이 쓰기를 수행하지 않은 경우). (코어 13.10.1)
- 서버가 Flexible Sync로 마이그레이션된 경우 파티션 기반 동기화를 사용하는 클라이언트 앱을 Flexible Sync로 마이그레이션하는 기능이 이번 릴리스에서 공식 지원됩니다. 이전 버전의 Realm(Core 11.0.0 에서 릴리스된 원래 지원 포함)을 사용하는 모든 클라이언트는 앱과 동기화를 시도할 때 '플렉시블 동기화로 전환' 오류 메시지를 받게 됩니다. (코어 13.11.0)
- 사전의 값을 기반으로 정렬/구분을 지원합니다.
.Filter("TRUEPREDICATE SORT(meta['age'])")
. (코어 13.14.0) - 포인트의 지리 공간적 쿼리에 대한 초기 지원 이 추가되었습니다. (이슈 #3299)
- 이 버전에서는 '이 점이 이 도형에 포함되어 있나요'(MongoDB의 $geoWithin 에 해당)와 같은 형식의 쿼리만 지원됩니다.
- 현재 인덱스 지원 은 없습니다.
- 지속형 지리 공간적 포인트에 대한 전용 유형은 없습니다. 대신 점을 GeoJson 모양의 내장된 객체 로 저장해야 하며 쿼리는 오리 타이핑을 사용하여 모양에 객체 가 포함되어 있는지 확인합니다. 다음은 편의를 위해 Realm에서 제공하는 전용 유형 대신 사용할 수 있는 내장된 객체 의 예시 입니다.
public partial class Location : IEmbeddedObject { // The coordinates and type properties are mandatory but may be private. // You can add more fields if necessary - those will be ignored when doing // geospatial queries. [MapTo("coordinates")] private IList<double> Coordinates { get; } = null!; [MapTo("type")] private string Type { get; set; } = "Point"; public double Latitude => Coordinates.Count > 1 ? Coordinates[1] : throw new Exception($"Invalid coordinate array. Expected at least 2 elements, but got: {Coordinates.Count}"); public double Longitude => Coordinates.Count > 1 ? Coordinates[0] : throw new Exception($"Invalid coordinate array. Expected at least 2 elements, but got: {Coordinates.Count}"); public Location(double latitude, double longitude) { // According to the GeoJson spec, longitude must come first in the // coordinates array. Coordinates.Add(longitude); Coordinates.Add(latitude); } } // Example usage public partial class Company : IRealmObject { public Location Location { get; set; } }
- 세 가지 새로운 모양 유형과 하나의 헬퍼 점 유형이 추가되어 포함 여부를 확인할 수 있습니다.
GeoPoint
: 다른 모양 유형의 빌딩 차단 - 모델에서 속성 유형으로 사용할 수 없으며 다른 모양 유형을 구성하는 데만 사용됩니다. 위도와 경도의 값 튜플에서 암시적으로 구성할 수 있습니다.var point = new GeoPoint(latitude: 12.345, longitude: 67.890); var point = (12.345, 67.890);
GeoCircle
: 중심과 반지름으로 구성된 구의 원을 나타내는 도형입니다.var circle = new GeoCircle(center: (12.34, 56.78), radius: 10); // radius in radians var circle = new GeoCircle((12.34, 56.78), Distance.FromKilometers(10));
GeoBox
: 왼쪽 하단과 오른쪽 상단 모서리로 구성된 구의 상자를 나타내는 모양입니다.var box = new GeoBox((12.34, 56.78), (15.34, 59.78));
GeoPolygon
: 외부 링과 선택적 구멍으로 구성된 임의의 다각형 입니다.var polygon = new GeoPolygon((10, 10), (20, 20), (0, 20), (10, 10)); // a triangle with no holes var outerRing = new GeoPoint[] { (10, 10), (20, 20), (0, 20), (10, 10) }; var hole1 = new GeoPoint[] { (1, 1), (2, 2), (0, 2), (1, 1) }; var hole2 = new GeoPoint[] { (5, 5), (6, 6), (4, 6), (5, 5) }; var polygon = new GeoPolygon(outerRing, hole1, hole2); // A triangle with two smaller triangular holes
- 쿼리는 LINQ 또는 RQL을 통해 수행할 수 있습니다.
var matches = realm.All<Company>().Where(c => QueryMethods.GeoWithin(c.Location, circle)); var matches = realm.All<Company>().Filter("Location GEOWITHIN $0", circle);
- 사전의 값을 기반으로 정렬/구분을 지원합니다.
realm.All<MyModel>().Filter("TRUEPREDICATE SORT(meta['age'])")
. (코어 13.14.0) - 자동 클라이언트 재설정 중에 새 FLX 영역 을 다운로드 하지 못한 후 영역 을 열 때 발생할 수 있는 충돌을 수정했습니다. (코어 13.14.0)
고정
- 비동기 열기 중에 재설정이 트리거되고 적용되는 스키마 에 새 클래스가 추가된 경우 클라이언트 재설정 (또는 자동으로 PBS에서 FLX 마이그레이션 ) 중에 동기화 오류 처리기에 보고되는 치명적인 오류를 수정했습니다. (코어 13.11.0)
- Full Text Search 는 때때로 해당 단어가 Atlas Search 토큰의 시작 부분과만 일치하는 단어를 찾을 수 있습니다. (코어 13.11.0)
- 정방향 링크에 손상으로 인해 해당 역링크 가 없는 경우 역링크를 제거할 때 충돌이 발생할 수 있습니다. We now silently ignore this inconsistency in release builds, allowing the app to continue. (코어 13.12.0)
IDictionary<string, IRealmObject?>
확인되지 않은 링크를 null에 매핑하는 대신 노출합니다. 이로 인해 딕셔너리에서 유효하지 않은 객체를 읽을 수 있을 뿐만 아니라 딕셔너리 쿼리에서 잘못된 결과가 나오는 경우도 있었습니다. (코어 13.12.0)- 웹 소켓에 대한 액세스 토큰 새로 고침으로 인해 위치 메타데이터 가 업데이트되지 않았습니다. (코어 13.13.0)
- 동일한 스레드 또는 스케줄러에서 동기 및 비동기 트랜잭션을 모두 사용하면 "!realm.is_in_transaction()" 비동기 트랜잭션에 대한 콜백 중 하나가 동기 트랜잭션 중에 예약된 경우. (코어 13.13.0)
- 자동 클라이언트 재설정 중에 새 FLX 영역 을 다운로드 하지 못한 후 영역 을 열 때 발생할 수 있는 충돌을 수정했습니다. (코어 13.14.0)
- 내장된 객체가 포함된 속성을
Can't link to an embedded object that is already managed
텍스트와 함께 예외를 발생시키는 데 사용된 것과 동일한 내장된 객체로 설정합니다. 이제 대신 작동하지 않습니다. (이슈 #3262)
호환성
- Realm Studio: 13.0.0 이상.
내부
- 코어 13.15.0 사용 .
- 향후 개발 노력을 더 잘 촉진하기 위해 SDK의 지표 컬렉션 을 정밀 검사하고 확장했습니다. (PR #3209)
11.0.0 (2023-05-08)
호환성이 손상되는 변경
- 및 에서 사용된
error
의NotificationCallbackDelegate
DictionaryNotificationCallbackDelegate
*collection*.SubscribeForNotifications
인수가 제거되었습니다. 데이터베이스 내부 변경으로 인해 알림 콜백 중에 오류가 발생하는 것이 불가능해지면서 오랫동안 사용되지 않았습니다. (이슈 #3014) - 제거된
RealmObjectBase.GetBacklinks
- 대신RealmObjectBase.DynamicApi.GetBacklinksFromType
을(를) 사용해야 합니다. (이슈 #2391) Realm.DynamicApi.CreateObject(string, object)
을(를) 제거하고 보다 특수한 오버로드로 대체했습니다.RealmObjectBase.DynamicApi.CreateObject(string)
프라이머리 키 없이 객체를 생성하는 데 사용할 수 있습니다.RealmObjectBase.DynamicApi.CreateObject(string, string/long?/ObjectId?/Guid?)
해당 유형의 프라이머리 키를 사용하여 객체를 생성하는 데 사용할 수 있습니다.
Realm.DynamicApi
에 의해 노출된 API는 더 이상dynamic
을 반환하지 않고 대신IRealmObject
,IEmbeddedObject
등과 같은 구체적인 유형을 반환하도록 선택합니다. 동적dynamic
를 Go 통해 반환된 객체를 및 로 캐스팅할 수 API API있지만,IRealmObjectBase.DynamicApi.Get/Set
이는 특히 또는 와 같은 AOT 플랫폼에서 와 같은 문자열 기반 를 사용하는 것보다 일반적으로 성능이 iOS Unity떨어집니다. (이슈 #2391)- 을 위해 을 제거했습니다.
Realm.WriteAsync(Action<Realm>)
Realm.WriteAsync(Action)
10.14.0 에 도입된 새로운WriteAsync
메서드는 더 효율적이며 백그라운드 스레드에서 Realm을 다시 열 필요가 없습니다. 권장되지는 않지만, 이전 동작을 유지하려는 경우 다음과 같은 확장 메서드를 작성할 수 있습니다.
(PR #3234)public static async Task WriteAsync(this Realm realm, Action<Realm> writeAction) { await Task.Run(() => { using var bgRealm = Realm.GetInstance(realm.Config); bgRealm.Write(() => { writeAction(bgRealm); }); }); await realm.RefreshAsync(); }
InMemoryConfiguration.EncryptionKey
제거되었습니다. 인메모리 Realm을 암호화하는 것은 결코 불가능했으며 해당 속성 을 설정하면 런타임 오류가 발생할 수 있습니다. (PR #3236)SyncConfiguration
제거 -PartitionSyncConfiguration
또는FlexibleSyncConfiguration
를 대신 사용합니다. (PR #3237)Realm.GetSession
제거 - 대신Realm.SyncSession
을(를) 사용하세요. (PR #3237)DiscardLocalResetHandler
제거 - 대신DiscardUnsyncedChangedHandler
을(를) 사용하세요. (PR #3237)Session.SimulateClientReset
확장자를 제거했습니다. 이러한 기능은 자동 재설정 핸들러에서는 작동하지 않았고 도움이 되기보다 더 혼란스러웠습니다. (PR #3237)AppConfiguration.CustomLogger
및AppConfiguration.LogLevel
제거 -Logger.Default
및Logger.LogLevel
을 대신 사용합니다. (PR #3238)RealmConfigurationBase.ObjectClasses
제거 - 대신RealmConfigurationBase.Schema
을(를) 사용하세요. (PR #3240)ObjectSchema.IsEmbedded
제거 - 대신ObjectSchema.BaseType
을(를) 사용하세요. (PR #3240)ObjectSchema.Builder.IsEmbedded
제거 - 대신ObjectSchema.Builder.RealmSchemaType
을(를) 사용하세요. (PR #3240)ObjectSchema.Builder(string name, bool isEmbedded = false)
제거 - 대신Builder(string name, ObjectSchemaType schemaType)
을(를) 사용하세요. (PR #3240)RealmSchema.Find
제거 - 대신RealmSchema.TryFindObjectSchema
을(를) 사용하세요. (PR #3240)- Atlas App Services에서 더 이상 사용되지 않으므로
User.GetPushClient
을(를) 제거했습니다( https://www.mongodb.com/ko-kr/docs/atlas/app-services/reference/push-notifications/ 참조). (PR #3241) SyncSession.Error
이벤트 제거 - Realm 을 열 때 대신SyncConfigurationBase.OnSessionError
을(를) 사용합니다. (PR #3241)ManualRecoveryHandler
에 대한 매개 변수가 없는 생성자를 제거했습니다 - 대신 콜백 을 사용하는 생성자를 사용하세요. (PR #3241)RealmValue.AsString
이제 값에null
가 포함되면 예외가 발생합니다. null을 허용하는 string 을 가져오려면AsNullableString
을(를) 사용하세요. (PR #3245)RealmValue.AsData
이제 값에null
가 포함되면 예외가 발생합니다. null을 허용하는byte[]
을 얻으려면AsNullableData
를 사용하세요. (PR #3245)RealmValue.AsRealmObject
이제 값에null
가 포함되면 예외가 발생합니다. null을 허용하는 string 을 가져오려면AsNullableRealmObject
을(를) 사용하세요. (PR #3245)Realm.SyncSession
null
반환하기 전에 Realm 이PartitionSyncConfiguration
또는FlexibleSyncConfiguration
(으)로 열리지 않으면 오류가 발생합니다. (PR #3245)Realm.Subscriptions
null
반환하기 전에 Realm이FlexibleSyncConfiguration
으)로 열리지 않으면 오류가 발생합니다. (PR #3245)- 더 이상 가져올 수 없으므로
PermissionDeniedException
을(를) 제거했습니다. (이슈 #3272) ErrorCode
열거형 에서 사용되지 않는 일부 오류 코드를 제거했습니다. 제거된 모든 코드는 더 이상 사용되지 않으며 서버 에서 더 이상 내보내지 않습니다. (PR 3273)- 더 이상 가져올 수 없으므로
IncompatibleSyncedFileException
을(를) 제거했습니다. (이슈 #3167) - 이제
Realms.Schema.Property
API는 속성이 인덱싱되었는지 여부를 나타내는 부울 대신IndexType
를 사용합니다. (이슈 #3281) StringExtensions
(Like
,Contains
)의 확장 메서드는 이제 더 이상 사용되지 않습니다. 대신QueryMethods
에서 동일한 것을 사용합니다 - 예realm.All<Foo>().Where(f => f.Name.Like("Mic*l"))
는realm.All<Foo>().Where(f => QueryMethods.Like(f.Name, "Mic*l"))
와 같이 다시 작성해야 합니다.
개선 사항
- Realm 어셈블리에 null 허용 여부 주석이 추가되었습니다. 이제 참조 유형을 반환하는 메서드에 반환된 값이 null인지 여부를 나타내는 주석이 올바르게 추가되었습니다. (이슈 #3248)
- 인덱스 에서 값 바꾸기(예:
myList[1] = someObj
)에서Replace
조치 으로CollectionChange
알림 을 올바르게 발생시킵니다. (이슈 #2854) - 이제 애플리케이션 수명의 어느 점 에서든 로그 수준을 변경할 수 있습니다. (PR #3277)
- 일부 로그 메시지가 Core 데이터베이스 에 추가되었습니다. 이제 Realm 을 열거나 트랜잭션 을 커밋하는 등의 이벤트가 기록됩니다. (이슈 #2910)
- Full Text Atlas Search(단순 용어) 쿼리에 대한 지원이 추가되었습니다. (이슈 #3281)
- string 속성에 대한 FTS 쿼리를 활성화하려면
[Indexed(IndexType.FullText)]
속성을 추가합니다. - LINQ 쿼리를 실행 하려면
QueryMethods.FullTextSearch
:realm.All<Book>().Where(b => QueryMethods.FullTextSearch(b.Description, "fantasy novel"))
을 사용합니다. Filter
쿼리를 실행 하려면TEXT
연산자 를 사용합니다(realm.All<Book>().Filter("Description TEXT $0", "fantasy novel")
.
- string 속성에 대한 FTS 쿼리를 활성화하려면
- 다음 쿼리의 성능이 개선되었습니다(Core 13.8.0):
- 인덱스 가 있는 string/int/UUID/ObjectId 속성 에서 (다른 쿼리 조건 없이) 정확히 일치하는 수를 계산(
IQueryable.Count()
)할 때 성능이 크게(~75%) 개선되었습니다. 이러한 개선 사항은 반환되는 결과(중복 값)가 많은 경우 특히 두드러집니다. - 인덱스가 있는
DateTimeOffset
속성에서 정확히 일치하는 항목을 쿼리할 때 (~99%) 기능이 크게 향상되었습니다. - 인덱스가 있는
RealmValue
속성에서 대소문자를 구분하지 않는 일치 항목을 쿼리할 때 크게(~99%) 개선되었습니다. - 인덱스 가 있는 부울 속성 에서 정확히 일치하는 항목을 쿼리할 때 약간(~25%) 개선됩니다.
- 인덱스가 없는
RealmValue
속성에서 대소문자를 구분하지 않는 일치 항목을 쿼리할 때 약간(~5%) 개선됩니다. - 인덱싱되지 않은
RealmValue
에 대한 동등성 쿼리가 보통(~30%) 개선되었습니다.
- 인덱스 가 있는 string/int/UUID/ObjectId 속성 에서 (다른 쿼리 조건 없이) 정확히 일치하는 수를 계산(
- 암호화된 Realm에서 여러 프로세스가 동시에 작동할 수 있도록 합니다. (코어 13.9.0)
- 변경 후 쓰기 트랜잭션( 쓰기 (write) transaction)을 롤백하는 성능을 개선합니다. 알림 이벤트를 구독하지 않는 경우 롤백할 변경 사항 수에 비례하는 시간이 아닌 상수 시간이 됩니다. 알림 구독이 있는 경우 롤백이 10-20% 더 빠릅니다. (코어 13.9.4)
- 서버 가 Flexible 동기화 로 마이그레이션된 경우, 파티션 기반 동기화 를 사용하는 클라이언트 앱 을 내부에서 Flexible 동기화 를 사용하여 마이그레이션하는 경우, PBS에서 FLX로 마이그레이션합니다. (코어 13.10.0)
고정
- 여러 스레드에서 새 Realm 파일 을 만들 때
The specified table name is already in use
예외가 발생할 수 있는 문제를 수정했습니다. (이슈 #3302) - 장치에 따라 배열이 다른 순서로 배열될 수 있는 버그를 수정했습니다. 일부 경우에는 '유효하지 않은 사전 크기'도 수정될 수 있습니다. (코어 13.7.1)
- string 연산자(contains/like/beginswith/endswith) 또는 대소문자를 구분하지 않고
RealmValue
속성을 쿼리할 때 발생하는 충돌을 수정했습니다. (코어 13.8.0) - 인덱싱된
RealmValue
속성에서 string 의 동일성을 쿼리하면 대소문자를 구분하지 않는 일치 항목이 반환되었습니다. 예를 들어myIndexedValue == "Foo"
에 대한 쿼리는 'foo' 또는 'FOO' 등의 값과 잘못 일치합니다. (Core 13.8.0) - Adding an index to a
RealmValue
property on a non-empty table would crash with an assertion. (코어 13.8.0) SyncSession.Stop()
동기화 세션을 종료한 후 데이터베이스에 대한 참조를 열어 두어 사용자가 Realm을 삭제할 수 없습니다. (코어 13.8.0)- 긴 체인의 AND/OR 조건에서 쿼리 구문 분석기를 사용할 때 Stack Overflow 로 충돌을 수정합니다. (코어 13.9.0)
ClientResetException.InitiateClientReset()
더 이상 Realm을 제거하려고 시도한 결과를 무시하지 않습니다. 이로 인해Realm
가 아직 열려 있는 경우 Windows에서 실제로 실패한 클라이언트 재설정 작업이 성공한 것으로 보고될 수 있습니다. (코어 13.9.0)- 한 스레드가 쓰기 트랜잭션(write transaction)을 커밋하여 다른 스레드가 읽기를 시작할 때 현재 세션에서 라이브 버전 수가 이전 최고 버전보다 증가하면 읽기 스레드가 더 이상 존재하지 않는 버전에서 읽을 수 있는 데이터 레이스를 수정합니다. 유효한 메모리 매핑 (Core 13.9.0).
- 배열이 8 보다 길고 모든 요소가 목록의 일부 값보다 작은
{1, 2, 3, ...} IN list
과 같은 쿼리를 수행하면 프로그램이 충돌합니다 ( 코어 13.9.4). - 쓰기 (write) 를 수행하지 않고 많은 수의 쿼리를 수행하면 메모리 사용량이 꾸준히 증가했으며, 이 중 일부는 캐시 제한으로 인해 완전히 해제되지 않았습니다(Core 13.9.4).
호환성
- Realm Studio: 13.0.0 이상.
내부
- 코어 13.10.0 사용 .
10.21.1 (2023-04-21)
고정
- 서버 가 PermissionDenied 오류를 보낼 때 발생하는 충돌을 수정했습니다. (이슈 #3292)
호환성
- Realm Studio: 13.0.0 이상.
내부
- 코어 13.6.0 사용 .
10.21.0 (2023-03-24)
개선 사항
- 치명적이지 않은 세션 오류가 발생할 때마다 비동기 작업(예:
Realm.GetInstanceAsync
,Session.WaitForUploadAsync
등)에서 예외를 발생시킬지 여부를 제어하는SyncConfiguration.CancelAsyncOperationsOnNonFatalErrors
가 추가되었습니다. (이슈 #3222) - 연결 시간 초과, 핑퐁 간격 등과 같이 동기화 시간 초과를 제어하는 몇 가지 속성이 있는
AppConfiguration.SyncTimeoutOptions
이(가) 추가되었습니다. (이슈 #3223) ArgumentException
에서 발생시키는 일부 예외를 업데이트하여 시스템 예외에 더 잘RealmException
하고 더 많은 정보를 예시 하도록 합니다. (이슈 #2796)- 권한으로 인해 서버에서 되돌린 쓰기에 대한 정보가 포함된 새로운 예외(
CompensatingWriteException
)가 추가되었습니다. 다른 세션 오류와 마찬가지로 제공된FlexibleSyncConfiguration.OnSessionError
콜백으로 전달됩니다. (이슈 #3258) - .NET 애플리케이션에서 Linux Arm/Arm64 에 대한 지원이 추가되었습니다. (이슈 #721)
고정
- Realm SDK 가 BsonSerializers를 등록하는 방식이 변경되었습니다. 이전에는
BsonSerializer.RegisterSerializer
를 통해 무차별적으로 등록했는데, 이는 앱 이MongoDB.Bson
패키지 를 사용하고DateTimeOffset
,decimal
또는Guid
에 대한 자체 직렬 변환기를 정의한 경우 충돌이 발생했습니다. 이제 등록은BsonSerializer.RegisterSerializationProvider
를 통해 이루어지며, 이는 직렬 변환기가 인스턴스화되기 전에 점BsonSerializer.RegisterSerializer
를 호출하거나 앱을 생성하거나 Realm 을 연 후BsonSerializer.RegisterSerializationProvider
를 호출하여 SDK에서 사용하는 기본값 직렬 변환기를 재정의할 수 있음을 의미합니다. (이슈 #3225) - 유니코드 매개 변수가 있는 쿼리를 사용하여 구독을 만들면 서버 오류가 발생합니다. (코어 13.6.0)
- Unity 2022 이상에서
Specified method is not supported
오류와 함께 빌드가 실패하는 문제를 수정했습니다. (이슈 #3306)
호환성
- Realm Studio: 13.0.0 이상.
내부
- 코어 13.6.0 사용 .
- 새 커밋이 PR에 푸시되면 기존 빌드를 취소합니다. (PR #3260)
10.20.0 (2023-02-10)
파일 형식 버전이 상향 조정되었습니다. 이전 파일은 자동으로 업그레이드되지만 다운그레이드하거나 이전 버전의 .NET SDK 로 열 수는 없습니다.
호환성이 손상되는 변경
User.GetPushClient
은(는) 서버에서 곧 비활성화될 예정이므로 더 이상 사용되지 않습니다. (이슈 #3073)
개선 사항
더 큰 파일 크기가 더 이상 필요하지 않은 경우 Realm 파일이 축소됩니다. (코어 13.0.0)
버전 고정으로 인한 파일 증가는 대부분 제거됩니다. (코어 13.0.0)
해당 버전에 대한 읽기 잠금이 이미 유지된 경우 읽기 잠금 획득 성능을 개선합니다. 이렇게 하면 변경 알림과 관련된 많은 작업, 특히 변경 알림이 등록된 Realm을 새로 고침하는 속도가 빨라집니다. (코어 13.2.0)
OpenSSL을 1.1.1n에서 3.0.7 으로 업그레이드합니다. (코어 13.2.0)
이제 유연한 동기화 Realm을 번들 및 로컬 Realm으로 변환하는 것이 지원됩니다(Core 13.2.0).
소스 생성 클래스에 중첩된 클래스에 대한 지원을 추가합니다. (이슈 #3031)
소스 생성 클래스에 대한 모델 정의에서 null 허용 참조 유형에 대한 지원 이 향상되었습니다. 이렇게 하면 null 허용 컨텍스트가 활성 상태일 때 평소와 같이 영역 모델을 사용할 수 있으며, 이 정보는 null 허용 여부 상태에서 직접 추론되므로 필수 속성을 표시하기 위해
Required
속성을 사용할 필요가 없습니다. 영역 객체 에 연결되는 속성의 null 허용과 관련하여 몇 가지 고려 사항이 있습니다.- 단일 Realm 객체에 연결되는 속성은 본질적으로 null을 허용하므로 해당 유형을 null 허용으로 정의해야 합니다.
- 목록, 세트 및 역링크는 null 객체를 포함할 수 없으므로 유형 매개변수는 null을 허용하지 않아야 합니다.
- 사전은 null 값을 포함할 수 있으므로 유형 매개변수는 null을 허용해야 합니다.
여기에 설명된 것과 다른 null 허용 여부 주석을 사용하여 속성을 정의하면 진단 오류가 발생합니다. 예를 들면 다음과 같습니다.
public partial class Person: IRealmObject { //Single values public Dog? MyDog { get; set; } //Correct public Dog MyDog { get; set; } //Error //List public IList<Dog> MyDogs { get; } //Correct public IList<Dog?> MyDogs { get; } //Error //Set public ISet<Dog> MyDogs { get; } //Correct public ISet<Dog?> MyDogs { get; } //Error //Dictionary public IDictionary<string, Dog?> MyDogs { get; } //Correct public IDictionary<string, Dog> MyDogs { get; } //Error //Backlink [Realms.Backlink("...")] public IQueryable<Dog> MyDogs { get; } //Correct [Realms.Backlink("...")] public IQueryable<Dog?> MyDogs { get; } //Error }
일부 개발자는 여전히 이러한 속성의 null 허용 여부 주석에 더 많은 자유를 원하는 것을 알고 있으며, 전역 구성 파일에서
realm.ignore_objects_nullability = true
를 설정하여 그렇게 할 수 있습니다(글로벌 구성 파일 에 대한 자세한 내용은 에서 확인할 수 있습니다 .NET 문서). 이 기능을 활성화하면 이전의 모든 속성이 유효한 것으로 간주되고 객체에 연결되는 속성에 대한 null 허용 여부 주석이 무시됩니다.PropertyChanged
및CollectionChanged
알림 의 성능이 개선되었습니다. (이슈 #3112)Xamarin/Maui 및 Unity 애플리케이션에서 tvOS에 대한 지원이 추가되었습니다. (이슈 #3161)
Realm.Freeze()
의 성능을 개선합니다. (코어 13.3.0)
고정
ISet<RealmValue>
string 과 이진 데이터를 동등하게 간주합니다. string 이로 인해 Atlas 에서 및 해당 콘텐츠가 포함된 일부 바이너리 데이터가 삽입된 경우 클라이언트가 서버와 일치하지 않을 수 있습니다. (코어 13.0.0)- 충돌을 일으킬 수 있는 쿼리 오류에 대한 잘못된 어설션을 수정했습니다. (코어 13.1.0)
- 파일이 생성된 페이지 크기보다 큰 기기에서 암호화된 파일을 열 수 없는 문제가 수정되었습니다. (코어 13.1.1)
- 비동기 콜백이 할당 해제된 후 객체를 사용하는 동기화 클라이언트에서 발생할 수 있는 segfault를 수정했습니다(Core 13.2.0).
- 단일 구독으로 복구 및 유연한 동기화와 함께 클라이언트 재설정을 사용할 때 충돌이 수정되었습니다(Core 13.2.0).
- 모델의 속성이 지원되지 않는 경우 더 자세한 설명이 포함된 오류 메시지를 추가했습니다. 이제 대상 유형이
RealmObject
에서 상속해야 할 수도 있다고 제안합니다. (이슈 #3162) - Disposing a Realm instance while an active transaction is running will now correctly roll back the transaction. (이슈 #2924)
- 컬렉션 자체가 대체되지 않았더라도 컬렉션의 콘텐츠가 수정된 경우 컬렉션 속성에 대해
PropertyChanged
알림이 전달되는 문제를 수정했습니다. (이슈 #3112) - Unity 에서 어셈블리를 위빙하면
System.InvalidOperationException
이(가) 발생할 수 있는 문제를 수정했습니다. (이슈 #3199) Session.Stop
이제Session.Start
이(가) 호출될 때까지 세션이 중지된 상태를 올바르게 유지합니다. 이전에는 명시적으로 요청하지 않은 경우에도 세션이 재개될 수 있는 여러 가지 상황이 있었습니다. (코어 13.3.0)- 복구가 포함된 클라이언트 재설정을 사용하고 복구가 실제로 새로운 로컬 커밋으로 이어지지 않는 경우, 동기화 클라이언트는 클라이언트 재설정 중 A 치명적 오류 발생: '이전 '복구' 모드 재설정
이 실패하고 '사이클을 방지하기 위해 복구' 모드를 포기합니다'라는 오류 메시지가 표시됩니다. (코어 13.3.0) - 방금 보기에 들어온 객체에 대한 부트스트랩 중에 쓰기가 발생하는 경우 Flexible Sync에서 분기 기록이 수정되었습니다. (코어 13.3.0)
- 캐시된 동결 Realm을 열 때 여러 데이터 레이스를 수정합니다. 새로운 동결 Realm이 캐시에 추가되고 완전히 초기화되기 전에 잠금이 해제되어 다른 스레드의 캐시에서 즉시 읽으면 경합이 발생했습니다. (코어 13.3.0)
- '새로고침' Realm을 다운로드하는 동안 클라이언트 재설정 w/복구 또는 로컬 삭제가 중단되면 동기화 클라이언트가 MultpleSyncAgent 예외와 함께 충돌할 수 있습니다. (코어 13.3.0)
- FLX 부트스트랩 중에 전송된 서버의 변경 세트가 16MB보다 크면 동기화 클라이언트가 LogicError와 충돌할 수 있습니다. (코어 13.3.0)
- Catalyst 앱 과 Realm Studio 간에 Realm 파일을 공유할 때 Realm 파일 에 액세스 가 제대로 동기화되지 않았습니다. (코어 13.4.0)
호환성
- Realm Studio: 13.0.0 이상.
내부
- 코어 13.4.0 사용 .
- 리플렉션을 사용하지 않도록
DynamicRealmObjectHelper.TryGetPrimaryKeyValue
을(를) 업데이트했습니다. (이슈 #3166) - 디버그 빌드 를 실행 때 UWP 테스트 워크플로가 수정되었습니다. (이슈 #3030)
10.19.0 (2023-01-06)
개선 사항
CallAsync에서 인수의 중복 직렬화/역직렬화를 제거했습니다. (이슈 #3079)
트랜잭션의 현재 상태를 설명하는 필드
Transaction.State
을 추가했습니다. (이슈 #2551)EmailPasswordAuth.CallResetPasswordFunctionAsync에 대해 null이 params에 인수로 전달될 때 오류 메시지가 개선되었습니다. (이슈 #3011)
생성된 클래스 속성의 지원 필드를 제거하여 Realm 객체에서 사용하는 메모리를 약간 개선했습니다(이슈 #2647).
사전 값을 래핑하는
IQueryable
컬렉션을 가져오기 위해IDictionary
에 두 개의 확장 메서드를 추가했습니다.dictionary.AsRealmQueryable()
를 사용하면 에서 를 가져온IQueryable<T>
IDictionary<string, T>
다음 일반 쿼리 가능 컬렉션으로 처리하고 LINQ 또는 로 필터링/정렬할 수Filter(string)
있습니다.dictionary.Filter(query, arguments)
목록을 필터하다 하고 필터링된 딕셔너리 값 컬렉션 을 반환합니다.dictionary.AsRealmQueryable().Filter(query, arguments)
와 거의 동일합니다.
결과로 생성되는 쿼리 가능 컬렉션 은
realm.All<T>()
를 호출하여 얻은 결과와 동일하게 작동합니다. 즉, 컬렉션이 변경될 때 알림 을 보내고 자동으로 업데이트 됩니다. (이슈 #2647)자동 복구 및 최상위 테이블을 포함된 테이블로 변환하여 클라이언트 재설정 성능을 개선합니다. (코어 업그레이드)
Flexible sync는 이제 구독을 완료로 표시하기 전에 서버가 부트스트랩 후 보류 중인 모든 기록을 보낼 때까지 대기합니다. (코어 업그레이드)
열려 있는 Realm 데이터베이스에서 모든 객체를 제거하는
Realm.RemoveAll()
의 성능을 약간 개선합니다. (이슈 #2233)Realm 또는 앱 구성에 대해 BaseFilePath를 설정하지 않을 때 발생하는 오류 메시지를 개선합니다. (이슈 2863)
UWP ListView 데이터 바인딩을 허용하기 위해 모든 Realm 컬렉션에
IList
구현 을 추가했습니다. (이슈 #1759)
고정
- Realm 매개변수의 초기화가 두 번 실행 되어 예기치 않은 동작이 발생하는 문제가 수정되었습니다.
- Realm에 추가될 때
IEmbeddedObject
및IAsymmetricObject
이(가)RealmValue
로 사용되는 것을 방지하고 더 의미 있는 오류 메시지를 표시합니다. - 클라이언트 재설정 오류가 수신된 시점과 새 Realm 의 다운로드 가 시작된 시점 사이에 암호화됨 Realm 에 대한 마지막 외부 참조가 닫힌 경우 use-after-free를 수정합니다. (코어 업그레이드)
- 최상위 객체에서 목록에 대한 경로 접두사에 링크 열이 있는 내장된 객체에서 목록 작업을 복구할 때 복구를 포함하는 클라이언트 재설정 중 어설션이 실패하는 문제를 수정했습니다. (코어 업그레이드)
- 암호화 키로 암호화되지 않은 파일을 열면 문제가 해독 실패가 아닌 다른 문제라는 잘못된 오류 메시지가 보고되는 경우가 있습니다. (코어 업그레이드)
- 동기화 작업자 스레드가 서버에서 변경 세트 처리를 완료한 상태에서 쓰기 트랜잭션(write transaction)을 커밋한 직후 동기화된 Realm을 닫을 때 발생할 수 있는 드문 교착 상태를 수정합니다. (코어 업그레이드)
- 작업 실패를 유발한 실제 동기화 오류가 아닌 비동기 오픈 콜백에 '작업 취소됨' 오류가 전달될 수 있는 경합 상태를 수정합니다. (코어 업그레이드)
- 부트스트랩은 단일 쓰기 트랜잭션 (write transaction) (write transaction)에 적용되지 않고 한 번에 1MB의 변경 세트를 적용하거나 SDK에 의해 구성된 대로 적용합니다. (코어 업그레이드)
- Apple 플랫폼에서 데이터베이스 손상 및 암호화 문제를 수정합니다. (코어 업그레이드)
- 이름 충돌을 방지하기 위해 소스에서 생성된 파일에 정규화된 이름을 추가했습니다. (이슈 #3099
- 바인딩에서 관리되지 않는 객체를 사용할 때 예외가 발생하는 문제를 수정했습니다(이슈 #3094).
- 사용자가 로그아웃한 상태에서 사용자의 프로필을 가져오면 어설션이 실패하는 문제가 수정되었습니다. (코어 업그레이드)
- ".tmp_compaction_space"를 제거했습니다. Windows에서 Realm을 압축한 후 남은 파일입니다. (코어 업그레이드)
SubscriptionSet.WaitForSynchronizationAsync
기다리는 동안 동기화된 Realm 을 닫으면 발생하는 충돌을 수정했습니다. (이슈 #2952)- 속성 의 새 값이 현재 값과 동일한 경우 UI 바인딩된 속성에서 setter를 호출하지 않도록 합니다. 이렇게 하면 CollectionView/ListView가 화면에 표시될 때 바인딩된 속성의 setter를 불필요하게 호출하는 것으로 보이는 Maui 관련 일부 문제를 방지할 수 있습니다. 이렇게 하면 객체 가 현재 사용자의 권한에 속하지 않는 경우 보상 쓰기 (write) 가 발생하므로 문제가 됩니다. 일부 제한된 경우에는 셀 재활용과 관련될 때 오류 루프( iOS 에서 확인됨)가 발생할 수 있습니다. (이슈 #3128)
- 소스 생성기가 속성 이니셜라이저에 사용된 유형의 네임스페이스 를 추가하지 않는 문제를 수정합니다. (이슈 #3135)
- 도메인 재로딩 이 꺼진 Unity 애플리케이션에서 Realm이 제대로 작동하지 않던 문제를 수정했습니다. (이슈 #2898)
string.Contains
.NET 2.1 이 Atlas Search string 리터럴이 아닌 이상에서 를 사용할 때 발생하는 버그가 수정되었습니다. (이슈 #3134)- 더 이상 사용하지 않는 일부
ErrorCode
열거형 멤버에 대한[Obsolete]
알림이 추가되었습니다. (이슈 #3155
호환성
- Realm Studio: 12.0.0 이상.
내부
- 코어 12.13.0 사용 .
Realm.RefreshAsync
을 네이티브 구현 으로 대체했습니다. (PR #2995)
10.18.0 (2022-11-02)
개선 사항
Realm 모델 클래스를 생성할 수 있는 소스 생성기
Realm.SourceGenerator
도입. 이는 Realm 라이브러리를 현대화하려는 지속적인 노력의 일환으로, 향후 특정 언어 수준 기능을 더 쉽게 도입할 수 있도록 지원할 예정입니다. 소스 생성을 사용하려면 모델 클래스를 기본 인터페이스(IRealmObject
,IEmbeddedObject
또는IAsymmetricObject
) 중 하나를 구현하도록 선언하고 부분적으로 선언해야 합니다. 예를 예시 다음과 같습니다.public partial class Person: IRealmObject { public int Age { get; set; } public string Name { get; set; } public PhoneNumber Phone { get; set; } } public partial class PhoneNumber: IEmbeddedObject { public string Number { get; set; } public string Prefix { get; set; } }
그러면 소스 생성기가 인터페이스에 대한 전체 구현 을 추가하는 작업을 처리합니다.
대부분의 경우 '클래식' Realm 모델 클래스(
RealmObject
,EmbeddedObject
또는AsymmetricObject
에서 파생된 클래스)를 새 소스 생성을 사용하도록 변환하는 것은 클래스를 partial로 정의하고 해당 클래스의 기본 클래스를 전환한다는 의미입니다. 인터페이스 구현. 클래식 Realm 모델 정의는 계속 지원되지만 향후 단계적으로 중단될 예정입니다.소스 생성기는 아직 beta 이므로 사용하는 동안 문제가 발생하면 알려주세요. 몇 가지 추가 참고 사항:
OnManaged
및OnPropertyChanged
는 이제 부분 메서드입니다.- 상속은 지원되지 않으므로 Realm 모델은 다른 클래스에서 파생할 수 없습니다.
- 중첩된 클래스는 지원되지 않습니다.
고정
Session
인스턴스에서PropertyChanged
알림을 구독한 다음 구독 취소하기 전에 가비지로 수집될 때 NullReferenceException이 발생하는 문제를 수정했습니다. (PR #3061)- 더 이상 App Store 제출이 허용되지 않으므로 iOS 바이너리에서 비트코드 지원을 제거했습니다. (이슈 #3059)
IEmbeddedObject
에서 액세스할 때 상위 항목을 반환하는 문제를 수정했습니다. (이슈 #2742)- 동결된 컬렉션에 대한 열거자를 만들 때 성능이 약간 향상되고 할당이 감소했습니다(이슈 #2815).
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 12.9.0 사용 .
- 이슈 및 PR에 사용자를 자동으로 할당하는 워크플로가 추가되었습니다. (PR #3069)
- 변경 로그의 유효성을 검사하는 워크플로가 업데이트되었습니다. (PR #3069)
10.17.0 (2022-10-06)
개선 사항
- 원격 변경보다 로컬 변경 사항의 통합을 우선시하여 사용자가 로컬 변경 사항을 커밋할 때 대기해야 하는 시간을 단축합니다. 다운로드한 변경 세트를 기록에 저장하는 것을 중지합니다. (코어 업그레이드)
- 사전의 키나 값을 정렬하거나 구별하는 성능을 크게 개선합니다. 이제 가장 비용이 많이 드는 작업이 O(N log N) 번이 아닌 O(log N) 번 수행되며, 대규모 사전은 정렬 시간을 99% 이상 단축할 수 있습니다. (코어 업그레이드)
- App Services 애플리케이션 배포서버 모델 마이그레이션을 원활하게 처리하다 하세요. (코어 업그레이드)
고정
- 동기화 세션 이 종료되고 동시에 앱 이 삭제되는 use-after-free 문제를 수정했습니다. (코어 업그레이드)
- 객체 가 초기화되기 전에 예외가 발생할 때마다
RealmObjectBase
의 종료자에서NullReferenceException
발생하는 문제를 수정했습니다. (이슈 #3045)
호환성
- Realm Studio: 12.0.0 이상.
내부
- 코어 12.9.0사용
10.16.0 (2022-10-03)
개선 사항
일반적으로 고성능이 중요한 쓰기 위주의 워크로드를 위해
AsymmetricObject
가 도입되었습니다. 이 새 객체는 다음을 수행합니다.- 클라이언트에서 서버로 데이터를 단방향으로 동기화합니다.
- Realm에 추가된 후에는 쿼리, 삭제 또는 수정할 수 없습니다.
- Flexible 동기화 에서만 사용할 수 있습니다.
- 모든 유형의 관계 의 수신자가 될 수 없습니다.
EmbeddedObject
을 포함할 수 있지만RealmObject
또는AsymmetricObject
에 연결할 수 없습니다.
동일한 쓰기 트랜잭션 (write transaction)(write transaction)에서
AsymmetricObject
과RealmObject
를 추가하는 것은 합법적입니다.class Measurement : AsymmetricObject { [PrimaryKey, MapTo("_id")] public Guid Id { get; private set; } = Guid.NewGuid(); public double Value { get; set; } public DataTimeOffset Timestamp { get; private set; } = DateTimeOffset.UtcNow; } class Person : RealmObject { //............ } //..... var measurement = new Measurement { Value = 9.876 }; realm.Write(() => { realm.Add(measurement); realm.Add(new Person()); }); _ = asymmetricObject.Value; // runtime error _ = realm.All<Measurement>(); // compile time error
클라이언트 재설정 시 동기화되지 않은 로컬 변경 사항을 원격 변경 사항과 자동으로 병합하려고 시도하는 두 개의 클라이언트 재설정 핸들러인
RecoverUnsyncedChangesHandler
및RecoverOrDiscardUnsyncedChangesHandler
를 추가했습니다. 특히RecoverOrDiscardUnsyncedChangesHandler
를 사용하면 서버 규칙에 따라 자동 병합을 수행할 수 없는 경우 로컬 폐기 전략으로 대체할 수 있습니다. 이 새로운 두 가지 전략은 이제부터DiscardUnsyncedChangesHandler
.RecoverOrDiscardUnsyncedChangesHandler
이 기본값이 될 것에 비해 클라이언트 재설정 이벤트 처리를 훨씬 더 간소화합니다. 예를 들면 다음과 같습니다.클라이언트 재설정 이벤트 동기화되지 않은 로컬 변경 사항을 원격 변경 사항과 자동으로 병합하려고 시도하는 두 개의 클라이언트 재설정 클라이언트 재설정
RecoverUnsyncedChangesHandler
및RecoverOrDiscardUnsyncedChangesHandler
을 추가했습니다. 특히RecoverOrDiscardUnsyncedChangesHandler
를 사용하면 서버 규칙에 따라 자동 병합을 수행할 수 없는 경우 동기화되지 않은 삭제 전략으로 대체할 수 있습니다. 이 새로운 두 가지 전략은 이제부터DiscardUnsyncedChangesHandler
.RecoverOrDiscardUnsyncedChangesHandler
이 기본값 이 될 것에 비해 클라이언트 재설정 이벤트 처리를 훨씬 더 간소화합니다. 앞서 언급한 전략에 대한 자세한 내용은 Docs 페이지 에서 확인할 수 있습니다. 새 핸들러 중 하나의 사용 예시 는 다음과 같습니다.var conf = new PartitionSyncConfiguration(partition, user) { ClientResetHandler = new RecoverOrDiscardUnsyncedChangesHandler { // As always, the following callbacks are optional OnBeforeReset = (beforeFrozen) => { // executed right before a client reset is about to happen }, OnAfterRecovery = (beforeFrozen, after) => { // executed right after an automatic recovery from a client reset has completed }, OnAfterDiscard = (beforeFrozen, after) => { // executed after an automatic recovery from a client reset has failed but the DiscardUnsyncedChanges fallback has completed }, ManualResetFallback = (session, err) => { // handle the reset manually } } };
(PR #2745)
realm.All<Car>().Filter("Color IN {'blue', 'orange'}")
와 같은 상수 목록 표현식에 대한 string 쿼리 지원 을 도입합니다. 여기에는realm.All<Car>().Filter("NONE Features IN {'ABS', 'Seat Heating'}")
과 같은 목록 대 목록 일치에 대한 일반 쿼리 지원 도 포함됩니다. (코어 업그레이드)새 Realm 파일 이 서버 에 처음 연결될 때, 특히 오프라인 상태에서 상당한 양의 데이터가 기록된 경우 성능이 향상됩니다. (코어 업그레이드)
서버 변경 사항을 적용하는 데 사용되는 쓰기 트랜잭션(write transaction)에서 동기화 작업자 스레드에서 수행되는 작업을 더 많이 이동시켜 다른 스레드의 쓰기를 차단하는 시간을 줄입니다. (코어 업그레이드)
서버에서 변경 집합을 적용하는 속도를 높이는 동기화 변경 집합 구문 분석기의 성능을 개선합니다. (코어 업그레이드)
고정
- 프로젝트 에
[TargetFramework]
이(가) 정의되어 있지 않을 때마다 더 의미 있는 오류 메시지가 추가되었습니다. (이슈 #2843) SyncConfiguration
을(를) 사용하여 읽기 전용 Realm 을 처음 열면 스키마 버전이 설정하다 되지 않아m_schema_version != ObjectStore::NotVersioned
어설션 실패가 발생할 수 있습니다. (코어 업그레이드)- 업로드 완료 콜백(예:
Session.WaitForUploadAsync
)가 이를 완료했다는 다운로드 메시지가 완전히 통합되기 전에 호출했을 수 있습니다. (코어 업그레이드) - exFAT 드라이브에서 MacOS로 실행 때 "F_BARRIERFSYNC를 사용한 fcntl() 실패: 장치에 부적절한 ioctl" 예외를 수정했습니다. (코어 업그레이드)
- 큰 유효 숫자와 십진수128 를 동기화하면 충돌이 발생할 수 있습니다. (코어 업그레이드)
Realm.Refresh()
경우에 따라 실제로 최신 버전으로 진행되지 않았습니다. 차단이 필요하지 않은 현재 버전보다 최신 버전이 있는 경우 문서화된 동작과 반대로 해당 버전으로 진행됩니다. (코어 업그레이드)- 알림 과 관련된 몇 가지 문제가 수정되었습니다. (코어 업그레이드)
- 여러 스레드가 한 번에 Realm 의 초기 열기를 수행할 경우 발생할 수 있는 RealmCoordinator::m_sync_session의 데이터 경쟁을 수정합니다.
- SyncSession이 상위 Realm 보다 오래 지속된 후 동일한 파일 에 대해 새 Realm 에 채택되면 다른 프로세스는 해당 파일 에 대한 동기화 쓰기에 대한 알림을 받지 못합니다.
- Apple 플랫폼의 메인 스레드에서 쓰기를 수행할 때 발생하는QoS 반전 경고의 원인 한 가지를 수정했습니다. 이제 비동기 알림이 준비될 때까지 기다리는 작업이QoS를 인식하는 방식으로 수행됩니다.
- Flexible sync로 링크에 구독을 설정하면 서버는 이를 처리하는 방법을 알 수 없습니다( v11.6.1 이후 #5409} ).
- 대소문자를 구분하지 않는 쿼리가 4바이트 UTF8 문자가 포함된 string 을 검색하면 프로그램이 충돌합니다. (코어 업그레이드)
- Realm .Add를 사용하여 제거된 객체 를 추가하지 못하도록 유효성 검사 를 추가했습니다. (이슈 #3020)
호환성
- Realm Studio: 12.0.0 이상.
내부
- 코어 12.7.0 사용 .
10.15.1 (2022-08-08)
고정
- Atlas App Services에 대한 비익명 사용자 인증을 방해하는 10.15.0 에 도입된 문제를 수정했습니다. (이슈 #2987)
- 사용자 ID와 제공자를 출력하는
User.ToString()
에 대한 재정의가 추가되었습니다. (PR #2988) User.Equals
의 동작과 일치하는User
에 == 및 != 연산자 오버로드를 추가했습니다. (PR #2988)
호환성
- Realm Studio: 12.0.0 이상.
내부
- 코어 12.4.0 사용 .
10.15.0 (2022-08-05)
개선 사항
- .NET 6 Mac Catalyst 및 Maui 에서 에 대한 미리보기 지원 . (PR #2959)
- 메모리 매핑 및 가상 주소 공간 사용 줄이기(코어 업그레이드)
고정
- 유연한 동기화 Realm을 열 때 발생하는 데이터 경쟁을 수정했습니다(코어 업그레이드).
RealmObject
에서RealmValue
를 null 또는 기타 RealmObject가 아닌 값으로 설정할 때 누락된 역링크 제거가 수정되었습니다. 사용자가 대상 객체를 제거할 때 "키를 찾을 수 없음" 예외 또는mixed.hpp:165: [realm-core-12.1.0] Assertion failed: m_type
와 같은 어설션 실패가 발생했을 수 있습니다. (코어 업그레이드)- Windows에서 활성 동기화 세션이 없을 때 동기화 클라이언트의 CPU 사용량이 높아지는 문제가 수정되었습니다. (코어 업그레이드)
- iOS 14 및 메모리가 제한적이거나 조각난 기기에서 작은 문자열이 많은 변경 세트(변경 세트당 총 1024 바이트)를 통합하는 동안 동기화 클라이언트의 성능이 개선되었습니다. (코어 업그레이드)
- Realm-apply-to-state 도구에서 수용된 문자열을 디코딩할 때 발생하는 예외를 수정했습니다. (코어 업그레이드)
- 에뮬레이션된 프로세스 간 조건 변수를 사용하는 플랫폼(Android Linux 가 아닌 대부분의 플랫폼)에서 여러 스레드가 쓰기 락 (write lock) 을 기다리는 동안 트랜잭션 을 커밋할 때 발생하는 데이터 경합을 수정합니다. (코어 업그레이드)
- 일부 가상 주소 공간이 실행 경우(mmap 실패로 표시/보고됨) 수정(코어 업그레이드)
- 110 유효 비트를 초과하는 10진수128 값이 서버와 올바르게 동기화되지 않았습니다(코어 업그레이드).
호환성
- Realm Studio: 12.0.0 이상.
내부
- 코어 12.4.0 사용 .
10.14.0 (2022-06-02)
개선 사항
Realm.WriteAsync
에 대한 보다 효율적인 대체품을 추가했습니다. 이전 API 는 배경 스레드를 시작하고 해당 스레드에서 Realm 을 연 다음 배경 스레드에서 동기식 쓰기 트랜잭션 (write transaction) (write transaction)을 실행 했습니다. 새 API 는 비동기적으로 쓰기 잠금( 쓰기 락 (write lock) )을 획득하고( 트랜잭션 시작) 트랜잭션 을 비동기적으로 커밋 하지만 실제 쓰기 (write) 차단 은 원래 스레드에서 실행됩니다. 즉, 차단 전에 캡처된 객체/쿼리를 스레드세이프 참조에 의존하지 않고 차단 내부에서 사용할 수 있습니다. 중요한 점은 비동기 및 동기화 호출을 혼합하여 사용할 수 있다는 것입니다. 그리고 배경 스레드에서Realm.WriteAsync
를 호출하는 경우 호출은 동기적으로 실행 되므로 가독성을 위해Realm.Write
를 사용해야 합니다. 새 API 는Realm.WriteAsync<T>(Func<T> function, CancellationToken cancellationToken)
,Realm.WriteAsync(Action action, CancellationToken cancellationToken)
,Realm.BeginWriteAsync(CancellationToken cancellationToken)
및Transaction.CommitAsync(CancellationToken cancellationToken)
로 구성됩니다. 반면Transaction.Rollback()
에는 비동기 상대방이 필요하지 않습니다. 더 이상 사용되지 않는 API 호출은Realm.WriteAsync(Action<Realm> action)
,Real.WriteAsync<T>(Func<Realm, IQueryable<T>> function)
,Realm.WriteAsync<T>(Func<Realm, IList<T>> function)
및Realm.WriteAsync<T>(Func<Realm, T> function)
입니다. 다음은 사용 예시 입니다.
(PR #2899)using Realms; var person = await _realm.WriteAsync(() => { return _realm.Add( new Person { FirstName = "Marco" }); }); // you can use/modify person now // without the need of using ThreadSafeReference
- 서버에서 사용자를 삭제하는
App.DeleteUserFromServerAsync
메서드가 추가되었습니다. 또한 로컬에서 사용자를 무효화하고 모든 로컬 데이터를 제거합니다. 사용자가 서버에서 업로드한 데이터는 제거되지 않습니다. (이슈 #2675) - 컬렉션이 지워지면 true가 되는 부울 속성
ChangeSet.IsCleared
을 추가했습니다. 또한 Realm 컬렉션은 이제 컬렉션이 지워질 때Remove
Reset
조치로CollectionChanged
이벤트를 발생시킵니다. 이 기능은IList
및ISet
와 같은 컬렉션 속성에서만 작동합니다. (이슈 #2856) FlexibleSyncConfiguration
에PopulateInitialSubscriptions
추가 - Realm이 처음 열릴 때 호출되는 콜백입니다. Realm이 열리기 전에 Realm에 추가될 초기 구독을 생성할 수 있습니다. (이슈 #2913)- SharedInfo 버전을 12 으로 변경합니다. 이를 위해서는 Realm Studio 를 포함하여 다중 프로세스 시나리오에서 파일 에 액세스하는 모든 앱 을 업데이트 해야 합니다.
- 동기화 클라이언트 는 서버 에서 보내는 보상 쓰기 (write) 오류 메시지를 정상적으로 처리하다 하고 SDK의 동기화 오류 처리기에 보상 쓰기 (write) 를 발생시킨 객체에 대한 자세한 정보를 전달합니다. (#5528)
고정
- 세트에 객체를 추가하고 상위 객체를 삭제한 다음 이전에 언급한 객체를 삭제하면 충돌이 발생합니다(#5387).
- 부트스트랩이 중단된 경우 Flexible 동기화 가 동기화를 올바르게 다시 시작하지 못했습니다(#5466).
- Flexible 동기화 는 이제 전체 부트스트랩이 수신된 경우에만 서버 의 부트스트랩이 적용되도록 하여 서버 에서 읽기 스냅샷 (#5331)을 변경한 결과로 고아 객체가 없도록 합니다.
- Apple 플랫폼에서 쓰기 (write) 성능의 성능 회귀를 부분적으로 수정합니다. 빈 쓰기 트랜잭션 (write transaction) (write transaction)을 커밋하는 것은 10.13.0 보다 ~10x 빠릅니다. 그러나 여전히10.7.1 이전보다 느립니다. 이는 충돌 안전 파일 동기화를 더 많이 사용하기 때문입니다(v10.7.1 이후). (Swift 이슈 #7740).
호환성
- Realm Studio: 12.0.0 이상.
내부
- 코어 12.1.0 사용 .
10.13.0 (2022-05-18)
개선 사항
- 동기화 Realm을 로컬 Realm으로 변환하고 로컬 Realm을 동기화 Realm으로 변환하는 기능이 추가되었습니다. (이슈 #2746)
- 동기화되지 않은 변경 사항 삭제 라는 새로운 클라이언트 재설정 전략에 대한 지원이 추가되었습니다. 이 새로운 전략은 동기화된 Realm에서 클라이언트 재설정 이벤트 처리를 크게 간소화합니다.
이 추가로 인해
Session.Error
이 더 이상 사용되지 않습니다. 현재Session.Error
를 일시적으로 계속 사용하려면 다음을 수행해야 합니다.
새로운 동기화되지 않은 변경 사항 삭제 기능 을 활용하려면 다음을 수행해야 합니다(모든 콜백은 선택 사항).var conf = new PartitionSyncConfiguration(partition, user) { ClientResetHandler = new ManualRecoveryHandler(); };
대신 지원 중단 기간이 끝난 후에도 수동 솔루션을 계속 사용하려면 다음을 수행해야 합니다.var conf = new PartitionSyncConfiguration(partition, user) { ClientResetHandler = new DiscardLocalResetHandler { OnBeforeReset = (beforeFrozen) => { // executed right before a client reset is about to happen }, OnAfterReset = (beforeFrozen, after) => { // executed right after a client reset is has completed }, ManualResetFallback = (session, err) => { // handle the reset manually } } };
var conf = new PartitionSyncConfiguration(partition, user) { ClientResetHandler = new ManualRecoveryHandler((sender, e) => { // user's code for manual recovery });
고정
- Xamarin.iOS에서 시작 시 Realm API에서
System.DllNotFoundException
가 발생하는 문제를 수정했습니다( 10.12.0 이후 문제 #2926}).
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.14.0 사용 .
10.12.0 (2022-05-05)
개선 사항
- , Android 및 에서 에 대한 미리보기 지원 ..NET 6 iOS Maui 새로운 .NET 6 모바일 워크로드에 대한 잠정적 지원 이 추가되었습니다(나중에 활성화될 MacCatalyst 제외). .NET 도구 자체는 아직 미리 보기 단계이므로 새 플랫폼에 대한 테스트 커버리지가 아직 충분하지 않습니다. 문제를 발견한 경우 https://github.com/ 영역/realm-dotnet/issues/new/choose 에서 신고해 주세요.
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.14.0 사용 .
10.11.2 (2022-04-12)
고정
- 암호화 사용 시 손상 버그를 수정했습니다. (Core Issue #5360)
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.14.0 사용 .
10.11.1 (2022-03-31)
고정
- 프로젝트가 네이티브를 사용하도록 구성된 경우에도 관리되는 HttpClientHandler가 Xamarin 애플리케이션에서 사용되는 문제를 수정했습니다. (이슈 #2892)
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.12.0 사용 .
10.11.0 (2022-03-28)
개선 사항
Session
의SessionConnectionState
을(를) 가져오기 위해Session.ConnectionState
속성을 추가했습니다. 또한Session
는 이제INotifyPropertyChanged
를 구현하므로Session.ConnectionState
의 변경 사항을 수신할 수 있습니다. (이슈 #2801)- 이제 Realm은 .NET Framework, .NET Core 및 UWP 앱용 Windows ARM64 에서의 실행을 지원합니다. (이슈 #2704 및 #2817)
- SDK에서 호출을 수행하는 데 사용하는 기본값 클라이언트 핸들러를 재정의할 수 있는 속성
AppConfiguration.HttpClientHandler
HTTP Realm .NET HTTP 이 추가되었습니다. 이는 사용자 로그인, 함수 호출, 원격 호출과 같은 호출의 동작에만 영향을 HTTP MongoDB 미칩니다. 동기화 클라이언트 는 네이티브 웹 소켓 구현 을 사용하며 제공된 메시지 핸들러를 사용하지 않습니다. (이슈 #2865)
고정
- [Unity]
Tools->Realm->Weave Assemblies
편집기 메뉴를 통해 호출 시 위버가 실패하고UnityEngine.UnityException: get_dataPath can only be called from the main thread
오류가 발생하는 문제가 수정되었습니다. (이슈 #2836) - 잘못된 Realm 컬렉션(예: 삭제된 객체에 속한 목록)을 열거할 때
RealmInvalidObjectException
가 발생하는 문제를 수정했습니다. (이슈 #2840) - 쿼리 구문 분석기가 "in"을 속성 이름으로 허용하지 않음(Core Issue #5312)
- 애플리케이션이 'KeyNotFound' 또는 어설션 'has_refs()'와 같은 예외로 인해 충돌하는 경우가 있습니다. 파일 손상을 나타내는 다른 문제도 이 방법으로 해결될 수 있습니다. 여기에 언급된 것이 문제 해결로 이어지는 것입니다. (Core Issue #5283)
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.12.0 사용 .
- 일부 Windows 어셈블리에 대한 인터프리터를 켜서 iOS 기기에서 벤치마크를 실행 수 있습니다.
10.10.0 (2022-02-28)
Guid 표현 문제
이번 출시하다 에서는 Guid 값이 데이터베이스 에 저장되는 방식의 주요 버그가 수정됩니다. 로컬(동기화되지 않은) 데이터베이스에 대한 자동 마이그레이션 을 제공하지만 동기화를 사용하는 앱 을 업그레이드할 때는 예비 주의가 필요합니다.
Context
Guid는 4 구성 요소( int
, short
, short
및 byte[8]
로 표시됩니다. Microsoft의 Guid는 처음 세 구성 요소를 시스템의 엔디안(모든 최신 CPU의 경우 리틀 엔디안)으로 인코딩하고 UUID는 해당 구성 요소를 빅 엔디안으로 인코딩한다는 점에서 UUID 사양과 다릅니다. 최종 결과는 동일한 string Guid
.NET 바이트라도 SDK에서 로 해석될 때와 데이터베이스에서 로 해석될 때 다른 표현을 갖게 UUID
됩니다 Realm - 예 f2952191-a847-41c3-8362-497f92cb7d24
대 912195f2-47a8-c341-8362-497f92cb7d24
(처음 세 구성 요소의 바이트 스와핑 참고). Realm Studio 에서 .NET SDK 로 생성된 데이터베이스 를 열고 Guid 속성 값을 검사하면 문제를 확인할 수 있습니다.
수정
저희가 제공하는 수정 사항은 .NET SDK의 동작을 조정하여 빅 엔디안 표현으로 데이터베이스에 대한 Guid를 읽거나 쓰는 것입니다. 즉, SDK와 데이터베이스가 일관되게 동일한 값을 표시합니다. 여기에는 로컬 및 동기화된 Realms 섹션에 설명된 몇 가지 의미가 있습니다.
로컬 Realm
로컬 Realm의 경우 새 SDK로 Realm을 처음 열 때 일회성 마이그레이션을 실행합니다. 이 마이그레이션 중에 모든 Guid 필드를 빅엔디안 형식으로 업데이트합니다. 즉, string 표현은 동일하게 유지되지만 데이터베이스의 값은 이에 맞게 변경됩니다. 즉, 업그레이드 프로세스가 원활해야 하지만 이전 버전의 SDK로 다운그레이드하기로 결정하면 바이트 순서가 뒤바뀌는 것을 볼 수 있습니다. 다운그레이드하더라도 마이그레이션이 여러 번 실행되지 않습니다.
동기화된 Realm
동기화된 Realm에는 클라이언트 마이그레이션이 제공되지 않습니다. 이는 시스템의 분산된 특성으로 인해 필연적으로 일관성 없는 상태의 기간이 발생할 수 있기 때문입니다. 대신 Guid
속성의 값은 데이터베이스에 이미 저장된 상태로 읽혀지며, 이는 string 표현이 이전 버전의 SDK에 비해 반전되지만 이제 Atlas/Compass/Realm Studio 의 표현과 일치하게 됩니다. . 앱은 세 가지 일반 그룹에 속합니다.
- 클라이언트에서 Guid 속성의 string 값에 관심이 없다면 아무것도 할 필요가 없습니다. 값은 여전히 고유하고 유효한 Guid입니다.
- 클라이언트 앱의 string guid 값을 사용하는 경우(예: 사용자 ID를 CMS와 상호 연관시키지만 클라이언트 장치를 완전히 제어할 수 있는 경우(예: 내부 회사 앱) 경우에는 마이그레이션을 일회성으로 실행하는 것이 좋습니다. Atlas 의 데이터를 삭제하고 모든 사용자가 최신 버전의 앱으로 업그레이드하도록 강제합니다.
- 모든 사용자가 동시에 업데이트 하도록 강제할 수 없는 경우, 보유한 각 Guid 속성 에 대해 예비 속성 을 추가하고 둘 간에 데이터를 마이그레이션 하는 trigger 함수를 쓰기 (write) 하여 실시간 마이그레이션 을 수행할 수 있습니다. 앱 의 이전 버전은 원래 속성 에 쓰기 (write) 새 버전은 새 속성 에 쓰기 (write) trigger 는 두 속성 간에 변환합니다.
동기화를 사용 중이고 최신 버전의 SDK로 업데이트해야 하지만 아직 데이터를 마이그레이션할 준비가 되지 않은 경우 Opting out
섹션을 참조하세요.
수신 거부
어떤 이유로든 고정된 동작을 사용하지 않으려면 Realm.UseLegacyGuidRepresentation
속성을 true
로 설정하여 일시적으로 선택 해제할 수 있습니다. 이는 권장되지 않지만, 버그 수정 및 기타 개선 사항을 적용하면서 마이그레이션을 테스트하는 데 더 많은 시간이 필요한 경우 사용할 수 있습니다. true
로 설정하면 두 가지 작업을 수행합니다.
- 10.10.0 이전의 리틀 엔디안 표현으로 Guid 값을 읽고 쓰는 동작입니다.
- 로컬 Realms에 대한 마이그레이션 코드를 비활성화합니다.
UseLegacyGuidRepresentation
이(가)false
으)로 설정하다 되었을 때 Realm 파일 을 이미 연 경우 마이그레이션 을 되돌리지 않습니다.
개선 사항
- 마이그레이션 중에 객체의 기본 키 를 변경할 수 없는 제한이 해제되었습니다. 이제 동적 API와 강력한 유형의 API 를 모두 사용하여 이 작업을 수행할 수 있습니다.
var config = new RealmConfiguration { SchemaVersion = 5, MigrationCallback = (migration, oldVersion) => { // Increment the primary key value of all Foos foreach (var obj in migration.NewRealm.All<Foo>()) { obj.Id = obj.Id + 1000; } } }
- [Unity ] Unity 에디터의 Realm 메뉴 항목을
Tools/Realm
으)로 이동하여 깔끔하게 정리하고 다른 3타사 에디터 플러그인과 정렬할 수 있도록 했습니다. (이슈 #2807)
고정
- 비동기 테스트에서 Realm 에 액세스할 때마다
System.Runtime.InteropServices.SEHException
가 발생하는 xUnit 테스트 관련 문제를 수정했습니다. (이슈 #1865) - Realm을 동결할 때 불필요한 메타데이터 할당을 유발하는 버그를 수정했습니다. (이슈 #2789)
- Realm에서 관리하는 객체(예:
RealmObject
, 목록, 결과 등) 마이그레이션 차단 중에 할당되어 가비지 수집될 때까지 Realm 을 열린 상태로 유지합니다. 이는 마이그레이션 직후 Realm 을 삭제 수 없거나 다른 구성으로 Realm 을 열 수 없는 등 미묘한 의미가 있습니다. (PR #2795) - Unity3D의 IL2C++ 컴파일러가 Realm 의 종속성 중 하나를 올바르게 프로세스 하지 못하는 문제를 수정했습니다. (이슈 #2666)
- Apple Silicon(유니버설) 아키텍처에도 적용 되도록 Realm NuGet 패키지 의 osx 런타임 경로를 수정했습니다(이슈 번호2732).
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.10.0사용
10.9.0 (2022-01-21)
개선 사항
"Flexible Sync" 라는 새로운 동기화 모드 에 대한 지원 이 MongoDB Realm 추가되었습니다. Flexible Sync를 사용할 때 클라이언트 는 관심 있는 쿼리를 결정하고 서버 에 이러한 쿼리와 일치하는 모든 객체를 요청합니다. 일치하는 객체는 이전과 마찬가지로 로컬 Realm 에 저장되며 오프라인 상태에서도 쿼리하고 액세스할 수 있습니다. 이 기능 은 beta 이므로 긍정적이든 부정적인 피드백 을 보내주시면 감사하겠습니다.
FlexibleSyncConfiguration
이라는 새 구성 유형을 추가했습니다. 서버와의 새 동기화 모드를 사용하는Realm
인스턴스를 가져오려면 이 유형을 사용합니다.PartitionSyncConfiguration
을 위해SyncConfiguration
클래스를 더 이상 사용하지 않습니다. 두 클래스는 동일하며FlexibleSyncConfiguration
와 더 잘 대조되도록 새로운 유형이 도입되었습니다. 두 유형은 동일하며 이전 '파티션 동기화' 모드를 사용하는Realm
인스턴스를 열 수 있습니다.SubscriptionSet
이라는 새 유형을 추가했습니다. 이는 이 Realm 에 대해 생성된 다양한 활성 쿼리 구독을 보유하는 컬렉션 입니다. 이 컬렉션 은Realm.Subscriptions
속성 을 통해 액세스할 수 있습니다. 로컬 및 파티션 동기화 Realm의 경우null
이고 유연한 동기화 Realm의 경우 null이 아닙니다.
최소한의 예는 다음과 같습니다.
var config = new FlexibleSyncConfiguration(user); var realm = Realm.GetInstance(config); // Add a new subscription realm.Subscriptions.Update(() => { var year2022 = new DateTimeOffset(2022, 1, 1); var saleOrders = realm.All<SaleOrder>().Where(o => o.Created > year2022); realm.Subscriptions.Add(saleOrders); }); // Wait for the server to acknowledge the subscription and return all objects // matching the query await realm.Subscriptions.WaitForSynchronizationAsync(); // Now we have all orders that existed on the server at the time of // subscribing. From now on, the server will send us updates as new // orders get created. var orderCount = realm.All<SaleOrder>().Count();
- 동일한 클래스의 쿼리에 대해 여러 개의 구독을 만들 수 있으며, 이 경우 논리적
OR
과 결합됩니다. 예를 들어 2022 에서 생성된 모든 주문에 대한 구독과 현재 사용자가 생성한 모든 주문에 대한 구독을 생성하는 경우 로컬 Realm에는 두 결과 세트의 합집합이 포함됩니다. - 구독에는 이름을 지정하거나(더 쉽게 구독 취소할 수 있음) 이름을 지정하지 않을 수 있습니다. 동일한 쿼리 로 명명되지 않은 구독을 여러 개 추가하는 것은 불가능합니다.
- 활성 구독 세트를 수정하는 것은 결과 차이가 크지 않더라도 서버 측에서 비용이 많이 드는 작업입니다. 따라서 서버 인스턴스에 과부하가 걸리지 않도록 구독 업데이트를 최대한 일괄 처리하는 것이 좋습니다. 일반적으로 Realm을 처음 열 때 사용자 구독을 사전에 선언하고 꼭 필요한 경우에만 업데이트하는 것이 좋습니다.
- API 및 현재 제한 사항에 대한 자세한 내용은 Docs 를 참조하세요.
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.8.0 사용 .
- 릴리스 테스트는 realm-dev 대신 realm-q에 대해 실행됩니다. (PR #2771)
10.8.0 (2022-01-17)
개선 사항
RealmConfigurationBase.FallbackPipePath
속성을 추가했습니다. 대부분의 경우 이 속성은 null로 둘 수 있지만, FAT32 를 사용하는 Android의 외부 저장소와 같이 명명된 파이프를 만들 수 없는 파일 시스템에서 Realm이 열려 있는 경우 사용해야 합니다. 이 경우 경로는 명명된 파이프를 생성할 수 있는 다른 파일 시스템의 위치를 가리켜야 합니다. (PR #2766)- 문자열 기반 쿼리 구문(
realm.All<Foo>().Filter("some-query")
)에 지원 산술 연산(+, -, *, /)이 추가되었습니다. 피연산자는 숫자 유형(정수, 부동 소수점, double 또는 십진수128)의 속성 및/또는 상수일 수 있습니다. 이제"(age + 5) * 2 > child.age"
와 같은 쿼리 를 쓰기 (write) 수 있습니다. (코어 업그레이드)
고정
- macOS에서 Unity 프로젝트 를 열 때
Sharing violation on path ...
오류가 발생할 수 있는 경합 상태를 수정했습니다. (Issue #2720, @tomkrikorian 이 수정) - 읽기 전용 Realm 에서
Realm.GetInstance
이(가) 여러 번 호출될 때 발생하는 오류를 수정했습니다. (이슈 #2731) IQueryable
에서Count()
을(를) 호출할 때LIMIT
절이 무시되는 버그가 수정되었습니다.realm.All<Foo>().Filter("Bar > 5 LIMIT(1)).Count()
과 같은 표현식은 문자열 기반 술어의 제한을 무시하고 모든 일치 항목의 개수를 반환합니다. (이슈 #2755)- 인터페이스 속성에서 정렬할 수 있도록
RealmResultsVisitor.TraverseSort
의 로직을 수정했습니다. (Issue #1373, 기고: @daawaan)
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.8.0 사용 .
- 소문자 'pr'을 사용하도록 시험판 패키지의 이름 업데이트 - 예
10.7.1-pr-2695.1703
10.7.1-PR-2695.1703
. (PR #2765) - CLI를 사용하여 애플리케이션 가져오기/내보내기에서 관리 API를 통한 애플리케이션 구성으로 마이그레이션되었습니다. (PR #2768)
10.7.1 (2021-11-19)
고정
- Realm 경로가 너무 길어 대체 해시 이름을 트리거한 경우(OS에 따라 다르지만 Linux에서는 300 문자) 사용자가 제거될 때 동기화 사용자의 Realm 이 삭제되지 않았습니다. (코어 업그레이드)
- Don't keep trying to refresh the access token if the client's clock is more than 30 minutes ahead. (코어 업그레이드)
- 인증 요청 이 실패하더라도 동기화 스레드를 인공적으로 휴면 상태로 만들지 마세요. 이는 동기화 가 30 분 이상 오프라인 상태에서 연결을 시도할 때 애플리케이션에서 UI 가 중단되는 것으로 관찰될 수 있습니다. (코어 업그레이드)
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.6.1 사용 .
10.7.0 (2021-11-09)
개선 사항
- Realm 이 동기화된 경우 이 Realm 에 대한 동기화 세션 을 반환하고 로컬 Realm의 경우
null
를 반환하는Realm.SyncSession
속성 을 추가했습니다. 이는 현재 더 이상 사용되지 않는GetSession(this Realm)
확장 메서드를 대체합니다. (PR #2711)
고정
- 디스크에 있는 스키마의 상위 집합인 스키마로 읽기 전용 Realm을 열 때
RealmException
가 발생하는 버그를 수정했습니다. 이제 이 코드는 정상적으로 작동하며 온디스크 스키마에 없는 모든 클래스를 빈 컬렉션으로 처리합니다.realm.All<ThisIsNotInOnDiskSchema>().Count == 0
. (이슈 #2619) - Windows에서 랜섬웨어 보호가 켜져 있을 때 바이너리 앱 폴더에 "Documents" 폴더가 생성되는 버그가 수정되었습니다. (이슈 #2685)
- Realm 위버 이후에
PropertyChanged.Fody
이(가) 실행되면 잘못된 속성 구현 이 생성되는 문제를 수정했습니다. (이슈 #1873) - [Unity] 사용자 지정 사용자 데이터를 직렬화 및 역직렬화하는 데 필요한 추가 생성자를 보존했습니다. (PR #2519)
- 명시적으로 설정된
Schema
속성을 사용하여RealmConfiguration
를 동시에 생성할 때InvalidOperationException
가 발생하는 문제를 수정했습니다. (이슈 #2701) - [Unity ] Unity 패키지 관리자 를 통해 Realm 패키지 가 설치되지 않은 경우 iOS 으로 빌드할 때
NullReferenceException
가 발생하는 문제가 수정되었습니다. (이슈 #2698) - 제공된 Realm 스키마 가 디스크의 스키마 와 일치하지 않는 경우 동결된 객체의 속성이 잘못된 값을 반환하거나 예외를 발생시킬 수 있는 버그가 수정되었습니다. (이슈 #2670)
- Realm 에 대한 외부 참조가 해제되는 동시에 동기화 세션 이 닫히기 위해 질주하는 드문 어설션 실패 또는 교착 상태를 수정했습니다. (코어 업그레이드)
- 제거된 사용자와 동기화 Realm 을 열 때 어설션 실패를 수정했습니다. 대신 예외가 발생합니다. (코어 업그레이드)
- 액세스 토큰 새로 고침 응답이 들어오는 동안 사용자가 로그아웃되면 trigger 될 수 있는 드문 segfault를 수정했습니다. (코어 업그레이드)
- 동기화된 Realm의 다운로드가 완료된 후에도 진행률 알림이 계속 호출되는 버그가 수정되었습니다. (코어 업그레이드)
- fallocate()에서 EPERM이 반환되도록 허용합니다. 이를 Linux 통해 Amazon Web Services Lambda 와 같이 흥미로운 파일 시스템이 있는 환경에서 실행 하기 위한 지원 이 향상됩니다. 보고 하고 수정 사항을 제안한 @ztane 에게 감사드립니다. (코어 업그레이드)
- 사용자의 새로 고침 토큰이 만료되면 사용자가 로그인 상태로 남아 있는 문제를 수정했습니다. (코어 업그레이드)
- SyncManager에는 일관되지 않은 잠금이 있어 데이터 경쟁 및/또는 교착 상태를 초래할 수 있으며, 대부분 매우 이상한 작업을 수행하는 테스트 외에는 절대 발생하지 않는 방식입니다. (코어 업그레이드)
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.6.0 사용 .
- iOS 래퍼는 이제 Xcode 10 에서 도입된 "새 빌드 시스템"으로 빌드되고 Xcode 12 에서 기본값 으로 사용됩니다. 자세한 내용은 cmake의 Docs 에서 확인할 수 있습니다.
- 이제
GetInstanceAsync
으)로 동기화된 Realm을 열 때 결과 Realm 인스턴스를 새로 고칩니다. (이슈 #2256) - cloud-dev에서 실행 모든 플랫폼에 대한 동기화 테스트가 추가되었습니다. (이슈 #2049)
- 에뮬레이터에서 실행 Android 테스트가 추가되었습니다. (이슈 #2680)
- Sleet(피드 URL)을 사용하여 S3 에 시험판 패키지를 게시하기 시작했습니다. (이슈 #2708)
- 모든 빌드에 대해 LTO를 활성화합니다. (PR #2714)
10.6.0 (2021-09-30)
개선 사항
세트를 래핑하는
IQueryable
컬렉션을 가져오기 위해ISet
에 두 개의 확장 메서드를 추가했습니다:set.AsRealmQueryable()
를 사용하면 에서 를 가져온IQueryable<T>
ISet<T>
다음 일반 쿼리 가능 컬렉션으로 처리하고 LINQ 또는 로 필터링/정렬할 수Filter(string)
있습니다.set.Filter(query, arguments)
설정하다 를 필터하다 하고 필터링된 컬렉션 을 반환합니다.set.AsRealmQueryable().Filter(query, arguments)
와 거의 동일합니다.
결과로 생성되는 쿼리 가능 컬렉션 은
realm.All<T>()
를 호출하여 얻은 결과와 동일하게 작동합니다. 즉, 컬렉션이 변경될 때 알림 을 보내고 자동으로 업데이트 됩니다. (이슈 #2555)Migration
에 두 가지 새로운 메서드가 추가되었습니다(이슈 #2543):RemoveType(typeName)
를 사용하면 마이그레이션 중에 유형과 해당 스키마 를 영역 에서 완전히 제거 할 수 있습니다.RenameProperty(typeName, oldPropertyName, newPropertyName)
마이그레이션 중에 속성의 이름을 바꿀 수 있습니다.
이제 모델 클래스에서 자동으로 생성되는 대신 런타임에 Realm 스키마 를 구성할 수 있습니다. 자동 생성은 계속 작동하며 대다수의 Realm 사용자의 요구 사항을 충족해야 합니다. 객체의 형태가 런타임에만 알려진 일부 정보에 의존하거나 매우 드문 경우지만 알려진 크기의 컬렉션 을 클래스의 속성으로 표시하여 성능 이점을 제공할 수 있는 경우 스키마 를 수동으로 구성해야 할 수 있습니다. (이슈 #824)
RealmConfiguration.ObjectClasses
RealmConfiguration.Schema
을 위해 더 이상 사용되지 않습니다.RealmSchema
에는Type[]
의 암시적 변환 연산자 가 있으므로 이전에는ObjectClasses = new[] { typeof(Foo), typeof(Bar) }
처럼 보이던 코드를Schema = new[] { typeof(Foo), typeof(Bar) }
로 간단하게 업데이트할 수 있습니다.Property
속성에서 세터를 제거하여 읽기 전용 구조체로 변환했습니다. 이전에는 아무 작업도 수행하지 않았으므로 누군가 이를 사용했을 것으로 예상되지 않습니다.- 유효한 옵션의 범위 를 명시하여 Realm 속성의 선언을 간소화하기 위해
Property
에 여러 팩토리 메서드를 추가했습니다.Property.FromType<int>("IntProperty")
또는Property.Object("MyPersonProp", "Person")
. 이제 고급 시나리오를 지원 하기 위해Property
의 생성자가 공개되었지만 팩토리 메서드를 사용하는 것이 좋습니다. ObjectSchema.Builder
을(를) 공개하고 API 를 간소화했습니다. 이를 통해 단일 객체 의 스키마 에 대한 변경 가능한 표현을 구성하고 여기에 속성을 추가/ 제거 할 수 있습니다. 빈 빌더를 가져오거나 기존 모델 클래스의 정보와 함께 빌더를 볼 수 있습니다(예:RealmObject
또는EmbeddedObject
에서 상속).RealmSchema.Builder
를 공개하고 API를 간소화했습니다. 이를 통해 전체 Realm의 스키마에 대한 변경 가능한 표현을 구성하고 객체 스키마를 추가/제거할 수 있습니다.- 새 API를 사용하는 방법에 대한 간단한 예는 다음과 같습니다.
public class Person : RealmObject { public string Name { get; set; } public Address Address { get; set; } } // Declare schema from existing model classes var config = new RealmConfiguration { Schema = new[] { typeof(Person), typeof(Address) } }; // Manually construct a schema - we don't need to call .Build() on the builders // because we have implicit conversion operators defined that will call it for us. // Explicitly calling .Build() is also perfectly fine, if a little more verbose. var config = new RealmConfiguration { Schema = new RealmSchema.Builder { new ObjectSchema.Builder("MyClass", isEmbedded: false) { Property.FromType<int>("Id", isPrimaryKey: true), Property.PrimitiveDictionary("Tags", RealmValueType.String) }, new ObjectSchema.Builder("EmbeddedClass", isEmbedded: true) { Property.Primitive("DateProp", RealmValueType.Date, isNullable: true) } } }; // Enhance an existing model with new properties that will be accessible via // the dynamic API. var personSchema = new ObjectSchema.Builder(typeof(Person)) { Property.FromType<string>("NewStringProp") }; var config = new RealmConfiguration { Schema = new RealmSchema.Builder { personSchema, new ObjectSchema.Builder(typeof(Address)) } }; // Regular Person properties can be accessed as usual while runtime defined ones // need to go through the dynamic API. var person = realm.All<Person>().First(); var name = person.Name; var stringPropValue = person.DynamicApi.Get<string>("NewStringProp");
동적 모드 에서 Realm 을 열 때 macOS/ Linux 에서 SIGABORT가 발생하는 문제를 수정했습니다(예: 디스크에서 스키마 읽기) 스키마 에 속성이 없는 객체 가 포함되어 있습니다. (이슈 #1978)
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.4.1 사용 .
- 자체 호스팅 러너에서 실행되도록 성능 테스트를 이동했습니다. (PR #2638)
10.5.1 (2021-09-22)
고정
- 게터 전용
RealmObject
속성 이 포함된 클래스를 컴파일하는 동안NullReferenceException
가 보고되는 버그가 수정되었습니다. (이슈 #2576) - ClickOnce를 사용하여 WPF .NET Framework 애플리케이션을 배포할 때
Unable to load DLL 'realm-wrappers'
가 발생하는 문제를 수정했습니다. 이는 Realm이 의존하는 네이티브 라이브러리에 잘못된 BuildAction 유형이 적용되었기 때문입니다. (이슈 #1877) - [Unity ] 이미
Mono.Cecil
을(를) 참조하는 프로젝트 로 Realm 패키지 를 가져올 때Multiple precompiled assemblies with the same name Mono.Cecil.dll
을(를) 사용하여 Unity 빌드가 실패하는 문제를 수정했습니다. (이슈 #2630) - 매우 특정한 에지 시나리오에서 런타임에 어셈블리를 찾을 수 없는 버그가 수정되었습니다. 이러한 시나리오에 대한 자세한 내용은 해당 PR 의 설명에서 확인할 수 있습니다. (이슈 #1568)
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.4.1 사용 .
10.5.0 (2021-09-09)
개선 사항
- ThreadSafeReference는 더 이상 쿼리에서 지원하는 결과 이외의 것에 대한 소스 트랜잭션 버전을 고정하지 않습니다. (코어 업그레이드)
- 컬렉션 이 현재 쓰기 트랜잭션 (write transaction) (write transaction)에서 생성되지 않은 한, 컬렉션 에서 지원하는 결과에 대한 ThreadSafeReference를 이제 쓰기 트랜잭션( 쓰기 트랜잭션 (write transaction) ) 내에서 만들 수 있습니다. (코어 업그레이드)
- 동기화된 Realm이 더 이상 두 번 열리지 않으므로 사용되는 주소 공간과 파일 설명자가 절반으로 줄어듭니다. (코어 업그레이드)
고정
- null 기본 키가 있는 객체가 다른 동기화 클라이언트에 의해 삭제된 경우
KeyNotFound: No such object
예외가 트리거될 수 있습니다. (코어 업그레이드) - 이전에 사용자가 로그아웃하는 동안 앱 이 충돌한 경우 어설션
m_state == SyncUser::State::LoggedIn
이(가) 발생할 수 있는 경합 상태를 수정했습니다. (코어 업그레이드)
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.4.1 사용 .
- Slack에 릴리스를 게시하는 작업이 추가되었습니다. (이슈 #2501)
- 최신 버전의 변경 로그를 추출하는 MSBuild 인라인 작업 이 추가되었습니다. (이슈 #2558)
- 릴리스가 성공하면 원본 PR을 병합하고 릴리스에 태그를 지정한 다음 변경 로그를 업데이트합니다. (PR #2609)
10.4.1 (2021-09-03)
고정
- SDK가 이전 Linux 버전에서 작동하지 않는 회귀를 수정했습니다. (이슈 #2602)
- 동적 API를 사용할
myObj
기본 키 변경 확인"some-new-value"
를myObj.DynamicApi.Set("Id", "some-new-value")
하여NotSupportedException
문제를 수정했습니다. (PR #2601)
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.3.1 사용 .
- 작업복에 코드 커버리지를 업로드하기 시작했습니다. (이슈 #2586)
- RealmObjectBase 상속자에서
[Serializable]
속성을 제거했습니다. (PR #2600)
10.4.0 (2021-08-31)
고정
- 사용자 지정 로거가 설정된 경우에도 Unity의
Logger.Default
이 항상Debug.Log
로 되돌아가는 문제를 수정했습니다. (이슈 #2481) - Unity 의
Logger.Console
이 여전히Debug.Log
Console.WriteLine
을 사용하는 문제가 수정되었습니다. (이슈 #2481) - Newtonsoft.Json 및 유사한 직렬 변환기가 기본 속성을 직렬화하려고 시도하지 못하도록 RealmObjectBase에 직렬화 주석을 추가했습니다. (이슈 #2579)
- WPF의 UI 바인딩된 컬렉션에서 요소를 제거할 때
InvalidOperationException
가 발생하는 문제를 수정했습니다. (이슈 #1903) - 이제 사용자 프로필이 실행 간에도 올바르게 유지됩니다. (코어 업그레이드)
- RealmObject 상속자가 포함된 RealmValue 목록의 중첩된 계층 구조를 통해 알림 을 전달할 때 발생하는 충돌을 수정했습니다. (코어 업그레이드)
- RealmValue 속성 으로 연결된 객체 가 무효화될 때 충돌이 수정되었습니다( 동기화 만 해당). (코어 업그레이드)
- 목록에 내장된 객체 를 바꿀 때 이전 크기 기록 손상을 수정합니다. (코어 업그레이드)
- RealmValue 속성 속성 AddColumn 명령을 적용할 때 동기화 클라이언트 에서 어설션이 실패하는 문제를 수정했습니다. (코어 업그레이드)
- 해당 속성 이 로컬에 이미 존재하는 경우
RealmValue
속성 에 대한AddColumn
지침을 적용할 때 동기화 클라이언트 에서Invalid data type
어설션 실패를 수정했습니다. (코어 업그레이드)
개선 사항
목록을 래핑하는
IQueryable
컬렉션 을 가져오기 위해IList
에 두 개의 확장 메서드를 추가했습니다.list.AsRealmQueryable()
를 사용하면 에서 를 가져온IQueryable<T>
IList<T>
다음 일반 쿼리 가능 컬렉션으로 처리하고 LINQ 또는 로 필터링/정렬할 수Filter(string)
있습니다.list.Filter(query, arguments)
목록을 필터하다 하고 필터링된 컬렉션 을 반환합니다.list.AsRealmQueryable().Filter(query, arguments)
와 거의 동일합니다.
결과로 생성되는 쿼리 가능 컬렉션 은
realm.All<T>()
를 호출하여 얻은 결과와 동일하게 작동합니다. 즉, 컬렉션이 변경될 때 알림 을 보내고 자동으로 업데이트 됩니다. (이슈 #1499)Realm 스키마에 대한 캐시가 추가되었습니다. 이렇게 하면
RealmConfiguration.ObjectClasses
이 명시적으로 설정된Realm.GetInstance
호출 속도가 빨라집니다. 속도 향상은 모델 클래스의 수와 복잡성에 따라 달라집니다. 유효한 모든 Realm 속성 유형을 포함하는 스키마를 테스트하는 참고 벤치마크에 따르면 Realm.GetInstance의 속도가 25% 증가했습니다. (이슈 #2194)복잡한 스키마가 있는 Realm에 대한 컬렉션 알리미 생성 성능을 개선합니다. SDK에서 이는 동기 쿼리를 처음 실행하고 알림을 구독하기 위한 첫 번째 호출이 호출 스레드의 작업을 크게 줄임을 의미합니다.
특히 깊게 중첩된 객체 그래프와 컬렉션에 객체 수가 적은 List 또는 Set 속성이 있는 객체의 알림에 대한 변경 세트 계산 성능이 향상되었습니다.
이제 쿼리 구문 분석기가
BETWEEN
연산자 를 허용합니다.realm.All<Person>().Filter("Age BETWEEN {20, 60}")
와 같이 사용할 수 있으며, 이는 "'Age'는 반드시 열린 간격 ]20;60[" 내에 있어야 합니다. (코어 업그레이드)
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.3.1 사용 .
- 열린 Realm에 대한 모든 상태의 스레드 로컬 사전을 보유하던 RealmStates 사전을 제거했습니다. 삭제 중에 열려 있는 Realm을 감지하는 데만 사용되었으며 이제는 네이티브
delete_realm_files
메서드로 처리됩니다. (PR #2251) - Mixpanel에 분석 전송을 중지했습니다.
- 벤치마크 결과를 MongoDB Charts 에 업로드하기 시작했습니다. (이슈 #2226)
- GHA에서 전용 벤치마크 워크플로를 제거했습니다. (이슈 #2562)
- Github 작업에서 Windows 래퍼를 빌드할 때는 Windows81 SDK를 사용하세요. (이슈 #2530)
- CodeQL 워크플로가 추가되었습니다. (이슈 #2155)
- 시간이 지남에 따라 패키지 및 래퍼 크기를 추적하기 시작했습니다. (이슈 #2225)
BinarySerializer
이(가) 더 이상 사용되지 않으므로 RealmObjectBase에서[Serializable]
속성을 제거했습니다. (PR #2578)- Github 작업에 코드 커버리지 작업이 추가되었습니다. (PR #2581)
- Windows 8.1 에서 실행되는 CI 테스트가 추가되었습니다. (PR #2580)
10.3.0 (2021-07-07)
참고: 이 출시하다 에서는 xcframework를 사용하며 iOS 네이티브 라이브러리에 비트코드를 활성화합니다. 이로 인해 패키지 크기가 크게 증가하고 .ipa 파일 크기가 증가하는 것처럼 보일 수 있습니다. iOS 으로 컴파일할 때 크기입니다. 그러나 비트코드 부분과 불필요한 아키텍처는 App Store 에서 정리되므로 사용자에게 전송되는 실제 다운로드 의 크기는 이전보다 변경되지 않거나 작아집니다.
고정
- Windows 8.1 에서
realm-wrappers.dll
가 로드되지 않던 문제를 수정했습니다. (이슈 #2298) - 링크가 포함된 기본 혼합 목록의 변경 사항을 수신할 때 어설션이 실패하는 문제를 수정했습니다. (코어 업그레이드)
- 무효화된 링크가 포함된 딕셔너리 또는 설정하다 의 변경 사항을 수신할 때 발생하는 어설션 실패를 수정했습니다. (코어 업그레이드)
- 주기가 포함된 객체 세트의 변경 사항을 계산할 때 Stack Overflow 로를 일으킬 수 있는 무한 재귀 루프를 수정했습니다. (코어 업그레이드)
- 사전 구현 에 충돌 처리를 추가합니다. (코어 업그레이드)
- 객체에 대한 링크가 포함된 혼합의 목록 또는 세트를 지운 후 충돌이 수정되었습니다. (코어 업그레이드)
- 관리자가 해지한 사용자 앱 토큰을 새로 고치려고 시도하면 결국 충돌하는 재귀 루프를 수정했습니다. 이제 이 상황에서는 사용자가 로그아웃되고 오류가 보고됩니다. (코어 업그레이드)
Realm.DeleteRealm
호출과 영역 파일 열기 간의 경쟁을 수정했습니다. (코어 업그레이드)- [Unity] 대부분의 기본 직렬화/역직렬화 워크로드가 즉시 작동하도록 여러 기본 직렬 변환기의 생성자를 보존하는 코드를 추가했습니다. (PR #2489)
개선 사항
- xcframework를 사용하도록 네이티브 iOS 라이브러리를 변경했습니다. 즉, 이제 M1 Mac의 시뮬레이터 실행이 지원됩니다. (이슈 #2240)
- 네이티브 iOS 라이브러리에 비트코드를 추가했습니다. 이는 Xamarin.iOS에는 영향을 주지 않지만, Unity 애플리케이션이 App Store 서버에서 수행하는 최적화를 활용하여 새로운 아키텍처가 출시될 때 지원할 수 있도록 합니다. (이슈 #2240)
호환성
- Realm Studio: 11.0.0 이상.
- 이 출시하다 에서는 Xamarin이 필요한 iOS 네이티브 라이브러리에 Xamarin 를 사용합니다. iOS 14.14.2.5 이상.
내부
- 코어 11.0.4 사용 .
10.2.1 (2021-06-30)
이번 릴리스에서는 Unity 바이너리가 패키징되는 방식이 변경되어 종속성을 독립형 모듈로 포함하는 추가 Unity 패키지를 가질 필요가 없습니다. io.realm.unity-bundled
패키지를 사용하고 있었다면 해당 패키지를 제거하고 새로 릴리스된 io.realm.unity
패키지를 추가하세요.
고정
- [Unity] 모델링 오류로 인해 어셈블리를 구성하지 못하면 로그에 오류가 한 번만 표시되고
No RealmObjects. Has linker stripped them?
으로 Realm 을 열 수 없는 문제가 수정되었습니다. 이제 위빙 오류는 모든 코드 변경/위빙 시도에서 표시되며 런타임 오류는 명시적으로 수동으로 위버를 다시 실행할 것을 제안합니다. (이슈 #2310) - [Unity] 동기화를 사용할 때 앱이 종료 시 중단되는 문제를 수정했습니다. (PR #2467)
- [Unity ] 앱 이 동기화를 사용하는 경우 어셈블리를 다시 로드한 후 macOS의 Unity 편집기가 중단되는 문제가 수정되었습니다. (이슈 #2482)
- UInt32 를 TableKey로, Int64 를 ObjKey로 잘못 변환하여 Android x86 에서 충돌이 발생할 수 있는 문제를 수정했습니다. (이슈 #2456)
개선 사항
- none
호환성
- Realm Studio: 11.0.0 이상.
내부
- 코어 11.0.3 사용 .
- 이제 객체에 대한 GetHashCode()는 객체 키 외에도 테이블 키를 사용합니다. (이슈 #2473)
10.2.0 (2021-06-15)
고정
- 쿼리에 여러
OrderBy
절을 적용하면 마지막 절이 이전 절을 대체하는 것이 아니라.ThenBy
인 것처럼 절이 서로 추가되는 버그가 수정되었습니다. (PR #2255) SyncConfiguration.ObjectTypes
을 명시적으로 지정할 때 스키마 의 유효성을 검사하고 모든EmbeddedObject
클래스가RealmObject
에서 상속된 클래스에서 연결할 수 있는지 확인하는 검사가 추가되었습니다. More info about this subject can be found here. (PR #2259)- iOS Unity 프로젝트 를 빌드할 때
Undefined symbols for architecture xxx: "_realm_thread_safe_reference_destroy"
와(과) 유사한 오류가 발생하는 버그가 수정되었습니다. (이슈 #2318) - 이제
RealmInteger
값의 컬렉션을 정의하려고 하면 위버에서 오류가 발생합니다. 이는 지원된 적이 없지만 이전에는 자동으로 실패했지만 지금은 컴파일 시간 오류가 발생합니다. (이슈 #2308) - Unity 프로젝트에서 관리 객체 컬렉션(목록 또는 결과)을 사용하면 유효하지 않은 컴파일된 바이너리가 생성되는 문제가 수정되었습니다. (PR #2340)
- 마이그레이션 콜백 이 정의되었지만 Realm 에서 실제로 실행 필요가 없는 경우의 메모리 누수를 수정했습니다(PR #2331).
- iOS 빌드에 대한 32비트 지원 이 다시 추가되었습니다. (이슈 #2429)
- 기기용 Unity 프로젝트를 빌드할 때 Realm 및 Realm.UnityUtils의 스키마가 비어 있다고 언급하는 중복 경고를 제거했습니다. (이슈 #2320)
Realm.GetInstanceAsync(syncConfig)
를 호출한 직후에SyncConfiguration.OnProgress
를null
로 설정하다 하면NullReferenceException
가 발생하는 문제를 수정했습니다. (이슈 #2400)- 포함된 객체를 바꿀 때 포함된 객체에 대한 링크를 null로 설정하는 동기화 명령을 내보내 해당 객체가 제대로 지워지도록 합니다. 이렇게 하면
Failed to parse, or apply received changeset: ERROR: ArrayInsert: Invalid prior_size (list size = 4, prior_size = 0)
(#4740 - ExternalCommitHelper의 Linux 구현이 Android 12 을(를) 포함하여 epoll 동작을 변경 한 새 버전의 Linux에서 작동하도록 만들었습니다(이슈 #4666).
- 파일 형식은 이제 기본 키 열에 검색 인덱스를 갖는 방식으로 변경되었습니다. 이제 기본 키 값에서 ObjKey 파생을 중단하고 증가하는 카운터 값만 사용하기 때문에 필요합니다. 이렇게 하면 모든 새 객체가 동일한 클러스터 에 생성되고 이전처럼 분산되지 않는 효과가 있습니다. 또한 파일 형식 버전 11 및 이전 형식에서 업그레이드하는 것이 훨씬 빨라집니다. (코어 업그레이드)
개선 사항
Guid
데이터 유형에 대한 지원을 추가합니다. 프라이머리 키로 사용할 수 있으며 인덱싱이 가능합니다. (PR #2120)사전에 대한 지원 을 추가합니다. 현재는 string 키만 지원되지만 값 유형은 지원되는 유형(기본 유형,
RealmValue
또는 RealmObject/EmbeddedObject에서 상속된 사용자 지정 유형) 중 하나일 수 있습니다. 목록, 세트 또는 기타 사전은 값 유형으로 사용할 수 없습니다. 모델에 딕셔너리를 추가하려면IDictionary<string, T>
유형의 게터 전용 속성 을 정의합니다.public class MyObject : RealmObject { public IDictionary<string, decimal> Denominations { get; } } // Realm will automatically manage the underlying dictionary, so there's no need // to define a constructor or assign it to some value. var obj = new MyObject(); obj.Denominations.Add("quarter", 0.25d);
RealmValue
데이터 유형에 대한 지원을 추가합니다. 이 새로운 유형은 객체를 포함한 모든 유효한 Realm 데이터 유형을 나타낼 수 있습니다.RealmValue
의 컬렉션(목록, 세트 및 사전)도 지원되지만RealmValue
자체는 컬렉션을 포함할 수 없습니다.RealmValue
유형의 속성은 null을 허용할 수 없지만RealmValue.Null
값으로 표시되는 null을 포함할 수 있습니다. (PR #2252)public class MyObject : RealmObject { public RealmValue MyValue { get; set; } public IList<RealmValue> ValuesList { get; } public ISet<RealmValue> ValuesSet { get; } public IDictionary<string, RealmValue> ValuesDict { get; } } var obj = new MyObject(); obj.MyValue = RealmValue.Null; obj.MyValue = 1; obj.MyValue = "abc"; if (obj.MyValue.Type == RealmValueType.String) { var myString = obj.MyValue.AsString(); }
객체 세트 또는 기본 값에 대한 지원 을 추가합니다. 세트는 해당 요소의 고유성을 보장하는 순서가 지정되지 않은 컬렉션입니다. Realm 은 내부 동등성 비교자를 사용하며 사용자 지정 클래스에서
Equals
또는GetHashCode
을(를) 재정의하여 동작을 사용자 지정할 수 없습니다. 객체는 항상 데이터베이스 참조를 통해 비교됩니다. 즉, 데이터베이스 의 두 개의 서로 다른 객체는 내용이 동일하더라도 항상 다르며 동일한 데이터베이스 객체 에 대한 여러 참조는 항상 동일합니다.public class MyObject : RealmObject { public ISet<string> UniqueStrings { get; } } // Realm will automatically manage the underlying set, so there's no need // to define a constructor or assign it to some value. var obj = new MyObject(); var didAdd = obj.UniqueStrings.Add("foo"); // true didAdd = obj.UniqueStrings.Add("foo"); // false
string 기반 쿼리에서 값 대체에 대한 지원이 추가되었습니다. 이렇게 하면
realm.All<T>().Filter("field1 = $0 && field2 = $1", 123, "some-string-value")
구문 을 따르는 표현식이 활성화됩니다. (이슈 #1822)네이티브 바이너리의 크기를 ~5% 줄였습니다. (PR #2239)
새로운 클래스(
Logger
)가 추가되었으며, 이 클래스를 사용하면Logger.Default
을(를) 설정하여 기본 로거 구현(이전에는stdout
또는stderr
에 작성)을 사용자 지정 로거 구현으로 재정의할 수 있습니다. 이는 향후 릴리스에서 제거될AppConfiguration.CustomLogger
및AppConfiguration.LogLevel
를 대체합니다. 기본 제공 구현은 다음과 같습니다.Console
- 대부분의 프로젝트에는System.Console
을(를) 사용하고 Unity 프로젝트에는UnityEngine.Debug
을(를) 사용합니다:Logger.Default = Logger.Console;
Null
- 모든 메시지를 무시합니다.Logger.Default = Logger.Null;
Function
- 제공된 함수에 대한 호출을 프록시합니다.Logger.Default = Logger.Function(message => myExternalLogger.Log(message));
Custom loggers can derive from the
Logger
class and provide their own implementation for theLog
method or useFunction
and provide anAction<string>
. (PR #2276)RealmObjectBase
이제GetHashCode()
을(를) 올바르게 재정의하고 구현합니다. (이슈 #1650)객체 콘텐츠에 대한 더 의미 있는 정보를 출력하기 위해
RealmObject.ToString()
재정의를 추가했습니다. 객체의 유형, 프라이머리 키(정의된 경우), 객체가 관리되는지 또는 삭제되는지 여부에 대한 정보를 출력합니다. (이슈 #2347)객체 속성에 동적으로 액세스하기 위한 새로운 API가 추가되었습니다. 이는 Xamarin.iOS 및 IL2C++ 컴파일을 사용하는 Unity 와 같은 사전 컴파일 플랫폼을 지원하도록 설계되었습니다. 의도는 궁극적으로 이러한 API를 기본 API로 설정하면서 레거시 DLR 기반 API도 지원하는 것입니다. 예시:
// Make sure to cast away the dynamic immediately on AOT platforms. var people = (IQueryable<RealmObject>)realm.DynamicApi.All("Person"); foreach (var person in people) { var firstName = person.DynamicApi.Get<string>("FirstName"); var address = person.DynamicApi.Get<EmbeddedObject>("Address"); var city = address.DynamicApi.Get<string>("City"); } // When casting a dynamic object, always cast first to object and then // to the actual object type to remove any callsites being generated. var newPerson = (RealmObject)(object)realm.DynamicApi.Create("Person", 123); newPerson.DynamicApi.Set("FirstName", "Peter");
위빙 편집기 어셈블리를 활성화 하는 Unity 편집기 옵션이 추가되었습니다. 프로젝트 에 Realm 을 참조하는 편집기 어셈블리( 예시: Realm 관련 기능을 테스트하는 EditMode 테스트 어셈블리)가 없는 경우에는 이 값을 "꺼짐"으로 설정해야 합니다. "켜짐" 상태로 유지하면 위빙을 위해 더 많은 어셈블리를 평가해야 하므로 빌드 속도가 약간 느려질 수 있습니다. (이슈 #2346)
이제 파일 형식 업그레이드 전에 Realm 파일을 백업합니다. 백업은 3 개월 동안 보존됩니다. 파일 형식 업그레이드 이전의 백업을 사용하면 업그레이드 실패를 더 잘 분석할 수 있습니다. 또한) a) "미래" 파일 형식의 Realm 파일을 열려고 시도하고, b) 현재 파일 형식에 맞는 백업 파일이 있는 경우에도 백업을 복원합니다. (#4166)
호환성
- Realm Studio: 11.0.0-alpha.0 이상.
내부
- 코어 11.0.3 사용 .
- Android를 제외한 모든 플랫폼에 대해 LTO 빌드를 활성화했습니다. (PR #2239)
- 테스트 프로젝트가 dotnetcore 3.1 로 업데이트되었습니다. 즉, 더 이상 dotnetcore 2.0 에 대해 테스트가 실행되지 않습니다.
- 변환 연산자 발생 시 결과 방문자에서 Lambda 컴파일이 제거되었습니다. 이는 IL2C++가 Lambda를 동적으로 컴파일할 수 없기 때문에 필요합니다. 대신 이제
Operator.Convert<TTarget>(object)
Operator.Convert<TSource, TTarget>
보다 약간 덜 효율적이지만Convert.ChangeType
보다 훨씬 빠르며Decimal128
변환과 관련된 결함으로 어려움을 겪지 않는 를 사용하고 있습니다. 주요 단점은 암시적 변환 연산자가 정의된 사용자 지정 사용자 유형인 인수를 사용하는 쿼리를 더 이상 지원하지 않는다는 것입니다.
10.1.4 (2021-05-12)
고정
Invalid ref translation entry [0, 78187493520]
와(과) 유사한 메시지와 함께 충돌을 일으킬 수 있는 버그를 수정했습니다. (코어 업그레이드)- 변경 알림 콜백 내에서 쓰기를 수행할 때 발생하는
!m_notifier_skip_version.version
또는m_notifier_sg->get_version() + 1 == new_version.version
와 같은 어설션 실패를 수정합니다. (코어 업그레이드) - 수정에 대한 컬렉션 알림 보고를 수정합니다. 이는 정렬되거나 별개의 결과에서 잘못된 수정 인덱스를 수신하거나 수정만 발생했을 때 알림 차단이 호출되지 않는 경우에 발생할 수 있습니다. (코어 업그레이드)
- 동기화 세션을 시작하기 전에 액세스 토큰의 만료 시간을 사전에 확인하고 새로 고침합니다. 이렇게 하면
ERROR: Connection[1]: Websocket: Expected HTTP response 101 Switching Protocols, but received: HTTP/1.1 401 Unauthorized
과 같은 일부 오류 로그가 클라이언트에 표시되지 않습니다. (코어 업그레이드) - 종료 시 TableRecycler의 파괴는 실행 다른 스레드와 비교하여 순서가 지정되지 않았습니다. 이로 인해 충돌이 발생할 수 있으며, 일부 충돌은 TableRecycler가 스택 맨 위에 있습니다. (코어 업그레이드)
uncaught exception in notifier thread: N5realm11KeyNotFoundE: No such object
와(과) 관련된 오류를 수정했습니다. 동기화된 앱 에서 연결된 객체 가 다른 클라이언트 에 의해 삭제되었을 때 이 문제가 발생할 수 있습니다. (코어 업그레이드)- 잘못된 암호화 키 또는 다른 암호화 구성을 사용하여 메타데이터 Realm을 열면 해당 메타데이터 Realm이 제거되고 새 키 또는 구성을 사용하여 새 메타데이터 Realm이 생성됩니다. (코어 업그레이드)
- 읽기 전용 Realm 에
ThreadSafeReference
를 생성하면 충돌이 발생합니다. (코어 업그레이드)
호환성
- Realm Studio: 10.0.0 이상.
내부
- 코어 10.7.2 사용 .
10.1.3 (2021-04-29)
고정
- Windows 에서 동기화 를 사용할 때
"Access violation"
오류가 발생하는 컴파일러 버그를 수정했습니다.
호환성
- Realm Studio: 10.0.0 이상.
내부
- 코어 10.5.6 사용 .
10.1.2 (2021-03-19)
고정
- 32비트 기기에서는 v10 로 업그레이드할 때 '해당 객체 가 없습니다'라는 예외가 발생할 수 있습니다. (코어 업그레이드)
- 알림 작업자 스레드는 테이블에 쿼리 에 사용되지 않은 테이블로 연결되는 발신 링크가 있는 경우 쿼리 결과에 영향을 줄 수 있는 수정된 테이블만 커밋하는 대신 커밋 할 때마다 쿼리를 다시 실행합니다. (코어 업그레이드)
- 동기화 또는 여러 프로세스를 사용하여 단일 Realm 파일 에 쓸 때 발생할 수 있는 '잘못된 참조 변환 항목 [16045690984833335023, 78187493520]' 어설션 실패를 수정합니다. (코어 업그레이드)
- 서버 에서 대량의 데이터를 통합하는 동안
"Assertion failed: !fields.has_missing_parent_update()"
이(가) 발생할 수 있습니다. (코어 업그레이드) - 큰 십진수128 값을 동기화하면
"Assertion failed: cx.w[1] == 0"
이(가) 발생합니다. (코어 업그레이드) - Avoid race condition leading to possible hangs on windows. (코어 업그레이드)
개선 사항
- none
고정
- none
호환성
- Realm Studio: 10.0.0 이상.
내부
- 코어 10.5.6 사용 .
10.1.1 (2021-02-25)
고정
- 지원되지 않는 API (
__C_specific_handler
) 사용으로 인해 UWP 앱이 Microsoft Store에서 거부되는 문제를 수정했습니다. (이슈 #2235) - 쓰기 트랜잭션( 쓰기 트랜잭션 (write transaction) )이 매우 특정 시간에 커밋된 경우 Realm 알림 리스너 스레드에서 어설션 실패 '!skip_version.version'이 발생할 수 있습니다. (코어 업그레이드)
개선 사항
- none
고정
- none
호환성
- Realm Studio: 10.0.0 이상.
내부
- 코어 10.5.3 사용 .
10.1.0 (2021-02-09)
개선 사항
- 동기화 클라이언트 는 이제 오류 메시지의 크기뿐만 아니라 서버 에서 받은 오류 메시지를 기록합니다. (코어 업그레이드)
- 이제 동기화 WebSocket이 닫힐 때 서버에서 반환된 오류가 캡처되어 SyncError로 표시됩니다. (코어 업그레이드)
- 필터하다 가 없는 쿼리 에 대한 순차적 읽기 성능이 크게 향상되었습니다. (코어 업그레이드)
고정
- 트랜잭션 버전이 다른 스레드에서 동결된 쿼리 를 사용하여 동결된 컬렉션 의 이후 버전에 있는 객체에 액세스 할 수 있는 문제를 수정합니다. (코어 업그레이드)
- 파일 형식 업그레이드 후 객체 생성이 실패하고 "Assertion failed: lo() <= std::numeric_limits<uint32_t>::max()" (Core 업그레이드) 어설션과 함께 실패할 수 있는 문제가 수정되었습니다.
- 소스 테이블의 인덱스 0에 새 객체 가 생성된 경우 필터하다 없이 쿼리 결과에서 요소를 가져오면 잘못된 결과가 생성되는 문제가 수정되었습니다. (코어 업그레이드)
- 동기화 중에 앱이
Assertion failed: ref + size <= next->first
과 충돌하는 문제가 수정되었습니다. (코어 업그레이드)
호환성
- Realm Studio: 10.0.0 이상.
내부
- 코어 10.5.0 사용 .
- 전송 중인 분석 버전을 수정합니다.
10.0.1 (2021-02-02)
호환성이 손상되는 변경
- 더 이상 Realm Cloud(레거시)가 아닌 새로운 MongoDB Realm Cloud 를 지원 합니다. MongoDB Realm 은 개발자가 서버 인프라를 설정하다 필요 없이 애플리케이션을 빠르게 빌드 할 수 있는 서버리스 플랫폼 입니다. MongoDB Realm is built on top of MongoDB Atlas, automatically integrating the connection to your database. (#2011)
- 구성 매개변수 및
SyncSubscription
유형을 포함하여 쿼리 기반 동기화 에 대한 지원 을 제거합니다. (#2011) - 경로 기반 권한 시스템과 쿼리 기반 동기화를 위한 객체 수준 권한을 포함하여 동기화 권한과 관련된 모든 것을 제거합니다. MongoDB Realm의 권한은 서버 측에서 정의됩니다. (#2011)
Realm
클래스의 동적 액세스 를 위한 모든 API 를Realm.DynamicApi
으)로 이동했습니다.Realm.CreateObject(string className, object primaryKey)
이제Realm.DynamicApi.CreateObject(string className, object primaryKey)
입니다.Realm.All(string className)
이제Realm.DynamicApi.All(string className)
입니다.Realm.RemoveAll(string className)
이제Realm.DynamicApi.RemoveAll(string className)
입니다.Realm.Find(string className, long? primaryKey)
이제Realm.DynamicApi.Find(string className, long? primaryKey)
입니다.Realm.Find(string className, string primaryKey)
이제Realm.DynamicApi.Find(string className, string primaryKey)
입니다.
- 이제 동기화된 Realm 의 모든 최상위 객체에는
_id
이라는 기본 키 가 있어야 합니다.MapTo("_id")
속성을 사용하면 모델 속성에 단일 관용적 이름을 사용하지 않도록 할 수 있습니다. - Xamarin 의 최소 목표를 상향 조정했습니다. iOS 앱에서 iOS 9 로.
- Xamarin.Android 앱의 최소 API 수준을 16 로 상향 조정했습니다(Android 4.1).
FullSyncConfiguration
의 이름을SyncConfiguration
로 변경했습니다.RealmObject.FreezeInPlace
제거되었습니다. 영역 객체 를 고정하려면Freeze
확장 메서드를 사용합니다. (이슈 #2180)
개선 사항
Realm Object Server 대신 MongoDB 에 대한 동기화 지원 이 추가되었습니다. 애플리케이션은 ko-kr-6522657354e3c285a.getsmartling.com/ko-kr 에서 만들어야 합니다.
MongoDB Realm 앱과 동기화하기 위한 진입점인
App
클래스를 추가했습니다.사용자에 대한 추가 정보가 포함된 구조화되지 않은 문서가 포함된
User.CustomData
이(가) 추가되었습니다. 사용자 지정 데이터는 MongoDB Realm 앱에서 구성합니다.User.Functions
을(를) 추가했습니다. 이는 원격 MongoDB Realm 함수를 호출하기 위한 진입점입니다. 함수를 사용하면 애플리케이션에 대한 서버 측 로직을 정의하고 실행할 수 있습니다. 함수는 최신 JavaScript(ES6+)로 작성되었으며 서버리스 방식으로 실행됩니다. 함수를 호출하면 현재 애플리케이션의 구성 요소뿐만 아니라 함수 실행 요청 및 요청을 보낸 로그인한 사용자에 대한 정보에도 동적으로 액세스할 수 있습니다.원격 MongoDB 서비스에서 CRUD 작업을 위한 API를 노출하는
User.GetMongoClient
가 추가되었습니다.푸시 알림을 받을 기기를 등록하기 위한 API를 노출하는
User.GetPushClient
가 추가되었습니다.서버 Uri 대신 파티션 값을 허용하도록
SyncConfiguration
을(를) 변경합니다. 파티션 값은 현재string
,long
또는ObjectId
유형일 수 있습니다. 파티션 값으로 Realm을 여는 것은 이전에 URL로 Realm을 여는 것과 동일합니다. 이 경우 파티션은 데이터와 더 밀접하게 연결됩니다. 예를 들어 여러 위치에 있는 대규모 소매업체인 경우 파티션 키는 스토어 ID일 수 있으며 각 Realm에는 지정된 스토어와 관련된 데이터만 포함됩니다.십진수128 데이터 유형에 대한 지원을 추가합니다. 128비트 IEEE 754 10진수 부동 소수점 숫자입니다. 이 유형의 속성은
MongoDB.Bson.Decimal128
유형 또는 내장된decimal
유형으로 선언할 수 있습니다. .NET의 기본 제공 십진수는 96비트이므로Decimal128
로 표현할 수 있는 전체 숫자 범위를 나타낼 수 없습니다. (PR #2014)ObjectId
데이터 유형 에 대한 지원 을 추가합니다. 이는 MongoDB 데이터베이스에서 문서 ID로 일반적으로 사용되는 12 바이트 고유 식별자입니다. 기본 키 사용할 수 있습니다. (PR #2035)포함된 객체에 대한 지원 을 추가합니다. 포함된 객체는 단일 상위 객체 가 소유하는 객체로, 해당 상위 객체 가 삭제되거나 상위 항목이 더 이상 참조하지 않으면 삭제됩니다. 포함된 객체는
RealmObject
EmbeddedObject
을(를) 서브클래싱하여 선언됩니다. 내장된 객체 를 재할당하는 것은 허용되지 않으며 여러 상위 객체에서 해당 객체에 연결하는 것도 허용되지 않습니다. 내장된 객체를 직접 쿼리하는 것도 독립형 객체가 아닌 상위 객체에 속하는 복잡한 구조로 간주되어야 하므로 허용되지 않습니다. 간단한 예시 는 다음과 같습니다.public class Address : EmbeddedObject { public string Street { get; set; } public string City { get; set; } } public class Person : RealmObject { public string Name { get; set; } // Address is an embedded object - you reference it as usual public Address Address { get; set; } } public class Company : RealmObject { public string PhoneNumber { get; set; } // Embedded objects can be contained in lists too public IList<Address> OfficeAddresses { get; } }
포함된 객체를 인스턴스화하기 위한 새로운 동적 메서드가 추가되었습니다.
Realm.DynamicApi.CreateEmbeddedObjectForProperty
포함된 객체를 만들어 부모의 속성에 할당하는 데 사용해야 합니다. 예를 들면 다음과 같습니다.// static API var person = new Person(); person.Address = new Address { City = "New York" }; // dynamic API var dynamicPerson = realm.DynamicApi.CreateObject("Person"); var address = realm.DynamicApi.CreateEmbeddedObjectForProperty(dynamicPerson, "Address") address.City = "New York";
Realm.DynamicApi.AddEmbeddedObjectToList
내장된 객체 를 만들어 상위 항목의 목록 속성 에 추가하는 데 사용해야 합니다.Realm.DynamicApi.InsertEmbeddedObjectInList
내장된 객체 를 만들어 상위 항목의 지정된 인덱스 에 삽입하는 데 사용해야 속성 .Realm.DynamicApi.SetEmbeddedObjectInList
내장된 객체 를 생성하고 부모의 목록 속성 에 있는 인덱스 에 설정하다 하는 데 사용해야 합니다.// static API var company = new Company(); company.OfficeAddresses.Add(new Address { City = "New York" }); company.OfficeAddresses.Insert(0, new Address { City = "Palo Alto" }); company.OfficeAddresses[1] = new Address { City = "New Jersey" }; // dynamic API var dynamicCompany = realm.DynamicApi.CreateObject("Company"); var officeToAdd = realm.DynamicApi.AddEmbeddedObjectToList(dynamicCompany.OfficeAddresses); officeToAdd.City = "New York"; var officeToInsert = realm.DynamicApi.InsertEmbeddedObjectInList(dynamicCompany.OfficeAddresses, 0); officeToInsert.City = "Palo Alto"; var officeToSet = realm.DynamicApi.SetEmbeddedObjectInList(dynamicCompany.OfficeAddresses, 1); officeToSet.City = "New Jersey";
매우 큰 파일을 열 수 지원 Realm 파일에 대한 메모리 매핑 체계가 변경되었습니다.
string 쿼리 구문 분석기(
realm.All().Filter("some-string-query")
에 사용되는 것)의 구현 을 대체했습니다. 이렇게 하면 쿼리 실행 시간을 이전 구문 분석기와 동일하게 유지하면서 네이티브 바이너리 크기를 ~5% 줄일 수 있습니다. (PR #2185, 코어 업그레이드)유형 간 변환을 처리하는 내부 코드를 최적화했습니다. 이로 인해 iOS/UWP와 같은 Ahead-of-Time 컴파일 플랫폼에서 가장 눈에 띄는 대부분의 데이터 작업에서 약간의 성능 향상이 발생할 것입니다. 변경의 특성으로 인해 이전에 동적 객체로 작업할 때 자동으로 발생한 변환이 더 이상 수행되지 않을 수 있습니다.
No conversion exists from *type A* to *type B*
메시지와 함께NotSupportedException
가 표시되고 이것이 버그라고 생각되면 Github Issue를 제출하세요. (PR #2149)잘못된 목록을 감지하기 위해 추가 컴파일 타임 검사를 추가했습니다.
선언 및 IList 제안 Realm 객체의 컬렉션 속성에 해당합니다. (이슈 #2083) 값을 반환할 수 있는
Realm.Write
및Realm.WriteAsync
에 대한 오버로드가 추가되었습니다. (이슈 #2081)
고정
- 릴리스에서 다음 예외가 발생하는 .NET 네이티브 컴파일러(UWP 프로젝트에서 사용됨) 문제를 해결했습니다:
Incompatible MarshalAs detected in parameter named 'value'. Please refer to MCG's warning message for more information.
. (이슈 #2169) - .NET Core 3.0 이상에서 실행 되는 앱의 마이그레이션 중에 잘못된 속성 값을 읽을 수 있는 버그가 수정되었습니다. 이 문제는 서로 다른 클래스가 동일한 이름의 속성을 유지하여 잘못된 속성 에 액세스하는 결과를 초래할 수 있을 때 나타납니다.
foo.Name
는foo.Bar
을 반환할 수 있습니다. 이는 마이그레이션 중에 동적 API 를 사용하는 경우에만 발생할 수 있으며, 강력한 형식의 API 를 사용하거나 .NET Core 3.x/ .NET 5 이외의 플랫폼에서 실행 되는 앱에는 영향을 주지 않습니다. - 여러 프로세스가 동일한 Realm 파일 을 주식 하고 파일 의 알림 을 수신하는 다중 프로세스 시나리오에서 교착 상태를 일으킬 수 있는 버그가 수정되었습니다. (코어 업그레이드)
- 포함된 객체가 있는 객체를 삭제하고 다시 만들 때 발생하는 문제를 수정했습니다. (코어 업그레이드)
- 컬렉션 의 첫 번째 실행 중 매우 특정 시간에 소스 Realm 이 닫히거나 무효화될 때 'Notifier thread: N5영역15InvalidTableRefE: transaction_ended' 및 충돌로 이어지는 경합 상태를 수정합니다. 알리미(코어 업그레이드)
- 일치하는 항목이 없을 때 인덱싱된 string 열에서 대소문자를 구분하지 않는 쿼리 로 인한 충돌 수정(코어 업그레이드)
호환성
- Realm Studio: 10.0.0 이상.
내부
- 코어 10.3.3 사용 .
- 들소 구문 분석기로 마이그레이션되었습니다.
- Mixpanel과 함께 S3/Segment에 분석을 제출합니다.
- 이제 동기화 기능이 사용 중인지 여부도 분석에서 보고됩니다.
- 이제 SDK는 .NET 5 에 대해서도 테스트되었습니다.
- 이 릴리스는 Core, Sync 및 OS를 번들로 제공하는 단일 리포지토리 릴리스를 사용합니다.
- 표현식 기반 연산자를 T4 로 대체했습니다. (PR #2149)
5.1.3 (2021-02-10)
고정
- 인덱싱된 string 열에서 대소문자를 구분하지 않는 쿼리 를 만들면 쿼리가 실패하여 "해당 키 없음" 예외가 발생할 수 있습니다. (코어 업그레이드)
- 일치하는 항목이 없을 때 인덱싱된 string 열에서 대소문자를 구분하지 않는 쿼리로 인해 충돌이 발생하는 문제를 수정했습니다. (코어 업그레이드)
- 32비트 장치에서 업그레이드된 파일이 일관되지 않아 '키를 찾을 수 없음' 예외가 발생할 수 있습니다. (코어 업그레이드)
- 파일 형식 업그레이드 후 객체 생성이
Assertion failed: lo() <= std::numeric_limits<uint32_t>::max()
어설션과 함께 실패할 수 있는 문제를 수정했습니다. (코어 업그레이드)
호환성
- Realm 객체 서버: 3.23.1 이상.
- Realm Studio: 5.0.0 이상.
내부
- 동기화 5.0.32 및 코어 6.2.3 사용.
- QuickJournal 예시 를 최신 Realm 및 Xamarin.Forms 버전으로 업데이트했습니다. (PR #2057)
5.1.2 (2020-10-20)
고정
- UWP 앱의 기본 스레드에서 Realm 인스턴스에 액세스할 때
Realm accessed from incorrect thread
예외가 발생하는 문제를 수정했습니다. (이슈 #2045)
호환성
- Realm 객체 서버: 3.23.1 이상.
- Realm Studio: 5.0.0 이상.
내부
- 동기화 5.0.28 및 코어 6.1.3 사용.
- QuickJournal 예시 를 최신 Realm 및 Xamarin.Forms 버전으로 업데이트했습니다. (PR #2057)
5.1.1 (2020-10-02)
개선 사항
- none
고정
- 인덱싱된 속성을 쿼리하면 '키를 찾을 수 없음' 예외가 발생할 수 있습니다. (코어 업그레이드)
- null을 허용하지 않는 인덱싱된 정수 열에서 null에 대한 쿼리를 수정하여 0개의 항목에 대한 결과를 반환합니다. (코어 업그레이드)
호환성
- Realm 객체 서버: 3.23.1 이상.
- Realm Studio: 5.0.0 이상.
내부
- 동기화 5.0.28 및 코어 6.1.3 사용.
5.1.0 (2020-09-30)
개선 사항
- 인덱싱된 string 또는 int 열에 대한 NOT IN 쿼리의 성능을 크게 개선합니다. (코어 업그레이드)
고정
- WPF 애플리케이션의 메인 스레드에서 Realm 을 사용하면 " 잘못된 스레드에서 Realm 에 액세스했습니다"라는 메시지와 함께 예외가 발생하는 문제가 수정되었습니다. (이슈 #2026)
- 암호화된 Realm을 열 때 "이 버전의 Realm에서는 버전 0 형식의 Realm 파일을 여는 기능이 지원되지 않습니다."라는 메시지가 표시되는 문제를 수정했습니다. (코어 업그레이드)
- Realm 파일 에서 데이터를 읽는 대부분의 작업 성능을 약간 개선합니다. (코어 업그레이드)
- 이전에는 일치하는 항목이 두 개 이상 있었다가 이제 일치하는 항목이 하나 있는 인덱스 string 열에 대해 equals 쿼리 를 다시 실행하면 '키를 찾을 수 없음' 예외가 발생하는 경우가 있습니다. (코어 업그레이드)
- 링크가 조건의 일부인 테이블을 쿼리할 때 객체가 최근에 대상 테이블에 추가된 경우 애플리케이션 이 충돌할 수 있습니다. (코어 업그레이드)
호환성
- Realm 객체 서버: 3.23.1 이상.
- Realm Studio: 5.0.0 이상.
내부
- 동기화 5.0.27 및 코어 6.1.2 사용.
- Github 패키지 를 통해 시험판 nuget 피드를 추가했습니다. (PR #2028)
5.0.1 (2020-09-10)
참고: 이 버전은 Realm 파일 형식을 버전 11 으로 상향했습니다. 버전 10 이전으로 다운그레이드할 수 없습니다. 이전 버전의 Realm 으로 만든 파일은 자동으로 업그레이드됩니다. Realm Studio 5.0.0 이상에서만 새 파일 형식을 열 수 있습니다.
개선 사항
- "동결된 객체" 개념 추가 - 이는 특정 버전에서 "동결된" 객체, 쿼리, 목록 또는 Realm입니다. 이를 통해 모든 스레드에서 데이터에 액세스할 수 있지만 변경되지는 않습니다. 동결된 모든 객체는 정상적으로 액세스하고 쿼리할 수 있지만, 동결된 객체를 변경하거나 변경 리스너를 추가하려고 하면 예외가 발생합니다. (이슈 #1945)
Realm.Freeze()
,RealmObject.Freeze()
,RealmObject.FreezeInPlace()
,IQueryable<RealmObject>.Freeze()
,IList<T>.Freeze()
및IRealmCollection<T>.Freeze()
를 추가했습니다. 이러한 메서드는 해당 메서드가 호출되는 인스턴스의 동결된 버전을 생성합니다.- 데이터 고정 여부를 반환하는
Realm.IsFrozen
,RealmObject.IsFrozen
및IRealmCollection<T>.IsFrozen
가 추가되었습니다. RealmConfigurationBase.MaxNumberOfActiveVersions
을(를) 추가했습니다. 이 값을 설정하면 너무 많은 버전의 Realm 데이터가 동시에 라이브 상태인 경우 Realm 에서 예외가 발생합니다. 버전이 너무 많으면 Realm 의 파일 크기가 크게 증가할 수 있습니다.
SynchronizationContext
-제한된 Realm에 대한 지원 을 추가합니다. 대기열에 한정된 Realm은 특정 스레드에 바인딩되는 대신SynchronizationContext
에 바인딩되며, 동일한 스레드에서 작업을 디스패치하는지 여부에 관계없이 에 바인딩됩니다.SynchronizationContext.Current
가 null(특히Task.Run(...)
)일 때 Realm 을 열면 여전히 Realm 이 열린 스레드로 제한됩니다.- 큰 바이너리 블롭을 Realm 파일에 저장해도 더 이상 파일 이 최소 8x 가장 큰 블롭 크기가 되지 않습니다.
- Realm 파일 내에 저장된 트랜잭션 로그의 크기를 줄여 대규모 트랜잭션으로 인한 파일 크기 증가를 줄입니다.
- string 프라이머리 키에 더 이상 별도의 인덱스가 필요하지 않으므로 조회 성능을 저하시키지 않으면서 삽입 및 삭제 성능을 개선할 수 있습니다.
고정
- 목록에 객체를 추가하는 동시에 목록이 포함된 객체 를 삭제할 때
Access to invalidated List object
가 발생하는 문제를 수정했습니다. (이슈 #1971) - 정렬 절이 있는 string 필터가 적용된 쿼리에서
.ElementAt()
를 사용할 때 잘못된 결과가 반환되는 문제를 수정했습니다. (PR #2002)
호환성
- Realm 객체 서버: 3.23.1 이상.
- Realm Studio: 5.0.0 이상.
내부
- 동기화 5.0.22 및 코어 6.0.25 사용.
4.3.0 (2020-02-05)
개선 사항
Credentials.CustomRefreshToken
를 통해 자격 증명을 생성할 때 사용자의userId
및isAdmin
를 구성하는 API를 노출했습니다. 이전에는 이러한 값이 JSON 웹 토큰 자체에서 유추되었지만 JSON 웹 토큰 페이로드의 필드 중userId
및isAdmin
필드를 나타내는 서버 구성을 시행할 방법이 없었으므로 이제는 소비자가 결정해야 합니다. 을(를) 클릭하여 해당 값을 결정합니다.- Apple 플랫폼의 SSL 문제에 대한 로깅 및 오류 처리가 개선되었습니다.
고정
- 이제 Realm 객체를
System.Runtime.Serialization.Formatters
및System.Xml.Serialization
직렬 변환기를 사용하여 올바르게 직렬화할 수 있습니다. (이슈 #1913) 클래스의 비공개 상태 필드가[NonSerialized]
및[XmlIgnore]
속성으로 장식되어 적극적 옵트아웃 직렬 변환기가 다음을 포함하는Realm
및ObjectSchema
와 같은 필드를 직렬화하려고 시도하지 않습니다. 관리되지 않는 데이터를 처리합니다. IList<string>
속성에[Required]
을 적용하면 컴파일 오류가 발생하는 문제를 수정했습니다. (제공: 브라우다보)- Realm NuGet 패키지가 포함된 프로젝트가 디버깅되지 않는 문제를 수정했습니다. (PR #1927)
- 변경 집합 통합에 실패한 후 동기화 클라이언트가 다시 연결하지 못했습니다. 이 버그로 인해 클라이언트의 Realm 파일이 더 손상될 수 있습니다. ( 3.0.0 이후).
- 문자열 기반 쿼리 구문 분석기(
results.Filter(...)
)에서는 역 역링크 속성을 쿼리할 때 클래스 이름에class_
접두사가 필요했습니다. 이 문제가 수정되어 공개ObjectSchema
이름만 필요합니다. 예를 예시@links.class_Person.Siblings
은@links.Person.Siblings
이 됩니다. ClientResyncMode.DiscardLocalRealm
이(가) 스키마 를 재설정하지 않는 문제를 수정했습니다.
호환성
- Realm 객체 서버: 3.23.1 이상.
내부
- 동기화를 4.7.5 에서 4.9.5 로, 코어를 5.23.3 에서 5 로 업그레이드했습니다.23.8.
4.2.0 (2019-10-07)
개선 사항
IRealmCollection
인터페이스에int IndexOf(object)
및bool Contains(object)
를 추가했습니다. (PR #1893)- 동기화 클라이언트 에서 세션 멀티플렉싱을 토글할 수 있는 API
SyncConfigurationBase.EnableSessionMultiplexing()
를 노출했습니다. (PR 1896) Realm.GetInstanceAsync
사용 시 더 빠른 초기 다운로드를 위한 지원이 추가되었습니다. (이슈 1847)- 진행 중인 다운로드 를 완전히 취소할 수 있도록
Realm.GetInstanceAsync
에 선택적cancellationToken
인수를 추가했습니다. (PR 1859) - 서버가 롤백될 경우 로컬 Realm을 자동으로 복구하는 클라이언트 재동기화에 대한 지원이 추가되었습니다. 이는 완전히 동기화된 Realm에 대한 클라이언트 재설정 메커니즘을 크게 대체합니다.
FullSyncConfiguration.ClientResyncMode
을(를) 사용하여 구성할 수 있습니다. (PR #1901) Credentials.UsernamePassword
의createUser
인수를 선택 사항으로 만들었습니다. 지정하지 않으면 사용자가 이미 존재하는 경우 사용자가 생성되거나 로그인됩니다. (PR #1901)- 다른 Fody 기반 프로젝트의 최신 버전과의 일부 호환성 문제를 해결하는 Fody 6.0.0 을 사용합니다. (이슈 #1899)
고정
RealmCollectionBase<T>.IndexOf
호출 시 무한 재귀가 수정되었습니다. (이슈 #1892)
호환성
- Realm 객체 서버: 3.23.1 이상.
내부
- 동기화가 4.7.0 에서 4.7.1 로 업그레이드되었습니다.
- 동기화 프록시를 우회하여 클라우드의 동기화 작업자에 대한 직접 액세스 를 구현했습니다: 영역 에 대한 토큰 새로 고침 응답에 동기화 작업자 경로 필드 가 포함된 경우 바인딩이 동기화 세션의 URL 접두사를 재정의합니다.
4.1.0 (2019-08-06)
호환성이 손상되는 변경
Credentials.Nickname
에서isAdmin
매개변수를 제거했습니다. 관리자 닉네임 사용자 로그인은 지원되지 않으므로 새 ROS 버전에는 영향을 미치지 않습니다. (이슈 #1879)Credentials.Nickname
메서드를 더 이상 사용되지 않는 것으로 표시 - 닉네임 인증 제공자 에 대한 지원 은 ROS에서 더 이상 사용되지 않으며 향후 버전에서 제거될 예정입니다. (이슈 #1879)false
를 전달해도 효과가 없으므로PermissionDeniedException.DeleteRealmInfo
에서deleteRealm
매개 변수를 제거했습니다. 이제 메서드를 호출하는 것은deleteRealm: true
을(를) 사용하여 호출하는 것과 동일합니다. (PR #1890)
개선 사항
- Windows용 영역 경로 및 파일 이름에 유니코드 문자에 대한 지원이 추가되었습니다. (코어 업그레이드)
- 사용자 지정 새로 고침 토큰으로 사용자를 만드는 데 사용할 수 있는 새 자격 증명 유형이 추가되었습니다:
Credentials.CustomRefreshToken
. 그런 다음 Realm 을 열 때 액세스 토큰을 얻기 위해 구성된refreshTokenValidators
에 대해 ROS의 유효성을 검사합니다. 이와 같은 사용자를 생성하는 경우 액세스 토큰을 얻을 수 있도록 토큰이 유효하고 필요에 따라 새로 고침되는지 확인하는 것은 개발자의 책임입니다. 이를 위해 이제User.RefreshToken = "my-new-token"
를 호출하여 사용자 객체 의 새로 고침 토큰을 설정하다 수 있습니다. 이는Credentials.CustomRefreshToken
을(를) 호출하여 얻은 사용자와 함께 사용해야 합니다. (PR #1889)
고정
- includeDescriptor를 구성하면 불필요한 테이블 비교가 이루어집니다. 이로 인해
includedBacklinks
을(를) 사용하여 쿼리 기반 구독(Subscription.Subscribe
)을 생성할 때 성능이 저하되었습니다. (코어 업그레이드) - 테이블 순서와 다른 순서를 가진 LinkList에 의해 제약을 받은 인덱싱된 int 열과 관련된 쿼리는 잘못된 결과를 초래할 수 있습니다. (코어 업그레이드)
- 인덱싱된 int 열과 관련된 쿼리를 여러 번 실행 하면 메모리 누수가 발생했습니다. (코어 업그레이드)
호환성
- Realm 객체 서버: 3.23.1 이상.
내부
- 동기화를 4.5.1 에서 4.7.0 로, 코어 5.20.0 를 5 로 업그레이드했습니다.23.1.
4.0.1 (2019-06-27)
고정
다음 오류로 인해 iOS 앱이 App Store 에 게시되지 않는 문제가 수정되었습니다.
이 번들은 Payload/.../Frameworks/realm-wrappers.framework가 유효하지 않습니다. Info.plist 파일에 필수 키인 CFBundleVersion이 누락되었습니다.
( 4.0.0 이후 문제 1870} )
iOS 앱 실행 시 기기에서 충돌이 발생하는 문제를 수정했습니다. ( 4.0.0 이후 문제 1871} )
4.0.0 (2019-06-13)
호환성이 손상되는 변경
- 다음과 같은 더 이상 사용되지 않는 메서드 및 클래스가 제거되었습니다.
SyncConfiguration
클래스가FullSyncConfiguration
및QueryBasedSyncConfiguration
로 분할 되었습니다. 이러한 클래스 중 하나를 사용하여 Realm 객체 서버에 연결합니다.TestingExtensions.SimulateProgress
메서드가 얼마 동안 작동하지 않아 제거되었습니다.Property.IsNullable
속성이 제거되었습니다. 속성이 null을 허용하는지 확인하려면Property.Type
에서PropertyType.Nullable
플래그를 확인합니다.Credentials.Provider
클래스가 제거되었습니다. 이전에는 주로 내부용으로 사용되는 몇 가지 상수를 포함했습니다.User.ConfigurePersistance
메서드가SyncConfigurationBase.Initialize
으)로 대체되었습니다.User.LogOut
User.LogOutAsync
을 위해 제거되었습니다.User.GetManagementRealm
User.ApplyPermissionsAsync
래퍼 API 설정하다 를 위해 제거되었습니다.User.GetPermissionRealm
User.GetGrantedPermissions
래퍼 API 를 위해 제거되었습니다.
IQueryable<T>.Subscribe(SubscriptionOptions options)
대신IQueryable<T>.Subscribe(string name)
확장 메서드를 사용하지 않습니다.- 권한 API 의 내부 구현 을 재작업했습니다. 대부분의 경우 메서드 서명이 변경되지 않았거나 변경된 부분은 API 가 원본에 가깝게 유지되었습니다(예:
IQueryable<T>
이(가)IEnumerable<T>
)로 변경되었습니다). (Issue #1863)User.GetGrantedPermissionsAsync
의 반환 유형을IQueryable<PathPermission>
에서IEnumerable<PathPermission>
로 변경했습니다. 이는 컬렉션 을 더 이상 일반 Realm 지원 컬렉션처럼 관찰할 수 없음을 의미합니다. 이 컬렉션 의 변경 사항에 대한 알림을 받아야 하는 경우 폴링 기반 메커니즘을 직접 구현 해야 합니다.PathPermission.MayRead/MayWrite/MayManage
더 일관된AccessLevel
API를 위해 더 이상 사용되지 않습니다.User.ApplyPermissionsAsync
에서realmUrl
매개 변수의 이름을realmPath
로 변경했습니다.User.OfferPermissionsAsync
에서realmUrl
매개 변수의 이름을realmPath
로 변경했습니다.PermissionOfferResponse
및PermissionChange
클래스를 제거했습니다.IPermissionObject
인터페이스를 제거했습니다.ManagementObjectStatus
열거형 을 제거했습니다.User.GetPermissionChanges
및User.GetPermissionOfferResponses
메서드를 제거했습니다.User.GetGrantedPermissionsAsync
의millisecondTimeout
인수가 제거되었습니다.PermissionException
클래스가HttpException
으)로 대체되었습니다.
AuthenticationException
클래스가HttpException
클래스로 병합되었습니다.
개선 사항
Realm 객체 서버와의 동기화를 일시 중지/재개할 수 있는
Session.Start()
및Session.Stop()
메서드가 추가되었습니다. (Issue #138)이름, TTL(Time To Live), 기존 구독 을 업데이트 할지 여부 등 구독 에 대한 추가 옵션을 구성할 수 있는
IQueryable<T>.Subscribe(SubscriptionOptions, params Expression<Func<T, IQueryable>>[] includedBacklinks)
확장 메서드가 추가되었습니다.includedBacklinks
인수를 사용하면 쿼리 기반 동기화 를 수행할 때 전이적 클로저에 포함해야 하는 역 역링크 속성을 지정할 수 있습니다. 예를 예시 다음과 같습니다.class Dog : RealmObject { public Person Owner { get; set; } } class Person : RealmObject { [Backlink(nameof(Dog.Owner))] public IQueryable<Dog> Dogs { get; } } var options = new SubscriptionOptions { Name = "adults", TimeToLive = TimeSpan.FromDays(1), ShouldUpdate = true }; var people = realm.All<Person>() .Where(p => p.Age > 18) .Subscribe(options, p => p.Dogs); await people.WaitForSynchronzationAsync(); // Dogs that have an owner set to a person that is over 18 // will now be included in the objects synchronized locally. var firstPersonDogs = people.Results.First().Dogs;
등록된 모든 쿼리 기반 동기화 구독의 컬렉션을 가져올 수 있는
Realm.GetAllSubscriptions()
확장 메서드가 추가되었습니다. (Issue #1838)이제 더 이상 사용되지 않는
MayRead/MayWrite/MayManage
을(를) 대체하기 위해PathPermission
에AccessLevel
속성을 추가했습니다. (Issue #1863)Realm의 소유자를 나타내는
RealmOwnerId
속성을PathPermission
에 추가했습니다. (Issue #1863)dotnet build
을 사용한 빌드에 대한 지원이 추가되었습니다(이전에는msbuild
명령줄만 지원됨). (PR #1849)쿼리에 긴 OR 조건 체인이 있는 경우 인덱싱되지 않은 string 열에 대한 쿼리 성능이 개선되었습니다. (코어 업그레이드)
hardware 에 최적화된 암호화 기능을 활용하여 암호화 및 복호화 성능이 크게 향상되었습니다. (코어 업그레이드)
Realm을 암호화된 파일로 압축하는 것은 시간이 정말 오래 걸릴 수 있습니다. 이제 프로세스는 Realm에서 사용된 공간에 비례하여 쓰기 버퍼 크기를 조정하여 최적화됩니다. (코어 업그레이드)
문자열 기반 쿼리 구문 분석기(
results.Filter("...")
)는 이제 원래 지원되었던 '@' 구분 기호 외에 'T' 구분 기호를 사용하여 읽을 수 있는 타임스탬프를 지원합니다. 예시:startDate > 1981-11-01T23:59:59:1
(코어 업그레이드)
고정
- LINQ 쿼리 내에서
StringExtensions.Contains(string, string, StringComparison)
확장 메서드를 사용하면 .NET Core 2.1+ 또는 Xamarin.iOS/Android에서 예외가 발생하는 문제를 수정합니다. projects.(Issue #1848) - int 프라이머리 키가 'null'인 객체를 생성한 후 객체를 생성하면 어설션이 실패합니다. (코어 업그레이드)
호환성
- Realm 객체 서버: 3.23.1 이상.
내부
- 동기화를 3.14.11 에서 4.5.1 로, 코어 5.12.7 를 5 로 업그레이드했습니다.20.0.
3.4.0 (2019-01-09)
참고! Realm Object MongoDB Server 를 버전 3.11.0 이상으로 업그레이드하거나 Realm Cloud를 사용해야 합니다. ROS v3.10.x 또는 이전 버전에 연결하려고 하면 Wrong protocol version in Sync HTTP request, client protocol version = 25, server protocol version = 24
와 같은 오류가 표시됩니다.
개선 사항
- 이제 로컬 변경 사항이 없는 경우에도 다운로드 진행률이 서버에 보고됩니다. 이를 통해 서버는 특히 로컬 변경을 거의 수행하지 않거나 전혀 하지 않는 클라이언트가 많은 경우 훨씬 더 적극적으로 기록 압축을 수행할 수 있습니다. (#1772)
- ROS에서 전송한 동기화된 변경 사항을 통합할 때 메모리 사용량을 줄입니다.
SyncConfigurationBase.CustomLogger
을(를) 지정하여 동기화에서 발생한 로그를 처리하기 위한 사용자 지정 로그 함수를 제공하는 기능 이 추가되었습니다. 동기화된 Realm 을 열기 전에 설정하다 해야 합니다. (#1824)- 이제 25 프로토콜을 사용하는 클라이언트는 로컬 변경을 수행하지 않더라도 다운로드 진행 상황을 서버에 보고합니다. 이를 통해 서버는 특히 로컬 변경을 거의 수행하지 않거나 전혀 하지 않는 클라이언트가 많은 경우 훨씬 더 적극적으로 기록 압축을 수행할 수 있습니다. (#1772)
- Object MongoDB Server에 대한 요청에 User-Agent 헤더를 추가합니다.HTTP Realm 기본적으로 여기에는 Realm 라이브러리 버전 및 .NET 플랫폼에 대한 정보가 포함되어 있습니다. 동기화된 Realm을 열기 전에
SyncConfigurationBase.UserAgent
를 설정하여 추가 세부 정보(예: 애플리케이션 이름/버전)를 제공할 수 있습니다. Xamarin 앱을 개발하는 경우 Xamarin.Essentials 플러그인을 사용하여 다음을 자동화할 수 있습니다:SyncConfiguration.UserAgent = $"{AppInfo.Name} ({AppInfo.PackageName} {AppInfo.VersionString})"
.
고정
Assertion failed: ndx < size() with (ndx, size()) = [742, 742]
과 같은 메시지와 함께 충돌을 일으킬 수 있는 버그가 수정되었습니다.SyncConfigurationBase.LogLevel
를 설정할 때 동기화에 잘못된LogLevel
가 전송되는 버그를 수정했습니다. (#1824, 이후 2.2.0)QueryBasedSyncConfiguration
과 함께 사용할 때Realm.GetInstanceAsync
이 작동하지 않는 버그가 수정되었습니다. (#1827, 이후 3.1.0)
호환성이 손상되는 변경
- 이 버전에서는 더 이상 사용되지 않는 메서드
realm.SubscribeToObjectsAsync
이(가) 제거되었습니다. (#1772) User.ConfigurePersistence
SyncConfigurationBase.Initialize
로 인해 더 이상 사용되지 않습니다.
호환성
- Realm 객체 서버: 3.11.0 이상. 동기화 프로토콜 버전이 25 버전으로 상향되었습니다. 서버 는 프로토콜 버전 24 이하를 사용하는 클라이언트와 이전 버전과 호환되지만, 버전 25 의 클라이언트는 프로토콜 버전 24 의 서버 와 이전 버전과 호환되지 않습니다. 클라이언트를 업그레이드하기 전에 서버 를 업그레이드해야 합니다.
내부
- 동기화를 3.9.2 에서 3.14.11 로, 코어를 5.8.0 에서 5 로 업그레이드했습니다.12.7.
3.3.0 (2018-11-08)
개선 사항
SyncConfigurationBase
에OnProgress
속성 을 노출했습니다. 이를 통해Realm.GetInstanceAsync
를 사용하여 다운로드 진행률을 보고할 때 호출될 진행률 콜백 을 지정할 수 있습니다. (#1807)
고정
- 이전에는 백그라운드 스레드(
SynchronizationContext
없이)에서Subscription.WaitForSynchronizationAsync
를 호출하려고 하면 무기한 중단되었습니다. 이제 의미 있는 예외가 발생하여 이것이 지원되지 않으며 이 메서드는 동기화 컨텍스트가 있는 스레드에서 호출되어야 함을 나타냅니다. (dotnet-private#130, 이후 v3.0.0)
호환성
- Realm 객체 서버: 3.0.0 이상.
- API는 3.xy 시리즈의 모든 이전 릴리스와 하위 호환됩니다.
- 파일 형식: v9 형식의 Realms를 생성합니다(이전 형식을 모두 읽고 업그레이드).
3.2.1 (2018-09-27)
버그 수정
- 쿼리를 구독할 때 일반적으로
An unknown error has occurred. State: *some-number-larger than 127*
와 같은 메시지와 함께 예외가 발생하는 버그가 수정되었습니다. (dotnet-private#128, 이후3.0.0
)
3.2.0 (2018-08-04)
개선 사항
RealmObject
상속자는 이제 Realm에서 제거된 후PropertyChanged
를 발생시킵니다. 이벤트 인수의 속성 이름은IsValid
입니다.- Linux에 몇 가지 공통 인증 기관을 번들로 제공하면 대부분의 인증서에서 SSL을 통해 ROS 인스턴스에 연결하는 것이 바로 작동하도록 할 수 있습니다. 특히 이제 Realm Cloud 인스턴스에서 즉시 작동합니다.
버그 수정
- 유효하지 않거나 관리되지 않는 RealmObject를 비교하는 쿼리를 구성할 때(예:
realm.All<Foo>().Where(f => f.Bar == someBar)
), 이제 모호한 ArgumentNullException이 아닌 의미 있는 예외가 발생합니다. - 라이브러리의 PCL 버전에
ShouldCompactOnLaunch
를 추가했습니다. (dotnet-private#125)
3.1.0 (2018-07-04)
개선 사항
- 컬렉션의 새 버전에서 변경된 객체의 인덱스에 대한 정보가 포함된
ChangeSet.NewModifiedIndices
컬렉션 을 노출 컬렉션 (즉, 삽입 및 삭제를 고려한 후). - Fody를 3.0 으로 업데이트합니다.
버그 수정
WriteAsync
더 이상 메인 스레드에서 동기식Refresh
를 수행하지 않습니다. (#1729)- managed Realm 객체를 동일한 디스크 Realm 의 다른 인스턴스 에 추가하려고해도 더 이상 예외가 발생하지 않습니다.
- Realm 컬렉션에 대한
IList
컴플라이언스 를 제거했습니다. This fixes an issue which would cause the app to hang on Android when deselecting an item from a ListView bound to a Realm collection.
호환성이 손상되는 변경
SyncConfiguration
은(는) 더 이상 사용되지 않으며 향후 버전에서 제거될 예정입니다. 두 개의 새로운 구성 클래스( QueryBasedSyncConfiguration 및 FullSyncConfiguration)가 노출되었습니다.SyncConfiguration
를IsPartial = true
과 함께 사용하고 있었다면QueryBasedSyncConfiguration
를 사용하도록 코드를 변경하세요. 마찬가지로IsPartial
이 설정되지 않았거나false
로 설정된 경우FullSyncConfiguration
을 사용합니다.- Realm 컬렉션에 대한
IList
컴플라이언스 를 제거했습니다. 이렇게 하면 UWP 프로젝트의 Realm 컬렉션에 바인딩된 ListViews의 자동 업데이트가 방지됩니다.
3.0.0 (2018-04-16)
개선 사항
- 클래스에
[MapTo]
을 적용하여 해당 클래스에 해당하는 테이블의 이름을 변경하도록 허용합니다. (#1712) - 부분적으로 동기화된 Realms에 구독을 추가하기 위한 향상된 API가 추가되었습니다.
IQueryable<T>.Subscribe
를 사용하여 모든 쿼리를 구독할 수 있으며, 반환된Subscription<T>
객체를 사용하여 구독 상태를 관찰하여 궁극적으로 구독을 제거할 수 있습니다. 자세한 내용은 설명서 를 참조하세요. (#1679) - 부분적으로 동기화된 Realm과 함께 사용할 수 있도록 세분화된 권한 시스템이 추가되었습니다. 이를 통해 개별 객체 또는 클래스 수준에서 권한을 정의할 수 있습니다. 자세한 내용은 설명서 를 참조하세요. (#1714)
- 다음과 같은 고급 쿼리 시나리오를 활성화 문자열 기반
IQueryable<T>.Filter(predicate)
메서드를 노출했습니다.- 다음 링크:
realm.All<Dog>().Filter("Owner.FirstName BEGINSWITH 'J'")
. - 컬렉션에 대한 쿼리:
realm.All<Child>().Filter("Parents.FirstName BEGINSWITH 'J'")
- 이름이 J 로 시작하는 부모가 있는 모든 자식 찾기 또는realm.All<Child>().Filter("Parents.@avg.Age > 50")
- 부모의 평균 연령이 50 이상인 모든 자식을 찾습니다. - 하위 쿼리:
realm.All<Person>().Filter("SUBQUERY(Dogs, $dog, $dog.Vaccinated == false).@count > 3")
- 예방 접종을 하지 않은 개를 3 개 이상 키우는 모든 사람을 찾습니다. - 정렬:
realm.All<Dog>().Filter("TRUEPREDICATE SORT(Owner.FirstName ASC, Age DESC)")
- 모든 개를 찾아 주인의 이름을 기준으로 오름차순으로 정렬한 다음 개 나이를 기준으로 내림차순으로 정렬합니다. - Distinct:
realm.All<Dog>().Filter("TRUEPREDICATE DISTINCT(Age) SORT(Name)")
- 모든 개를 찾아 이름별로 정렬한 다음 각 연령 값에 대해 한 마리의 개를 선택합니다. - 더 많은 예제를 보려면 쿼리 언어 참조 Docs 또는 NSPredicate 치트시트 를 확인하세요.
- 다음 링크:
- 이제
SyncConfiguration
생성자가 상대 URI를 허용합니다. (#1720) - 사용자의 비밀번호를 재설정하고 이메일 을 확인할 수 있는
RequestPasswordResetAsync
,CompletePasswordResetAsync
,RequestEmailConfirmationAsync
및ConfirmEmailAsync
메서드가 추가되었습니다. 이 모든 것은Credentials.UsernamePassword
를 통해 생성된 사용자 중 이메일 을 사용자 이름 으로 제공한 사용자에게만 적용 됩니다. (#1721)
버그 수정
- 스레드 세이프 참조를 해결할 때 Android 기기에서 교착 상태를 일으킬 수 있는 버그가 수정되었습니다. (#1708)
호환성이 손상되는 변경
- ROS 2.x와 호환되지 않는 동기화 3.0 클라이언트 를 사용합니다.
Permission
목적을 더 잘 반영하기 위해PathPermission
으)로 이름을 변경했습니다. 또한 기존 권한 수정 방법은 전체 Realm에서만 작동합니다. 부분적으로 동기화된 Realm 에 액세스 를 구성하기 위해 새로운 메서드와 클래스가 도입되었습니다.- 모든 하위 클래스를 기본값으로 설정할 수 있도록
RealmConfiguration.DefaultConfiguration
유형이RealmConfigurationBase
로 변경되었습니다. (#1720) - 이제
SyncConfiguration
생성자 인수는 선택 사항입니다.user
값은 현재 로그인한 사용자로 기본값 설정되고serverUri
값은 기본값 으로realm://MY-SERVER-URL/default
로 설정되며, 여기서MY-SERVER-URL
는 사용자가 인증된 호스팅하다 입니다. (#1720) User.LoginAsync(credentials, serverUrl)
및User.GetLoggedInUser(identity, serverUrl)
의serverUrl
인수는 일관성을 위해serverUri
로 이름이 변경되었습니다. (#1721)
2.2.0 (2017-03-22)
개선 사항
RealmConfigurationBase
에IsDynamic
속성을 추가하여 Realm 파일을 열고 디스크에서 해당 스키마를 읽을 수 있습니다. (#1637)- 인메모리 Realm 인스턴스 를 만들 수 있는 새로운
InMemoryConfiguration
클래스가 추가되었습니다. (#1638) - 목록의 요소를 직접 설정하도록 허용 - 예
foo.Bars[2] = new Bar()
또는foo.Integers[3] = 5
. (#1641) - JSON web token (JSON web token) 자격 증명 제공자 가 추가되었습니다. (#1655)
- 익명 및 닉네임 자격 증명 제공자가 추가되었습니다. (#1671)
버그 수정
- 초기 컬렉션 변경 알림이 모든 구독자에게 전달되지 않는 문제를 수정했습니다. (#1696)
- Realm에서 더 이상 관리하지 않는 객체에 대해
RealmObject.Equals
가true
을 반환하는 코너 케이스를 수정했습니다. (#1698)
호환성이 손상되는 변경
SyncConfiguration.SetFeatureToken
는 더 이상 사용되지 않으며 Linux 또는 서버 측 기능에서 동기화를 사용하는 데 더 이상 필요하지 않습니다. (#1703)
2.1.0 (2017-11-13)
개선 사항
- 클래스 또는 어셈블리에 적용할 수 있는
[Explicit]
특성이 추가되었습니다. 클래스에 장식이 있는 경우 Realm의 기본 스키마에 포함되지 않습니다(예: 즉, 해당 클래스가 포함된 배열에RealmConfiguration.ObjectClasses
을(를) 명시적으로 설정해야 합니다. 마찬가지로 어셈블리에 적용되는 경우 해당 어셈블리의 모든 클래스는 명시적 클래스로 간주됩니다. 이는 내부 클래스가 사용자의 스키마로 유출되는 것을 방지하기 위해 Realm에 의존하는 3타사 라이브러리를 개발할 때 유용합니다. (#1602)
버그 수정
- 관련 객체 가 null인지 확인하는 쿼리를 작성할 수 없는 버그가 수정되었습니다.
realm.All<Dog>().Where(d => d.Owner == null)
. (#1601) - Addressed an issue that would cause the debugger to report an unobserved exception being thrown when "Just My Code" is disabled. (#1603)
- 동기화된 Realm 에서
Realm.DeleteRealm
을(를) 호출하면 이제realm.management
폴더가 올바르게 삭제 됩니다. (#1621) - 동적 스키마 로 열린 Realm의 객체(예: 마이그레이션)에서 기본 목록 속성에 액세스할 때 발생하는 충돌을 수정했습니다. (#1629)
2.0.0 (2017-10-17)
개선 사항
- 기본 값 컬렉션에 대한 지원 이 추가되었습니다. 이제 속성을
IList<T>
으로 정의할 수 있으며, 여기서T
은 다른IList
를 제외하고 Realm 에서 지원하는 모든 유형이 될 수 있습니다. 결과적으로 이전에RealmObject
에 대한 제약 조건이 있던 많은 메서드가 이제 모든 유형을 허용하며 지원되지 않는 유형 인수와 함께 사용할 경우 런타임 예외가 발생할 수 있습니다. (#1517) - 대부분의 Realm 예외에 문서의 관련 섹션을 가리키는
HelpLink
추가. (#1521) - 현재 객체를 참조하는 모든 객체를 동적으로 가져오는
RealmObject.GetBacklinks
API가 추가되었습니다. (#1533) - 새로운 예외 유형인
PermissionDeniedException
을 추가하여 메서드(DeleteRealmUserInfo
를 노출하는 동기화된 Realm으로 작업할 때 권한 거부 오류를 표시하여 문제가 되는 Realm의 파일을 즉시 보관하거나 삭제해야 함을 바인딩에 알립니다. 이를 통해 권한 거부 오류를 보다 강력한 방식으로 복구 할 수 있습니다. (#1543) - Apple 플랫폼에서 동기화 관련 메타데이터의 암호화 키를 관리하기 위해 Realm이 사용하는 키체인 서비스 이름이 이제 번들 식별자로 설정됩니다. 이전에 Realm별 키체인 서비스에 저장된 키는 애플리케이션별 키체인 서비스로 투명하게 마이그레이션됩니다. (#1522)
- 레거시(1.x)에서 데이터 마이그레이션 을 처리하다 하고 수행할 수 있는 새로운 예외 유형(
IncompatibleSyncedFileException
)이 추가되었습니다. Realm 파일 을 새 2.x 형식.Realm.GetInstance
또는Realm.GetInstanceAsync
를 사용할 때 발생할 수 있으며 동적 모드 에서 이전 Realm 파일 을 열고 필요한 데이터를 마이그레이션 할 수 있는GetBackupRealmConfig
메서드를 노출합니다. (#1552) - Windows에서 암호화를 활성화합니다. (#1570)
- Windows에서 Realm 압축을 활성화합니다. (#1571)
UserInfo
크게 향상되었습니다. 이제 Realm 객체 서버에 저장된 사용자에 대한 메타데이터 데이터와 해당 사용자와 관련된 모든 사용자 계정 데이터 목록이 포함됩니다. (#1573)- 이제 더 이상 사용되지 않는 동기 호출을 대체하는 새로운 메서드(
User.LogOutAsync
가 도입되었습니다. (#1574) - 대일 또는 대다 관계 를 통해 현재 객체 를 참조하는 객체 수를 반환하는
RealmObject
에BacklinksCount
속성 이 노출되었습니다. (#1578) - string 기본 키는 이제
null
을 값으로 지원합니다. (#1579) - 부분 동기화를 위한 미리보기 지원 을 추가합니다. 부분 동기화를 사용하면 사용자가 요청한 객체만 장치에 동기화되는 방식으로 동기화된 Realm 을 열 수 있습니다.
SyncConfiguration
의IsPartial
속성 을 설정하고 Realm 을 연 다음 관심 있는 객체 유형으로 구독 하려는 객체를 결정하는 쿼리 가 포함된 string 로Realm.SubscribeToObjectsAsync
를 호출하여 사용할 수 있습니다. 대상 및 결과를 보고할 콜백 을 포함합니다. 동기화된 Realm 에 필요한 만큼 구독을 추가할 수 있습니다. (#1580) foreach
루프에서 반복할 때 Realm 컬렉션(IList<T>
,IQueryable<T>
)이 변경되지 않는지 확인합니다. (#1589)
버그 수정
Realm.GetInstance
이제 Realm을 최신 버전으로 업그레이드하므로 그 후에는 더 이상Refresh
를 수동으로 호출할 필요가 없습니다. (#1523)- iOS 공유 확장 프로그램 프로젝트가 작동하지 않는 문제를 수정했습니다. (#1535)
호환성이 손상되는 변경
Realm.CreateObject(string className)
이제 추가 매개변수object primaryKey
이(가) 있습니다. 동적 API를 사용하여 새 객체를 생성할 때 이를 전달 해야 합니다 . 생성하려는 객체에 프라이머리 키가 선언되어 있지 않은 경우null
을(를) 전달합니다. (#1381)AcceptPermissionOfferAsync
이제 사용자에게 권한이 부여된 Realm 의 절대 URL이 아닌 상대 URL을 반환합니다. (#1595)
1.6.0 (2017-08-14)
개선 사항
Realm.WriteCopy
API 를 노출하여 Realm 파일 을 복사하고 선택적으로 다른 키로 암호화합니다. (#1464)- 모든 Realm 컬렉션(
IQueryable<T>
및IList<T>
)의 런타임 표현은 이제 UWP 애플리케이션에서ListView
에 데이터 바인딩하는 데 필요한IList
인터페이스를 구현 합니다. (#1469) - 관리자가 Object MongoDB Server에서 다른 사용자의 ID를 조회할 수 있도록 를 노출했습니다.
User.RetrieveInfoForUserAsync
API Realm 예를 들어, Facebook ID를 알고 사용자를 찾는 데 사용할 수 있습니다. (#1486) - 스키마를 생성할 때 중복된 객체 이름이 없는지 확인하는 검사가 추가되었습니다. (#1502)
- 잘못된 URL 체계를
SyncConfiguration
또는User.LoginAsync
에 전달할 때 보다 포괄적인 오류 메시지를 추가했습니다. (#1501) Realm.GetInstanceAsync
에서 발생한 예외에 더 의미 있는 오류 정보를 추가했습니다. (#1503)- 새로운 유형(
RealmInteger<T>
을 추가하여 기본 통합 유형에 Realm별 API를 노출합니다. 동기화된 Realm에서 카운터 기능 을 구현하는 데 사용할 수 있습니다. (#1466) - 기존 및 신규 사용자에게 기본 권한을 적용하기 위해
PermissionCondition.Default
을 추가했습니다. (#1511)
버그 수정
- 쿼리 에서 상수가 아닌 문자 값을 비교할 때 예외가 발생하는 문제를 수정합니다. (#1471)
- 쿼리 에서 상수가 아닌 바이트 또는 짧은 값을 비교할 때 예외가 발생하는 문제를 수정합니다. (#1472)
- Realm의 IQueryable 결과에서 일반 버전이 아닌
IQueryProvider.CreateQuery
버전을 호출하면 예외가 발생하는 버그를 수정합니다. (#1487) - 이제 LINQ 쿼리 에서
IList
또는IQueryable
속성 을 사용하려고 하면 앱 이 충돌하지 않고NotSupportedException
가 발생합니다. (#1505)
호환성이 손상되는 변경
1.5.0 (2017-06-20)
개선 사항
- 권한 작업을 위해
User
클래스에 새 API를 노출했습니다: (#1361)ApplyPermissionsAsync
,OfferPermissionsAsync
및AcceptPermissionOfferAsync
를 사용하여 권한을 부여, 취소, 제공 및 수락할 수 있습니다.GetPermissionOffers
,GetPermissionOfferResponses
및GetPermissionChanges
를 사용하면 위에서 언급한 메서드를 통해 추가된 객체를 검토할 수 있습니다.GetGrantedPermissionsAsync
현재 사용자에게 또는 현재 사용자가 부여한 권한을 검사할 수 있습니다.
RealmConfiguration
와 함께 사용하는 경우(예: local Realm ),Realm.GetInstanceAsync
배경 스레드에서 마이그레이션 또는 압축 을 실행하는 등 잠재적으로 비용이 많이 드는 작업을 수행합니다. (#1406)- 관리자가 다른 사용자의 비밀번호를 변경할 수 있도록
User.ChangePasswordAsync(userId, password)
API 를 노출합니다. (#1412) SyncConfiguration.TrustedCAPath
API 를 노출하여 Realm Object MongoDB Server에 대한 SSL 트래픽의 유효성을 검사하는 데 사용할 사용자 지정 CA를 제공할 수 있습니다. (#1423)Realm.IsInTransaction
API 를 노출하여 해당 Realm 에 대한 활성 트랜잭션 이 있는지 확인합니다. (#1452)
버그 수정
[MapTo]
이 적용된 속성을 쿼리할 때 발생하는 충돌을 수정합니다. (#1405)- Realms가 열렸을 때 애플리케이션이 오프라인 상태였다가 나중에 네트워크 연결이 다시 시작된 경우와 같이 특정 상황에서 동기화된 Realms가 원격 서버에 연결되지 않던 문제를 수정합니다. (#1407)
- 실제 변경된 속성이
Backlink
속성 아래에 있는 경우RealmObject.PropertyChanged
구독자에게 잘못된 속성 이름이 전달되는 문제를 수정합니다. (#1433) - Realm을 실제로 사용하지 않고 PCL 테스트 어셈블리에서 참조할 때 예외가 발생하는 문제를 수정합니다. (#1434)
SyncConfiguration.EnableSSLValidation
이(가)Realm.GetInstanceAsync
으)로 전달될 때 무시되는 버그를 수정합니다. (#1423)
호환성이 손상되는 변경
PermissionChange
,PermissionOffer
및PermissionOfferResponse
의 생성자가 이제 비공개입니다. 새로운User.ApplyPermissionsAsync
,User.OfferPermissionsAsync
및User.AcceptPermissionOfferAsync
API를 사용합니다. (#1361)User.GetManagementRealm
및User.GetPermissionRealm
는 이제 더 이상 사용되지 않습니다.User
에서 새로운 권한 관련 API 를 사용해도 동일한 결과를 얻을 수 있습니다. (#1361)User.ChangePassword(password)
이(가)User.ChangePasswordAsync(password)
으)로 이름이 변경되었습니다. (#1412)- 사용되지 않는 다음 API 제거했습니다: (#1425)
Realm.ObjectForPrimaryKey<T>(long id)
Realm.ObjectForPrimaryKey<T>(string id)
Realm.ObjectForPrimaryKey(string className, long id)
Realm.ObjectForPrimaryKey(string className, string id)
Realm.Manage<T>(T obj, bool update)
Realm.Close()
Realm.CreateObject<T>()
IOrderedQueryable<T>.ToNotifyCollectionChanged<T>(Action<Exception> errorCallback)
IOrderedQueryable<T>.ToNotifyCollectionChanged<T>(Action<Exception> errorCallback, bool coalesceMultipleChangesIntoReset)
IRealmCollection<T>.ObjectSchema
Realm.DeleteRealm
이제 해당 Realm 의 인스턴스 가 아직 열려 있는 동안 호출되면 예외가 발생합니다.
1.4.0 (2017-05-19)
개선 사항
- 생성자는 객체 가 Realm 을 인식하기 전에 실행 되므로 초기화 목적으로 사용할 수 있는
RealmObject.OnManaged
가상 메서드를 노출합니다. (#1383) Realm.GetInstanceAsync
API 를 노출하여 동기화된 Realm 을 비동기적으로 엽니다. 배경 스레드에서 작업이 시작될 때 사용 가능한 모든 원격 콘텐츠를 다운로드 한 다음 사용 가능한 Realm 을 반환합니다. 또한 사용자에게 읽기 권한만 있는 Realm을 여는 유일한 방법이기도 합니다.
1.3.0 (2017-05-16)
범용 Windows 플랫폼
범용 Windows 플랫폼(UWP)용 Realm 모바일 데이터베이스를 소개합니다. UWP 지원 을 통해 이제 Windows 10 기반 하는 수백만 대의 모바일, PC, Xbox 장치에서 Realm의 객체 데이터베이스 를 사용하여 모바일 앱을 빌드 할 수 있습니다. UWP 지원 이 추가되면 .NET 개발자는 Windows 데스크톱(Win32) 또는 UWP를 사용하는 거의 모든 최신 Windows 플랫폼용 앱은 물론 Xamarin 을 통해 iOS 및 Android용 앱을 빌드 수 있습니다. 아직 UWP에 대한 동기화 지원 은 제공되지 않지만, 현재 작업 중이며 곧 지원할 수 있습니다.
개선 사항
- string 속성에 대한 대소문자를 구분하지 않는 쿼리는 이제 새로운 인덱스 기반 Atlas Search를 사용합니다. (#1380)
- Realm의 '비밀번호' 인증 제공자를 사용하는 경우
User.ChangePassword
API를 추가하여 현재 사용자의 비밀번호를 변경합니다. 모든 버전의 Realm Object MongoDB Server 1.4.0 이상이 필요합니다. (#1386) SyncConfiguration
이제 서버별로 SSL 유효성 검사를 지정할 수 있는EnableSSLValidation
속성(기본값:true
)이 있습니다. (#1387)- Realm을 구성할 때
RealmConfiguration.ShouldCompactOnLaunch
콜백 속성을 추가하여 반환되기 전에 압축해야 하는지 여부를 결정합니다. (#1389) - iOS에서 일부 무해한 링커 경고를 무음 처리합니다. (#1263)
- 네트워크 연결이 끊긴 경우 도달 가능성 API 를 사용하여 재연결 지연을 최소화합니다. (#1380)
버그 수정
Session.Reconnect
가 모든 세션을 다시 연결하지 않는 버그가 수정되었습니다. (#1380)PropertyChanged
을(를) 여러 번 구독할 때 발생하는 충돌을 수정했습니다. (#1380)- Object MongoDB Server에 다시 연결할 때 충돌이 수정되었습니다(#1380).
- Realm을 열 때 일부 Android 7 영역 기기에서 발생하는 충돌을 수정했습니다(#1380).
1.2.1 (2017-05-01)
버그 수정
- 일부 Android 기기에서
EntryPointNotFoundException
가 발생하는 문제를 수정했습니다. (#1336)
개선 사항
IRealmCollection.IsValid
을 노출하여 Realm 컬렉션을 사용할 수 있는지 여부를 나타냅니다. (#1344)- Mono 5 를 사용한 빌드에 대한 지원 을 추가하는 Fody 참조를 업데이트합니다. (#1364)
1.2.0 (2017-04-04)
Realm 은 이제 UWP를 지원하기 위한 요구 사항이므로 .NET Standard 1.4 라이브러리로 분산된 되고 있습니다. 내부적으로는 다소 큰 변화이지만 이를 사용하는 애플리케이션은 영향을 받지 않습니다. 업그레이드 후 여러 가지 새로운 NuGet 종속성이 추가되는 것을 볼 수 있습니다. 이는 이미 mscorlib의 일부인 참조 어셈블리이므로 애플리케이션의 크기나 성능에 영향을 주지 않습니다. 또한 속성 을 설정할 때 트랜잭션을 자동으로 생성하여 양방향 데이터 바인딩 시나리오를 활성화 하는 헬퍼 메서드가 포함된 새로운 플랫폼별 DataBinding 패키지 를 릴리스합니다.
업그레이드 후 문제가 발생하면 bin
및 obj
폴더를 Xamarin Studio를 다시 시작하는 것이 좋습니다. 그래도 문제가 해결되지 않으면 솔루션 설정 과 발생한 문제 유형을 설명하는 문제를 제출해 파일 .
이 버전으로 작성된 파일은 이전 버전의 Realm에서는 읽을 수 없습니다. 이 버전은 1.3.0보다 낮은 버전의 Realm Object MongoDB Server 와 호환되지 않습니다.
버그 수정
RemoveAll(string)
오버로드가 올바르게 작동하도록 수정합니다. (#1288)- 유효하지 않은 세션의 토큰을 새로 고칠 때 충돌이 발생하는 문제가 해결되었습니다. (#1289)
session.GetProgressObservable
에서 반환된IObservable
는mode: ProgressMode.ForCurrentlyOutstandingWork
으로 생성될 때OnComplete
를 올바르게 호출합니다. (#1292)- string 속성에 액세스할 때 메모리 누수가 수정되었습니다. (#1318)
- 동기화된 Realm과 함께
EncryptionKey
를 사용할 때 발생하는 문제를 수정합니다. (#1322)
개선 사항
- 스레드 간에 객체를 안전하게 전달하기 위한 API를 도입합니다. 스레드에 한정된 객체에 대한 스레드 세이프 참조를 생성하여
ThreadSafeReference.Create
팩토리 메서드에 전달한 다음 다른 스레드로 안전하게 전달하여Realm.ResolveReference
을 통해 새 영역에서 확인할 수 있습니다. (#1300) - 모든 세션 재연결을 시도하는 API를 도입합니다. 이는 연결 플러그인 과 함께 사용하여 내장된 재시도 메커니즘에 의존하는 대신 연결 변경 사항을 모니터링하고 사전에 재연결을 요청할 수 있습니다. (#1310)
- 일대일 관계 정렬을 활성화합니다.
realm.All<Parent>().OrderBy(p => p.Child.Age)
. (#1313) - 기본 데이터베이스 엔진 에 대한 LINQ 쿼리에 사용할 수 있는
string.Like
확장 메서드를 도입합니다. (#1311) - 사용자가 Realm Object MongoDB Server 관리자인지 여부를 나타내는
User.IsAdmin
속성을 추가합니다. (#1320)
호환성이 손상되는 변경
DateTimeOffset
설정되지 않은 속성은 이제 객체가 에 전달된 후0001-1-1
대신 로 올바르게 기본값이1970-1-1
realm.Add
설정됩니다. (#1293)- 범위 를 벗어난 인덱스 에서 항목을 가져오려고 하면 이제 모든
IRealmCollection
구현에 대해ArgumentOutOfRangeException
가 올바르게 발생합니다. (#1295) - .lock의 레이아웃 이는 서로 다른 프로세스가 동시에 동일한 Realm 파일에 쓰려고 시도하는 시나리오에 영향을 미칠 수 있습니다. (#1296)
PropertyChanged
알림 은 이전 메커니즘과 약간 다르게 동작하는 더 안정적이고 새로운 메커니즘을 사용합니다. 알림은 트랜잭션 이 커밋된 후에만 전송됩니다( 컬렉션 알림 이 처리되는 방식과 일관적인 하도록 함). UI 가 즉시 업데이트되도록 하려면 수명이 긴 트랜잭션을 유지하지 않아야 합니다. (#1316)
1.1.1 (2017-03-15)
버그 수정
- Visual Studio에서 iOS 으로 컴파일할 수 없는 문제를 해결했습니다. (#1277)
1.1.0 (2017-03-03)
개선 사항
- Azure AD( Azure Active Directory) 자격 증명 제공자 가 추가되었습니다. (#1254)
호환성이 손상되는 변경
UWP 지원을 추가하기 위한 준비 릴리스입니다. Realm 어셈블리에서 모든 플랫폼별 로직을 제거하고 대신 컴파일 타임에 구성합니다. 이는 모든 일반적인 시나리오에서 테스트되었지만 매우 복잡한 프로젝트 그래프에서 문제가 발생할 수 있습니다. iOS 프로젝트에서 이러한 문제가 발생하는 경우:
- 작업 실행 시 컴파일 실패
WeaveRealmAssemblies
- Realm에 처음 액세스할 때 앱이 충돌합니다.
문제를 파일 하고 솔루션 설정 에 대해 설명하세요.
1.0.4 (2017-02-21)
버그 수정
Realm
NuGet 패키지는 더 이상Realm.Database
의 Windows32 네이티브 바이너리 경로를 방해하지 않습니다. (#1239)- 구독자가
PropertyChanged
인 객체 가비지 수집으로 인해 충돌이 발생하는 버그가 수정되었습니다. (#1237)
1.0.3 (2017-02-14)
beta 종료!
약 1년 반의 노력 끝에 우리는 이를 1.0 릴리스라고 부르게 된 것을 자랑스럽게 생각합니다. 아직 해야 할 일이 있지만, 현재 수천 명의 개발자가 Realm Xamarin을 사용하고 있으며 안정성이 입증되었습니다.
동기화
Realm Xamarin 은 이제 Realm 모바일 플랫폼에서 작동합니다. 즉, Realm 객체 서버와 원활하게 동기화되는 Xamarin 앱을 쓰기 (write) 수 있으므로 코드 몇 줄만 추가하면 오프라인 우선이고 자동으로 동기화되는 복잡한 앱을 Xamarin 으로 쓰기 (write) 수 있습니다. 이에 대한 자세한 내용은 설명서 를 참조하세요.
Windows 데스크톱
Realm Xamarin은 더 이상 iOS 및 Android 전용이 아닙니다. 이제 이 도구를 사용하여 Windows 데스크톱용 .NET 프로그램을 작성할 수 있습니다. 일반 .NET 프로젝트에 NuGet 패키지를 추가하고 Realm 사용을 시작합니다. 일부 기능은 아직 Windows에서 지원되지 않습니다. 가장 주목할 만한 점은 아직 Windows에서 동기화가 작동하지 않지만 프로세스 간 암호화 및 알림도 누락되었다는 점입니다. 현재 작업 중이며 곧 지원을 받을 수 있습니다.
호환성이 손상되는 변경
IRealmCollection<T>.ObjectSchema
은 더 이상 사용되지 않으며ISchemaSource.ObjectSchema
으로 대체되었습니다. (#1216)
버그 수정
[MapTo]
이제 쿼리에서 속성이 존중됩니다. (#1219)- Realm 인스턴스를 폐기하는 대신 가비지 컬렉션을 사용하면 더 이상 충돌이 발생하지 않습니다. (#1212)
PropertyChanged
콜백 에서RealmObject.PropertyChanged
의 구독을 취소해도 더 이상 충돌이 발생하지 않습니다. (#1207)WriteAsync
이제 읽기 트랜잭션(read 트랜잭션 )을 진행하여 비동기적으로 변경된 내용을 원래 스레드에서 즉시 사용할 수 있습니다. (#1192)- 역 역링크 속성에 대한 쿼리가 더 이상 예기치 않은 결과를 생성하지 않습니다. (#1177)
0.82.1 (2017-01-27)
버그 수정
- Realm 인스턴스 를 가져오고 객체 를 읽은 다음 동일한 스레드에서 다른 인스턴스 를 가져오면 객체 가 유효하지 않게 되고 해당 멤버에 액세스할 때 애플리케이션 이 충돌하는 문제를 해결했습니다.
0.82.0 (2017-01-23)
호환성이 손상되는 변경
- 모든 예외를
Realms.Exceptions
네임스페이스 아래로 이동했습니다. (#1075) RealmSchema
를Realms.Schema
네임스페이스 로 이동했습니다. (#1075)ErrorEventArgs
생성자를 내부적으로 만들었습니다. (#1075)ObjectSchema.Builder
및RealmSchema.Builder
을 내부적으로 만들었습니다. (#1075)IList
속성이 있는 객체 를Add(obj, update: true)
에 전달해도 더 이상 목록이 병합되지 않습니다. 대신IList
속성 에는 객체 의 항목만 포함됩니다. (#1040)
개선 사항
- 현재 객체에 대한 변경 사항을 알리기 위해 재정의할 수 있는 가상
OnPropertyChanged
메서드가RealmObject
에 추가되었습니다. (#1047) - 올바른 속성 유형에
[Required]
이 적용되는지 컴파일 시간 검사가 추가되었습니다. (#1072) Realm.Add(RealmObject obj)
이제Realm.Add<T>(T obj)
과 유사하게 전달된 객체 를 반환합니다. (#1162)StringComparison
인수를 허용하고 쿼리에 사용할 수 있는string.Contains
에 대한 확장 메서드가 추가되었습니다. 쿼리할 때는StringComparison.Ordinal
와StringComparison.OrdinalIgnoreCase
만 사용할 수 있습니다. 쿼리에 사용되지 않는 경우StringComparison
의 모든 값이 유효합니다. (#1141)
버그 수정
- 액세스한 적이 없는
IList<T>
속성 이 있는 독립형 객체 를 Realm 에 추가해도 더 이상NullReferenceException
이 발생하지 않습니다. (#1040) IList<T>
속성은 이제 읽기 전용 Realm 에서 managed 할 때IsReadOnly = true
을 올바르게 반환합니다. (#1070)- 이제 위버가 PCL 및 넷표준 어셈블리의 참조를 올바르게 확인해야 합니다. (#1117)
- PCL 참조 어셈블리에 누락된 메서드를 추가합니다. (#1093)
- 삭제된 Realm은 멤버에 액세스하려고 할 때
ObjectDisposedException
을 발생시키지 않습니다. 또한 Realm을 삭제해도 동일한 스레드에 있는 다른 인스턴스가 무효화되지는 않습니다. (#1063)
0.81.0 (2016-12-14)
호환성이 손상되는 변경
- 매개 변수를 허용하는
IQueryable<T>.ToNotifyCollectionChanged
확장 메서드는 이제 더 이상 사용되지 않습니다. 대신 사용해야 하는 매개변수가 없는 새로운 매개변수가 있습니다. 오류를 처리하다 하려면Realm.OnError
이벤트 를 구독 하면 됩니다. (#938) RealmResults<T>
이제internal
로 표시되고Realm.All<T>()
은 대신IQueryable<T>
을 반환합니다. 알림을 구독할 수 있는 새로운 확장 메서드IQueryable<T>.SubscribeForNotifications(NotificationCallbackDelegate<T>)
을 추가했습니다. (#942)Realm.CreateObject<T>
은(는) 더 이상 사용되지 않으며 다음 주요 출시하다 에서 제거될 예정입니다. (클래스에 PrimaryKey가 있는 경우 곧 제공될 동기화된 Realm을 사용할 때 위험한 데이터 손실이 발생할 수 있습니다.) (#998)RealmConfiguration.ReadOnly
이름이RealmConfiguration.IsReadOnly
(으)로 변경되었으며 이제 필드가 아닌 속성입니다. (#858)Realm.All
이름이Realm.GetAll
(으)로 변경되었으며 전자는 더 이상 사용되지 않습니다. (#858)Realm.ObjectForPrimaryKey
이름이Realm.Find
(으)로 변경되었으며 전자는 더 이상 사용되지 않습니다. (#858)Realm.Manage
이름이Realm.Add
(으)로 변경되었으며 전자는 더 이상 사용되지 않습니다. (#858)RealmConfiguration.PathToRealm
이름이Realm.GetPathToRealm
(으)로 변경되었으며 전자는 더 이상 사용되지 않습니다. (#858)RealmResults.NotificationCallback
이(가) 중첩되지 않은 클래스로 추출되었으며 이름이NotificationCallbackDelegate
으)로 변경되었습니다. (#858)Realm.Close
Realm.Dispose
을 위해 제거되었습니다. (#858)RealmList<T>
이제internal
로 표시됩니다. 컬렉션 관계를 정의하려면IList<T>
를 사용해야 합니다. (#858)
개선 사항
- 데이터 바인딩 시나리오에서 쓰기 트랜잭션( 쓰기 트랜잭션 (write transaction)) 외부의 바인딩에 의해 세터가 호출되면 암시적 바인딩을 만들어 커밋 합니다. 이를 통해 수명이 긴 트랜잭션을 유지하지 않고도 양방향 데이터 바인딩이 가능합니다. (#901)
- 이제 Realm 스키마 는 새로운
[Required]
속성을 사용하여 Express 이 아닌 참조 유형 속성을 표현할 수 있습니다. (#349) - 사용자 코드 외부에서 발생하는 예외에 대한 알림을 받기 위해 구독 할 수 있는 새로운
Realm.Error
이벤트 를 노출했습니다. (#938) Realm.All
에서 반환된 컬렉션 의 런타임 유형과RealmObject
의IList<T>
속성에 대해 생성된 컬렉션 이 이제INotifyCollectionChanged
을 구현 하므로 추가 캐스팅 없이 데이터 바인딩을 위해 이를 전달할 수 있습니다. (#938, #909)- 모든 RealmObjects는
INotifyPropertyChanged
를 구현합니다. 이를 통해 데이터 바인딩을 위해 직접 전달할 수 있습니다. - Realm 에서 사용하는 공간을 회수할 수 있는
Realm.Compact
메서드가 추가되었습니다. (#968) Realm.Add
추가된 객체를 반환합니다. (#931)- 역링크(
LinkingObjects
를 지원합니다. (#219) - 컬렉션 내 요소의 순서를 변경할 수 있는
IList<T>.Move
확장 메서드가 추가되었습니다. 관리되는 목록의 경우 네이티브 메서드를 호출하므로 항목을 제거하고 삽입하는 것보다 약간 더 효율적이지만 더 중요한 점은CollectionChanged
을(를)NotifyCollectionChangedAction.Move
)로 발생시켜 멋진 이동 애니메이션을 만드는 것이 아니라 ListView를 다시 로드합니다. (#995)
버그 수정
- RealmObject에서
PropertyChanged
를 구독하고 다른 스레드에서 동일한 객체 의 인스턴스 를 수정하면 이제 이벤트 가 올바르게 발생합니다. (#909) Insert
를 사용하여IList
속성의 끝에 항목을 삽입해도 더 이상 예외가 발생하지 않습니다. (#978)
0.80.0 (2016-10-27)
호환성이 손상되는 변경
- 이 버전은 파일 형식을 업데이트합니다. 이전 버전에서는 이 버전으로 만든 파일을 열 수 없습니다. (#846)
RealmList<T>
이제 내부로 표시됩니다. 어디에서나 사용하고 있었다면IList<T>
으)로 마이그레이션해야 합니다. (#880)
개선 사항
iOS 연결이 모두 작동해야 함 - 이제
RealmObject
하위 클래스의 모든 직조 멤버에 [보존] 속성을 추가하므로[Preserve(allMembers=true)]
(#822)을(를) 수동으로 추가할 필요가 없습니다.Realm.Manage
이제 호출 속도가 훨씬 빨라졌습니다. 일부 속성만 설정하고 나머지는 기본값 유지하지 않는 한Realm.CreateObject
보다 이 속성을 선호해야 합니다. (#857)Realm.Manage
에bool update
인수를 추가했습니다.update: true
가 전달되면 Realm은 동일한 프라이머리 키를 가진 지속형 객체를 찾아 업데이트하려고 시도합니다. 동일한 PrimaryKey를 가진 객체를 찾을 수 없는 경우 이름이 지정되지 않은 객체가 추가됩니다. 전달된 객체에 프라이머리 키가 없으면 추가됩니다. 모든 관련 객체는 프라이머리 키가 있는지 여부에 따라 추가되거나 업데이트됩니다. (#871)참고: 객체 참조가 동일하지 않은 주기적 관계는 조정되지 않습니다. 예를 들어 다음과 같이 예상대로 작동합니다.
var person = new Person { Name = "Peter", Id = 1 }; person.Dog = new Dog(); person.Dog.Owner = person;
그러나 이는 그렇지 않습니다 - Person의 속성을 마지막으로 본 인스턴스의 속성으로 설정합니다.
var person = new Person { Name = "Peter", Id = 1 }; person.Dog = new Dog(); person.Dog.Owner = new Person { Id = 1 };
이는 는 같지만 속성이 다른 객체 인스턴스가 여러 JSON ID 개 있을 수 있는 에서 데이터를 역직렬화할 때 중요합니다.
Realm.Manage
은(는) 관리 객체가 전달되더라도 더 이상 예외를 발생시키지 않습니다. 대신 즉시 반환됩니다. (#871)Realm.Manage
의 일반 버전이 추가되었습니다. (#871)null 허용 정수 PrimaryKey에 대한 지원 이 추가되었습니다. 이제
null
이 유효한 고유 값인long?
PrimaryKey 속성 을 가질 수 있습니다. (#877)Realm 속성을 적용할 때 위버 경고가 추가되었습니다(예:
[Indexed]
또는[PrimaryKey]
)가 지속되지 않는 속성에 적용됩니다. (#882)LINQ의 영역 객체에 대한
==
및!=
비교에 대한 지원이 추가되었습니다(#896), 예:var peter = realm.All<Person>().FirstOrDefault(d => d.Name == "Peter"); var petersDogs = realm.All<Dog>().Where(d => d.Owner == peter);
LINQ에서
StartsWith(string, StringComparison)
,EndsWith(string, StringComparison)
및Equals(string, StringComparison)
필터링에 대한 지원 이 추가되었습니다. (#893)참고: 현재
Ordinal
및OrdinalIgnoreCase
비교만 지원됩니다. 다른 항목을 전달하려고 하면 런타임 오류가 발생합니다. 인수를 제공하지 않으면Ordinal
가 사용됩니다.
0.78.1 (2016-09-15)
버그 수정
Realm.ObjectForPrimaryKey()
이제 객체 를 찾지 못하면 null을 반환합니다(#833).- 지속형 속성 이외의 것을 쿼리하면 충돌이 발생하지 않고 오류가 발생합니다(#251 및 #723).
코어 1.5.1사용
0.78.0 (2016-09-09)
호환성이 손상되는 변경
ObjectId
라는 용어는 다른 SDK와 일치하도록PrimaryKey
로 대체되었습니다. 이는 속성을 장식하는 데 사용되는[ObjectId]
속성에 영향을 줍니다.
개선 사항
[PrimaryKey]
속성 이 지정된 경우Realm.ObjectForPrimaryKey()
를 사용하여 단일 객체를 빠르게 조회 할 수 있습니다. (#402)- 이제 수동 마이그레이션이 지원됩니다. 데이터 모델 을 업데이트할 때 데이터를 마이그레이션하는 방법을 정확히 지정할 수 있습니다. (#545)
- 표현식의 반대편에 있는 정수 유형이 속성의 정수 유형과 정확히 일치하지 않는 경우 LINQ 검색에서 더 이상
NotSupportedException
이(가) 발생하지 않습니다. - 이제 추가 LINQ 메서드가 지원됩니다: (#802)
- 마지막
- LastOrDefault
- FirstOrDefault
- SingleOrDefault
- ElementAt
- ElementAtOrDefault
버그 수정
- 이제 문자 필드 유형 검색이 작동합니다. (#708)
- 이제
RealmObject
하위 클래스 선언을 변경하고SchemaVersion
를 증가시키지 않은 경우 RealmMigrationSchemaNeededException이 발생합니다(#518). Transaction
ObjectDisposedException
Realm
해당 가 가비지 수집된 경우(#779) 을(를) 처리하면 이(가) 발생하는 버그가 수정되었습니다.IndexOutOfRangeException
가 발생하는 예외를ArgumentOutOfRangeException
으)로 수정했습니다.
코어 1.5.1사용
0.77.2 (2016-08-11)
개선 사항
- 빌드 상세 도를
Detailed
또는Normal
로 설정하면 이제 모든 속성 wove에 대한 메시지가 표시되며, 이는 Fody weaving에 오류가 의심되는 경우 유용할 수 있습니다. - 더 나은 예외 메시지를 통해 EmptySchema 문제(#739)를 진단할 수 있습니다.
- LINQ 표현식의 부분 평가는 더 많은 표현식 유형이 이진 표현식(#755)에서 피연산자로 지원된다는 것을 의미합니다.
string
,byte[]
및Nullable<T>
속성에 대해null
을 확인하는 LINQ 쿼리를 지원합니다.- LINQ 쿼리의 지속형 속성에 대한
string.IsNullOrEmpty
를 지원합니다. - 스키마 구성이 간소화되어 Realm 을 열 때 오버헤드 를 줄였습니다.
- 스키마 버전 번호가 이제 UInt64 가 아닌 0 에서 시작합니다. MaxValue
버그 수정
RealmResults<T>
IQueryable.Provider
을(를) 암시적으로 구현 해야 합니다(#752).- 암시적으로 닫히는 Realm은 더 이상 다른 인스턴스를 무효화하지 않습니다(#746).
코어 1.4.2사용
0.77.1 (2016-07-25)
사소한 변경 사항
- v0.77.0 에서 릴리스된 순수 PCL 프로젝트 위빙 버그가 수정되었습니다. (#715)
- LINQ에서 호환되지 않는 인수를 사용하여 발생한 예외 메시지에 이제 문제가 되는 인수(#719)가 포함됩니다.
- ToNotifyCollectionChanged를 사용하는 PCL 프로젝트는 PCL 서명과 플랫폼 빌드 간의 불일치로 인해 충돌할 수 있습니다.
코어 1.4.0사용
0.77.0 (2016-07-18)
손상된 버전 - PCL 프로젝트를 빌드하지 않습니다.
호환성이 손상되는 변경
- 이전 버전의 정렬 순서 변경 사항이 되돌려졌습니다.
주요 변경 사항
- 이제 Realm 의 스키마 를 인트로스펙션할 수 있습니다. (#645)
- Realm 클래스가 일반 매개변수 대신 string 인수를 허용하는
Realm.CreateObject
및Realm.All
에 대한 오버로드를 수신하여 컴파일 타임에 정확한 유형을 알 수 없는 객체에dynamic
키워드를 사용할 수 있게 되었습니다. (#646) - 이제
RealmList<DestClass>
IList<DestClass>
을 사용하여 To Many 관계를 선언할 수 있습니다. 이는 목록 캐싱으로 인해RealmList
를 사용하는 것보다 훨씬 빠릅니다 . (이슈 #287) - 이제 관련 객체 목록을 사용하여 독립형 객체를 만들 수 있습니다. 이러한 객체 를
Realm.Manage
으)로 전달하면 해당 객체 에서 아래로 전체 객체 그래프 가 managed 대상이 됩니다.
사소한 변경 사항
- 많은 단기 Realm을 병렬로 매우 빠르게 생성할 때 iOS에서 충돌을 수정했습니다(이슈 #653).
RealmObject.IsValid
관리 객체가 삭제되었는지 확인하기 위해 호출할 수 있습니다.- 유효하지 않은 객체의 속성에 액세스하면 segfault(#662)로 인해 충돌하지 않고 예외가 발생합니다.
- Realm 을 생성할 때 발생한 예외로 인해 더 이상 처리하다 이 유출되지 않습니다(이슈 #503).
코어 1.4.0사용
0.76.1 (2016-06-15)
사소한 변경 사항
Realm
정적 생성자는 현재AppDomain
에 활성System.Reflection.Emit.AssemblyBuilder
이 있는 경우 더 이상TypeLoadException
을 발생시키지 않습니다.- iOS 기기에서 알림 API를 사용할 때 발생하는
Attempting to JIT compile
예외를 수정했습니다. (이슈 #620)
호환성이 손상되는 변경
API 는 변경되지 않지만 악센트 문자가 함께 그룹화되고 일부 특수 문자가 다르게 정렬되어 정렬 순서가 약간 변경됩니다. 이제 '1/3'이 '1/3'보다 먼저 정렬됩니다.
ftp://ftp.unicode.org/Public/UCA/latest/allkeys.txt의 테이블을 사용합니다.
시각적으로 동일해 보이는 모든 문자를 그룹화합니다. 예를 들어, 덴마크에서는 á가 마지막에 와야 하기 때문에 이는 결함입니다. 그러나 국가 및 언어 설정을 더 잘 인식할 수 있을 때까지 지금 우리가 할 수 있는 최선의 방법입니다.
코어 1.1.2사용
0.76.0 (2016-06-09)
주요 변경 사항
RealmObject
이제 클래스에 인터페이스를 지정하면 클래스가 암시적으로INotifyPropertyChanged
를 구현 합니다. 이 기여에 대해 Joe Block 에게 감사드립니다!
사소한 변경 사항
long
쿼리에서 지원됩니다(이슈 #607).System.String System.String::Format(System.IFormatProvider,System.String,System.Object)
에 대한 링커 오류가 수정되었습니다(이슈 #591).RealmObject
의 두 번째 수준 하위 항목과RealmObject
클래스의 정적 속성으로 인해 이제 위버가 (아직) 해당 오류를 지원하지 않으므로 오류를 올바르게 보고할 수 있습니다. (이슈 #603)- 독립형 객체에서
.Equals()
을(를) 호출해도 더 이상 오류가 발생하지 않습니다. (이슈 #587)
0.75.0 (2016-06-02)
호환성이 손상되는 변경
- Realm 파일의 파일 형식이 변경되었습니다. 파일은 자동으로 업그레이드되지만 이전 버전의 Realm 에서는 Realm 파일 을 열 수 없습니다. 참고: 이전 형식으로 지정된 Realm 브라우저를 사용하는 경우 업그레이드 해야 합니다. 여기 에서 최신 버전을 다운로드하세요.
RealmResults<T>
더 이상INotifyCollectionChanged
을(를) 암시적으로 구현하지 않습니다. 대신 새로운ToNotifyCollectionChanged
메서드를 사용하세요.
주요 변경 사항
RealmResults<T>
새로운SubscribeForNotifications
메서드를 통해 세부적인 변경 사항을 관찰할 수 있습니다.Realm
배경 스레드에서 쓰기 트랜잭션( 쓰기 트랜잭션 (write transaction) )을 실행할 수 있는WriteAsync
메서드를 얻었습니다.- Realm 모델은 이제
byte[]
속성을 사용하여 바이너리 데이터를 저장 수 있습니다. RealmResults<T>
은(는) MVVM 데이터 바인딩에 적합한ObservableCollection<T>
와 같은 래퍼를 생성하는 새로운ToNotifyCollectionChanged
확장 메서드를 받았습니다.
사소한 수정
- 이제 null 허용
DateTimeOffset
속성이 지원됩니다. - 이제
null
을 string 속성 으로 설정하면null
이 올바르게 반환됩니다. - Fody 설치에 실패하면 "Realms.RealmException: Fody가 제대로 설치되지 않았습니다. RDB2_with_full_Realm.Dog는 RealmObject이지만 직조되지 않았습니다." 대신
NullReferenceException
- PCL
RealmConfiguration
에 일부 멤버가 누락되었습니다. - 이제 Fody Weaver를 기본이 아닌 너겟 리포지토리 경로에서 검색할 수 있습니다.
0.74.1 릴리스됨(2016-05-10)
사소한 수정
- 이제 Realm은 다른 스레드/프로세스에서 수정될 때 Android에서 제대로 새로 고침됩니다.
- 스레드 읽기 및 쓰기의 과도한 조합으로 인한 충돌을 수정합니다.
사소한 변경 사항
- 두 개의
Realm
및RealmWeaver
NuGet 패키지가 단일Realm
패키지로 결합되었습니다. String.Contains(String)
,String.StartsWith(String)
및String.EndsWith(String)
메서드는 이제 변수 표현식을 지원합니다. 이전에는 리터럴 문자열로만 작업했습니다.RealmResults<T>
이제INotifyCollectionChanged
CollectionChanged
NotifyCollectionChangedAction.Reset
기본 테이블 또는 쿼리 결과가 쓰기 트랜잭션( 쓰기 트랜잭션 (write transaction) )에 의해 변경될 때 와 함께 이벤트 를 발생시켜 를 구현합니다.
0.74.0 비공개 beta (2016-04-02)
주요 변경 사항
- 이제 Realm 어셈블리 위버는 각 빌드 중에 익명의 사용 데이터를 제출하므로 Java, Swift 및 Objective-C 제품에서처럼 고유한 빌더에 대한 통계를 추적할 수 있습니다(182 문제).
Realm.RemoveRange<>()
및Realm.RemoveAll<>()
메서드가 추가되어 영역 에서 객체를 삭제 수 있습니다.Realm.Write()
암시적으로 커밋된 트랜잭션 내에서 코드를 실행하기 위해 추가된 메서드- 이제
RealmConfiguration.ObjectClasses
을(를) 사용하여 특정 Realm에서 허용되는 클래스를 제한할 수 있습니다. - LINQ 개선 사항:
- 간단한 bool 검색은
== true
을(를) 사용하지 않고도 작동합니다( 362 문제 번호). - ! 연산자는 간단한 bool 속성이나 복잡한 표현식을 무효화하는 작업을 수행합니다( 77 문제).
- 이제 Count, Single 및 First를 Where 표현식(#369) 뒤에 사용할 수 있습니다.
realm.All<Owner>().Where(p => p.Name == "Dani").First();
및 Lambda 표현식
realm.All<Owner>().Single( p => p.Name == "Tim");
- 이제
OrderBy
,OrderByDescending
,ThenBy
및ThenByDescending
절을 사용하여 정렬이 제공됩니다. 정렬은Where
절의 쿼리 결과에 적용하거나All<>
이후에 적용하여 전체 클래스를 정렬할 수 있습니다. - 이제
String.Contains(String)
,String.StartsWith(String)
및String.EndsWith(String)
메서드를 Where 절에서 사용할 수 있습니다. - DateTimeOffset 속성은 쿼리에서 비교할 수 있습니다.
- 간단한 bool 검색은
- 이전 ARM V5 및 V6 기기에서
armeabi
빌드에 대한 지원이 제거되었습니다.
사소한 변경 사항
RealmList.CopyTo
을(를) 완료하여 관련 목록에ToList
을(를) 적용 할 수 있습니다( 299 문제 번호).- 이제 NuGet은
$(SolutionDir)packages
을 사용하여 Android 대상에libwrappers.so
를 삽입하므로 크로스 플랫폼(Xamarin Forms) 앱 템플릿과 순수 Android 템플릿의 다양한 상대 경로에 대처할 수 있습니다. Realm.RealmChanged
이벤트 에서 영역 의 변경 사항을 알립니다.Realm.Refresh()
다른 스레드의 변경 사항으로 영역 이 업데이트되는지 확인합니다.
0.73.0 비공개 beta (2016-02-26)
주요 변경 사항
RealmConfiguration.EncryptionKey
파일을 암호화하고 다른 Realm 소스의 기존 암호화된 파일을 열 수 있도록 추가(키가 있다고 가정)
사소한 수정
- PCL 사용자의 경우 플랫폼별 dll을 연결하지 않고
RealmConfiguration.DefaultConfiguration
을(를) 사용하면PlatformNotSupportedException
과 함께 경고 메시지가 표시됩니다. 이전에TypeInitExepction
을(를) 발생시켰습니다. - Core v0.96.2 및 일치하는 ObjectStore로 업데이트( 393 문제 번호)
0.72.1 비공개 beta (2016-02-15)
기능적 변경 사항이 없습니다. 방금 Android 64비트 대상 x86_64
및 arm64-v8a
에 대한 라이브러리 빌드를 추가했습니다.
0.72.0 비공개 beta (2016-02-13)
Realm 코어 0.96.0사용
주요 변경 사항
- PCL에 대한 지원 이 추가되어 이제 PCL GUI 또는 viewmodel 라이브러리에서 NuGet을 사용할 수 있습니다.
0.71.1 비공개 beta (2016-01-29)
사소한 수정
시뮬레이터를 대상으로 하는 iOS 앱을 빌드할 때 다음과 같은 오류가 발생하는 경우가 있습니다.
Error MT5209: Native linking error...building for iOS simulator,
but linking in object file built for OSX, for architecture i386 (MT5209)
이 문제는 NuGet에 포함된 중복 시뮬레이터 라이브러리를 제거하여 수정되었습니다.
0.71.0 비공개 beta (2016-01-25)
Realm 코어 0.95.6 을(를) 사용합니다.
플랫폼 변경 사항
이제 다음을 지원합니다.
- Mac용 Xamarin Studio - iOS 및 Android
- Windows 의 Xamarin Studio - Android
- Windows 의 Visual Studio - iOS 및 Android
주요 변경 사항
- 위에 나열된 Android 지원 이 추가되었습니다.
- 경로 및 기타 설정을 재사용할 수 있는 방법을 제공하기 위해
RealmConfiguration
가 추가되었습니다. Realm.Equals
,Realm.GetHashCode
및Realm.IsSameInstance
를 추가하여 동일한 스레드에서 열린 Realm이 동일한지 확인할 수 있도록 동등성 검사를 제공합니다(공유 내부 인스턴스).- 관련 파일을 정리하는 데 도움이 되도록
Realm.DeleteFiles(RealmConfiguration)
을 추가했습니다. int?
과 같은 null 허용 기본 유형이 추가되었습니다.- 지정된 클래스의 모든 객체 수를 빠르게 계산하도록
Realm.All<userclass>().Count()
을 최적화했습니다. - 이제 독립형 객체에서 관련 목록이 지원됩니다.
LINQ
Count()
Where()
에 구현되었습니다.Any()
Where()
에 구현되었습니다.First( lambda )
및Single( lambda )
이(가) 구현되었습니다.- 올바르게 지연되도록
Where()
를 크게 최적화하여 모든 객체를 내부적으로 인스턴스화했습니다.
API- 주요 변경 사항
[PrimaryKey]
속성의 이름이[ObjectId]
으로 변경되었습니다.Realm.Attach(object)
이름이Manage(object)
으로 변경되었습니다.- 이제 관련 객체 목록이 대신
IList<otherClass>
RealmList
로 선언됩니다.
버그 수정
- iPhone 시뮬레이터의 링커 오류를 유발하는 버그 수정(#375)
0.70.0 첫 번째 비공개 beta (2015-12-08)
NuGet 다운로드 의 비공개 사본에서 설치해야 합니다.
상태
- Studio에서만 지원되는 iOS 입니다.Xamarin
- 간단한 LINQ
Where
검색을 통한 기본 모델 및 읽기/ 쓰기 (write) 작업. - 비공개 Realm / 영역-dotnet 리포지토리에서 다운로드로 호스팅되는 NuGet입니다.