애플 로그인 구현하기 (Sign in with Apple) 애플 로그인이란?? 앱을 다운받고 실행하면 초기화면에 다음과 같은 버튼을 본적이 있다. 요녀석들! 혹은 카카오, 네이버, Google 로 시작하기 같은 버튼등 편리한 로그인 기능이 있는데 그중 apple 아이디로 회원가입,로그인 기능을 얘기한다. apple에서는 유저의 어떠한 개인정보도 드러내지 않고 로그인할수있도록 했다. (일부앱은 이름이나 이메일을 요구할수도 있다.) 위와같이 이메일을 숨길수도 있는데 이때 숨김옵션을 사용하게되면 실제이메일을 유니크한 랜덤 주소로 만들어준다. 애플은 아무것도 track 하지 않으므로 유저의 개인정보를 보호할수 있도록한다. 구현하기 1. 프레임워크 import하기. import AuthenticationServi..
Launch Screen 런치 스크린(Launch Screen)이란? 공식문서에 아래와 같이 정의 되어있다. 앱이 시작할 때 즉시 나타나고 앱의 첫 번째 화면으로 빠르게 교체되는 화면으로 앱이 빠르고 반응이 좋다는 인상을 줄 수 있다고 한다. 앱의 데이터를 로딩하는 동안 빈 화면을 보여주지 않기 위해 나타내는 화면으로 표현될 수도 있다. 앱의 아이덴티티를 나타낼 수 있는 화면이기도 하다. 앱만의 아이콘, 이미지를 이용해 유저에게 강한 인상을 심어줄 수 있다. iOS에서는 launch Screen, 안드로이드 에서는 splash라는 표현을 쓰는것 같다. 런치스크린을 만들때는 다음과 같은 지침을 따라야한다. UIKit만을 사용해야 한다. 단 하나의 UIView나 UIViewController 객체만을 사용해..
APIKey를 Github에 노출되지 않도록 해야한다! 혹시나 노출되어 법적문제가 발생할수도 있다는...말을 어디선가 들었다..! APIKey 소중하니까 숨겨보도록하자..! APIKEY 숨기는법 1. PropertyList 먼저 PropertyList 파일을 하나 생성해준다! 파일명은 현재 사용하고 있는 API이름을 따서 MalrangMarketInfo 라고 만들어둡니다! 파일에 API_KEY라는 이름의 Key를 하나 추가합니다! VendorId와 Secret은 무시해주세요! Value에는 사용할 APIKEY값을 입력해주면 됩니다! 2. Bundle Extension PropertyList 파일 작업이 끝나고나면 이제 .swift 파일을 하나 만들어줍니다! 네이밍은 Bundle+Sugar 라고 작성해 두..
Cache, NSCache, URLCache Cache(캐시) Cache 란 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 저장소를 가르킨다. IOS 파일 시스템에서는 Library 내부에 위치하며 백업이 불가능하다. 저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공한다. 반복적으로 서버에서 동일한 데이터를 받아와야 하는경우 캐시를 활용하면 효율적이게 된다. Cache 를 사용한다는것은 반복적으로 동일한 데이터를 서버에서 불러오는 경우 서버에 데이터를 요청하는 것이 아니라 메모리에 데이터를 저장했다가 불러다 쓰는것을 의미한다. 서버에서 데이터를 받아오는것보다 메모리에서 가져오는것이 더빠르기때문에 성능의 이점이 있다. 이때 원하는 데이터가 캐시에 존재할경우 Cache Hit 이라고하며 원하는 데이..
Underline SegmanetControl 포폴용으로 마켓 앱을 만들고 있는데 오늘의집의 앱의 상단에 위치한 누르면 underline이 움직이는 요거 만들고 싶었습니다. 먼저 SegmentControl을 상속받는 CustomSegmentControl 을 만들어줍니다! private enum SegmentType: String, CaseIterable { case latelyProduct = "최근 상품" case popularProduct = "인기 상품" static var value: [String] { return Self.allCases.map { $0.rawValue } } } final class UnderlineSegmentControl: UISegmentedControl { init()..
궁금증 노티피케이션을 사용할때 옵저버를 해제하지 않고 해당 클래스가 종료되면(view가 pop, dissmis를 의미) 옵저버도 같이 해제되는걸까? 1view, 2view 에서 Notification center 을 사용할때 2view 에서 옵저버를 해지 하지않을경우 2view가 메모리에서 제대로 해지되지않고 좀비처럼 남아있을수 있다. (자동으로 같이 메모리에서 해제될줄 알았다..) 1view, 2view 에서 1view->2view로 modal present 2view->1view 로 dissmis 하게될경우 1view 의 라이프사이클은 어떻게 되는걸까? 네비게이션과 동일하게 1view 는 viewDidLoad 는 처음 한번만 호출되며 그후 dissmis 로 돌아오게 될 경우 1view 의 viewWi..
tag 사용법 코드로 태그를 부여하는것도 가능하며 storyBoard에서도 가능하다. 위와 같이 label 에 tag 를 달아주는것이 가능! 아래 쪽에 Tag 라고 하는 공간이있으며 기본값은 0 이기때문에 0으로 설정되어있는 모습. tag 를 사용하여 label,button 등 UI컴포넌트에 enum 의 원시값 처럼 Int 값을 넣어 사용할수있다. tag에 들어올수있는 값은 Int(1,2,3...)만 가능하다. 활용예시 각각의 버튼을 하나의 @IBAction 메서드에 연결하여 sender 를 이용하여 활용한 모습이다. @IBAction func touchToOrderJuice(_ sender: UIButton) { switch sender { case ddalBaJuiceOrderButton: makeJ..
UserDefaults 설정해둔 데이터가 저장되어있다면 앱을 껏다 켜도 데이터가 사라지지 않고 남아있어 데이터를 활용할수있다. 간단히 말하면 데이터 저장소 라고 할수있다. 전역에 위치하여 어디서든 데이터를 쉽게 읽고 저장할수있다! 객체를 저장할수도 있다. UserDefaults는 사용자 기본 설정과 같은 단일 데이터 값에 적합하다. 대량의 유사한 데이터 를 저장해야하는 경우에는 sqlite 데이터베이스가 더 적합하다. UserDefaults 사용법 UserDefaults 는 [key: Value] 로 데이터를 저장하는데 이때 key 값은 String 이다. UserDefaults 를 이용해 값을 저장할때는 set메서드를 이용한다. UserDefaults 에 값을 저장할때 기존의 key 와 같은 key를 ..