본문 바로가기

분류 전체보기213

Configurable Widget Keyboard type 설정하기 (iOS 17 & above) 사용자 설정이 가능한 Widget은 수정을 허용하는 파라미터의 타입에 따라서 자동적으로 알맞는 키보드를 보여줍니다. 만일 파라미터가 Int 타입이라면 number pad 키보드를, String 타입이라면 text 키보드를 보여줍니다. (원시 타입이 아니라 Dynamic option을 사용할 수도 있습니다. 이 경우는 몇 가지 선택을 사용자가 할 수 있도록 drop down 옵션을 보여주는 데 나중에 제가 직접 사용해 보고 올려보도록 하겠습니다.) String type을 사용했을 때 기본적으로 자판이 영문만 지원이 되는 데, 어떻게 키보드를 바꾸어야 하는 지 한참을 헤맸었습니다. 한국어나 이모지도 쓸 수가 없고 정말 영문만 타이핑 할 수 있는 자판이 나왔습니다. iOS 16 under 버전들의 Siri I.. 2024. 2. 4.
mac app window background color 알파값 변경하기 꼭 만들어서 사용하고 싶은 mac app이 생겨서 재미로 mac app 개발을 시작했습니다. 시간 날때 틈틈이 개발해서 빨리 제가 사용하고 싶습니다 🫡 화면 element 자체는 많지 않고 디테일한 UI 작업은 필요없는 앱이라 속도감을 위해서 SwiftUI로 진행하게 되었습니다. iOS 앱을 만들 때는 Window 자체를 투명하게 만들어 본 적이 없었는데, mac 앱 작업 중에 window를 투명하게 만들어 볼 일이 생겼습니다. 아래 처럼 TransparentWindowView를 만들고 SwiftUI에서 사용할 수 있도록 NSViewRepresentable struct를 만들어 준 다음, body View의 background로 설정해주는 방식이었습니다. class TransparentWindowView.. 2024. 2. 3.
사용자 설정이 가능한 Widget 설정 방법 (iOS 17 under) 위젯에서 사용자 설정을 할 수 있다는 사실을 알고 계셨나요? 배경에 추가한 위젯을 꾹 터치했을 때 Edit Widget이라고 나온다면 사용자 설정을 지원하는 위젯입니다. 애플의 날씨앱 위젯도 feed로 받아 볼 지역을 수정할 수 있는 수정 기능이 있습니다. Widget 사용자 설정 예시 영상 이렇게 사용자 설정을 할 수 있는 Widget을 만드는 방식은 iOS 17 이후와 이전이 많이 달라졌습니다. iOS 17 이후는 WidgetKit에서 모든 것을 설정하지만 이전에는 SiriKit에서 설정을 했었더라구요. 그러다보니 iOS 17보다 낮은 버전에서도 사용자 설정 위젯을 지원하려면 17 이상과 이하 두 가지를 위한 설정을 각각 해줘야 합니다. 배포되어 있는 앱 타겟 버전이 16.2이기도 하고 iOS 16 .. 2024. 1. 24.
WidgetKit에서 CLLocationManager & WeatherKit 사용하기 애플의 날씨 앱은 사용자의 위치 정보를 알아내서 해당 위치의 날씨 정보를 위젯에서 보여줍니다. 날씨 앱처럼 위젯에서는 어떻게 위치 정보를 사용할 수 있는 지, 그리고 날씨 정보는 어떻게 받아올 수 있는 지 알아보겠습니다. 먼저 위치 정보를 알아야 해당 위치의 날씨 정보를 알 수 있으므로 위치 정보를 받아오는 방법을 알아보겠습니다. 1. 위젯에서 사용자 위치 정보 사용 동의 항목 info.plist에 추가하기 사용자 정보를 사용할 때는 항상 Info.plist에 동의를 구하는 항목을 넣어주죠? Widget에서 위치정보를 사용하려면 NSWidgetWantsLocation key를 추가해야 합니다. 이 키는 App의 Info.plist가 아닌 Widget의 Info.plist에 추가해줘야 합니다. (기본적으로.. 2024. 1. 23.
Widget에 보여줄 정보 Firebase에서 불러오기 제가 작업하고 있는 앱은 WidgetKit과 Firebase Storage를 사용하고 있습니다. Widget에서도 앱에서와 마찬가지로 DB에 저장되어 있는 데이터를 보여주어야 하는데, 어떻게 할 수 있는지 알아보도록 하겠습니다. 1. GoogleService-Info.plist 파일 타겟 멤버십에 Widget target포함시켜주기 처음에 가장 난감했던 건 Firebase에서 사용하는 GoogleService-Info.plist를 어떻게 처리하느냐 였습니다. Widget도 별도의 bundle identifier를 가지고 있으니 이걸 추가를 어떻게 해줘야 하는 건지? Widget이라고 따로 Firebase project를 만들 것 같지는 않은데 등등 여러 생각이 들었지만, 사실 해답은 매우 간단했습니다. .. 2024. 1. 23.
some (opaque type)으로 type 숨기기 Opaque type의 특징은 caller는 해당 값이 구체적으로 어떤 것인지 알수 없다는 점입니다. 그래서 이름도 불확실하다는 의미에서 opaque인 거겠죠? 그렇다면 이런 opaque type이 왜 구체적인 타입을 숨기는 지, 숨김으로써 얻게 되는 이점은 무엇인지 알아보겠습니다. 아래 예시를 보면, Farm이라는 객체 안에 hungryAnimals라는 Collection타입의 변수가 있고 해당 변수를 looping하며 연산을 하는 feedAnimals()라는 메서드가 있습니다. extension Farm { var hungryAnimals: LazyFilterSequence { animals.lazy.filter(\.isHungry) } func feedAnimals() { for animal in .. 2024. 1. 23.
반응형