IOS

    [iOS Error] - [RTIInputSystemClient remoteTextInputSessionWithID:performInputOperation:] perform input operation requires a valid sessionID .feat: RxSwift

    [RTIInputSystemClient remoteTextInputSessionWithID:performInputOperation:] perform input operation requires a valid sessionID UITableViewCell에 위치한 TextField를 선택하면 firstResponder가 되자 마자 바로 위의 에러가 발생하며 resign이 되는 오류였습니다. 구조는 다음과 같습니다 TableView -> Cell -> StackView -> TextField(문제가 되는 부분) UITableView는 내부 컨텐츠 크기만큼 height이 늘어나도록 만들어둔 커스텀 클래스였고 그렇기 때문에 재사용 이슈가 발생하지 않지 않을까 했지만 새로운 값이 바인딩 될 때 재사용이 발생합니다..

    [iOS] - 클릭 이벤트가 발생하지 않는 이유

    사이드 프로젝트를 진행하다 제 하루를 날려먹은 원인을 기록하고자 합니다.. 커스텀 바텀 시트를 구현중이었습니다. 아래의 커스텀 바텀시트를 구현중이었고 닫기의 tap Event를 뷰모델에 바인딩을 했는데 아무리 클릭을 해도 tap 이벤트가 발생하지 않았습니다. 해당 뷰는 이런구조입니다. 뷰컨 - 1커스텀뷰(반투명 배경의 뷰) - 2커스텀뷰(바텀시트뷰) 애니메이션까지 모두 구현했으나 아무리 탭 이벤트가 발생하지않습니다. 그래서 1커스텀뷰에 touchesBegin을 찍어보니 1커스텀뷰까진 터치이벤트가 잘 전달됩니다. 그래서 2커스텀뷰의 레이아웃을 확인해보니 contentView는 내부의 컨텐츠를 스택뷰로 구현해놓은 UIStackView입니다. 2커스텀뷰의 top이 bottom과 같았을테고 event전달이 하위..

    [iOS] Push Notification(3). FCM

    Firebase를 이용해 원격 푸시 알림을 사용해봅니다. Push Notification(1), Push Notification(2)에 PushNotification과 APNs의 내용들을 자세히 정리했기 때문에 추가적인 설명은 넘어가겠습니다. 1. APNs 인증 키를 발급받아야합니다. Apple Developer > 인증서, 식별자 및 프로파일 > 키 키는 계정당 2개가 최대입니다. 키 이름은 원하는대로 생성하고, Apple Push Notifications 를 체크합니다. Continue를 클릭합니다. Register를 선택하고 등록을 완료하면 "Download Your Key" 페이지가 등장하는데, 여기서 우측에 DownLoad버튼을 클릭하면 ".p8" 확장자의 파일이 다운로드됩니다. 여기서 p8..

    [iOS] Push Notification(2). PushNotification 구현

    출처: Kodeco PushNotification Push Notification에 필요한 배경지식은 여기에 정리되어있습니다. PushNotification은 흔히 푸시알림, 푸시 메시지로 일컫는 형태입니다. 앱에서 알림을 보내야 하는 경우가 필요합니다. 새로운 메세지가 왔던가, 새로운 소식을를 전달하던가 Push를 진행하기 위해선 Push Server가 필요하지만.. 여기에선 terminal을 통한 push TEST를 진행해봅니다. 사전 작업 1. Bundle Identifier PushNotification을 사용하기 위해선 Apple Developer계정이 있어야 합니다. Bundle Identifier를 설정해줍니다. 2. Push Notification 사용 설정 해당 Target에 Signin..

    [iOS] 소켓통신 (2). echo server와의 소켓통신.

    echo server echo server는 클라이언트가 전송해주는 데이터를 그대로 되돌려 전송해 주는 서버를 말합니다. 소켓통신을 공부해보려 하는데 연결할 서버가 없어서 echo server를 이용해보기로 했습니다. 간단한 echo_server입니다. # echo_server.py import socket def start_echo_server(): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('ip주소', 8085)) server_socket.listen(5) print("Echo server is listening...") while True: client_socket, addr = serv..

    [iOS] 스토리보드와 코드베이스 UI구현

    iOS 개발에서 UI를 구현하는 방식에는 크게 스토리보드를 사용하는 방식과, 코드로 구현하는 방식이 있습니다. 각 방식의 장점과 단점을 정리해봅니다. 스토리보드로 UI 구현시 장점 시각적 편의성: 스토리보드에서 UI컴포넌트를 드래그 앤 드롭으로 배치할 수 있으므로 레이아웃을 쉽게 구성할 수 있습니다. 코드량 감소: UI컴포넌트의 배치와 속성을 직접 코드로 작성하지 않아도 되므로 초기 코드량이 줄어듭니다. 화면 플로우 파악: 여러 뷰 컨트롤러와 세그웨이(segue)를 한눈에 볼 수 있어 앱의 전체적인 플로우와 네비게이션을 쉽게 파악할 수 있습니다. 인터페이스 빌더: 여러 편리한 기능들을 지원해 UI구성에 도움을 줍니다.(레이아웃 제약조건 설정, 미리보기 등) 단점 복잡성: 프로젝트가 커지면 스토리보드가 복..

    [iOS] DeepLink로 앱을 띄워보자

    DeepLink 딥링크에 대해 정리하고 간단한 예제로 이해해봅니다. 딥링크는 "하이퍼링크의 모바일판"이라고 할 수 있습니다. 예를 들어볼까요? 쿠팡 상품의 광고를 클릭하면 "쿠팡앱실행 -> 해당상품" 이동 카톡 메세지를 클릭하면 메세지 화면으로 바로이동 "카카오톡실행 -> 해당 메세지 화면" 카톡에서 카카오맵의 특정 위치를 클릭하면 "카카오맵실행 -> 해당위치화면" 이렇게 링크를 클릭해 앱을 실행하고 원하는 화면으로 이동할 수 있게 할 수 있습니다. iOS에서 딥링크를 구현하는 방법은 두 가지가 있습니다. URLScheme Universal Link 여기서 Universal Link는 특징만 보고 넘어가고. URLScheme을 집중적으로 보겠습니다. URLScheme 어플리케이션간의 통신이나 특정 앱을 ..

    [iOS] App Thinning과 Bitcode에 대하여

    App Thinning 앱이 디바이스에 설치될 때 앱스토어와 운영체제가 디바이스의 특성에 맞게 설치되도록 설치 최적화 기술입니다. iOS 9에서 도입된 기능으로 앱의 크기를 최적화 하고 사용자 기기에 저장되는 앱의 전체 크기를 줄이는데 사용됩니다. 이에 따른 전반적인 이점으론 아래와 같은데, 빠른 다운로드와 설치 앱의 크기가 작아지면 사용자는 앱을 더 빨리 다운로드 할 수 있습니다. 디바이스 공간 최적화 App THinning을 사용하면 특정 디바이스, 버전에 필요한 리소스만 다운로드 하므로, 불필요한 데이터를 저장하는 것을 방지합니다. 예를 들어, 아이폰 X 와 3rd Generation IPad는 다른 해상도를 사용하기 떄문에 각 디바이스에 적합한 리소스만을 다운로드 할 수 있게 됩니다. 앱에서 3x..

    [iOS] UITraitEnvironment

    iOS interface environment에는 다음과 같은 trait이 포함됩니다. horizontal / vertical size class (수평, 수직 사이즈 클래스) display scale (디스플레이 픽셀에 관합니다.) user Interface idiom ( Enum으로 phone, pad, tv, carplay, mac...) user Interface style( 라이트모드, 다크모드인지.. lightMode, darkMode, unspecifiedMode) 여기서 horizontal / vertical의 size class만 살짝 보고 가겠습니다. size class size class는 portrait, landscape에 따라 현재 화면의 size class가 Compact / ..

    [Tuist] Manifest not found 에러

    Resolved cache profile 'Development' from Tuist's defaults Manifest not found at path /Users/ganghyeonjun Consider creating an issue using the following link: https://github.com/tuist/tuist/issues/new/choose 해결한 방법 sudo xcode-select -s /Applications/Xcode.app/Contents/Developer