[swift] Swift AcknowList를 사용하여 앱에서 사용 중인 오픈 소스 라이브러리에 대한 버전 정보를 표시하는 방법을 알려주세요.
AcknowList는 앱에서 사용 중인 오픈 소스 라이브러리와 해당 버전 정보를 표시하는 데 도움을 주는 CocoaPods 라이브러리입니다. 이를통해 사용된 오픈 소스 라이브러리들을 쉽게 인식하고, 버전 정보를 한눈에 확인할 수 있습니다. 아래는 Swift 프로젝트에서 AcknowList를 사용하여 오픈 소스 라이브러리 버전 정보를 표시하는 방법입니다.
AcknowList 설치 및 설정
- CocoaPods를 통해 AcknowList를 프로젝트에 추가합니다. Podfile에 다음과 같이 추가합니다:
pod 'AcknowList'
- 터미널에서 프로젝트 디렉토리로 이동한 후 다음 명령어로 CocoaPods를 업데이트합니다:
$ pod install
- 프로젝트의
info.plist
파일에 다음 코드를 추가하여 AcknowList에 필요한 권한을 설정합니다:
<key>NSPhotoLibraryUsageDescription</key>
<string>Our app uses third-party libraries that may have licenses requiring us to acknowledge them. This screen lists them all, shows their licenses, and links to more info.</string>
AcknowList 사용하기
-
AcknowList를 사용하기 위해 프로젝트 내에
Acknowledgements.plist
파일을 생성합니다. -
Acknowledgements.plist
파일을 열고, 상단에 다음 코드를 추가합니다:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>Third-Party Libraries</string>
</dict>
</array>
</dict>
</plist>
Acknowledgements.plist
파일에서PreferenceSpecifiers
키 아래에 아래와 같이 오픈 소스 라이브러리 정보를 추가합니다:
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>Third-Party Libraries</string>
</dict>
<!-- 다른 라이브러리 정보 -->
<dict>
<key>Type</key>
<string>PSChildPaneSpecifier</string>
<key>Title</key>
<string>Alamofire</string>
<key>FooterText</key>
<string>Version 5.4.3</string>
<key>License</key>
<string>MIT License</string>
</dict>
<!-- 다른 라이브러리 정보 -->
</array>
위 예시에서 Alamofire
는 오픈 소스 라이브러리의 이름, Version 5.4.3
은 해당 버전 정보, 그리고 MIT License
는 라이선스 정보입니다. 프로젝트에 사용한 오픈 소스 라이브러리마다 필요한 정보를 추가해주세요.
- 프로젝트 내에 AcknowViewController.swift 파일을 생성합니다. 파일을 생성한 후 아래 코드를 복사하여 붙여넣습니다:
import UIKit
import AcknowList
class AcknowViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Acknowledgements"
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(didTapDone))
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
self.tableView.tableFooterView = UIView()
if let path = Bundle.main.path(forResource: "Acknowledgements", ofType: "plist") {
if let acknowledgements = AcknowParser.parseAcknowledgements(atPath: path) {
self.acknowledgements = acknowledgements
self.tableView.reloadData()
}
}
}
// Helpers
@objc private func didTapDone() {
self.dismiss(animated: true, completion: nil)
}
// UITableViewDataSource
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return acknowledgements?.count ?? 0
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let acknowledgement = acknowledgements?[indexPath.row]
cell.textLabel?.text = acknowledgement?.title
cell.accessoryType = .disclosureIndicator
return cell
}
// UITableViewDelegate
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let acknowledgement = acknowledgements?[indexPath.row]
if let acknowledgementViewController = AcknowViewController(acknowledgement: acknowledgement) {
self.navigationController?.pushViewController(acknowledgementViewController, animated: true)
}
}
// Initialization
let acknowledgements: [Acknow]?
init(acknowledgement: Acknow? = nil) {
if let acknowledgement = acknowledgement {
self.acknowledgements = [acknowledgement]
} else {
self.acknowledgements = nil
}
super.init(style: .grouped)
}
required init?(coder aDecoder: NSCoder) {
self.acknowledgements = nil
super.init(coder: aDecoder)
}
}
- 사용하고자 하는 ViewController에서 다음과 같이 AcknowViewController를 present하면, AcknowList가 나타납니다:
let acknowledgementsViewController = AcknowViewController()
let navigationController = UINavigationController(rootViewController: acknowledgementsViewController)
self.present(navigationController, animated: true, completion: nil)
위 방법을 통해 AcknowList를 쉽게 사용하여 오픈 소스 라이브러리의 버전 정보를 앱에 표시할 수 있습니다.
더 자세한 정보는 공식 AcknowList GitHub 저장소를 참조해주세요.