DO SOPT 33기 에서 앱잼 기간동안 TOASTER 라는 iOS 앱을 제작했고 많은 관심 부탁드립니다!
🔗 TOASTER 다운로드하기
안녕하세요 Niro 🚗 입니다!
그동안 여러 프로젝트를 진행하면서 Asset 관리 방법은 크게 다른점이 없었습니다.
프로젝트에 사용할 이미지와 색상을 쉽게 관리하고자 ImageLiterals
, ColorLiterals
를 통해 관리하곤 했죠!
그냥 사용하는 곳에
UIImage
나UIColor
로 할당하면 되는거 아닌가?
싶지만 생각보다 불편한 점이 많았고어떻게 하면 더욱 편리하게 관리를 할 수 있는지 알아보겠습니다!
UIImage { .load(systemName: "checkmark.circle.fill") }
UIColor(rgb: 0xA2EE00)
그동안 위와 같이 Asset 에 넣은 이미지 파일명을 직접 입력(하드코딩) 했습니다.
색상의 경우 Hex 로 변환하여 사용할 수 있게 메서드를 추가했구요!
ImageLiterals
, ColorLiterals
이라는 Enum 을 만들어 어디서든지 참조할 수 있게 했지만...
만약 위의 코드처럼 작성하다보면 많은 에로사항을 경험했을거라 생각해요!
이미지와 색상이 바뀐다면 한, 두개 정도면.. 괜찮겠지만
여러곳에서 사용하다보면 굉장히 많이 고쳐야 하는 불상사도 생깁니다...
그러다 보면 오타가 생기기도 마련이구요!
저렇게 직접 참조하는 방법은 오류가 발생하기 쉽고 대부분의 개발자들은 Swiftgen 과 같은 다른 라이브러리를 통해 해결 한다고 들었습니다...
하지만!
Xcode 15 부터 이미지와 색상에 관해 더 이상 관리할 필요가 없어졌습니다!
위의 이미지처럼 Xcode 가 Asset 의 이미지와 색상에 대해 ImageResource
, ColorResource
를 직접 생성하여 쉽게 접근할 수 있도록 바뀌었습니다!
제가 직접 만든 파일이 아닌 Xcode 가 자동으로 생성한 파일이고 정적 상수로 이미지와 색상이 생성된걸 볼 수 있습니다!
더 이상 하드코딩이 아닌 해당 상수를 불러오면 되는거죠!
UIImage(resource: .imgOnboarding)
UIColor(resource: .black900)
이제 우리는 이렇게 이미지와 색상을 불러올 수 있게 됩니다! 참 쉽죠?
resource
라는 매개변수로 Asset 의 이미지와 색상에 접근하도록 바뀌였고
하드코딩하지 않기 때문에 사람의 실수를 줄이고 다른 라이브러리를 사용하지 않는 최고의 방법인거 같습니다!
직접 관리를 하지 않는다는 장점으로 끝날 거 같았지만 한가지 더 있습니다!
애플 생태계 내에서 앱을 개발할 때 우리는 UIKit, SwiftUI, AppKit 등 다양한 프레임 워크를 씁니다.
하나의 프레임워크만 사용할 때도 있지만 요즘은 UIKit 과 SwiftUI 를 같이 쓰는 상황이 많은거 같아요...
써보신분들은 아실 수도 있지만 이미지와 색상에 대해서
UIKit 에서는 UIImage
와 UIColor
, SwiftUI 에서는 Image
와 Color
라는 서로 다른 유형을 쓰죠!
기존과 같이 ImageLiterals
, ColorLiterals
라는 객체를 사용했다면 같은 이미지와 색상이지만 사용하는 프레임워크에 따라 분리를 해야만하는 단점이 있었습니다만
이제는 신경 쓸 필요가 없어졌습니다!
각 프레임 워크에 Extension 으로 확장된 모습을 볼 수 있고 ImageResource
와 ColorResource
에 선언된 각 정적 상수들은 실행중인 프레임워크에 맞게 실행이 됩니다.
@available(iOS 11.0, macOS 10.13, tvOS 11.0, *)
extension ColorResource {
static let black900 = ColorResource(name: "black900", bundle: resourceBundle)
}
NSColor.black900 // AppKit
UIColor.black900 // UIKit
Color.black900 // SwiftUI
이렇게 black900
이라는 정적 상수가 자동으로 생성이 되어 있고
아래처럼 직접 사용하는 프레임워크에 맞는 타입을 색상을 만들 필요없이 Asset 에 추가 한다면 불러올 수 있게 됩니다.
정말로 너무 좋은 기능인거 같아요 ㅠㅠㅠㅠ
직접 파일명을 입력하다 생기는 사람의 실수가 생기고 자료가 바뀔 때 많은 부분을 바꾸다보면 오류가 생기기 마련입니다.
불편한 문제점을 해결하고자 Asset 의 이미지와 색상을 관리하기 위해 라이브러리를 사용하거나 Enum 을 만들어 관리하도록 구현했었죠!
하지만 Xcode 15 부터 Asset 에 이미지와 색상을 넣으면 자료에 접근할 수 있는 정적 변수가 자동으로 생성이 되고 그동안의 문제점을 한번에 해결할 수 있게 되었습니다.
가면 갈수록 편해지고 다양한 기능이 추가되는 Xcode 를 보게되면...
Xcode 도 공부를... 해야겠다는 생각이 듭니다.
긴글 읽어주셔서 감사하고 많은 피드백과 질문 대환영입니다!
불현듯 잘 보고 갑니다!