예전에도 Pagination은 해 본 경험이 몇 번 있었지만 뭔가 아직 개념이 명확하게 잡히지 않았다는 생각에 뚱땅뚱땅 Pagination 실습을 진행하게 되었다. 내가 정의한 기능은 다음과 같다. (출처 내 머리) 1. 텍스트 필트에 텍스트를 한 글자 입력할 때 마다 결과가 로드된다. 2. 입력 텍스트가 변경되면 데이터를 다시 받아온다. 3. UI는 image가 한줄에 3개씩, API 1회 호출 시 데이터가 20개씩 추가된다. 4. 가장 아래로 스크롤 하면 다음 결과를 불러온다. 5. 이미지는 캐싱처리되어 이후 필요할 경우 캐싱된 데이터를 사용한다. 사용한 라이브러리는 Moya로 Api 호출을 하고, Kingfisher로 이미지 로드와 캐싱을 처리했다. 실습에는 Kakao Search Image API..
데이터를 저장하는 방법에는 UserDefaults, CoreData, Keychain... 등 여러가지 방법이 있다. 그러나 데이터의 종류가 다양하기 때문에 각각의 방법들의 쓰임새가 다른데 많고 많은 방법 중 키체인 방식에 대해 알아보고자 한다. Keychain(키체인)이란? https://developer.apple.com/documentation/security/keychain_services Keychain Services | Apple Developer Documentation Securely store small chunks of data on behalf of the user. developer.apple.com 애플 공식 문서에 따르면 안전하게 저장해야하는 작은 데이터를 저장할 때 사용한다고..
https://developer.apple.com/documentation/uikit/uiimage/orientation UIImage.Orientation | Apple Developer Documentation Constants that specify the intended display orientation for an image. developer.apple.com 이미지를 회전하고 크롭하는 기능을 구현하면서 orientation이라는 기능을 알게 되었다. orientation을 통해 이미지가 나타나는 시점에 회전 방향을 결정하여 화면에 나타난다. 내가 원하는 이미지를 불러와 orientation값을 찍어보았다. print("[orientation] \(image.imageOrientation)"..
이전에 로컬에서 보내는 푸시는 구현한 경험이 있었지만 FCM이나 APNS를 사용한 경험이 없어 조금 생소하게 다가왔다. FCM을 사용해도 애플 개발자 계정에서 APN을 설정해서 인증서나 토큰을 등록해야했는데 이 과정을 학습해보고자 한다. 푸시 종류 1. 로컬에서 직접 보내는 알림 2. 서버에서 보내는 알림 내가 사용한 FCM은 2번에 속한다. APNS란? Apple Push Notification Service로 iOS에서 푸시 알림을 보내기 위해 APNS를 사용해야한다. 서버에서 보내는 알림의 경우 꼭 이 APNS를 거쳐야한다. FCM을 사용할 때 파이어베이스에서 알림을 보낸다고 착각할 수 있는데 사실 APNS로 알림을 보내는거고 실제 알림은 APNS로부터 오게된다. 앱을 시작할 때 아래 코드를 통해 ..
디바이스의 고유한 값을 통해 무언가를 식별하기위한 고유한 값이 필요할 수 있다. 이때 사용되는 개념으로 UUID와 UDID가 있다. 1. UDID (Unique Device Identifier) 각 기기에 부여되는 고유한 디바이스 식별값이다. 어떤 앱을 사용하더라도 이 값은 동일한 값을 가진다. iOS5 이전에는 코드로 확인할 수 있었지만 사용자 개인 정보 보호 목적으로 인해 deprecated 되었다. 지금은 코드로 확인은 불가능하며 iTunes를 통해 확인할 수 있다. UDID가 deprecated 되면서 이를 대체하기 위해 UDID를 사용할 수 있다. 2. UUID (Universally Unique Identifier) deprecated된 UDID를 대체하기위해 UUID를 사용할 수 있다. UI..
입사 후 신규 프로젝트를 시작하게 되었다. 대부분 웹뷰로 되어있는 프로젝트였기 때문에 크게 어려운 프로젝트는 아니였다. 조금 막막하게 느껴졌던 기능이 있었는데, 앱 내에서 사진을 촬영한 후 그 사진을 디자인된 크기에 맞게 잘라 인코딩 후 웹으로 보내주는 작업이 필요했다. 사진을 자르는 기능에는 회전 기능도 포함되었기 때문에 회전기능을 어떻게 구현하는지 막막해 다른 멋진 사람들이 만들어둔 라이브러리를 가져다가 커스텀해 사용하기로 결정했다. 당장 선임님이 없었기 때문에 내가 꼭 구현해내야만 했고 좀 막막했지만.. 해야하기 때문에 아직 많이 남아있던 시간에 감사하며 빠르게 하고자 하였다. 먼저 내가 사용한 사진 편집 라이브러리는 이것이다. https://github.com/TimOliver/TOCropView..
새로운 프로젝트를 진행하면서 웹뷰를 사용하게 되었다. 기존에 내가 경험해 봤던 웹뷰는 간단하게 화면을 띄워주는 것과 웹뷰를 이용한 패스 인증만 해본 경험이 있어서 생소한 개념으로 다가왔다. 프로젝트가 대부분 웹뷰로 되어있어서 꼭 네이티브가 필요한 작업들(카메라, 알림 등..)을 제외하곤 모두 웹뷰로 되어있었기 때문에 해야 할 작업이 적었음에는 확실했지만 간단하지만 처음 경험해 보는 웹뷰 연동에 많은 시행착오가 있었다. 먼저 제목으로 언급한 WKWebView 말고 UIWebView, SFSafariView와 같은 종류의 웹뷰가 있다. 1. UIWebView iOS 2.0에 출시된 굉장히 오래된 웹뷰이다. 현재 deprecate 되었으므로 UIWebView는 다른 방식으로 대체하여 사용한다. 2. WKWeb..
네이티브와 웹뷰를 연동하여 개발 중 크롬과 사파리와 같은 브라우저에서는 별다른 설정 없이도 자동로그인이 가능했지만 네이티브로 연결된 WKWebView에서는 자동로그인 기능을 사용할 수 없었다. 이유는 WKWebView에서는 쿠키 값을 따로 설정해주어야만 자동로그인이 가능했기 때문이였고, 안드로이드와 동일한 사용자 경험을 제공하기 위해서 자동로그인을 위해 쿠키 값을 직접 설정해주었다. 또한 쿠키 value가 기존 값을 유지하지 않고 새로 만들어주는 상황이였기 때문에 자동로그인이 정상적으로 작동하지 않는 것 같았다. 사파리 개발자 도구를 사용해 휴대폰 모바일 웹 페이지를 개발자 도구로 디버깅하였다. (크롬도 동일하게 사용 가능하지만 그냥 사파리 써본적이 없어서 사용해보았다! 써보니까 사파리가 좀 더 편한것 ..