RealmContent - Realm 기반의 오픈 소스 CMS 컴포넌트
소개
Realm 모바일 플랫폼으로 만든 RealmContent를 사용하면 Realm 브라우저 앱으로 직접 데이터를 추가해서 새로운 컨텐츠를 iOS 앱에 빠르게 보여줄 수 있습니다.
RealmContent는 Realm 객체를 애플리케이션의 자체 스키마에 자동으로 추가해서 개발자가 미리 구성된 여러 개의 뷰 컨트롤러로 사용 가능한 컨텐츠를 리스팅하고 각 컨텐츠 “페이지”를 렌더링할 수 있습니다.
컴포넌트는 대부분 자동으로 동작하며, 커스터마이제이션도 가능합니다. 따라서 개발자의 시간과 노력을 기울이지 않고도 기본 요소를 구현할 수 있고 인앱 컨텐츠를 변경하기 위해 새로운 버전의 앱을 따로 출시하지 않아도 됩니다.
RealmContent 라이브러리를 사용하면 가장 쉽고 빠른 방법으로 전체 사용자에게 실시간으로 컨텐츠를 보여줄 수 있습니다.
동작 방법 기술 특강
다음과 같은 다섯 가지의 간단한 단계를 거치면 RealmContent로 다이내믹 컨텐츠 관리 시스템을 iOS 앱에 적용할 수 있습니다.
1) Import RealmContent
CocoaPods로 RealmContent 를 추가하거나 프로젝트에 소스 파일을 직접 추가합니다. 그다음 뷰 컨트롤러에 RealmSwift
와 RealmContent
를 추가하세요.
import RealmSwift
import RealmContent
앱에는 일반적으로 Realm 오브젝트 서버에서 동기화하는 객체 목록이 있습니다. RealmContent
를 추가하면 Realm이 기본 스키마에 두 개의 새로운 모델인 ContentPage
와 ContentElement
를 포함합니다.
여러 개의 Realm 파일을 사용하는 경우라면 ContentPage
와 ContentElement
를 원하는 객체 스키마에 추가하세요.
2) 컨텐츠 리스트 데이터 소스 생성
RealmContent
가 제공하는 ContentListDataSource
클래스를 사용해서 컨텐츠를 앱에 표시할 수 있습니다.
let items = ContentListDataSource(style: .sectionsByTag)
일반 리스트에는 .plain
을 사용하고 tag
속성으로 페이지가 분리되는 섹션 리스트에는 .sectionsByTag
를 사용하세요.
3) 데이터 소스 초기화
loadContent(from:)
를 호출해서 컨텐츠 소스로 사용할 Realm 파일을 설정합니다.
items.loadContent(from: try! Realm())
Realm 오브젝트 서버로부터 변경 사항이 들어오는 경우 데이터 소스가 자동으로 테이블 뷰나 컬렉션 뷰에서 데이터를 다시 로드하도록 설정할 수 있습니다. (가장 권장하는 옵션입니다)
items.updating(view: tableView)
4) 일반적인 방법으로 테이블 뷰나 컬렉션 뷰 데이터 소스 메서드를 구현하되, 데이터를 컨텐츠 데이터 소스에서 가져옵니다. 이 클래스는 numberOfSections
, numberOfItemsIn(section:)
, titleForSection(section:)
, itemAt(indexPath:)
와 같은 메서드들을 제공합니다.
이 방법으로 테이블 뷰 또는 컬렉션 뷰 데이터 소스 메서드를 구현하고 필요한 UI나 로직 설정을 할 수 있습니다. (더 자세한 내용은 RealmContent
저장소의 샘플 코드를 참조하세요.)
5) 컨텐츠 “페이지” 표시
ContentViewController
인스턴스를 표시해서 컨텐츠를 보여줄 수 있습니다. 테이블 뷰나 컬렉션 뷰의 탭 델리게이트 메서드나 prepareForSegue(_:)
메서드, 혹은 다른 코드를 사용합니다.
다음 코드에서 테이블 셀을 탭 한 이후의 동작 방법을 볼 수 있습니다.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let item = items.itemAt(indexPath: indexPath)
let vc = ContentViewController(page: item)
navigationController!.pushViewController(vc, animated: true)
}
표시된 뷰 컨트롤러는 테이블 뷰를 사용해서 ContentPage
요소의 컨텐츠를 동적으로 보여줍니다. 컨텐츠를 원격으로 변경하면 변경 사항이 화면에 실시간으로 반영됩니다.
동적으로 컨텐츠를 추가, 편집, 삭제하기
RealmContent
의 가장 큰 장점은 언제든지 표시된 내용을 수정할 수 있다는 것입니다. 모든 변경 사항은 모든 연결된 사용자에게 실시간으로 동기화됩니다. (인터넷에 연결되지 않은 사용자는 연결이 되는 순간 동기화됩니다)
Realm 브라우저 앱으로 새로운 페이지를 추가, 삭제하거나 컨텐츠 블럭을 추가, 재배치, 수정하는 등의 여러 작업을 쉽게 할 수 있습니다. 제목과 링크의 강조 색상을 변경할 수도 있습니다.
지금 바로 RealmContent를 사용해 보세요!
오픈 소스인 RealmContent의 소스 코드와 데모 앱을 다음 링크에서 볼 수 있습니다. https://github.com/realm-demos/RealmContent
RealmContent
를 앱에 설정하는 가장 빠른 방법은 CocoaPods입니다. Podfile에 pod 'RealmContent'
를 추가하세요.
기능에 대한 아이디어나 버그 리포팅, 피드백을 주시려면 Twitter로 연락하거나 GitHub에 이슈를 만들어 주세요.
앞으로 이 컴포넌트로 얼마나 멋진 다이내믹 앱이 만들어질지 정말 기대가 됩니다!