[Xcode] Capability와 App Groups

Picnic·2024년 12월 14일

Xcode

목록 보기
3/3
post-thumbnail

안녕하세요 Picnic🧃입니다.
오늘은 Capability와 App Groups에 대해서 알아보려고 합니다.

해당 글은 애플의 공식 문서의 글을 토대로 작성되었습니다.
하지만 개인적인 정리 과정에서 틀린 부분이 존재할 수도 있으니 이러한 내용에 관한 피드백은 환영합니다.

Capability와 App Groups의 경우 애플에서 작성한 글이 잘 되어있기 때문에 대부분 그대로 번역한 것!
시작!

Capability


Capability애플이 제공하는 앱 서비스(ex: Cloud Kit, Game Center, In-App Purchase 등)에 접근할 수 있는 권한입니다. 이러한 서비스를 사용하려면 Xcode의 프로젝트 편집기를 통해 앱에 Capability를 추가하고, 해당 앱 서비스가 올바르게 설정되도록 구성해야 합니다. 이 과정에서 Xcode는 Entitlements 파일과 Information Property List 파일을 수정하고, 관련 프레임워크를 추가하며, signing assets를 구성합니다.

그러나 Game Center나 In-App Purchase와 같은 일부 앱 서비스는 App Store Connect와 개발자 계정에서 추가 설정이 필요합니다. 예를 들어, 지도(Maps)를 사용해 다른 앱에 경로를 제공하는 앱이라면, App Store Connect를 통해 지리적 범위 파일(geographic coverage file)을 업로드해야 합니다.

iOS 앱에서 사용 가능한 기능은 Supported capabilities (iOS) 문서를 참조할 수 있습니다.

Capability 추가하기


앱에 Capability를 추가하려면, 프로젝트 편집기의 Signing & Capabilities 패널을 사용합니다.

메인 창의 Project navigator에서 프로젝트(앱 이름과 동일한 루트 그룹)를 선택하고, 나타난 프로젝트 편집기에서 적절한 타겟을 선택한 다음 Signing & Capabilities 탭을 클릭합니다.

선택적으로, 빌드 구성(All, Debug, Release)을 선택할 수 있습니다. 예를 들어, Debug 구성에만 기능을 추가하려면 Debug를 선택하고, 그렇지 않으면 All을 선택합니다.

툴바에서 Library 버튼(+)을 클릭하여 Capabilities 라이브러리를 엽니다. 또는, 빌드 구성 왼쪽의 + Capability를 클릭하거나 Editor > Add Capability를 선택합니다. Capabilities 라이브러리는 타겟 플랫폼과 프로그램 멤버십에서 사용할 수 있는 기능만 표시합니다. 목록에서 기능을 선택하면, 오른쪽에서 해당 기능의 설명을 볼 수 있습니다.

앱 타겟에 capability를 추가하려면, 라이브러리에서 해당 capability를 더블 클릭하거나 capability를 라이브러리에서 Signing & Capabilities 패널로 드래그합니다. Capability는 Signing 섹션 아래에 나타납니다.

추가 설정 단계가 필요한 경우, capability가 확장되어 추가 제어 옵션이 표시됩니다(아래 추가 설정 단계 참조).
기능을 제거하려면, Signing & Capabilities 패널에서 해당 기능의 오른쪽 상단에 있는 삭제 버튼(x)을 클릭합니다.

Signing 섹션에서 오류가 나타나면, 메시지를 읽고 문제를 해결한 후 Try Again을 클릭하세요. 예를 들어, Signing 아래 Bundle Identifier 필드에 표시된 CFBundleIdentifier는 고유해야 합니다. 번들 ID의 기본값은 프로젝트를 생성할 때 입력한 앱 이름에 조직 식별자가 연결된 값입니다.


추가 구성 단계 수행하기


일부 기능의 경우 Xcode, 개발자 계정 또는 App Store Connect에서 추가 구성 단계를 수행해야 할 수도 있습니다.
다른 기능을 위해, 당신은 코드를 작성해야 할 수도 있습니다.

특정 기능에 대한 자세한 지침은 아래 표를 참조하십시오:

CapabilityAdditional information
App GroupsConfiguring App Groups
App SandboxConfiguring the macOS App Sandbox
Apple PayConfiguring Apple Pay support
Associated DomainsConfiguring an associated domain
Background ModesConfiguring background execution modes
ClassKitEnabling ClassKit in your app
FontsConfiguring custom fonts
Game ControllersConfiguring game controllers
Group ActivitiesConfiguring Group Activities
Hardened RuntimeConfiguring the hardened runtime
HealthKitConfiguring HealthKit access
HomeKitConfiguring HomeKit access
iCloudConfiguring iCloud services
In-App PurchaseConfiguring in-app purchases
Keychain SharingConfiguring keychain sharing
MapsConfiguring Maps support
Media Device DiscoveryConfiguring media device discovery
Network ExtensionsConfiguring network extensions
On-Demand Install CapableCreating an App Clip with Xcode
Push NotificationsRegistering your app with APNs
Sign in with AppleConfiguring Sign in with Apple support
SiriConfiguring Siri support
WalletConfiguring Wallet support



