나만의 세팅 섹션 만들기
👋 들어가기 전
우연히 신기한 개념을 회사에서 경험해서, 혼자 한번 학습해보려고한다.
좋은 가이드라인을 역시 갓제드님께서 만들어놔서, 그걸 기반으로 조금 더 깊게 살펴보려고한다.
🏁 학습할 내용
- Setting Bundle
- 정의
- 목적
- 구조
- 컨트롤 Type
- 앱에서 값 읽어오는 법
⚙️ settingBundle
⭐️ 정의
iOS앱에서 앱 외부에서 사용자 설정을 구성하는데 사용되는 파일 묶음
🧩 목적
- 앱 내에서 별도의 설정 UI를 만들 리소스가 없어 빠르게 설정 환경을 구축할 때
- 특정 설정이 시스템 설정에 있는게 자연스러운걸 원할 때
🧱구조


Root.plist
- 반드시 Root.plist라는 파일이 존재해야함
- 기본 설정에 대한 내용이 포함됨
Additional.plist
- Root 하위에 계층적인 환경 설정을 구축할 때 사용됨
- 이름은 자유롭게 설정할 수 있지만, 재대로된 연결은 개발자에 책임
.lproj 파일
- 세팅 페이지에서 보여질, 문자열에 대한 다국어를 지원할 때 사용
- 반드 시 1개는 있어야함
- 각 디렉토리에는 하나의 strings 파일이 있어야 함
Settings.bundle
├─ Root.plist
├─ en.lproj
│ └─ Root.strings
└─ ko.lproj
└─ Root.strings
image file
- 만약 슬라이더 컨트롤 사용할 경우, 슬라이더의 이미지를 번들의 최상위 디렉토리에 넣고 사용할 수 있음
🎮 컨트롤 Type
말그대로, 설정에 어떤 컨트롤 UI를 사용할지, 해당 컨트롤 UI에는 어떤 필드들이 필요한지 알아보자.
✅ 공통 필드
- Title
- 설정 화면에서 사용자에게 보여질 이름
- Identifier(Key)
- 앱 내부에서 설정값을 읽을 때 사용
- UserDefaultKey로 사용
- unique해야함
- DefaultValue
- 자동으로 들어갈 기본 값
- FooterText
- 컨트롤러 아래에 표시될 텍스트
📝 Text Field (PSTextFieldSpecifier)


- Text Field Is Secure
- 입력 숨김 처리
- Keyboard Type
- 키보드 타입
- Autocapitalization Style
- 자동 대문자 변환 스타일
- Autocorrection Style
- 자동 완성 스타일
🕹️ Toggle Switch (PSToggleSwitchSpecifier)


🎚️ Slider (PSSliderSpecifier)


- Minimum Value
- 최솟값
- Maximum Value
- 최댓값
- Min Value Image Filename
- 왼쪽(최솟값) 쪽에 표시될 이미지
- Max Value Image Filename
- 오른쪽(최솟값) 쪽에 표시될 이미지
이미지는 21x21이 적당하며 Settings Bundle에 넣고 해당 이미지 파일이름을 넣어주면됨

✅ Mutlvalue (PSMultiValueSpecifier)


- Values
- 매칭된 Item이 갖는 실제 값
- Titles
- 매칭된 Item이 UI에 표시될 값
AA Title인 Item0을 고르면, 실제로 AA라는 Value를 얻음
📖 Title (PSTitleValueSpecifier)


- read - only 형태
- Default Value가 만들었을 때, 없음 꼭 수동으로 넣어줘야함
📂 Group (PSGroupSpecifier)


- 해당 그룹 Item 뒤에 있어야, 그 그룹으로 들어감
- 그룹뒤에 없어도 기본 그룹에 들어가는 형태
🔘 Radio Group (PSRadioGroupSpecifier)


- 얘는 기본적으로 제공해주지 않음, 공식문서에도 안보임 (제드님 블로그를 통해 찾음)
- MutlValue와 구성은 똑같음
- 근데 Type을 PSRadioGroupSpecifier 로 바꿔야함
- MutlValue와 다른 점은, 네비게이션 하지 않고 바로 선택가능
🚸 Radio Group (PSChildPaneSpecifier)


- Filename
- child.plist 파일
- .plist는 제외하고 명시
- 만들 떄 팁은, Root.plist를 복사한 후, Title과 파일명을 교체하는 것을 추천
- 오픈소스 라이센스 같이, 페이지를 이동해서 자세한 정보를 볼 수 있을 떄 좋을 듯
- https://github.com/mono0926/LicensePlist 를 이용하면 자동으로 만들어준다고 힘
📚 앱에서 값 읽어 오기
Settings.bundle의 값은 UserDefaults를 통해 읽어온다.
이 때, 키값으로는 Key또는 Identifier 필드값과 반드시 일치해야하며
디버깅을 위해 앱을 재설치하면, 계속 초기화되니깐, 한번 설치후 텍스트 필드같은 UI로 확인하자
출처
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
https://zeddios.tistory.com/1345
기본 앱 설정에 Custom Section 추가하기 (2) - Child Pane
안녕하세요 :) Zedd입니다. 기본 앱 설정에 Custom Section 추가하기 (1) 에서 Settings Bundle에 들어가는 control type들을 살펴봤는데요. Group Text field Title Toggle switch Slider Multivalue Radio Group Child Pane Child Pane빼
zeddios.tistory.com
https://zeddios.tistory.com/1344
기본 앱 설정에 Custom Section 추가하기 (1)
안녕하세요 :) Zedd입니다. 오늘은 얼마전에 우연히 Apple Developer 앱 설정에 들어갔다가 왼쪽 그림처럼 Custom Section(?)들이 있는 것을 보게 되었습니다. 보통 앱 설정은 오른쪽 그림처럼... 뭔가 OS 관
zeddios.tistory.com