이 게시물은 iOS 앱과 iOS 앱 확장 프로그램 간에 데이터를 공유하기 위해 카우치베이스 라이트(Couchbase Lite)를 임베디드 데이터베이스로 사용하는 방법을 설명합니다. 앱 확장 프로그램 기기 내의 다른 앱이나 운영체제에 노출될 수 있는 특정 작업이나 기능을 구현합니다. 이 게시물에서는 투데이 익스텐션이 독립형 모드의 Couchbase Lite 임베디드 데이터베이스와 함께 어떻게 사용될 수 있는지 예제를 통해 살펴봅니다.
참고: 우리는 현재 프로덕션 릴리스인 Couchbase Mobile v1.4에 대해 논의할 것입니다. 그러나 여기서 논의하는 모든 내용은 최신 버전에도 적용됩니다. 카우치베이스 모바일(Couchbase Mobile) 개발자 미리보기(Developer Preview) 버전 2.0
배경
애플은 다양한 종류의 앱 확장 프로그램 , 각각은 디바이스의 특정 하위 시스템과 관련된 기능을 활성화합니다. 이 게시물에서는 Couchbase Lite를 투데이 확장(Today Extension)과 함께 사용하는 방법에 대해 논의합니다. “위젯”이라고도 알려진 이 유형의 확장은 알림 센터의 투데이 보기에 나타나며 사용자가 빠른 업데이트를 받을 수 있도록 합니다. 앱 확장이 작동하는 방식에 대해 자세히 알아보려면 다음을 참조하세요. 애플 개발자 문서.
Swift로 iOS 앱을 개발하는 데 익숙하고 iOS 앱에 Couchbase Lite를 통합하는 것에 대한 기본적인 이해가 있다고 가정하겠습니다. 이 시작하기(Getting Started) 가이드는 시작하기에 아주 좋은 곳입니다. Couchase에 대해 더 읽어보고 싶다면 이 게시물 끝에 있는 리소스를 참조하세요.
코우치베이스 라이트
Couchbase Lite은 디바이스에서 실행되는 임베디드 데이터베이스입니다. 여러 배포 모드로 사용할 수 있습니다. 독립형 임베디드 데이터베이스로 사용하거나, 디바이스 간에 데이터를 동기화할 수 있는 원격 Sync Gateway와 함께 사용할 수 있습니다. 이 게시물에서는 Couchbase Lite을 독립형 배포 모드로 사용할 것입니다. 이 게시물에서는 Couchbase Lite 통합에 대한 세부 사항은 다루지 않습니다. 그 Couchbase Lite 시작하기 블로그는 그것을 시작하기에 좋은 장소입니다.
데모 앱
- 데모 Xcode 프로젝트 다운로드: 깃허브 저장소 . 우리는 블로그의 나머지 부분에서 이 앱을 예제로 사용할 것입니다.
|
1 |
깃 복제 깃@깃허브.com:카우치베이스랩스/카우치베이스–모바일–iOS–앱–확장 프로그램.깃 |
- 지침을 따르세요 리드미 앱을 설치하고 실행하기 위한 파일
사용자가 할 일을 추가, 수정, 삭제할 수 있는 간단한 할 일 목록 앱입니다. 사용자는 할 일을 완료된 것으로 표시할 수 있습니다. 앱에는 앱을 열지 않고도 알림 센터에서 상위 2개의 할 일을 바로 보여주는 투데이 익스텐션이 포함되어 있습니다. 사용자는 알림 센터에서 바로 할 일을 완료된 것으로 표시할 수 있습니다.
모든 작업은 로컬 Couchbase Lite 데이터베이스에 저장됩니다. 이는 Container 앱과 확장 프로그램 모두 데이터베이스에 액세스해야 함을 의미합니다.
앱 아키텍처
앱 익스텐션은 독립형 앱이 아닙니다. 이들은 다음과 같은 앱 내에 번들로 제공됩니다.“컨테이너 앱”. 앱 엑스텐션은 컨테이너 앱에 번들로 포함되지만, 컨테이너 앱과 독립적으로 별도의 프로세스에서 실행됩니다. 앱 엑스텐션은 해당 엑스텐션의 기능이 필요한 다른 앱에 의해 실행됩니다. 앱 엑스텐션을 실행하는 앱을 “호스트 앱“확장 프로그램의 UI는 호스트 앱의 컨텍스트에서 표시됩니다.
컨테이너 앱과 해당 확장은 각자의 샌드박스에서 실행되는 독립된 프로세스이지만, 다음을 통해 데이터를 공유할 수 있습니다. 공유 컨테이너.
공유 컨테이너는 고유한 앱 그룹을 등록하고 컨테이너 앱과 확장 프로그램 모두에 이를 활성화하여 설정할 수 있습니다. 이에 대한 설정 방법은 다음 섹션에서 배우게 됩니다.

앱 그룹 구성
참조 애플 개발자 문서 iOS 앱에서 앱 그룹(App Groups)을 구성하는 방법에 대해 자세히 알아보려면
열기 CBLiteApp.xcworkspace 다운로드한 데모 앱 프로젝트의.
- CBLiteApp Container App 타겟의 “Capabilities” 탭을 여십시오. 앱 그룹이 보일 것입니다. group.com.example.CBLiteSharedData 활성화됨.

- CBLiteTaskExtension 타겟의 “Capabilities” 탭을 엽니다. 동일한 앱 그룹이 표시되어야 합니다., group.com.example.CBLiteSharedData 활성화됨.

