Xcode 15

iOS 앱 크기 줄이기

iOS 앱 크기 줄이기 예전에 개발했던 앱 사이즈가 너무 커서 앱 용량을 줄이기 위해서 분석.애플 문서를 먼저 정리하고, 후에 실제 앱에 적용한 순서로로 작성.목차Reducing your app’s size (iOS 앱 크기 줄이기)Reducing your app’s size - OverviewCreate the app size reportThis process creates a folder with your app’s artifactsApp Thining Size Report 생성 자동화하기Doing basic optimization to reduce your app’s size (앱 사이즈 최적화하기)Doing basic optimization to reduce your app’s size - Ove..

iOS 빌드 메시지 분석해서 빌드 시간 개선하기

iOS 빌드 메시지 분석해서 빌드 시간 개선하기 프로젝트 빌드 메시지를 분석해서 빌드 시간 개선해보고자 함. 예제 파일목차빌드 메시지 확인하는 방법프로젝트 구조 및 Home Package 확인하기1차 문제 분석 및 개선 방향성 잡기Player Package 확인하기Player Package 개선하기1차 개선 결과2차 문제 분석 및 개선 방향성 잡기문제 코드 영역 확인하기HomeDetail을 HomeDetailInterface 모듈로 분리하기개선한 Home Package2차 개선 결과실행 가능한 앱(데모 앱) 구성하기실행 가능한 앱(데모 앱) 빌드 결과결과 한눈에 확인하기1차 개선2차 개선앱 빌드 빌드 메시지 확인하는 방법좌측 인스펙터에 빨간색 이미지 영역 클릭 빌드 이미지를 보면 순차대로 어떤 것들이 ..

[Swift] Timer + RunLoop, backgroundQueue (swift-corelibs-foundation)

[Swift] Timer + RunLoop, backgroundQueue (swift-corelibs-foundation) 서비스 및 기능에 따라서 RunLoop.main에서 돌아가게 하면 안되는 케이스도 존재. 잘못 설계할 경우 Timer기반으로 동작하는 로그나 기능 등 예상치 못한 결과를 낼 수 있음. RunLoop.main에서 타이머가 아예 방출되지 않거나 RunLoop.main이 아닌 다른스레드에서 돌려야 하는 경우에 대하서 자세히 알아볼 예정 위 케이스들을 내부 구현 코드를 통해 근거 있게 정리해보고자 함. 글의순서 타이머 알아보기 swift-corelibs-foundation내에 Timer 구현 알아보기 Timer 선언부 Timer scheduledTimer 함수 RunLoop 간단히 알아보..

Swift Concurrency를 적용하면서 발생한 동시성 문제

Swift Concurrency를 적용하면서 발생한 동시성 문제사내에서도 동일한 이슈가 발생했었어서 해당 부분에 대해서 정리하고자 함.기존 Combine으로 작성된 코드를 async-await으로 교체하는 작업을 진행.  글의 순서Combine으로 작성된 코드 살펴보기Swift Concurrency로 단계적으로 전환하기Swift Concurrency로 안전성 확보하기Combine에서 Swift Concurrency 적용 Combine으로 작성된 코드 살펴보기기존 코드는 캐싱을 위해 캐시 프로퍼티가 존재하며, Combine을 기반으로 작성되어 있었음.Combine을 선택한 이유는 RxSwift가 익숙하여, RxSwift와 닮은 애플 퍼스트파티 선택에서 Combine을 선택   Swift Concurre..

Library vs Framework 정리

Library vs Framework 정리 모듈화의 개념을 이해하기 전 기초 지식으로 정리. Library란?개발자가 만들 클래스들의 집합으로 다른  프로그램에서 사용할 수 있도록 제공Framework란?소프트웨어를 개발하는데 있어서 개발 시간을 줄이고, 코드의 재사용성을 증가시키기 위해 묶음이나 뼈대(틀)을 라이브러리 형태로 제공되는 것.제어의 역전 개념이 적용된 대표적 기술 Library와 framework의 차이라이브러리와 프레임워크의 차이는 제어 흐름의 주도성이 누구 / 어디에게 있는가가 포인트즉, 애플리케이션의 흐름(Flow)를 누가 갖고 있느냐의 차이프레임워크는 스스로 제어 흐름의 주도성을 갖는 반면, 라이브러리는 개발자가 가짐.  StaticLibrary / Dynamic Libarary ..

