ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Setting Bundle을 사용해 커스텀한 설정 추가하기
    iOS 2023. 5. 1. 20:24

    안녕하세요. 그린입니다🍏

    이번 포스팅에서는 Setting Bundle을 알아보고 이를 이용해 기본 앱 설정에서 커스텀한 설정들을 추가해보도록 하겠습니다🙋🏻

     

    이 주제에 대해 알아보게 된 계기

    우선 엑코 시뮬레이터에서 간혹 발생하는 버그인지 저는 아직 명확한 원인을 찾을 수 없던 문제가 있었어요!

    예를들어, 토이 프로젝트로 실제 앱 스토어에 배포되지 않은 앱에서 위치 정보를 받아온다고 가정해볼께요.

    그럴때 우리는 위치 정보 허용에 대한 요청을 보내고 이는 디바이스 기본 해당 앱 설정에서 확인할 수 있어요.

    즉, 디바이스 > 설정에서 해당 앱이 목록에 노출되어야 하는데 노출되지 않는 문제가 있었습니다.

    그래서 사실상 명확한 테스트를 해볼 수가 없었던 이슈로 인해 테스트를 위해서 기본 앱 설정이 목록에 나타나게 해주도록 찾다보니 Setting Bundle 파일을 추가하면서 알아보게 되었어요😲

     

    그럼 테스트 환경을 위해 Setting Bundle이 무엇인지 알아보고 구현해볼께요!

     

    Setting Bundle?

    우선 애플의 iOS Setting Bundle 구현 가이드를 보면 Setting Bundle을 통해 앱 내부 기본 설정을 표시하거나 관리하는 용도로 사용됩니다.

    즉 위치정보 허용이나 앱 추적 허용 등 앱 최상위에서 전체적인 기본 값들을 관리해줄 수 있습니다.

    Setting Bunlde은 앱 번들의 최상위 디렉토리에 위치하며 Settings.bundle이라는 이름을 가집니다.

    이 번들은 기본 설정의 개별 페이지를 설명하는 하나 혹은 그 이상의 설정 페이지 파일을 포함하게 됩니다.

    Setting.bundle 디렉토리에서 가지는 파일들은 아래와 같습니다🙌

    1️⃣ Root.plist는 루트 페이지에 대해 기본 설정이 포함된 설정 페이지 파일입니다.

    2️⃣ 추가적인 .plist 파일은 하위 창을 이용해 계층적인 기본 설정을 구축하는 경우 별도 설정 페이지 파일로 사용됩니다.

    3️⃣ 하나 혹은 이상의 .lproj 디렉토리는 설정 페이지 파일 내 지역화된 문자열 리소스를 저장합니다.

     해당 디렉토리에서는 설정 페이지 파일에 제목이 지정된 단일 문자열 파일이 포함되게 됩니다.

    4️⃣마지막으로 추가 이미지가 존재하는데 만약 슬라이더 컨트롤을 사용하는 경우 슬라이더의 이미지를 번들의 최상위 디렉토리에 저장할 수 있습니다.

     

    해당 파일 및 디렉토리의 설정들을 이용해 사용자가 설정 목록에서 해당 앱을 접근하면 Root.plist 설정 번들에 대해 설정 페이지 파일들을 로드하고 해당 파일을 사용해 앱의 기본 설정 페이지를 빌드하게 됩니다🔥

     

    앞서본 하위 plist 파일이 Root.plist로부터 아래와 같은 계층적인 페이지 기본 설정을 따릅니다.

     

    자 그럼 Setting.bundle 파일을 추가해보면서 실습해볼까요?

     

    Setting.bundle 파일 추가하고 구현하기

    프로젝트에서 아래와 같이 Settings Bundle 파일을 생성해줍니다.

    그럼 아래와 같이 요렇게 Setting.bundle 디렉토리가 만들어지며 하위로는 기본적으로 Root.plist 파일이 존재하고 현재 지역화를 위해 en.lproj 디렉토리와 strings 파일이 생성되게 됩니다.

    그럼 하위 페이지 구성이나 지역화를 위한 별도 작업이 없다면 우리가 신경써야할건 저 Root.plist 파일입니다.

     

    기본적으로 생성되는것에 Group내에 Text Field / Toggle Switch / Slider가 존재합니다.

    그 외에도 아래와 같이 Item의 타입들이 존재합니다.

     

    그럼 기본 설정으로 어떻게 뜨는지 한번 확인해볼까요?

     

    시뮬레이터로 실행을 해보면 디바이스 > 설정 리스트에 해당 앱이 노출됩니다.

    이걸 클릭해서 들어가면 아래와 같이 기본 설정된 Text Field / Toggle Switch / Slider가 노출되죠.

    즉 Group 내에 순서대로 Text Field / Toggle Switch / Slider가 보여지게 되는것입니다.

     

    그럼 Group부터 하나씩 한번 천천히 봐볼까요?

     

    Group 커스텀하기

    Group을 컨트롤하고 싶다? 한다면 아래와 같이 plist 파일에서 group 내 value들을 추가하면서 수정할 수 있습니다.

    요렇게 푸터하고 이름을 변경하면 아래와 같이 나타나죠!

     

    TextField 커스텀하기

    그룹과 마찬가지로 텍스트필드도 아주 쉽게 커스텀할 수 있습니다.

    타이틀 및 기본값 그리고 키보드 타입 및 시크릿한 텍스트 필드인지 등 다양하게 설정할 수 있어요.

    아주아주 쉽죠?

     

    Toggle Switch 커스텀하기

    이 설정은 크게 뭐 수정할건 없습니다.

    그냥 앱 추적 허용등과 같은 값들이 토글 형태로 들어가는것처럼 추가로 필요한 토글 설정 값이 있다면 요런식으로 타이틀과 기본값을 설정해줄 수 있어요.

     

    Slider 커스텀하기

    슬라이더도 토글 스위치와 마찬가지로 설정할게 크게 없습니다.

    값의 범위와 기본 초기값과 최소/최대 값에 대한 이미지등을 구성할 수 있습니다.

     

    그럼 이어서 기본적으로 만들어지지 않은것중 Title / Multi Value / Child Pane을 추가해보고 한번 어떤건지 봐보시죠🎉

     

    Title 커스텀하기

    기본적으로 생성되는 plist에서 없으니 추가해줍니다.

    Default Value 값이 초기 해당 Title 타입으로 생성 시 만들어지지 않으니 꼭 별도로 추가해주어야 합니다.

    추가하지 않고 기본값이 없다면 설정에서 해당 항목이 나타나지 않아요🥹

    보시면 순서대로 마지막에 위치하게 됩니다.

    활용하기에는 버전을 표기할때 아주 딱이겠네요!

     

    Multi Value 커스텀하기

    해당 설정에 대해 여러 값들이 존재하고 선택할 수 있는 구성에서 Multi Value를 이용하면 좋습니다.

    요런식으루 설정할 수 있는 멀티플한 값들을 넣어줍니다.

    이때 Titles와 Values는 필수값이나 기본 추가 시 없음으로 꼭 별도 추가해줘야 합니다!

    그럼 이렇게 의도한것과 같이 선택할 수 있도록 구성할 수 있습니다.

     

    Child Pane 커스텀하기

    제일 처음에 해당 설정들에 대해 하위 페이지를 구성할 수 있다고 한거 기억하시나요?

    그러기 위해서는 Root.plist 내 계층으로 하위 plist파일이 존재해야합니다.

    그걸 이 설정을 통해 해볼 수 있어요!

     

    우선 하위 plist 파일을 만들어볼께요!

    이름을 원하는것으로 설정하고 Type과 Title을 만들어줍니다.

    이때 Title이 하위 페이지에 보여줄 내용입니다.

     

    그 다음 Root.plist로 돌아가 Filename에 해당 plist 파일 이름을 넣어줍니다.

     

    이렇게 설정을 끝내면 아래와 같이 보여집니다🎉

     

    아주아주 간단하죠!?

    주로 이러한 하위 페이지는 오픈소스 라이선스 정보를 나타내줄때 많이 사용됩니다.

     

    마무리

    이렇게 간단하지만 쓸게 많았던 Setting Bundle에 대해 알아봤어요ㅎㅎ

    마지막으로 강조하고 싶은 중요한점은 저 Setting Bundle을 통해 설정해주는 값들은 거의 변하지 않거나 기본적인 것들만 앱 설정에 넣는것이 중요한것 같습니다🙌

    혹시 위 예제의 코드를 보고 싶으시면 아래 레포를 참고해주세요⭐️

    https://github.com/GREENOVER/playground/tree/main/SettingTest

     

    GitHub - GREENOVER/playground: 학습을 하며 간단한 예제들을 만들어 보는 작고 소중한 놀이터

    학습을 하며 간단한 예제들을 만들어 보는 작고 소중한 놀이터. Contribute to GREENOVER/playground development by creating an account on GitHub.

    github.com

     

    [참고 자료]

    https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/UserDefaults/Preferences/Preferences.html

     

    Implementing an iOS Settings Bundle

    Implementing an iOS Settings Bundle In iOS, the Foundation framework provides the low-level mechanism for storing the preference data. Apps then have two options for presenting preferences: Display preferences inside the app.Use a Settings bundle to manage

    developer.apple.com

Designed by Tistory.