| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Architecture
- updatecycle
- 뷰를그리는메서드
- mainrunloop
- Swift
- modulararchitecture
- applaucnchprocess
- Xcode
- swift6.1
- task
- ios바이너리분석
- 다이나믹링크분석
- mangle
- cgimage
- actor
- swift-demangle
- SPM
- UIKit
- swiftconcurrency
- displayscale
- mach-o파일분석
- 이진삽입정렬
- IOS
- WWDC24
- 뷰의레이아웃을계산하는메서드
- ciimage
- xcrun swift-demangle
- swift6
- uicollectionview
- XCUITest
- Today
- Total
목록iOS (27)
꾸준한 기록
1️⃣ app.coordinate(withNormalizedOffset:) 의 역할XCUIApplication 혹은 XCUIElement 객체에서 이 메서드는 해당 요소의 상대적 좌표계를 기준으로 한 터치 지점(XCUICoordinate)을 반환합니다.즉, 화면에서 특정 위치를 정확히 지정해 터치나 드래그를 수행할 때 사용합니다.let element = app.otherElements["canvas"]let start = element.coordinate(withNormalizedOffset: CGVector(dx: 0.1, dy: 0.5))let end = element.coordinate(withNormalizedOffset: CGVector(dx: 0.9, dy: 0.5))start.press(fo..
SPM 매니페스트의 resources 파라미터에는 다음 두 가지 규칙을 사용할 수 있습니다. 1. process(_ path: String, localization: Localization? = nil)대상 플랫폼에 맞춰 리소스를 처리(process) 합니다.이미지 최적화, 스토리보드·XIB 컴파일, Core Data 모델 처리 등을 자동으로 수행합니다.지원되지 않는 파일 형식은 기본적으로 복사(copy)합니다.디렉토리를 지정하면 내부 파일을 재귀적으로 처리합니다.사용 예시.target( name: "MyLib", resources: [ .process("Resources"), // 전체 Resources 폴더 처리 .process("Localizable.s..
UIScrollViewUIColllectionViewLayout공식문서 정의content view의 사이즈 UICollectionView의 내부 content 사이즈 (보이지 않는 부분을 포함)이 값을 이용해서 UICollectionView에서 스크롤을 할 수 있는 공간의 사이즈를 정의한다.invalidateLayout() 호출 직후, 올바르 contentSize를 얻을 수 있는지 유무OX값이 정해지는 시점frame이 계산된 후 레이아웃 계산 후 용도스크롤 동작에서 사용됨 (offset 의 기준이 되는 값)레이아웃 사이즈를 계산하기 위해 사용됨(cell 사이즈를 계산하기 위해 사용됨) 두 값에 차이가 생기는 시점1. 레이아웃 계산은 되었지만, 화면에 반영되지 않은 시점- UICollectionViewLa..
displayScale이란?점(point) 한개를 그리는데 사용되는 디바이스 스크린의 pixel 개수 여기서 말하는 pixel은 디바이스 스크린을 구성하고 있는 물리적인 pixel 을 말한다. 그렇다면 이미지 정보에서 확인할 수 있는 400x600은 무엇일까? 이것 또한 이미지를 구성하는 pixel 의 개수를 나타낸다. 즉 가로로는 pixel 400개를 사용하며 세로로는 pixel 600개를 사용해서, 총 2400 개의 pixel 을 사용한다는 의미이다. 그렇다면 400x600 크기의 이미지를 100x200 사이즈의 imageView로 보여줄 때는 pixel 몇개를 사용하는가?100x200 = 2000개의 픽셀을 사용한다. 2400개의 픽셀을 사용하는 이미지가 2000개를 사용하도록 downscaling..
otoolMach-O 바이너리 파일의 구조를 분석해서 다양한 정보를 알 수 있다.Mach-O 파일이란? MacOS, iOS 에서 실행 파일, 프레임워크, 라이브러리 등이 사용하는 파일 포맷알 수 있는 정보 바이너리 파일의 각 섹션과 세그먼트에 대한 정보-L : 바이너리와 링크된 동적 라이브러리/프레임워크의 경로-l : Mach-O 파일에 포함된 모든 로드 명령어-T: 바이너리 파일에 포함된 심볼테이블 -t: 바이너리의 코드 섹션을 어셈블리어로 출https://llvm.org/docs/CommandGuide/llvm-otool.htmlhttps://keith.github.io/xcode-man-pages/llvm-otool.1.html nm Mach-O 바이너리 파일의 심볼테이블을 출력하는 명령어심볼테이..
UIImage의 메서드에는 UIImage(cgImage:)와 UIImage(ciImage:) 둘다 존재한다.둘의 동작이 다르다는 것을 알게되어 이를 정리한다. CImageCore Image에서 사용하는 이미지렌더링된 이미지가 아니다. 이미지를 만들 수 있는 레시피와 같다.CIContext와 CIImage는 변경 불가능해서 여러 스레드에서 안전하게 접근할 수 있다.CIFilter는 여러 스레드에서 안전하게 접근할 수 없다.UIImageView와 같은 UI Component에서 바로 사용할 수 있다.Core Image에서 filter나 transformation을 적용할 때 image를 나타내는 값으로 사용한다.UIKit이나 CoreGraphics에서 사용하기 위해서는 UIImage나 CGImage로 변환되..
이미지를 다운 스케일하면, 화질이 저하된다.따라서 화질이 저하되는 정도와, 이미지의 용량이 균형을 맞추는 지점을 찾아야 한다. 예를 들어서, 아래 코드로 이미지를 줄인다면, 이미지에 사용되는 픽셀 개수가 100개 밖에 되지 않는다.따라서 화질이 많이 저하되게 된다.func downScaleWithImageIO() { let imageSource = CGImageSourceCreateWithURL(url as CFURL, nil)! let properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) let options: [CFString : Any] = [ kCGImageSourceThumbnailMaxPixelS..
이미지의 파일 사이즈와 이미지가 메모리에서 차지하는 사이즈는 다르다.jpeg, jpg, png 같은 이미지 파일은 이미지가 압축되어있다. 이미지가 iOS 앱에서 뷰를 통해 보여질 때는 다음과 같은 과정을 거친다.1. 압축 해제: jpeg, jpb, png는 압축되어 있다. 이 파일을 메모리에 올린 후, 압축을 해제하여 비트맵 데이터로 만든다.2. 디코딩: GPU가 처리할 수 있는 형태로 디코딩한다. 이미지 포맷이 RGBA 형식(4바이트/픽셀, SRGB)으로 변환된다.3. 렌더링: GPU가 디코딩된 이미지(비트맵 데이터)를 그린다. 메모리 사용량따라서 디바이스 화면에서 볼 수 있는 이미지가 메모리에서 차지하는 용량은 이미지의 해상도(픽셀 수, resolution)에 의해서 결정된다. 다운 샘플링고해상도의 ..
UIImageUIKit 소속앱에서 이미지 데이터를 처리하기 위한 객체편집할 수 없는 형태UIImageView.image를 변경할 때도, 새로운 UIImage를 생성해서 할당해야 한다.이미지를 ImageView로 띄우려면 UIImage 가 되어야 한다. CGImageCoreGraphic 소속비트맵 이미지를 나타냄이미지에 마스크를 씌우거나, 자르거나, 회전하는 등의 편집을 하려면 CGImage 혹은 CIImage형태가 되어야 한다. CIImageCoreImage 소속CoreImage Filter에 의해서 생성될 이미지를 나타냄UIImage, CGImage와 달리 이미지 데이터가 아니다. 이미지를 만들 수 있는 레시피와 같은 역할이다.
뷰를 업데이트하는 메서드 순서 (layoutifNeeded, updateConstraintsIfNeeded가 호출된 후, 불리는 메서드 순서)1. `updateConstraints()`2. `updateLayout()`3. `drawRect()` 새로운 ViewController가 노출될 때, view를 그리는 메서드 호출 순서1. viewDidLoad2. viewWillAppear3. view가 뷰 계층에 붙는다. view의 레이아웃이 결정됨. trait이 결정됨4. viewIsAppearing(_:)5. viewWillLayoutSubviews()6. subview의 layoutSubViews()가 호출됨7. viewDidLayoutSubviews()8. 화면 전환 애니메이션 발생9. viewDi..