iOS 24

Podfile Syntax - inherit!이란

유닛테스트 환경 설정 도중 과 같은 에러를 만났다. 테스트 타겟에서 해당 모듈(Firebase)을 가져올 수 없다는 메시지이다. 테스트 타겟에서 부모 타겟에 있는 모듈들의 상속에 대한 이슈이다. 그러기 위해선 아래와 같은 구조로 명시해줘야 해당 이슈를 해결할 수 있었다. Inherit이란? 해당 타겟의 상속 모드를 설정하는 키워드. 상속 설정 가능한 모드 complete : 해당 타겟은 부모로부터 모든 동작을 상속. none : 해당 타겟은 부모로부터 어떠한 동작을 상속하지 않음. search_paths : 해당 타겟은 부모의 검색 경로만 상속. 예) target 'App' do target 'AppTests' do inherit! :search_paths end end

iOS 2020.06.21

Podfile.lock을 git commit시 포함해야하는가?

iOS 개발을 진행하다보면 라이브러리 의존성 관리 매니저로 CocoaPods을 대부분 사용할텐데요. pod에 명시되어있는 라이브러리를 다운받을 때 결정하는 것은 Podfile 또는 Podfile.lock입니다. Podfile.lock 파일은 언제 생성되나요? 1)pod install 2)Podfile.lock에 다운받은 버전이 명시되며 파일이 생성된다. Podfile.lock를 보면은 그래서 .lock은 왜 필요한건가요? 버전을 명시하고 함께 작업하는 개발자들과 싱크를 맞추기 위함입니다. 프로젝트를 혼자 진행한다면 올리지 않아도 되지만, 다른 협업자들과 함께 작업해야하는 프로젝트라면 .lock파일을 함께 커밋하여 버전관리를 해야합니다.

iOS 2020.06.14

iOS 오픈소스 첫 배포

안녕하세요. 코로나19 때문에 집에서 빈둥거리기만 하는 것 같아 iOS개발한 이후로 오픈소스 만들어볼 기회가 없었고 언젠간 만들어보고싶었는데 드디어 만들어보게되었습니다. CocoaPods 첫 배포! 아주 간단한 오픈소스이지만 한번 봐주시고 스타 한번 눌러주시면 감사하겠습니다. 피드백은 언제나 환영입니다. 추가로, build라는 아이콘이 눈에 띄었고 클릭해보니 Travis CI 사이트가 열리더라고요. Travis CI란 - 오픈소스 기반의 지속적인 통합(CI - Continuous Integration)서비스 다음주에는 Travis CI 적용해볼 계획해보려고 합니다. 오픈소스 링크는 아래에! https://github.com/gwangyonglee/IndicatorButton gwangyonglee/Ind..

iOS 2020.03.01

[iOS]contentInset, contentOffset

contentInset 하위뷰 콘텐츠의 상하좌우로 안쪽 여백을 주는 것입니다. (바깥쪽 x) https://developer.apple.com/documentation/uikit/uiscrollview/1619406-contentinset contentInset - UIScrollView | Apple Developer Documentation Instance Property contentInset The custom distance that the content view is inset from the safe area or scroll view edges. DeclarationDiscussionUse this property to extend the space between your content a..

iOS 2020.02.23

[iOS] CALayer란

CALayer란 UIView에서 렌더링, 레이아웃, 애니메이션 등을 관리하는 Core Animation클래스인 CALayer가 있습니다. 모든 UIVIew는 layer 프로퍼티를 가지고 있습니다. UIView는 레이아웃과 터치 이벤트 처리 등 많은 작업을 하게되는데 실제로 뷰 위에 컨텐츠나 애니메이션을 그리는 행위는 직접적으로 다루지 않고 UIKit이 Core Animation에 위임하게 되고, shadow, corner radius, border, 3D transform, masking contents, animation과 같은 작업들을 CALayer가 담당하게 됩니다. 사용 CALayer를 사용하기 위해서는 QuartzCore.framework가 추가되어있어야 합니다. 특징 - CALayer에서 CA..

iOS 2020.02.23

[iOS] 앱 패키지 내부 살펴보기

