Realm Blog

Realm ObjC & Swift 2.7: 권한 API, 빠른 재접속, 비밀번호 변경 및 버그 픽스!

Realm Objective‑CRealm Swift 2.7 릴리즈를 알려드립니다. 이번 릴리즈에서는 권한 API와 재접속 성능이 향상되고 비밀번호 변경 기능이 추가되며, 여러 버그를 수정하여 보다 안정적으로 앱을 실행할 수 있습니다.

권한 API 향상

동기 Realm에 대한 권한 변경 및 검색을 위한 새로운 API가 도입됩니다.

이 API는 2.0.42.4.4에서 소개된 기존 Realm 오브젝트 기반의 권한 시스템을 대체합니다.

예를 들어 이전 버전에서 권한을 부여하거나 취소하려면 사용자의 managementRealm()에서 {RLM}SyncPermissionChange 객체를 만들었습니다.

그다음 서버가 처리한 후 통지할 “change” 객체를 관찰하고, 작업이 성공했는지 확인하는 방법을 사용했습니다.

let permissionChange = SyncPermissionChange(realmURL: realmURL,    // 변경할 원격 Realm URL
                                            userID: anotherUserID, // 권한 변경할 사용자 ID 
                                            mayRead: true,         // 읽기 접근 권한
                                            mayWrite: true,        // 쓰기 접근 권한
                                            mayManage: false)      // 관리 접근 권한

let managementRealm = try! user.managementRealm()
try! managementRealm.write {
  managementRealm.add(permissionChange)
}
// 서버 응답 대기
token = permissionChange.addNotificationBlock { _ in
  switch permissionChange.status {
  case .notProcessed: break // handle case
  case .success: break // handle case
  case .error: break // handle case
  }
  print(permissionChange.statusMessage) // contains error or informational message
}

사용 권한 검색은 별도의 Realm (SyncUser.permissionRealm())과 별도의 모델 타입 (SyncPermission)을 사용했습니다.

let permissionRealm = try! user.permissionRealm()
let permissions = permissionRealm.objects(SyncPermission.self)
token = permissions.addNotificationBlock { _ in
  // 권한 업데이트
}

이번 릴리즈에서 간단한 권한 API를 내부 전송 메커니즘이 구현되는 방법에 대한 지식이 필요하지 않도록 간단하게 개선했으므로 위 API들은 더는 사용되지 않습니다.

단일 {RLM}SyncPermissionValue 유형으로 이제 권한을 적용, 취소, 검색할 수 있습니다.

// 권한 적용
let permission = SyncPermissionValue(realmPath: realmPath,
                                     userID: anotherUserID,
                                     accessLevel: .write)
user.applyPermission(permission) { error in
  if let error = error {
    // 에러 처리
    return
  }
  // 성공
}
// 권한 검색
user.retrievePermissions { permissions, error in
  if let error = error {
    // 에러 처리
    return
  }
  // 성공, 권한 접근
}

Realm 권한 API를 사용하기 위한 자세한 설명서는 접근 제어 섹션에서 볼 수 있습니다.

이 API는 Realm 오브젝트 서버 1.1.0 버전 이상이 필요합니다.

빠른 재접속

이번 릴리즈부터 Reachability 프레임워크를 통해 연결 상태의 변경 사항을 감지하여 연결이 지속되지 않는 경우 즉시 오브젝트 서버와 재연결을 시도합니다.

이전에는 저희 지수적 백오프 재연결 알고리즘을 사용해서 재연결이 발생했으므로 연결이 끊어지기까지의 시간에 의존적이었습니다.

비밀번호 변경

Realm의 ‘password’ 인증 공급자를 이용하는 사용자는 -[RLMSyncUser changePassword:completion:] API를 사용해서 암호를 변경할 수 있습니다. 이 API를 사용하려면 Realm 오브젝트 서버 1.4.0 버전 이상이 필요합니다.

다른 개선사항

  • {RLM}SyncConfiguration은 서버별로 SSL 유효성 검사를 지정할 수 있도록 enableSSLValidation 속성과 Swift 이니셜라이저의 기본 매개 변수를 갖습니다.
  • 이제 16MB가 넘는 동기 Realm과 Realm 오브젝트 서버 간 트랜잭션이 가능합니다.

버그 픽스

  • Objective-C 이름을 오버라이드해서 Swift에서 재정의된 Realm 모델 클래스를 지원합니다. (예. @objc(Foo) class SwiftFoo: Object {}).
  • newObject를 삭제한 후 클래스 이름을 순회할 때 -[RLMMigration enumerateObjects:block:]이 잘못된 oldObject 객체를 반환하던 현상을 수정했습니다.
  • 사용자가 읽기 권한만 가진 동기 Realm을 열 때 Realm.asyncOpen(...) 이 작동하지 않던 현상을 수정했습니다.
  • KVC를 사용해서 List 속성을 nil로 설정하면 이제는 RLMArray 속성의 동작과 일치하도록 리스트를 비웁니다.
  • 동기 Realm을 사용할 때 !m_awaiting_pong assertion 실패로 인한 크래시를 수정했습니다.
  • 숫자나 마침표처럼 대소문자의 차이가 없는 여러 문자가 포함된 인덱스된 문자열 속성에서 대소문자를 구별하지 않는 쿼리를 수행할 때 성능이 저하되거나 멈추는 현상을 수정했습니다.

iOS 7 지원

최소 타깃 iOS 버전을 7.0으로 가능한 한 오래 지원할 예정이지만, 향후 릴리즈에서는 최소 타깃 iOS 버전이 8.0으로 변경될 수 있음을 알려드립니다.


읽어 주셔서 감사합니다. Realm과 함께 멋진 앱을 만들어 보세요! Stack Overflow, GitHub, Facebook 그룹에서 언제든지 저희에게 연락할 수 있습니다!


Realm Team

Realm의 미션은 더 나은 앱을 빠르게 개발할 수 있도록 돕는 것입니다. 이를 위해 저희는 개발자들이 실시간 협업, 가상 현실, 라이브 데이터 동기화, 오프라인 경험, 메시징 등 정교하고 강력한 기능을 쉽게 개발할 수 있도록 하는 개발 도구와 플랫폼을 제공하고 있습니다.

저희는 모바일 인터넷이 수많은 사용자와 보다 많은 디바이스가 속한 개방형 네트워크와 이들 간의 실시간 상호 작용으로 진화할 것이라고 믿으며, 개발자가 이같은 방향으로 발전할 수 있도록 돕기 위해 저희 제품들을 개발하고 있습니다.

이런 개발 뉴스를 더 만나보세요