Story Notifier

요약

개발범위 전체
레포지터리 주소 https://github.com/CenoX/storynotifier
레포지터리 생성 일자 2016. 12. 29.. 2018.01.17
사용한 언어 Swift
사용한 개발 툴 (IDE) Xcode
활성화 된 기능 N/A
사용된 라이브러리
  • Sparkle - A software update framework for macOS
  • 릴리즈 CenoX IDC [릴리즈 하고있지 않음.]

    개요

    모바일 SNS 서비스인 KakaoStory의 알림을 macOS에서도 확인할 수 있게 해주는 애플리케이션이며, Reflection님이 만든 Story Notifier를 macOS 플랫폼에서 사용할 수 있게 포팅한 애플리케이션입니다.

    편한 업데이트 환경을 위해 Sparkle 프레임워크를 활용하였으며 개인 블로그 사이트에서지만, 배포가 이루어진 첫 macOS 애플리케이션입니다.

    애플리케이션 아이콘은 shiftpsh가 제작하였습니다.

    앱 내용

    가장 먼저 실행하면,

    스크린샷 2017-05-22 오후 8.02.40

    카카오 ID와 비밀번호를 입력하는 창이 나옵니다. 유저가 입력을 다 한 후, LOGIN 버튼을 누르면 정규표현식을 사용해 올바른 이메일인지 검사한 후, Kakao의 로그인 URL에 POST를 보내 로그인을 시도합니다.

    로그인에 성공했을 경우,

    스크린샷 2017-05-22 오후 8.05.01

    로그인 성공 알림과 함께, 애플리케이션을 실행하기만 하면 바로 알림을 받아볼 수 있도록 자동로그인의 활성화를 묻습니다.


    자동 로그인

    자동 로그인 기능은, 사용자가 애플리케이션을 시작할 때마다 별도의 조작없이 바로 로그인을 할 수 있게끔 만든 기능이며, 관련 설정은 UserDefaults에 저장됩니다. 하지만 자동로그인을 사용할 수 있다는 것은 유저의 정보가 어딘가에는 반드시 저장되어야 함을 의미하며, 비록 개인이 쓰려고 만든 애플리케이션이지만, 배포를 결정한 이상 사용자의 개인정보는 반드시 지켜져야 할 정보라고 판단, AES256을 이용하여 데이터를 암호화 하고 샌드박스로 주어지는 경로 내에 저장합니다. 그리고 당연하게도, 개인정보는 로그인을 위해 사용하는 것을 제외하고는 어디에도 사용되거나 전송하지 않습니다.

    만약, 자동로그인이 활성화 된 상태에서 애플리케이션을 실행할 경우

    스크린샷 2017-05-22 오후 8.36.46

    위의 알림이 나오며 사용자에게 로그인되었음을 알립니다.


    버튼을 클릭하면, 로그인 창과 함께 사라지며 NSUserNotification을 이용해 가장 최근 알림부터 사용자게에 알립니다.

    스크린샷 2017-05-22 오후 8.06.03

    스크린샷 2017-05-22 오후 8.06.06

    상단바를 통해 알림을 몇초마다 갱신할 것인지에 대한 설정을 제공하며,

    스크린샷 2017-05-22 오후 8.07.19

    하단에는 업데이트 확인, 종료, 그리고 로그아웃 버튼이 위치해 있습니다. 주기 설정의 저장은 UserDefaults를 통해 이루어지며, 저장이 완료되었을 경우 애플리케이션을 재시작 할 수 있게 하기위해 터미널 애플리케이션인 relaunch 프로젝트를 번들에 포함시키고, NSApplication에 extension 을 추가하여 바로 재시작을 시킬 수 있도록 하였습니다.


    relaunch

    현재 실행중인 애플리케이션을 종료하고, 다시 실행하기 위해 추가된 프로젝트이며, 보조 프로그램입니다. 메인 애플리케이션의 소스에서 Process() 클래스로 초기화 후, launchPath를 번들 내의 컴파일 된 바이너리로 지정한 후, 현재 실행중인 자신의 processID를 인자로 변환하여 실행합니다.

    relaunch 프로세스가 실행되면, 메인 애플리케이션의 bundleURL과 PID를 확인하고, terminate() 시킨 뒤, launchApplication(at url: URL, options: NSWorkspaceLaunchOptions = [], configuration: [String : Any]) throws -> NSRunningApplication 함수로 애플리케이션을 다시 실행시킵니다.


    로그아웃 시에는 먼저 유저에게 로그아웃 확인 알림창을 띄운 후,

    스크린샷 2017-05-22 오후 8.38.16

    유저가 로그아웃 버튼을 누르면, UserDefaults에 저장된 모든 정보를 삭제하고, 애플리케이션이 종료되기 전 NSUserNotification 을 이용해 로그아웃이 완료되었다는 알림을 띄우고 종료됩니다.

    스크린샷 2017-05-22 오후 8.40.27