728x90

전체 글 290

[Swift] Codable은 클래스 정의할 때 채택시키자

안녕하세요. Swift 클래스에는 Designated initializer와 Convenience initializer가 있어요.(Designated initializer와 Convenience initializer를 모르시는 분은 아래 글을 참고해 주세요~!) 클래스(class type) 생성자에 대해 알아보자안녕하세요. 이전에 구조체 생성자에 대해 알아봤어요. 오늘은 클래스 생성자를 공부할게요ㅎ # 1. Designated initializer, Convenience initializer Designated initializer는 해당 클래스의 모든 property(부모 클래phillip5094.tistory.com 이때.. Codable을 아래처럼 클래스 extension에다가 채택시키면 Desig..

TroubleShooting 2025.01.16

Designated initializer cannot be declared in an extension

안녕하세요. Swift를 사용해 보셨다면, 이런 에러를 몇 번 보셨을 거예요.  Designated initializer cannot be declared in an extension of 'SomeClass'; did you mean this to be a convenience initializer?  그 이유는 Swift가 extension에서 designated initializer를 구현하는 것을 허용하지 않기 때문입니다.그 이유를 알아볼게요.Swift가 extension에서 designated initializer 구현하는 것을 허용한다고 가정해 볼게요. 아래 코드가 허용되겠죠.  Person 클래스를 상속받은 Korean 클래스가 있어도 크게 문제 될 건 없죠.(Person 클래스의 desi..

Swift 2024.12.29

Preview Content 란..?

안녕하세요. SwiftUI 프로젝트를 만들면 Preview Content라는 폴더가 있어요. 갑자기 이게 뭔지 궁금해져서.. 가볍게 찾아봤습니다. 쉽게 말해, Preview Content는 디버깅용 그룹을 의미하며, Preview Content 안에 있는 Assets, Swift 파일, 기타 파일들은 실제 앱에는 포함되지 않아요. 예를 들어, 'Preview Content > Preview Assets' 안에 Logo라는 이미지를 추가하면 시뮬레이터나 프리뷰에선 문제가 없지만, 아카이브 빌드를 할 경우 Preview Content 그룹은 앱에 포함되지 않아, Type 'ImageResource' has no member 라는 빌드 에러가 발생합니다.   이번 글은 여기서 마무리.

SwiftUI 2024.11.01

Alternative App Icon으로 앱 실행 중에 앱 아이콘 변경하기

안녕하세요. Alternative App Icon이란 것을 사용하면 런타임 때 앱 아이콘을 바꿀 수 있습니다. 왜 난 몰랐지..;; 한번 알아볼게용 # 앱 아이콘 변경 방법1) Assets에 기본 아이콘과 함께 대체할 다른 앱 아이콘을 추가합니다. 2) (Optional) 만약 화면에서 앱 아이콘 이미지를 보여주고 싶으면 Assets에 Image Set으로 추가해 주세요. [참고] iOS 18에서는 UIImage(named:)를 사용해 앱 아이콘 이미지를 가져올 경우 nil이 반환되기 때문 3) 'Build Settings > Alternate App Icon Sets' 설정에 대체될 앱 아이콘 이름을 추가합니다. 4) alternateIconName으로 현재 앱 아이콘 이름을 가져오고, setAlter..

iOS 2024.10.29

Framework 프로젝트의 ObjC 클래스에서 Swift Public 클래스 사용하기

안녕하세요. 이번엔 framework 프로젝트 안에 있는 Objective-C 클래스가 Swift 코드를 사용할 수 있는 방법을 간단하게 정리해 볼까 해요. # 필수 설정Objective-C에서 Swift 모듈을 사용하려면, Swift는 반드시 NSObject를 상속받은 클래스여야 하며, 클래스에 @objc 또는 @objecMembers 속성이 있어야 합니다.  # Swift Public 클래스의 Public 메서드, 프로퍼티 사용하는 방법1) public 메서드 또는 프로퍼티에 @objc 설정 추가  2) {Framework}-Swift.h 헤더를 import 후 사용  # Swift Public 클래스의 Internal 메서드, 프로퍼티 사용하는 방법Framework 환경에선 Bridging Hea..

iOS 2024.10.27

CocoaPods Support & Maintenance Plans

안녕하세요. CocoaPods 유지보수 계획에 대한 공지 공유드립니다. 자세한 내용은 본문 참고해 주세요! CocoaPods Support & Maintenance Plans - CocoaPods BlogTLDR: We're still keeping it ticking, but we're being more up-front that CocoaPods is in maintenance mode. CocoaPods is about 13 years old now, and the landscape of iOS development has changed a lot in that time. I remember the fragmented islets of small sblog.cocoapods.org# 요약SPM 출시..

News 2024.09.29

shell script로 '[CP] Copy Pods Resources' 항목 제거

안녕하세요. CocoaPods을 사용하면, 프로젝트 Build Phases에 '[CP] Copy Pods Resources' 항목이 들어가는데요. 이 항목을 제거하는 shell script 공유합니다. 수동으로 지울 수는 있는데 pod install 또는 pod update 할 때마다 다시 추가되더라구요. 저처럼.. 자동화 필요하신 분들은 shell script 사용하는 것을 추천합니다! (shell script 말고 더 좋은 방법 아시는 분 있으면 공유해 주세요ㅠㅠ 꼭...) 우선 xcodeproj 모듈 설치하고sudo gem install xcodeproj   아래 스크립트 실행해주세요. 이번 글은 여기서 마무리.

iOS 2024.09.29

[Xcode 16] `force_encoding': can't modify frozen String (FrozenError) 해결방법

안녕하세요. Xcode 16에서 'pod install' 하니까 이런 에러가 발생했어요ㅠ/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.15.2/lib/cocoapods/user_interface/error_report.rb:34:in `force_encoding': can't modify frozen String (FrozenError)/Library/Ruby/Gems/2.6.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project.rb:85:in `initialize': [Xcodeproj] Unable to find compatibility version string for object version `77`. (ArgumentError) 해결 방..

TroubleShooting 2024.09.27

[Xcode 16] RuntimeError - `PBXGroup` attempted to initialize an object 에러 해결방법

안녕하세요. Xcode 16으로 신규 프로젝트 생성 후 'pod init'을 하니까 에러가 발생했어요ㅠRuntimeError - `PBXGroup` attempted to initialize an object with unknown ISA `PBXFileSystemSynchronizedRootGroup` from attributes: `{"isa"=>"PBXFileSystemSynchronizedRootGroup", "exceptions"=>["D40ED03F2CA5CAF200433E18"], "path"=>"MyApp", "sourceTree"=>""}` 이때 해결방법 공유할게요. # 해결방법1. xcodeproj를 '패키지 내용 보기'로 열기 2. project.pbxproj 열기 3. 'PBXFil..

TroubleShooting 2024.09.27

[iOS] AOD 기능 여부에 따라 화면 App lifecycle 이벤트가 다르게 발생한다.

안녕하세요. AOD (Always On Display) 기능이 있냐 또는 활성화되어 있냐 여부에 따라서 화면 잠금 시 발생하는 App lifecycle 이벤트가 다르다는 것을 최근에 알게 되었습니다. AOD 기능 여부에 따라 App lifecycle 이벤트가 어떻게 발생하는지 아래에 정리해 봤어요.  AOD 기능 OFFAOD 기능 ON앱 시작1) willEnterForeground2) didBecomeActive1) willEnterForeground2) didBecomeActive앱을 background로 내리기1) willResignActive2) didEnterBackground1) willResignActive2) didEnterBackgroundbackground 앱을 화면에 올리기1) will..

TroubleShooting 2024.09.26