안녕하세요. 오늘은 iOS앱 패키지 내부에 어떤 파일들이 있는지 알아보려고 합니다. 패키지 내용 보기 먼저 앱을 아카이빙하신 후 아래 이미지와 같이 '패키지 내용 보기'를 선택합니다. 클릭해보면. BCSymbolMap 해당 디렉토리가 생성되었다면 *비트코드를 지원함을 의미합니다. *비트코드란? 비트코드는 컴파일된 프로그램의 중간 표현입니다. LLVM을 통해 앱의 코드를 받아 이를 비트코드로 전환합니다. 비트코드를 포함하지 않는다면 컴파일러는 머신 코드만을 포함하는 실행 파일을 생성합니다. 포함한다면 기계 코드와 나란히 실행 파일에 포함합니다. 비트코드를 포함한 앱을 앱스토어에 업로드하면 앱스토어 내에서 사용자의 디바이스의 따라 최적화된 바이너리를 다시 빌드하는 과정을 거칩니다. dSYM 난독화를 어렵게하..

iOS 2020.02.22

Xcode 컴파일 최적화하여 빌드 속도 올리기

안녕하세요. 이번 글에서는 Xcode에서 빌드 속도를 조금이나마 향상시키기 위해서 컴파일 최적화할 수 있는 여러 방법들을 소개하려고 합니다. 목표 Xcode 컴파일 최적화하여 빌드 시간을 최대한 줄이는 것입니다. 시작 전 환경 설정 - 컴파일 시간을 측정할 수 있도록 타이머 활성화 defaults write com.apple.dt.Xcode ShowBuildOperationDuration -bool YES - DerivedData 삭제 rm -rf ~/Library/Developer/Xcode/DerivedData 진행하고 Clean -> Build를 진행하면 아래 화면과 같이 컴파일 시간이 나오는걸 보실 수 있습니다. 1. Xcode New Build System Xcode9에서 애플은 Swift로 작..

iOS 2020.01.19

[iOS] MVVM패턴이란

MVVM이란? MVVM은 Model - View - ViewModel의 약자로 소프트웨어 아키텍처 패턴입니다. (Model은 데이터, View는 유저 인터페이스, ViewModel은 뷰와 모델 사이를 연결) Model(모델)은 어떤 부분을 책임지고 있나요? 데이터 모델, 데이터 접근 레이어, 비즈니스 로직등이 포함되어 있습니다. 모델은 데이터를 얻거나 저장하거나 지우거나 업데이트에 대해 알고 있습니다. 이 작업들은 뷰모델에 의해 시작되며 모델이 데이터에 대한 작업을 마치면 뷰 모델에게 결과를 알립니다. 모델은 뷰모델이 소유하고 있고, 뷰나 뷰모델이 모델에 대해 들여다볼 수 없습니다. View(뷰)는 어떤 부분을 책임지고 있나요? 사용자 이벤트를 수신하고 데이터를 표시하는 유저 인터페이스를 책임집니다. (..

iOS 2020.01.05

[iOS] 멀티 스레드(Multi Thread) 구현 시 고려해야될 것들

안녕하세요. iOS앱을 개발하면서 멀티 스레드로 앱을 구현하다보면 예상하지도 못한 곳에서 죽는 경우를 경험해보셨을 것입니다. 그래서 이번 글에서는 멀티 스레드를 구현하면서 고려해야될 것들을 정리해보려고 합니다. 멀티스레딩이란? 여러 개의 스레드가 동시에 진행되는 것을 의미합니다. 하나의 프로세스 내에서 여러 개의 스레드가 존재하고, 스레드들이 프로세스의 자원을 공유하되 실행은 독립적으로 이루어지는 구조입니다. 멀티스레딩의 장점 1. 메모리 공간과 시스템 자원 소모가 줄어든다. 2. 프로세스간 통신 방법에 비해 스레드간의 통신 방법이 간단하다. -> 별도의 자원을 이용하는 것이 아니라 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용하여 데이터를 주고 받기 때문) 멀티스레딩의 단점 1. ..

iOS 2020.01.05

[iOS] 이미지 파일 Bitmap, Vector 방식 적재적소에 사용하기

Xcode로 개발하시면서 이미지 파일을 individual scales로 png파일을 넣을 때도 있고, single scale로 pdf파일을 넣어서 개발하신 적이 있으실겁니다. 하지만 문득 어느날 저도 모르게 single scale로 작업할 때도 있고, individual scales로 1x, 2x, 3x파일을 넣어 작업할 때도 있었습니다. 그래서 이번 포스팅에서는 이 두개의 차이점을 알아보고자 합니다. 이미지 표현 방식 이미지 표현 방식에는 비트맵(Bitmap)과 벡터(Vector)방식이 있습니다. 비트맵(Bitmap) 방식 비트맵 방식은 사각형의 픽셀이 모여 만들어진 이미지입니다. 그렇기 때문에 경계가 뚜렷하지 않고 확대했을 때 깨짐현상이 있습니다. 확장자로는 png, jpg, gif가 있습니다. 주..

iOS 2020.01.05