[Xcode 16 Beta] Could not download and install iOS 18.0 Simulator runtime with Xcode 16.0 beta

[Xcode 16 - Beta] Could not download and install iOS 18.0 Simulator runtime with Xcode 16.0 beta 릴리즈 노트https://developer.apple.com/documentation/xcode-release-notes/xcode-16-release-notes Xcode 16 Beta Release Notes | Apple Developer DocumentationUpdate your apps to use new features, and test your apps against API changes.developer.apple.com  1. Xcode 15 버전들이 macOS (macOS Sequoia)에서 열리지 않음.- Ven..

[iOS] Memory Debug Graph 분석해 프로젝트 구조 개선

[iOS] Memory Debug Graph 분석하기 IT 동아리에서 2개월간 작은 서비스를 개발했다 기간이 짧았던 만큼 앱 규모도 작았지만, 그에 비해 메모리를 과다하게 사용하고 있다고 느껴졌다. SwiftUI + Combine을 기반으로 프로젝트를 작업 우선 처음으로 의심해 본 부분은 메모리 릭이 발생하는 것 같다고 생각해서, 메모리 릭을 체크해봤다. 우선 프로파일링을 열어서 Leak을 체크 Leaks에 체크되는 부분은 없었지만 무언가 계속 증가하고 있었다. 그래서 그 다음에 생각되었던 부분은 앱 구조에서 무거운 객체를 여러번 생성하는게 아닐까 싶었다. 실질 개발기간이 약 1개월이었기에 (첫 배포까지는 약 3주) 각 Repository 및 UseCase에서 각 객체를 독립적으로 생성했다. 개발 단계에..

EnableSwiftBuildSystemIntegration

EnableSwiftBuildSystemIntegration빌드 시스템과 Swift 컴파일러에는 사용 가능한 코어를 더 잘 활용하는 새로운 모드가 존재.아래의 옵션을 활성화 할 경우 Swift 프로젝트의 빌드 속도가 더 빨라지며, 이 모드는 옵트인 모드.  https://developer.apple.com/documentation/Xcode-Release-Notes/xcode-13_3-release-notes#Build-System  Xcode 13.3 Release Notes | Apple Developer DocumentationUpdate your apps to use new features, and test your apps against API changes.developer.apple.com

[XCode] Instruments - Network

[XCode] Instruments - Network 내가 사용하는 앱이 네트워크 통신에 있어서 어떤 Request와 Response를 처리하는지 체크하기 위해서 이 방법을 사용할 수 있습니다. 1. Xcode의 좌측의 이미지에서 삼각형 버튼을 꾹 누르면 우측의 메뉴팝업이 나타나고 오른쪽 이미지와 같이 바꿔줍니다. 2. Network를 선택합니다. 3. 기록을 실행합니다. 기록하기 시작하면 위와같은 이미지가 나타납니다. 4. 내가 확인하고자 하는 부분을 선택합니다. - 이미지 좌측 상단에 List: HTTP Transaction으로 세팅한 화면입니다. 5. 응답과 결과를 확인할 수 있습니다. 직접 사용해보시면 더욱 자세한 정보를 알 수 있습니다.

iOS SPM No Such Module

iOS SPM No Such Module  기존에는 패키지 기반으로 작업하지 않았는데, 최근에 로컬 소스도 Swift Package로 작업하는 예제들을 보아서 이를 공부하고 적용해보고자 함. 에러 스크린샷 패키지에서 개발할 때는 안되었는데 해당 패키지를 다른 영역에서 사용할 때 해당 에러가 발생  오류가 발생한 패키지 코드아래는 오류가 발생한 패키지 코드임// swift-tools-version: 5.6// The swift-tools-version declares the minimum version of Swift required to build this package.import PackageDescriptionlet package = Package( name: "kuring-campus-m..