iOS/Setting

나만의 세팅 섹션 만들기

Hamp 2025. 11. 29. 11:20
반응형

👋 들어가기 전

 

우연히 신기한 개념을 회사에서 경험해서, 혼자 한번 학습해보려고한다.

 

좋은 가이드라인을 역시 갓제드님께서 만들어놔서, 그걸 기반으로 조금 더 깊게 살펴보려고한다.


🏁 학습할 내용

  • 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)

Root.plist

  • Filename
    • child.plist 파일
    • .plist는 제외하고 명시
  • 만들 떄 팁은, Root.plist를 복사한 후, Title과 파일명을 교체하는 것을 추천
  • 오픈소스 라이센스 같이, 페이지를 이동해서 자세한 정보를 볼 수 있을 떄 좋을 듯
  • https://github.com/mono0926/LicensePlist 를 이용하면 자동으로 만들어준다고 힘

📚 앱에서 값 읽어 오기

 

Settings.bundle의 값은 UserDefaults를 통해 읽어온다.

이 때, 키값으로는 Key또는 Identifier 필드값과 반드시 일치해야하며

 

디버깅을 위해 앱을 재설치하면, 계속 초기화되니깐, 한번 설치후 텍스트 필드같은 UI로 확인하자


출처

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

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

 

반응형