관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] Siren 프레임워크 - 강제 업데이트 방법, 버전 개념 (CFBundleVersion, CFBundleShortVersionString, Version, Build, Marketing_Version, Current_Project_Version) 본문

iOS framework

[iOS - swift] Siren 프레임워크 - 강제 업데이트 방법, 버전 개념 (CFBundleVersion, CFBundleShortVersionString, Version, Build, Marketing_Version, Current_Project_Version)

jake-kim 2021. 12. 29. 02:02

iOS 에서 사용하는 버전의 개념

  • Xcode에서 관리하는 버전
    • CFBundleShortVersionString (marketing_version) - Aoo Store에 게시할 때마다 증가해줘야 하는 버전 major.minor.patch
    • CFBundleVersion (Current_Proejct_Version) - 개발자가 내부적으로 확인하기 위한 용도
      (날짜를 사용하기도 함 - 2021.12.29.1 )
  • 코드에서 접근 - Bundle.main.infoDictinoary로 접근
    let marketingVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
    let currentProjectVersion = Bundle.main.infoDictionary?["CFBundleVersion"] as? String
    print(marketingVersion!) // 1.0.2
    print(currentProjectVersion!) // 1

Siren

https://github.com/ArtSabintsev/Siren#localization

  • App Store에서 현재 사용 가능한 앱 버전을 체크하여 사용자에게 alert를 띄워주는 것을 간편화 시킬 수 있는 프레임워크
  • 알림 alert에 구체적인 알림 시점(일주일 한 번, 하루 한번, 항상), 생략 옵션(버전 건너 뜀, 다음에 업데이트)등을 쉽게 적용 가능
  • Localizable에 대응되었기 때문에 사용자의 지역에 따라서 해당 언어 제공
    (Localizable이 지원되지 않는 지역이면 영어로 표출)

https://github.com/ArtSabintsev/Siren

설치

  • cocoapods 사용 시
    pod 'Siren'
  • SPM 사용 시
    https://github.com/ArtSabintsev/Siren​
     

디폴트 사용

  • App Store에 올라가 있는 앱인 경우만 사용
  • App Delegate 또는 SceneDelegate에서 window?.makeKeyAndVisible() 이후 코드에서 사용
    import Siren // <- 임포트
    import UIKit
    
    class SceneDelegate: UIResponder, UIWindowSceneDelegate {
      var window: UIWindow?
      func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        window?.makeKeyAndVisible()
        Siren.shared.wail() // <- 이렇게 사용
      }
      ...
    }​

커스텀하여 사용

      • App Store에 올라가 있는 앱인 경우만 사용
      • 문구 커스텀
        Siren.shared.presentationManager = PresentationManager(
          appName: "MyApp",
          alertTitle: "업데이트",
          updateButtonTitle: "업데이트 해주세요"
        )​
      • 알림 시점 / 업데이트 기간 설정 / 버전 건너 뜀 설정
        Siren.shared.rulesManager = RulesManager(globalRules: .critical) // globalRules, majorUpdateRules... 설정 가능
        • annoying: (항상 확인) / 다음에 업데이트default: (하루 한 번) / 다음에 업데이트 / 버전 건너 뜀hinting: (일주일 한 번) / 다음에 업데이트
        • relaxed: (일주일 한 번) / 다음에 업데이트 / 버전 건너 뜀
        • persistent: (하루 한 번) / 다음에 업데이트
        • critical: (항상 확인) / 즉시 업데이트
          cf) 커스텀 가능: let customRules = Rules(promptFrequency: .daily, forAlertType: .force)

 

      • 버전 체크 시점 설정 및 alert 표출
        Siren.shared.wail(performCheck: .onDemand) { result in
          print(result)
        }


        • onDemand: wail() 메소드가 불릴때만 체크
        • onForeground: foreground 진입할때마다 체크
  • custom 전체 코드
    Siren.shared.presentationManager = PresentationManager(
      appName: "MyApp",
      alertTitle: "업데이트",
      updateButtonTitle: "업데이트 해주세요"
    )
    
    // 알림 시점 정의
    // annoying: (항상 확인) / 다음에 업데이트
    // critical: (항상 확인) / 즉시 업데이트
    // default: (하루 한 번) / 다음에 업데이트 / 버전 건너 뜀
    // persistent: (하루 한 번) / 다음에 업데이트
    // hinting: (일주일 한 번) / 다음에 업데이트
    // relaxed: (일주일 한 번) / 다음에 업데이트 / 버전 건너 뜀
    Siren.shared.rulesManager = RulesManager(globalRules: .critical)
    
    // 버전 체크 후 alert 표출
    // onDemand: wail() 메소드가 불릴때만 체크
    // onForeground: foreground 진입할때마다 체크
    Siren.shared.wail(performCheck: .onDemand) { result in
      print(result)
    }​

* 참고

- https://stackoverflow.com/questions/19726988/what-values-should-i-use-for-cfbundleversion-and-cfbundleshortversionstring

- https://github.com/ArtSabintsev/Siren

Comments