App Groups


위의 글을 읽었다면 Capability에 대해 어느정도는 쉽게 이해 했다고 할 수 있을 것입니다.
간단히 말하자면, Capability는 애플에서 제공하는 서비스를 사용하기 위해 Xcode에서 추가해줘야 하는 권한이었죠!

Capability를 본 이유는 바로 App Group에 대해 알기 위해서 입니다.
위의 표를 보면 알 수 있듯이 Capability를 설정해주면 App Group을 사용할 수 있다는 것을 볼 수있죠!
즉, App Group을 사용하기 위해선 Capability를 설정해주어야 합니다.

그렇다면 App Group에 대해 알아보도록 하겠습니다.

App Group은 동일한 팀이 개발한 여러 앱이 하나 이상의 공유 컨테이너에 엑세스 할 수 있도록 합니다.
App Gruop을 사용하여 App Extension 또는 App Clip과 Host App간에 데이터를 공유할 수도 있습니다.

여기서 한 가지 제 눈에 띄는 단어가 있는데요.. 그건 바로… App Extension…!
네 사실은 이 글은 App Extension의 연장선에 있는 글이기도 합니다.
App Extension을 사용하면서 App Extension에서 얻은 데이터를 필요로 하게 되었고, 그걸 위해서 Target에 대해서도 알아보고 App Group도 알아야 했기 때문이에요.

여기서는 MacOS에 대한 App Groups 내용은 넘어가도록 하겠습니다.

App Groups 만들기


macOS가 아닌 다른 플랫폼의 앱에 App Groups 기능을 추가하면, Xcode는 개발자 계정에서 기존 그룹을 가져와 해당 capability 섹션에 표시합니다. App Groups 목록 아래의 Refresh 버튼을 사용하여 언제든지 계정의 그룹을 다시 가져올 수 있습니다. 각 개발자 계정은 최대 1000개의 App Group을 등록할 수 있습니다.

예시: MemeCollection

목록에서 체크박스를 사용하여 하나 이상의 그룹을 활성화하면, 앱이 해당 그룹의 멤버로 추가됩니다. 반대로, 그룹의 체크박스를 선택 해제하면 앱의 그룹 멤버십이 취소됩니다.


iOS, watchOS, 또는 tvOS 앱에 App Group을 생성하려면 다음 단계를 수행하세요:

  1. App Groups 목록 아래의 Add 버튼(+)을 클릭합니다.
  2. 나타나는 대화 상자에 컨테이너 ID를 입력합니다. 컨테이너 ID는 반드시 group.으로 시작하고, 그 뒤에 역순 DNS 표기법의 사용자 지정 문자열이 와야 합니다.
  3. OK를 클릭하여 새로운 App Group을 저장합니다.

Xcode는 App Groups 목록에서 새로 생성된 App Group을 자동으로 선택합니다. 이 선택은 앱이 해당 App Group의 멤버로 추가되었음을 나타냅니다.


App Group의 공유 컨테이너에 접근하기


사실 이 부분이 제가 원하고자 했던 제일 중요한 부분입니다.
설정을 해주고 결국 어떻게 데이터를 공유하는가?
그게 바로 이 부분에 나와 있습니다.

앱이 App Group의 멤버가 되면, 해당 그룹의 공유 컨테이너에 데이터를 읽고 쓰기 위해 사용할 수 있는 여러 API를 제공받게 됩니다. 예를 들어:

  • init(suiteName:) 메서드를 사용하여 App Group의 공유 사용자 기본값(shared user defaults) 데이터베이스에 접근하여 환경설정(preferences) 및 기타 제한된 데이터를 공유할 수 있습니다.
  • containerURL(forSecurityApplicationGroupIdentifier:) 메서드를 호출하여 App Group의 공유 컨테이너의 물리적 위치를 검색할 수 있습니다. 검색한 URL을 사용해 데이터를 읽거나 쓸 수 있습니다.
  • 백그라운드 URL 세션의 구성(configuration)에서 sharedContainerIdentifier 속성을 설정하여 파일을 App Group의 공유 컨테이너에 직접 다운로드할 수 있습니다.

이 때 공유 컨테이너는 앱 샌드박스 외부에 있습니다.



마무리


이렇게 해서 Capability와 App Groups에 대해 알아보았습니다.

제가 했던 프로젝트가 Share Extension을 사용해서 Realm을 통해 데이터를 공유하는 작업이었는데, Share Extension, Target에 이어 App Groups까지 보고나니 이해가 더 잘 된 것 같습니다.
이제 마지막인 Realm으로 공유하는 법을 작성해야겠네요..!
(+ 추가: 해당 글은 여기로!)

이번 글은 여기서 마치도록 하겠습니다.


참고


0개의 댓글