타겟에 앱 그룹(App Group) 기능을 활성화하면 해당 기능이 컨테이너 앱과 그 확장 프로그램의 자격(Entitlements) 파일에 추가됩니다.
- 게다가, 애플 개발자 포털에 등록된 앱 ID에 앱 그룹(App Groups) 기능을 추가해야 합니다.

앱 사용법 안내
앱 타겟을 선택하여 앱을 빌드하고 실행하세요.“CBLiteApp”이제 알림 센터의 오늘 보기로 전환하세요.
- 아래에 표시된 대로 새 확장 위젯을 오늘 보기(Today View)에 추가하세요.

- 앱으로 전환하여 “+” 버튼을 탭하여 몇 가지 작업을 추가하세요. 해당하는 오늘 위젯으로 전환합니다. 추가한 작업이 위젯에 표시되는 것을 볼 수 있습니다.

- 작업을 탭하여 “완료”로 표시합니다. 이제 컨테이너 앱으로 다시 전환합니다. 오늘 위젯에서 수행한 작업에 따라 작업의 완료 상태가 업데이트된 것을 확인할 수 있습니다.

- 마찬가지로 컨테이너 앱에서 작업 항목을 스와이프하여 작업을 수정하거나 삭제할 수 있습니다. 오늘(Today) 위젯으로 전환하세요. 업데이트된 작업 목록이 표시됩니다.

- 기기가 3D Touch를 지원하는 경우 홈 화면의 앱 아이콘을 강하게 누르면 아이콘에서 바로 주요 작업(Top Tasks) 확장 기능이 나타나며 이를 이용해 상호작용할 수 있습니다. 정말 멋지네요!

- 마침내 컨테이너 앱을 종료합니다. 오늘 위젯으로 전환하고 작업의 완료 상태를 업데이트합니다. 앱을 다시 실행합니다. 작업이 업데이트된 상태로 나열됩니다.

코드 walkthrough
작업들은 로컬 Couchbase Lite 내장 데이터베이스에 저장됩니다. 이는 메인 앱과 투데이 확장 프로그램 모두 데이터베이스에 접근해야 함을 의미합니다. 앞서 논의한 바와 같이, 메인 앱과 확장 프로그램 간에 데이터를 공유하는 방법은 공유 컨테이너(Shared Container)를 통하는 것입니다. 이는 Couchbase Lite 데이터베이스가 반드시 공유 컨테이너 내부에 위치해야 함을 의미합니다.
이를 활성화하는 코드는 간단합니다.
열기 DatabaseManager.swift 파일.
데이터베이스 매니저는 기본적인 데이터베이스 관리 기능을 처리하는 싱글톤 클래스입니다.
- 위치하다 앱 그룹 컨테이너 URL 함수
이 함수는 공유 컨테이너 폴더의 경로를 구성합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// 1. 공유된 그룹 컨테이너의 URL 가져오기 하다 파일 관리자 = 파일 관리자.기본값 경비병 하다 그룹 URL = 파일 관리자 .컨테이너URL(forSecurityApplicationGroupIdentifier: “group.com.example.CBLiteSharedData”) 그 외 { 반환 영점 } 하다 스토리지경로URL = 그룹 URL.경로구성요소추가(“CBLite”) 하다 저장소 경로 = 스토리지경로URL.경로 // 2: 공유 컨테이너 위치에 ”CBLite”라는 이름의 폴더 생성하기” 만약 !파일 관리자.파일존재함(경로에서: 저장소 경로) { 하다 { 시도하다 파일 관리자.디렉토리 생성(경로에서: 저장소 경로, 중간디렉토리포함: false, attributes: 영점) } catch 하다 error { print(“error creating filepath: (error)”) 반환 영점 } } 반환 스토리지경로URL |
- Return the URL to the shared group container. Group containers are stored in ~/Library/Group Containers/<application-group-id>
- Create a folder named CBLite in the shared group container.
- 위치하다 configureCBManagerForSharedData 함수
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
하다 { // 1. Set the file protection mode for the Couchbase Lite database folder 하다 옵션 = CBLManagerOptions(readOnly: false, fileProtection: Data.WritingOptions.completeFileProtectionUnlessOpen) 하다 cblpoptions = UnsafeMutablePointer<CBLManagerOptions<.allocate(capacity: 1) cblpoptions.initialize(-로: 옵션) 만약 하다 URL = self.앱 그룹 컨테이너 URL() { // 2. Initialize the CBLManager with the directory of the shared container _cbManager = 시도하다 CBLManager.init(directory: URL.relativePath, 옵션: cblpoptions) } 반환 true } catch { 반환 false } |
- Create CBLManagerOptions options object with the appropriate file protections. A value of completeFileProtectionUnlessOpen implies that read/write access to the file is restricted unless file is open
- Initialize the CBLManager with the path to the shared container. When the database is created, it will be created in the shared container.That’s it! The Couchbase Lite database is now in the Shared Container that both the App and the Extension can read and write to.
What Next?
Explore the rest of the demo sample code to understand how documents are added, edited and deleted. Specifically look at the TaskPresenter.swift file. This is where all the interactions with the Couchbase Lite database is handled.
If you have any questions, feel free to reach out to me on 트위터. If you would like to suggest improvements, submit a pull request to the 깃허브 repo. You can learn more about integrating with Couchbase Lite in this Getting started with Couchbase Lite blog. The 카우치베이스 포럼 are another great place to post your questions.
While this post discusses the use of Couchbase Lite in standalone mode, stay tuned for an upcoming post that will enhance the capability to include synchronization with the cloud.

댓글 남기기
댓글을 달기 위해서는 로그인해야합니다.