이전에 만든 앱에는 앱내에서 설정화면을 따로 만들어, 거기서 라이센스 관련된 내용들을 추가했었다.
이번에는 앱내에서가 아니라, 아이폰 - 설정앱에서 나의 앱에 추가하는 방법을 알게되면서 이를 이번에 팀 프로젝트에 사용해보려고 한다.
다음과 같이 구현하고자 한다. ( 쏘카앱이 다음과 같이 구현되어있어 참고했다 )
우선 프로젝트에 Settings Bundle 을 클릭하여 추가한다.
그러면 아래와 같이 파일이 생성되는데,
Root.plist를 확인해보면 다음과 같이 Default로 작성되어있다.
이를 실행해보면, 위의 내용들이 아래와 같이 반영되어 나타난다.
위의 요소들은 아래와 같은 특정 타입으로 특정 컨트롤로 나타낼 수 있다.
나는 Child pane이 필요한데, Property List에서는 Child pane이 나타나지 않는다.
이는 소스코드로 직접 추가해주어야한다.
Childe pane의 키는 아래에서 확인할 수 있다.
Root.plist를 다음과 같이 변경했다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>StringsTable</key>
<string>Root</string>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSChildPaneSpecifier</string>
<key>Title</key>
<string>Licenses</string>
<key>File</key>
<string>LicenseList</string>
</dict>
</array>
</dict>
</plist>
그럼 다음과 같이 나타난다.
( 약간 해맸던 부분인데, 기본적으로 Root.plist에서는 *** SETTINGS 그룹이 있다 )
그럼 이제 다음 페이지인 License의 리스트를 plist파일로 새로 만들고, Settings.bundle 안에 넣어준다.
이 파일 또한 마찬가지로 위의 타입을 이용하여 작성하면 된다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>StringsTable</key>
<string>LicenesList</string>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>Licenses</string>
</dict>
<dict>
<key>Type</key>
<string>PSChildPaneSpecifier</string>
<key>Title</key>
<string>RxSwift</string>
<key>File</key>
<string>RxSwiftLicense</string>
</dict>
<dict>
<key>Type</key>
<string>PSChildPaneSpecifier</string>
<key>Title</key>
<string>SwiftGen</string>
<key>File</key>
<string>SwiftGenLicense</string>
</dict>
<dict>
<key>Type</key>
<string>PSChildPaneSpecifier</string>
<key>Title</key>
<string>SwiftLint</string>
<key>File</key>
<string>SwiftLintLicense</string>
</dict>
<dict>
<key>Type</key>
<string>PSChildPaneSpecifier</string>
<key>Title</key>
<string>Fastlane</string>
<key>File</key>
<string>FastlaneLicense</string>
</dict>
</array>
</dict>
</plist>
위의 코드를 보면, 그룹안에 ChildPane을 또 가지고, 그것이 각 라이브러리의 세부화면이 되니까,
***.plist를 또 만들어준다.
RxSwiftLicense.plist를 다음과 같이 만들었다.
Group 타입안에 FooterText가 있어, 이를 활용한다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>StringsTable</key>
<string>RxSwift</string>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>FooterText</key>
<string>RxSwift</string>
</dict>
</array>
</dict>
</plist>
FooterText에 RxSwift를 넣었는데, FooterText가 Localizable이 가능하므로,
RxSwift.strings에서 RxSwift에 대응하는 실제 라이센스 내용을 넣어주도록 한다.
RxSwift.strings
"RxSwift" =
"
The MIT License Copyright © 2015 Krunoslav Zaher, Shai Mishali All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
";
https://stackoverflow.com/questions/29969078/no-child-pane-option-in-settings-bundle-root
https://abhimuralidharan.medium.com/adding-settings-to-your-ios-app-cecef8c5497
http://minsone.github.io/mac/ios/ios-write-licenses-using-settings-bundle
'iOS' 카테고리의 다른 글
openAI chat API SSE (text/event-stream) 적용해보기 (0) | 2023.06.22 |
---|---|
PHImageManager의 requestImage targetSize 문제..? (0) | 2021.11.26 |
SwiftGen 설치하는 방법 (0) | 2021.09.24 |
앱 testFlight에 업로드 및 테스터 초대하기 (0) | 2021.09.23 |
UITabBarItem 이미지가 원본과 다르게 보이는 현상 해결하기 (0) | 2021.09.17 |