JUST DO IT PROJECT

[iOS] Capability 추가하기 본문

개발/iOS

[iOS] Capability 추가하기

웨일.K 2025. 1. 19. 23:01
반응형

 

Signing 옆에 적힌 Capabilities라는 글자를 보셨나요?

오늘은 이것에 대해 알아볼까 합니다.

 

Capability란?

뭔가 할 수 있는 것이라는 뜻이죠. 이 앱이 사용할 수 있는 추가적인 기능을 의미합니다. 

앱이 기본적인 동작 외에 Apple이 제공하는 추가적인 기능, 예를들어 푸시 알림, 게임센터, iCloud같은 기능을 사용하려면 Capabilities에서 그 기능을 활성화 하고, 필요한 권한을 갖추어야 합니다. 

애플은 절대 개발자에게 기능을 그냥 제공해주지 않습니다. 그게 특히 사용자의 데이터나, 리소스라면 더더욱 명시적인 권한 요청을 하게 하죠. 그럼으로써 사용자는 이 앱이 나의 어떤 데이터에 접근해서 사용하는지 알게 됩니다. 

 

Capabilities의 종류

그럼 어떤 기능들이 있을까요? 백문이 불여일견이죠. Xcode에서 요걸 선택해봅시다.

 

그럼 아래와 같은 창에서 Apple이 제공하는 추가 기능들을 모두 확인할 수 있습니다. 오늘은 ICloud 기능을 한번 추가해볼까 합니다.

iCloud를 검색하면 아래와 같이 나옵니다. 사용자의 iCloud에 데이터를 저장할 수 있는 기능이죠. 그런데 밑에 에러가 하나 떠있습니다.

Error Loading Capabilities
No Development team is set. Select a team in the Signing & Capabilities editor

 

기능 로딩 오류

개발팀이 설정이 안되었어. Signing & Capabilities editor에서 팀을 선택해!

 

이상하네요. 우리는 이미 Code Signing을 잘 해두고, Provisioning Profile을 넣어주면서 팀도 설정이 되어있을텐데요.

좌측에 검색된 iCloud를 더블 클릭해봅시다. 그리고 스크롤을 좀 내려보면 iCloud가 추가된 게 보일겁니다.

그리고 또 뭔가 보이나요? Signing 오류가 떠있는 걸 볼 수 있죠.

오류를 읽어봅시다. 항상 오류 문구를 잘 읽어보는게 좋습니다.

Provisioning profile "myfirstapp_development" doesn't support iCloud capability

프로비저닝 프로파일이 iCloud 기능을 지원하지 않습니다.

Provisioning profile "myfirstapp_development" doesn't include the com.apple.developer.icloud-container-identifiers entitlement

프로비저닝 파일이 com.apple.developer.icloud-container-identifiers entitlement를 포함하고 있지 않습니다.

 

아무래도 Provisioning Profile이 문제인 모양입니다. entitlement라는 새로운 용어도 보이네요.

우선 알고 있는것부터 시작해봅시다.

 

1단계: AppID 에 Capability 추가하기 

우리는 지난 글에서, Provisioning Profile이 뭔지 함께 알아봤습니다.

Provisioning Profile은 앱의 관리문서라고 했었죠.

(1) 어떤 앱에 대해서, 그 앱을 개발할 수 있는 (2)개발자 목록과, 그 앱을 설치할 수 있는 (3)기기 목록을 적어둔 문서라구요.

지난 글에서는 (2),(3)에 집중을 했었습니다. 우리는 일단 개발을 시작하는 것이 목표였기 때문입니다.

