[swift] Swift AcknowList를 사용하여 앱에서 사용 중인 오픈 소스 라이브러리에 대한 버전 정보를 표시하는 방법을 알려주세요.

AcknowList는 앱에서 사용 중인 오픈 소스 라이브러리와 해당 버전 정보를 표시하는 데 도움을 주는 CocoaPods 라이브러리입니다. 이를통해 사용된 오픈 소스 라이브러리들을 쉽게 인식하고, 버전 정보를 한눈에 확인할 수 있습니다. 아래는 Swift 프로젝트에서 AcknowList를 사용하여 오픈 소스 라이브러리 버전 정보를 표시하는 방법입니다.

AcknowList 설치 및 설정

  1. CocoaPods를 통해 AcknowList를 프로젝트에 추가합니다. Podfile에 다음과 같이 추가합니다:
pod 'AcknowList'
  1. 터미널에서 프로젝트 디렉토리로 이동한 후 다음 명령어로 CocoaPods를 업데이트합니다:
$ pod install
  1. 프로젝트의 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 사용하기

  1. AcknowList를 사용하기 위해 프로젝트 내에 Acknowledgements.plist 파일을 생성합니다.

  2. 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>
  1. 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는 라이선스 정보입니다. 프로젝트에 사용한 오픈 소스 라이브러리마다 필요한 정보를 추가해주세요.

  1. 프로젝트 내에 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)
    }
    
}
  1. 사용하고자 하는 ViewController에서 다음과 같이 AcknowViewController를 present하면, AcknowList가 나타납니다:
let acknowledgementsViewController = AcknowViewController()
let navigationController = UINavigationController(rootViewController: acknowledgementsViewController)
self.present(navigationController, animated: true, completion: nil)

위 방법을 통해 AcknowList를 쉽게 사용하여 오픈 소스 라이브러리의 버전 정보를 앱에 표시할 수 있습니다.

더 자세한 정보는 공식 AcknowList GitHub 저장소를 참조해주세요.