분류 전체보기

    WWDC 2024) 힙 메모리 분석하기

    Measurement힙을 이해하면 application의 virtual memory를 먼저 이해해야한다. 앱이 시작되면서 virtual memory의 빈 주소 공간을 얻는다. 그리고, App executable, Linked libraries을 로드하고 읽기 전용 Resources 영역에 매핑한다. 또한 앱 실행시 앱은 각 스레드에 local var, temp var에 대한 stack 영역을 사용하며, dynamic, static 메모리는 힙 이라고 통칭되는 메모리 영역에 배치된다.  힙은 단지 하나의 메모리 블록이 아니라 여러 virtual memory 영역으로 구현된다. Regions을 좀 더 확대하면, 각 Region이 개발 힙 alloc으로 구분된다. 내부적으로 이 Region은 16KB 메모리 ..

    Error) Tuist Package Dependency "No files found at: ../PrivacyInfo.xcprivacy" 해결하기

    해당 버그는 Tuist 자체 버그이기 때문에 Tuist로 일단 해결할 방법은 없다.우리 앱 같은 경우, Tabman, Pageboy 라이브러리가 문제가 됐는데, https://github.com/tuist/tuist/issues/5552 Tuist에 관련 이슈가 올라와 있으나 아직 merge가 되지 않아 라이브러리 내의 코드로 문제를 해결해야 했다. 문제가 되는 라이브러리를 포크해서, package.swift의 .target 부분을 다음과 같이 바꿔주자. ///기존 코드 .target( name: "Tabman", dependencies: ["Pageboy"], path: "Sources/Tabman", exclude: ["Tabman.h", "Info.plist", "Priva..

    Error) Tuist 3.x -> 4.x 마이그레이션시 생기는 No such module 문제 해결하기

    바쁘신 분들을 위해 결론부터 말하자면 Tuist에서 끌어오는 Swift Package Manager 의 Dependencies가 빌드되는 경로 "CONFIGURATION_BULID_DIR"의 "CONFIGURATION" 경로가 잘못되어서 생기는 문제다. 따라서 Package.swift 내부의 PackageSetting에서 baseSetting에 configurations 파라미터에 현재 빌드 세팅에 맞춰 이름을 지정해주면 해당 문제는 해결된다.  이걸 찾는 과정은 엄청 고단했는데, 일단 tuist 이슈에 비슷한 내용이 하나도 없었고 SPM의 오류에 대해 검색해봐도 비슷한 자료가 없었기에 더욱 힘들었다. 처음으로 시도해본것이 xcode 내부에서 직접 manage schemes을 통해 라이브러리를 빌드 후 ..

    Metal Rendering

    Rendering the Triangle 랜더링은 다섯 단계로 수행된다. Display Link 생성 Render Pass Descriptor 생성 Command Buffer 생성 Render Command Encoder 생성 Command Buffer를 커밋 Note: 이론적으로 이 앱은 실제로 프레임 마다 랜더링할 필요가 없다. 왜냐하면 삼각형이 그려진 후에는 움직이지 않기 때문이다. 그러나 대부분의 앱은 움직이는 부분이 있기 때문에 이 방식을 배우면, 미래의 튜토리얼에 좋은 시작점을 제공할 수 있을 것이다. 1. Creating a Display Link 화면이 갱신될 때마다 화면을 다시 그릴 수 있는 방법이 필요할 것이다. CADisplayLink는 디스플레이의 새로 고침 속도에 동기화된 타이머다..