Home

HP Trivia (2)

Audio 이제 이전 글에서 구현한 transition animation 효과에 맞춰 사운드를 재생시켜, 유저에게 시각뿐 아니라 청각적으로도 몰입감을 줄 수 있도록 해보려 한다. import AVKit @State private var audioPlayer: AVAudioPlayer! .onAppear { animateViewsIn = true playAudio() } private func playAudio() { let sound = Bundle.main.path(forResource: "magic-in-the-air", ofType: "mp3") audioPlayer = ...

Read more

HP Trivia (1)

📁 Folder vs Group (Xcode) 항목 Folder (파란색) Group (회색) 기본 적용 버전 Xcode 16부터 기본 Xcode 15 이하에서 기본 파일 시스템 반영 실제 macOS 파일 시스템에도 동일한 폴더 구조로 생성됨 Xcode 프로젝트 내에서만 존재하며, 실제 파일 시스템과 일치하지 않을 수 있음 Git 병합 충돌 상대적으로 적음 프로젝트 파일 (.xcodeproj) 자체 변경...

Read more

Dex (fin)

Predicate 수정 CoreData에서 SwiftData로의 마이그레이션을 마치며 기본적인 구조와 동작 오류는 대부분 해결했다. 하지만 실제 앱에서 데이터를 “조건에 맞게 필터링”하는 기능, 즉 Predicate는 아직 손대지 않은 상태이다. 이번 글에서는 SwiftData에서 predicate를 어떻게 사용하는지, 기존 방식과 어떤 차이가 있는지를 구체적으로 살펴보며 마이그레이션을 마무리해본다. CoreData vs SwiftData: Predicate 비교 CoreData 방식 // CoreData 방식 private var dynamicPredicate: NSPredicate { ...

Read more

Dex (12)

SwiftData 사용하기 Migration 하기 사실 이전에도 CoreData → SwiftData 마이그레이션 작업을 진행한 적이 있다. 이전글 참고. SwiftData 모델을 만들기 위해 Editor 메뉴에서 Create SwiftData Model을 실행하면, 다음과 같이 자동 생성된 코드가 나타난다: 예시: @Model public class Pokemon { #Unique<Pokemon>([\.id]) // 생략 } 하지만 이 상태에서는 CoreData의 기존 모델과 이름이 겹쳐서 충돌이 발생하므로, 이전에 사용하던 CoreData 모델을 삭제해야 한다. SwiftData...

Read more

Dex (11)

Appgroup AppGroup 역시 이전에 다뤄봤던 내용이다. 이전글 참고. App Group 설정 및 권한 부여 Widget도 동일하게 해주자. 이렇게 추가해주면 된다. 효율적인 파일 관리를 위해 새롭게 추가된 Extension.entitlements 파일도 아래로 옮겨주자. 이때 발생하는 에러 해당 문제를 해결하기위해 우리가 눈여겨봐야하는 것은 바로 Signing이다. 지금은 그냥 파일명만 표기되어있다. 하지만 우리는 해당 파일의 위치를 옮겼기에, 해당 파일이 현재 어디에 있는지 명시를 해줘야한다. 그래서 앞에 DexWidget/을 붙여준다. 이제 빌드가 정상적...

Read more

Dex (10)

Widget UI Design 이제 디자인을 해보려고한다 디자인은 이렇게 할 것이다. UI구성은 지난글에서도 정리했지만 WidgetEntryView가 담당한다 struct DexWidgetEntryView : View { var entry: Provider.Entry var body: some View { VStack { entry.sprite } } } 코드를 보면 감이 바로 잡히겠지만, 바로 SwiftUI로 View를 구성한다. (물론 이전글에서 언급을 하긴했다.) 우선 위젯의 사이즈를 여러개 할것이므로 @Environm...

Read more

Dex (9)

WidgetKit으로 홈 화면에 포켓몬 위젯 표시하기 Widget 만들기 앱을 실행하지 않아도 정보를 확인할 수 있게 하려면 Widget이 필요하다. 이번 글에서는 WidgetKit을 사용해 포켓몬 정보를 아래 사진처럼 홈 화면에서 바로 볼 수 있도록 위젯을 만들어본다. 이것도 역시 전에 공부를 했던 적이 있기에 WidgetKit 지난글을 참고하면 좋을듯하다. 위젯 추가는 이렇게 이때 check는 모두 하지 않는걸로… 늘 그렇듯 Activate 이전에도 이렇게 캡쳐를 했었지만 리마인드할때는 역시 다시한번 캡쳐하는게 좋긴하다. 위의 과정을 거치면 우리를 맞이해주는 귀여운 위젯이 나타난...

Read more

Dex (8)

Offline에서도 이미지가 보이도록 만들기 현재는 api를 통해 데이터를 받아와서 처리를 하는식으로 되어있다. 특히 Image의 경우엔 AsyncImage를 사용하여 이미지가 있는 url을 가져와서 있으면 이미지를 띄우고 없으면 placeholder의 이미지가 보여지는데 현재는 전부 ProgressView로 되어있다. 즉 이상태라면 어떤 유져는 네트워크 문제때문에 잠시 통신이 어려울때, 모든 이미지가 ProgressView가 나오게 될 것이다. 이부분을 방지하기위해 Offline에서도 이미지를 보여지게하도록 하려고 한다. 간단한 예시 AsyncImage(url: showShiny ? pokemon.sh...

Read more