일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- map
- swiftUI
- uitableview
- Observable
- UITextView
- Protocol
- 스위프트
- Clean Code
- clean architecture
- rxswift
- collectionview
- UICollectionView
- swift documentation
- ribs
- 애니메이션
- uiscrollview
- 리팩토링
- RxCocoa
- tableView
- Human interface guide
- ios
- Refactoring
- SWIFT
- combine
- 리펙터링
- 리펙토링
- HIG
- Xcode
- MVVM
- 클린 코드
- Today
- Total
목록2022/12 (32)
김종권의 iOS 앱 개발 알아가기
* Storyboard를 이용한 구현은 이 포스팅 글 참고 UIScrollView UIScrollView의 특징은 layout의 종류가 두 가지 frameLayoutGuide: 변형되지 않은 레이아웃 (autolayout과 같은 제약조건으로 한번 정하면 고정) contentLayoutGuide: 변형되는 레이아웃 (내부 컨텐츠의 intrinsic content size에 의해서 변형) UIScrollView와 UIStackView 사용 방법 * 예제에 코드로 UI작성을 위해 SnapKit 사용 scrollView, stackView 준비 (수직 스크롤 구현할 경우) stackView의 axis를 vertical로 설정 class ViewController: UIViewController { private..
테스트 대상 플러스 버튼을 누르면 1초 이후에 값이 증가하는 앱 테스트: 버튼 누름 -> 1초 후에 값이 변화하는지 확인 샘플 프로젝트에서 사용한 라이브러리 - MVVM을 템플릿화 해놓은 ReactorKit 사용 target 'ExAsyncRx' do use_frameworks! pod 'ReactorKit' pod 'RxCocoa' target 'ExAsyncRxTests' do inherit! :search_paths end end 예제에 사용될 ViewController import UIKit import ReactorKit import RxSwift import RxCocoa class ViewController: UIViewController, ReactorKit.View { private le..
* 목차) Build Setting 목차 링크 GCC_OPTIMIZATION_LEVEL 개념 Optimization level은 컴파일 시 디버그 정보까지 기록하며 동작할것인지, 최적화 위주로 동작하게 할 것인지 선택이 가능 Build Settings에서 optimization level을 검색하면 Apple Clang과 Swift Compilier 두 종류가 존재 * Swift Compiler의 Optimization Level은 이전 포스팅 글 참고 여기서 Apple Clang이 GCC_OPTIMIZATION_LEVEL를 의미 GCC_OPTIMIZATION_LEVEL를 검색해보면 Apple Clang만 등장 Optimaztion level종류 None [-O0]: (Debug 모드 디폴트)최적화하지 ..
목차) Build Setting 목차 링크 ENABLE_TESTABILITY 해당 Target의 Enable Testablility를 활성화하면 테스트하는 쪽에서 @testable import를 사용하여 internal인 타겟도 테스트 코드에서 접근이 가능 Xcode에서는 Target > Build Settings > ENABLE_TESTABILITY에서 Yes로 활성화 Debug는 디폴타 값이 Yes 예시 ViewController는 internal 키워드이므로 다른 모듈에서 접근이 불가 ExTestableTests는 ViewController이 있는 모듈이 아니지만 @testable import ExTestable를 통해 사용 만약 Debug를 No로 설정하면? 접근 불가 * 참고 https://de..
UIImage RenderingMode 이란 UIImage의 값을 원본과 같이 색상이 있는것으로 표현할것인지, 원본 색상을 지운 형태만 가져갈것인지 선택 automatic: 컨텍스트의 기본 모드를 선택하며 지정해주지 않을 경우 디폴트 값 (보통 alwaysOriginal) alwaysOriginal: 원본 색상사용 alwaysTemplate: 원본 이미지의 색상을 없애고 tintColor만 남기는 옵션 @available(iOS 7.0, *) public enum RenderingMode : Int, @unchecked Sendable { case automatic = 0 case alwaysOriginal = 1 case alwaysTemplate = 2 } 사용 방법 UIImage의 withRende..
목차) Build Setting 목차 링크 @Inherited 파일 구조 관계상으로 상위에 있는 세팅과 동일한 값으로 사용하겠다는 의미 ex) Target에서 $(inherited)를 사용하면 Config의 빌드 설정과 동일하게 적용 ex) Config 파일 생성하여, Config에서 특정 값을 설정하고 Target에서 $(inherited) 로 설정하면 config값과 동일한 세팅이 되는 예제 값 입력 APP_NAME = BuildSttingExample Config 파일 설정 PROJECT를 보면 user-defined에 자동으로 생성 TARGETS에도 자동으로 PROJECT와 같은 값을 갖지만, $(inheirted) 값을 입력해도, 상위와 동일한 BuildSttingExample로 지정됨을 확인..
목차) Build Setting 목차 링크 Dynamic Framework와 Static Framework 차이 Dynamic Framework - 컴파일된 바이너리 파일이 Stack의 Bundle영역에 존재하여, 어플리케이션 코드에서 스택 영역을 참조하여 사용 Static Framework - 컴파일된 바이너리 파일이, 앱의 실행 파일에 복사되어 바로 사용 Dynamic, Static 특징 Dynamic framework 메모리 효율 - 동시에 여러 프레임워크 또는 프로그램에서 동일한 코드를 공유(참조)하여 메모리에 효율적 전체 빌드를 다시 하지 않아도 부분 빌드를 통해 새로운 프레임워크 사용 가능 디버그 심볼 따로 필요 - 실행파일에 프레임워크가 없으므로 별도로 dSYM파일 따로 생성해서 주입 Sta..
1. Architecture 개념 (archs, EXCLUDED_ARCHS, excluded architecture ONLY_ACTIVE_ARCH, Valid Architectures, arm64, x86_64) 2. Dynamic Framework, Static Framework 개념 3. OTHER_SWIFT_FLAGS ($inherited, -Xfrontend -debug-time-function-bodies, -Xfrontend -warn-long-expression-type-checking) 4. ENABLE_TESTABILITY 5. GCC_OPTIMIZATION_LEVEL (Apple Clang, -O0, O1, -O, -O3, -Os, -Ofast, -Oz)