(혹시 Provisioning Profile에 대해 궁금하시다면 이전 글을 읽어주세요. https://justdoitproject.tistory.com/47)

 

[iOS] Provisioning Profile 생성하기, Code Signing이란?

개발자 계정이 잘 활성화 되었습니다. 얼른 앱을 개발하고 싶군요.하지만 그 전에 꼭 짚고 넘어가야 할 게 있습니다.Apple 생태계에서 개발을 하기 위해서는 Code Signing과  Provisioning Profile 이라는

justdoitproject.tistory.com

 

이번 글에서는 (1)에 집중해보겠습니다. 우리가 만들려는 앱은 어떤 앱인가요?

지난 글에서 Provisioning Profile에 App ID를 등록했던 것을 기억하실겁니다.

App ID를 만들 때, 번들 ID 아래 Capabilities와 App Services가 있었던 것도 기억하시나요? 

잘 기억이 나지 않으신다고요? 괜찮습니다. 

여기 다시 가보시죠

https://developer.apple.com/account/resources/identifiers/list

여기서 우리가 지난번에 만든 My First App 이라는 app id로 들어가봅시다.

 

이제 기억이 나시나요? 여기에 바로 Capabilities가 있습니다.

이 App ID 설정에서 우리 앱이 어떤 앱인지, 어떤 기능을 활성화해서 사용하는지를 정할 수 있습니다. 기능에 따라서는 추가적인 작업을 해줘야 하는 경우도 있습니다. 그럼 iCloud를 한번 추가해봅시다.

 

Save를 눌러봅시다. 그러면 이런 안내창이 뜰겁니다.

너 App Capabilities를 수정하는구나!

capabilities를 추가하거나, 제거하면 이 AppID로 만든 예전 Provisioning profile은 더이상 유효하지 않아. 다시 만들어서 쓰렴

 

쉽게 말해서, 이제 이 앱의 기능이 달라졌으니, 관리문서를 다시 생성해서 쓰라는거죠.

Provisioning profile에서 명시한 "(1) 어떤 앱인지" 가 바뀌었기 때문입니다. 

확인을 누르고 Profile로 가보겠습니다. 우리가 생성했던 myfirstapp_development 프로비저닝이 invalid 상태가 된걸 확인할 수 있습니다. App의 Identity가 바뀌었기 때문이죠.

 

 

2단계: Provisioning Profile 업데이트 하기

 

아니 Provisioning Profile이 더이상 유효하지 않다면 어떻게 하죠?

수정하면 됩니다. 파일을 눌러서 들어가봅시다.

Enabled Capabilities에 iCloud가 추가된 것을 볼 수 있습니다.

우측상단에 Edit을 눌러주세요.

 

뭔가 더 할 필요까지는 없습니다. Save 해볼까요?

 

이제 Capabilities가 추가된 프로비저닝을 새로 만들었습니다.

 

 

3단계: Xcode project에서 새 프로비저닝 파일로 교체하기

 

이제 다운로드 받아서 Xcode에 이 프로비저닝 파일을 적용하면 될 것 같지 않나요?

Xcode에 가봅시다. Xcode에 가보면 이런 오류가 떠있습니다.

위에서 다운받은 파일을 Provisioing Profile에 다시 Import 해주어도 되지만, 이번엔 여기서 업데이트를 한번 눌러봅시다. 

그럼 우리가 새로 만든 provisioning profile이 정상적으로 업데이트 되었습니다.

 

4단계: Xcode에서 iCloud Capability 추가하기

아까 이미 iCloud Capability를 추가했었다면, 아까 보았던 iCloud 관련 오류도 사라진 걸 볼 수 있습니다.

만약 아까 추가하지 않았다면 , Xcode에서 +Capability 버튼을 눌러 iCloud를 다시 추가해주세요.

(여기서 검색이 안된다면 이미 추가되었기 때문입니다. Signing & Capabilities에서 아래로 스크롤 해보세요)

이제 iCloud 기능을 사용할 준비가 되었습니다!

 

 

Entitlement란?

아까 스쳐지나간 Xcode의 오류에서 우리가 알지 못하는 단어가 있었죠. 다시 한번 볼까요

Provisioning profile "myfirstapp_development" doesn't include the com.apple.developer.icloud-container-identifiers entitlement

프로비저닝 파일이 com.apple.developer.icloud-container-identifiers entitlement를 포함하고 있지 않습니다.

Development Provisioning Profile은 (1) 어떤 앱에 대해서 (2) 허가받은 개발자 목록과 (3) 허가받은 개발 기기 목록을 가지고 있다고 했었죠.

이 파일의 내용을 한번 봅시다. Finder에서 이 파일을 선택하고 Space를 한번 눌러보세요. 다음과 같은 미리보기 창이 뜨면서 내용을 볼 수 있을겁니다.

가장 상단에 우리가 지정한 AppID에 대한 내용이 있고, Certificates에 개발자인증서가 하나 포함되어있네요. Provisioned Devices에 허가받은 개발 기기가 하나 추가되어있구요. 두번째 섹션에 Entitlements 라는 단어가 보입니다. Xcode 오류에서 나온 entitlement가 바로 이 친구죠. com.apple.developer.icloud-container-identifiers 라는 항목을 가지고 있나요? Unknwon이긴 하지만 항목이 있긴 하네요. 그래서 오류가 사라진거죠. 아까는 이 항목이 목록에 없었을겁니다.

Entitlements란, 특정 서비스나 기술을 사용하기 위한 실행권한을 부여해주는 key-value pair입니다. 이것과 관련한 내용도 다음기회에 한번 작성해보겠습니다. 

오늘은 여기까지!

 

정리

Capabilities가 무엇인지, 어떻게 추가할 수 있는지 개략적인 내용을 살펴보았습니다.정리하면

  1. AppID에서 원하는 Capability를 추가한 뒤 업데이트 합니다.
  2. Provisioning profile을 새로 생성하거나, 이미 있던 파일을 다시 업데이트합니다.
  3. Xcode에서 새로운 Provisioning profile을 설정해줍니다.
  4. Xcode의 target > Signing & Capabilities에서 +Capabilities 버튼을 눌러 AppID에 추가해준 기능을 선택합니다.
  5. 끝!

가끔 어떤 Capability는 기능에 따라 추가적인 절차가 필요한 경우도 있습니다만, 기본적으로는 위 절차를 따릅니다. 

Capability의 예시로 iCloud를 가져왔는데, iCloud 기능으로 무엇을 할 수 있는지도 나중에 써볼게요

감사합니다

반응형