일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- oberve url
- GeometryReader
- swift #swift keychain #keychain 사용법
- editTextInputFilter # kotlin #ime #edittext #android #ineoption
- url 관찰
- DataBinding
- Android
- url 추적
- detect url
- scrolling tab
- UIPresentationController
- 스크롤 탭
- transformation.map
- List
- pod install
- rxjava #kotlin #debounce #rxjava 응용 #rxbinding
- ios
- Xcode 단축키
- development language
- wkwebview
- base64 변환
- DevelopmentRegion
- 기존 앱
- swift
- convert base64
- 개발자 면접
- Side Menu
- notifychanged
- 상단 탭바
- UIViewControllerTransitioningDelegate
- Today
- Total
목록IOS (28)
버그 잡이
문제 상황 웹뷰에서 아래와 같은 크래시가 발생하였습니다. KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED 옵저버가 overreleased 되거나 smashed 되어서 생긴 이슈라고 합니다. 발생 환경 1) 웹뷰는 아래 옵저버를 가지고 있다. webview.addObserver(self, forKeyPath: "estimatedProgress", option: .new, context: nil) 2) 위 웹뷰가 2개 이상 겹쳐서 띄워져 있다. 3) 웹뷰들을 한번에 dismiss 한다. 원인 분석 (뇌피셜) 같은 이름의 옵저버가 2개 이상 있고, 이를 해제하려고 할때 참조가 꼬여..
먼저 Static Library와 Dynamic Library의 개념과 장단점에 대해서 간단하게 알아보고 넘어가겠습니다. Dynamic vs Library 비교 Static Library Excutable 파일에 라이브러리 파일이 포함됨 Dynamic Library 런타임 중에 필요시 해당 라이브러리 코드를 찾아서 연결 (Excutable 파일안에 코드가 있는 것이 아니라 프로그램 안에서 Framework로 따로 관리되는 개념) # 장단점 Static Library 장점: 런타임에 해당 라이브러리 파일을 찾을 필요가 없기 때문에 앱 런치 타임 속도를 줄일 수 있음 단점: 앱 사이즈가 커짐 Dynamic Library 장점: 앱 사이즈가 작음 단점: 앱 런치 타임 속도를 느리게 할 수 있음 Launch T..
SplitViewcontroller 구조의 아이패드 앱은 멀티태스크 동작으로 화면 사이즈가 줄어들면 기존에 나눠졌던 화면 중 하나가 사라지게 됩니다. 두 개로 나뉘어진 구조를 기준으로 * 왼쪽: Master * 오른쪽: Detail 이라고 칭하는데, 보통 Master가 남고 Detail이 사라집니다. 그런데 갑자기 이런 요구사항이 들어옵니다. "SplitViewController가 collap 될때 detail 화면이 남고 master 화면이 사라지게 해주세요." 위 그림처럼 되는 구조인데 어디 한번 방법을 찾아봅시다. 1. UISplitViewControllerDelegate 함수 찾아보기 UISplitViewControllerDelegate에서 관련된 기능을 제공하는 함수가 없는지 찾아봤습니다. 그 ..
Viper나 RIBS 같은 패턴은 화면 전환 로직을 담당하는 라우터를 모듈화 해서 관리하는 것으로 알고 있는데, ReactorKit은 화면 전환 로직을 어떻게 관리하는지에 대한 궁금증이 생겼습니다. 공식 문서와 샘플 예제를 찾아보니, 라우터를 관리하는 정형화된 방식은 없는 것 같고. 라우터를 모듈화하고 싶으면 ReactorKit에 추가적인 플로우 관련 패턴을 더하는 식으로 진행되는 것 같았습니다. ReactorKit + RxFlow ReactorKit + Coordinator 패턴 위와 같이 사용되는 것을 볼 수 있었습니다. 이번 글에서는 ReactorKit + Coordinator 패턴에 대해서 알아보고자 합니다. RxFlow는 잠깐 보니 러닝커브도 좀 있고, Coordinator 패턴을 먼저 이해하고..
ReactorKit을 공부하면서 trasform()이라는 함수를 접하게 되었습니다. "Action으로 Mutation(mutate() -> reduce()) 되어 State가 바뀐다." 이게 제가 이해한 ReactorKit의 기본 동작입니다. transform() 낄 자리가 없어보이는데 도대체 어떤 역할을 하는 함수일까요? Transform() transform()을 이해하기에 없어서 ReactorKit의 전역 변수에 대해서 알아볼 필요가 있습니다. 공식 문서를 보면 ReactorKit은 전역 변수를 정의 하지 않는다고 합니다. Action -> Mutation -> State 플로우에서 전역변수가 낄 자리가 없는거죠. 그런데 Action이 아닌 전역변수의 변화로 인한 Mutation은 어떻게 처리해야할..
기조 상용중인 앱에 아이패드 모드를 지원하게 되었습니다. 관련 작업을 하면서 새롭게 배운점과 느낀점들을 정리해보겠습니다. 1. frame 보다는 Auto-layout을 사용하자. 앱을 보면 팝업, 커스텀 키패드 등이 frame으로 layout이 잡혀 있었습니다. 이는 가로/세로 디바이스 회전시 레이아웃을 깨지게 만듭니다. 간단하게 오토레이아웃으로 변경할 수 있는 View는 오토레이아웃으로 레이아웃을 설정하도록 변경해주고, 변경이 다소 무리인 경우에는 "viewWillTransition()" 이라는 viewController의 override 메서드를 활용하여 문제를 대응할 수 있습니다. 디바이스의 회전을 감지하고 디바이스 스크린 Size를 받을 수 있는 메서드이다. size 값을 활용하면 회전시 화면 대..
앱 스토어를 보면 아래와 같이 앱에 관한 정보가 표시됩니다. 그런데 저는 분명히 App Store Connect 를 통해서 앱을 등록할때, 언어와 지역을 한국으로 설정했는데, 앱 출시 후 확인해보니 언어가 영어(EN)으로 설정 되어 있습니다. 뭐지......? Development Region 구글링을 통해서 확인해보니 앱 스토어 언어 정보로 표시되는 언어는 프로젝트의 "Development Region" 를 따른다고 합니다. Development Region는 기본적으로 영어('en')로 설정되어있습니다. 이는 .xcodeproj 파일에서 수정해줘야합니다. .xcodeproj 파일을 editor로 열고 "developmentRegion"로 검색하면 'en' 으로 설정되어있는 것을 볼 수 있습니다. 1...
iOS 프로젝트에서 cocoaPods 를 쓴다면 매번 터미널에서 pod install을 해주는 번거로움이 있습니다. Xcode에서 이 명렁어 치는 과정 (터미널 실행 -> 프로젝트 경로 진입 -> pod install) 을 단축키 하나로 등록할 수 있습니다. Xcode의 Custom Behavior를 사용하는 것으로 방법은 아래와 같습니다. 1. Pod-install.sh 파일 생성 터미널 실행 후 원하는 경로에서 아래 파일을 생성해줍니다. 저는 nano를 써서 "nano Pod-install.sh" 명령어로 파일 생성 후 아래 내용을 복사해서 저장했습니다. #!/bin/sh # Pod-Install.sh # # # Created by Nikunj Modi on 26/09/20. # osascript B..