전체 글

전체 글

    [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 / ..

    [Swift] 접근 제어자(Access Control)의 내용과 원칙에 대한 예제

    접근 제어자 생각보다 접근 제어자를 설명하기에 많은 내용이 필요한것 같아 정리해봅니다. 다양한 예제를 포함해서 정리해보겠습니다. Swift의 접근제어자는 단계별로 5개의 단계가 있습니다. 하나씩 정리해보자면 open 모듈 외부에서 접근 가능합니다. open만이 다른 모듈에서 상속/재정의가 가능합니다. 상속 재정의가 가능하므로 클래스에서만 사용가능합니다. 만약 구조체에서 open을 사용시 에러가 발생합니다. public 모듈 외부에서 접근 가능 클래스를 public으로 선언한다면 상속, 재정의가 불가능합니다. internal 접근제어자를 설정해주지 않으면 default로 설정되는 접근제어자입니다. 같은 모듈 내에서 어디서든 접근 가능합니다. 같은 모듈 내에서 상속/재정의가 가능합니다. fileprivate..

    [Swift] COW(Copy on Write)의 Deep한 내용까지 알아봅시다!

    COW(Copy On Write) Class와 Struct를 방금 공부하신 분이라면 혼동이 올 수 있으니 Class의 Memory관리(Reference Count라던지..)의 공부가 끝나신 후 보시는게 좋을 것 같습니다. 제가 공부한 내용에 틀린 부분이 있다면 지적해주세요! Cow는 Write가 발생했을 때 Copy를 수행하는 기능으로 메모리 공간 낭비를 막기 위해 사용됩니다. 값타입(struct)의 경우 값을 복사하여 값의 참조를 전달하는게 아닌 실제 메모리에 저장된 "값"을 복사하게 됩니다. 뭐 여기까진 모두가 아는 사실. 여기서부터 COW의 내용이 나오게 됩니다. 매번 모든 값을 복사할 경우 원본의 변경된 값이 없음에도 매번 새로운 공간을 할당하여 불필요한 메모리의 낭비가 발생할 수 있습니다. va..

    [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

    [Tuist] PinLayout과 FlexLayout사용시 발생하는 문제

    xcconfig파일에서 아래 설정을 추가해줍니다. OTHER_SWIFT_FLAGS[config=DEV][sdk=*] = $(inherited) -DDEV GCC_PREPROCESSOR_DEFINITIONS = DEV=1 PROD=0 GCC_PREPROCESSOR_DEFINITIONS="FLEXLAYOUT_SWIFT_PAKAGE=1" 바로 generate해서 프로젝트를 사용한다면 Target > Build Setting > PreprocessorMacro의 타겟에 FLEXLAYOUT_SWIFT_PAKAGE=1 를 추가해줘도 됩니다. FlexLayout에서 사용되는 Yogakit이나 기반이 되는 yoga는 사실상 c++로 구현이 되어있다고 합니다. Swift에서 C++를 직접 호출할 수 없기 떄문에 Yoga..

    [iOS] SetNeedLayout과 SetNeedDisplay는 무엇인가

    우선 main run loop를 알아야 합니다. main run loop 기기에서 앱을 실행하면 @main을 찾아 UIApplecation객체와 AppDelegate객체를 생성합니다. 그리고 앱을 계속 실행하고 응답하도록 하는 loop(main run loop)를 실행합니다 발생한 모든 이벤트는 eventqueue에 추가되며, 이 loop는 발생하는 다양한 이벤트들을 처리하게 됩니다. (터치이벤트, 디바이스 회전등) 발생한 이벤트는 각 이벤트의 알맞는 핸들러를 찾아 그들에게 이벤트에 대한 처리권한을 위임하게됩니다. 이런 이벤트를 모두 처리하고 권한이 다시 main run loop로 돌아오는 시점을 "update cycle"이라고 한다. Update Cycle main run loop에서 이벤트가 처리되는..

    [iOS] 실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것

    잘못된 정보가 많아서 정리해본다. 사용할 수 없는 하드웨어 가속도, 자이로스코프 센서 근접센서 기압센서 조도센서 카메라 사용할 수 없는 API UIBackgroundModes key(백그라운드모드) 핸드오프 기능(맥에서 하던 작업을 아이패드에서 계속하던가하는) 줌인/줌아웃이 불가능 하다고 하는 정보가 많은데 Option키를 누르면 x, y가 반전된 포인터가 추가되어 투포인터로 제어가 가능하다. 푸시알림도 지원하지 않는다는 경우가 많은데 푸시알림또한 지원한다.

    [iOS] Notification

    Notification 서로 다른 객체간 데이터 전달이 가능하게 해줍니다. Notification Center라는 싱글턴 객체를 통해 Event발생을 옵저버를 등록한 객체들에게 Notification을 post하는 방식으로 사용됩니다. 예시를 봅시다. 이 VC는 화면 전달을 받을 ViewControler 입니다. // 데이터 전달을 받을 ViewController class RootViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // view가 로드되자 마자 ViewController를 생성해 화면 전환을 한다. guard let viewController = storyboard?.instantiate..

    [Swift] async / await 과 async에서의 Suspend

    우선 동기 비동기를 복습해보자. 동기 어떤 작업을 실행하고 해당작업이 끝날 때 까지 기다린 후 다음 작업을 실행함. 비동기 어떤 작업을 실행하고 해당 작업이 끝남을 기다리지 않고 바로 다음 작업을 실행함. async / await 비동기 작업을 동기작업 처럼 처리하는 기능을 제공함. Swift 5.5에서 탄생 비동기 코드를 동기인것마냥 작성할 수 있다 Completion Handler의 문제점 기존의 CompletionHandler는 에러일 때 Completion Handler 호출을 잊어버리는 문제 gaurd let else 문에서 호출을 깜빡함. 동기적으로 수행해야할 비동기 함수가 많을 경우 depth가 깊어지는 문제 가독성이 떨어지는 문제 실패, 성공에 따라 분기가 복잡해지는 문제 이처럼 다양한 문..

    [iOS] Agora.io

    Video Calling Agora의 화상통화를 사용하면 모든 애플리케이션에 맞춤형 실시간 비디오 기능 추가가 가능 Agora의 비디오 SDK로 화상 통화를 사용하면 다양한 기능을 추가할 수 있음 녹화 및 콘텐츠 조정같은 기능으로 SDK를 확장하거나 Extension Marketplace를 사용해 배경제거, 얼굴필터 기능들을 추가할 수 있음. SDK quicstart Understand the tech 1. 토큰 검색: 토큰은 컴퓨터에서 생성된 문자열로 앱이 채널에 가입할 때 사용자를 인증한다. 이 안내에서는 아고라 콘솔에서 토큰을 검색한다. 개발 목적으로 인증서버를 만드는 방법을 보려면 인증 워크플로우 구현을 참조하면 된다. 자체 토큰 생성기를 개발하고 프로덕션 IAM 시스템에 통합하려면 토큰 Toke..