🧑💻/Swift
-
Swift 다국어 String Catalog 적용하기🧑💻/Swift 2025. 3. 30. 20:23
iOS의 i18n 다국어 처리 방법을 알아봅시다.Xcode 15 이상부터 적용 가능합니다.1. 현지화 언어 추가먼저 현지화할 언어를 추가합니다.왼쪽 프로젝트 클릭 > 프로젝트 클릭 > Localizations + 버튼 클릭 > 현지화할 언어 추가 저는 한국어를 추가했습니다. 스토리보드 현지화할 거냐고 물어보는데 체크하고 Finish 2. String Catalog 추가폴더 클릭 > 우클릭 > New File from Template > String Catalog를 클릭합니다.파일명은 꼭 자동으로 입력된 Localizable 를 사용해야 인식됩니다. 파일이 생성되면 이렇게 비어있죠. 여기서 수동으로 추가하지 않습니다. 3. 다국어 코드 작성다국어 코드 작성 > 빌드 > Localizable 자동 반영됩..
-
iOS 18 PHAssetCollection 앨범 불러오기 실패하는 현상🧑💻/Swift 2025. 3. 7. 00:14
PHAssetCollection.fetchAssetCollections()를 사용하여 사진 앱의 앨범을 불러오고 있었는데요.iOS 18 버전부터 앨범 목록을 fetch 해도 0개로 나오는 이슈가 발생했습니다.let fetchOptions = PHFetchOptions()fetchOptions.includeAllBurstAssets = truefetchOptions.includeAssetSourceTypes = [.typeUserLibrary, .typeCloudShared]let smartAlbums = PHAssetCollection.fetchAssetCollections( with: .album, subtype: .smartAlbumVideos, options: fetchOptions..
-
UICollectionViewCell의 버튼이 동작하지 않는 문제 해결하기🧑💻/Swift 2024. 11. 21. 17:26
SkeletonView의 showSkeleton() hideSkeleton() 으로 스켈레톤을 구현하던 중UICollectionViewCell (UITableViewCell) 내부에 버튼이 포함된 경우 버튼 액션이 동작하지 않았습니다. SkeletonView.showSkeleton() 호출 시 contentView.isUserInteractionEnabled 값을 true로 설정하기라도 하는건지 ...contentView 이벤트를 수신하고 있어서 버튼 클릭 이벤트가 호출되지 않는 듯 합니다.contentView.isUserInteractionEnabled를 false로 지정하면 버튼이 동작합니다.import UIKitclass MyCell: UICollectionViewCell { overr..
-
iOS 18 부터 AVPlayer 재생 안되는 문제 해결하기🧑💻/Swift 2024. 11. 15. 13:27
AVPlayer를 사용한 동영상 재생이 iOS 18로 업데이트 후 재생이 안되는 문제가 발생했습니다.같은 앱인데 iOS 17에서는 정상 동작하는데, iOS 18 기기만 재생이 안됩니다.재생에 실패하면 이런 이미지가 뜹니다. 재생이 안될 땐 2가지를 확인해 보아야 하는데1. AVPlayerItem.statusif let status = player.currentItem?.status { print("AVPlayerItem status: \(status.rawValue)")}AVPlayer에 설정한 AVPlayerItem의 status를 찍어보니 failed (2)가 나오더라구요.2. AVPlayerItem.errorif let error = player.currentItem?.error { pr..
-
AVPlayerViewController 시계, 배터리 상태표시줄 표시 방법🧑💻/Swift 2024. 8. 16. 17:14
AVKit의 AVPlayerViewController를 SwiftUI에서 사용하던 중상단 Safe Area 영역에 시간, 배터리 등이 표시되지 않는 문제가 발생했습니다. 이거 사실 버그 아닌가요 struct MyVideoPlayer: UIViewControllerRepresentable { let player: AVPlayer func makeUIViewController(context: Context)-> AVPlayerViewController { let controller = AVPlayerViewController() controller.player = player return controller } func updateUI..