앱 개발 시에 고도화된 암복호화 방식을 사용해보기 위해,기존 SharedPreferences를 사용하던 부분을MasterKey 기반 보안 저장소인 EncryptedSharedPreferences로 교체했다.그 과정에서 새롭게 알게된 부분과 겪은 이슈를 정리해보려고 한다.MasterKeyAndroidX Security 라이브러리에서 EncryptedSharedPreferences 또는 EncryptedFile 사용 시 내부적으로 관리되는 AES 암호화용 루트 키앱 내 암복호화 시 공통적으로 사용되는 키를 안전하게 관리하는 객체실제 키는 Android Keystore(System-level secure storage)에 저장됨앱의 인증서/서명에 따라 관리되며, 앱 재설치 시 다른 키로 재생성됨val mast..
핸드폰에서 웹 url을 공유받아서 누르면 내가 설치된 앱으로 바로 이동되는 기능은 누구나 사용해봤을 것이다.또는 해당 웹이 웹뷰로 뜨더라도, 페이지 내에 있는 '앱 열기' 버튼으로도 바로 이동할 수 있다(ex. 카카오톡으로 공유받은 유투브 링크, 인스타그램의 오픈카톡 링크)이러한 기능들은 딥링크 또는 Android 의 App links 또는 iOS의 Universal Links로 처리되어있다. 오늘은 먼저, Android 의 App Links에 대한 내용을 정리해보겠다.Android dEvelopers문서에는 링크를 처리하는 방식엔 크게 아래와같은 3가지가 있다고 안내되어있다.Deep links & Web links & App links구분딥링크 웹링크앱링크기본 스킴커스텀스킴ex) myapp://http..
4년만에 다시 공부 기록을 시작하려 한다.오랜만에 들어온 블로그 글의 조회수가 아직도 올라가는걸 보니 신기하고, 글로 써놓은 내용은 확실히 더 잘 기억하고 있는 나를 보며 기록의 소중함을 느낀다.이번엔 Jetpack에서 흥미로운 라이브러리들을 공부해보려 한다. android 공식문서에서 jetpack 라이브러리를 잘 활용한 앱 예시를 보던 중, TicTok의 사례에서 아래 내용을 보게 되었다.TikTok의 시작 시간을 줄이기 위해 팀은 Android Jetpack의 앱 시작 라이브러리를 기반으로 시작 프레임워크를 리팩터링했습니다. 어떤 내용인가 살펴보니, 앱과 라이브러리 모두에서 초기화 로직을 간소화 하고 초기화 실행 순서 자체도 제어할 수 있는 사용법은 매우 간단하지만 활용도는 아주 높은 라이브러리였다..
MLKit로 얼굴을 인식해서 필터를 씌워주는 개발중이다. 얼굴 위에 사각형을 그려주거나 점을 찍는 필터를 개발하며 iOS의 Core Graphics 를 사용하게되었다. CGFloat, CGSize 등 여러가지 CG들이 등장했는데, 이것을 한번 정리해보겠다. Core Graphics 아이폰과 아이패드에서 2차원 그래픽을 그릴 수 있도록 제공하는 그래픽 라이브러리 애플의 'Quartz'라는 그래픽 안에 포함되어 있으며 Core Graphics 외에도 Core Animation 라이브러리가 함께 존재한다. Core Graphics의 자료구조 CG를 사용해 그래픽을 그려주려면 크기나 위치 지정을 위해 계속 등장하는 CG~~들이 있다! ✔️ CGFloat Apple Developer Documentation de..
MLKit를 쓰기 위해 iOS 프로젝트에 파이어베이스를 사용 설정을 해야하는 일이 생겼다! iOS 프로젝트의 여러가지 설정에 익숙하지 않아 겁을 먹었지만 생각보다 간단했다. 또 파이어베이스를 사용하기 위해서는 안드로이드의 gradle과 같은 iOS의 pod 파일도 함께 관리해줘야한다. 일단 시작~~!~! 📌 01. Firebase 프로젝트 만들기 Firebase Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이 되는 Google의 모바일 플랫폼입니다. firebase.google.com Firebase 사이트 접속하여 로그인 후에 새 프로젝트를 만들어준다. 무료 계정은 프로젝트 개수에 제한이 있다! 📌 02. 프로젝트에 앱 등록하기 생성한 프로젝트에 원하는 플랫폼을 선택하여 ..
ViewController의 생명주기 앱에 나타나는 하나의 화면은 하나의 ViewController를 가짐 사진과 같은 구조로 호출되는 함수를 override하여 각 타이밍에 맞게 원하는 작업을 수행할 수 있음 ✔️ viewDidLoad() 뷰의 컨트롤러가 메모리에 로드되고 난 후 시스템에 의해 자동 호출되는 메소드 화면이 처음 만들어질 때 한번만 수행 리소스 초기화 또는 초기 화면 구성 등의 작업 수행 + 안드로이드의 onCreate() 같은 역할 ✔️ viewWillAppear() 뷰가 화면에 나타나기 직전 호출되는 메소드 다른 화면에 갔다가 돌아왔을 때 다시 복구 또는 실행해야하는 작업 수행 + 안드로이드의 onResume() 같은 역할 ✔️ viewDidAppear() 뷰가 화면에 나타난 후 실행..
iOS 앱의 5가지 생명주기 Not Running App이 아직 실행되지 않았거나 완전히 종료된 상태 Inactive(Foreground) App이 실행되고 있어 foreground에 있지만 이벤트를 받지 않는 상태 Active 상태로 넘어가기 전에 잠시동안 머무른다 ex) 미리알림 등의 alert가 올라와 앱이 실질적으로 이벤트를 받지 못하는 상황 Active(Foreground) App이 실행되고 있어 foreground에 있고 이벤트가 발생한 상태 일반적으로 앱이 돌아가는 상태 Background App이 background 상태에 있으나 실행되고 있는 코드가 있는 상태 Background 상태로 실행되는 app은 inactive 대신 background 상태로 진입 Suspended 상태로 넘어가..
문제 그래프가 주어졌을 때, 그 그래프의 최소 스패닝 트리를 구하는 프로그램을 작성하시오. 최소 스패닝 트리는, 주어진 그래프의 모든 정점들을 연결하는 부분 그래프 중에서 그 가중치의 합이 최소인 트리를 말한다. 입력 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 가중치 C인 간선으로 연결되어 있다는 의미이다. C는 음수일 수도 있으며, 절댓값이 1,000,000을 넘지 않는다. 그래프의 정점은 1번부터 V번까지 번호가 매겨져 있고, 임의의 두 정점 사이에 경로가 있다. 최소 스패닝 트리의 가중치가 -2,147,483,..