기사 목록
117개의 글이 있습니다
Xcode 27.2 RC, Device Hub에 슬로 모션 애니메이션 추가
Slow Animations is coming back to Device Hub
- Xcode 27.2 RC의 Device Hub에는 시뮬레이터 전용 슬로 모션 애니메이션, 흔들기·낙하·메모리 압박 시뮬레이션과 스크린샷 관련 설정이 추가된다.
- 여러 기기 창을 사용할 때 입력이 잘못 전달되거나 비활성 상태 뒤 입력이 멈추는 문제 등이 수정됐고, iOS 17 시뮬레이터 입력도 지원한다.
- 코드 커버리지 MCP 도구와 JSON 기반 프로젝트 형식인 .xcproj도 제공된다. 단, iPhone Duo 화면 캡처와 접근성 도구 등에는 알려진 제한이 남아 있다.
iOS 27 Now Playing 프레임워크: 재생 상태와 원격 명령 통합
iOS 27: Now Playing Framework
- Now Playing은 미디어 유형별 콘텐츠, 재생 스냅샷, 시스템 명령을 하나의 관찰 가능한 표현으로 묶어 기존 메타데이터와 원격 제어 API를 대체한다.
- 앱은 MediaSession을 만들고 기본 세션으로 활성화해야 하며, 새 로컬 세션과 MPNowPlayingInfoCenter 또는 MPRemoteCommandCenter를 함께 사용하면 동작이 정의되지 않는다.
- RemoteMediaSessionRepresentable은 외부 기기에서 재생 중인 미디어를 표현하고, 앱이 실행되지 않을 때도 푸시 알림으로 상태를 갱신하는 통합 경로를 제공한다.
RealityKit과 SwiftUI로 구현한 iPad 물류 디오라마 게임의 구조
Architecture deep dive: Simulating tactile 3D logistics dioramas with RealityKit and SwiftUI in an open-source iPad game
- Waybill은 RealityKit과 SwiftUI를 사용해 물류 관리 게임의 진행 구조를 iPadOS의 미니어처 3D 디오라마로 표현한다.
- 차량과 선박은 속도·질량·제동 곡선·충돌 범위를 따르는 물리 엔티티로 구현되며, 정체와 하역 과정이 화면에 나타난다.
- 게임 경제는 Python 시뮬레이션으로 사전 모델링했으며, Waybill의 소스 코드는 MIT 라이선스로 공개됐다.
Swift 6.4의 async defer도 취소된 작업에서 정리를 보장하지 않는다
Swift 6.4: Async defer doesn't make cleanup cancellation-safe
- Swift 6.4에서는 defer 안에서 await할 수 있지만, 비동기 정리 작업은 호출 작업의 취소 상태를 그대로 관찰하므로 필요한 작업이 반드시 끝난다는 뜻은 아니다.
- 예제의 flush()는 먼저 Task.checkCancellation()을 호출한다. 작업이 이미 취소됐다면 이 지점에서 오류가 발생해 버퍼를 비우지 못한다.
- close()는 flush()의 오류를 잡은 뒤에도 isClosed를 true로 설정한다. 따라서 닫기 처리가 완료된 것처럼 보여도 버퍼에 남은 데이터가 파일에 기록되지 않을 수 있다.
Swift와 SwiftUI, WebKit으로 네이티브 macOS 브라우저 만들기
I built a native macOS browser in Swift + SwiftUI (WebKit). Here’s what I learned
- Lumen은 Safari와 같은 WebKit을 엔진으로 사용하며, 콘텐츠 차단기와 탭 휴면 기능 등 브라우저 기능을 한데 제공한다.
- 주소, 검색, 열린 탭, 책갈피, 방문 기록과 명령을 ⌘L로 여는 하나의 명령 막대에서 처리한다.
- 분할 보기, 읽기 모드, 탭 그룹, 사이트별 앱 설치와 Touch ID를 이용한 암호 관리 기능을 갖췄다.
푸시 알림은 앱이 아니라 사용자에게 보내야 한다
Your push notifications are probably about your app, not your user
- 알림은 사용자가 받아들일 이유가 있을 때만 보내야 한다. 첫 가치 경험 뒤에 권한을 요청하고, 메시지·시간·빈도를 사용자별 상황에 맞춘다.
- 야간 점수 계산과 시간별 발송 작업으로 이탈 가능성이 있는 사용자만 선별한다. 구체적인 알림 이유가 없거나 적절한 시간이 아니면 발송하지 않는다.
- 주간 예산, 플랫폼별 권한·채널·토큰 관리, 발송 후 옵트아웃 측정으로 알림의 비용을 통제하고 사용자 신뢰를 지킨다.
Claude Skills와 플러그인 구성을 정리하는 방법
My Claude Skills Setup Was Getting Out of Control...
- Claude 세션에서 너무 많은 skill과 MCP 연결을 사용하면 컨텍스트가 비대해지고, 비슷하거나 상충하는 지침이 에이전트를 혼란스럽게 할 수 있다.
- 외부 skill과 플러그인을 Documents/ClaudePlugins에 모으고, 유사 항목의 중복·차이를 감사해 사용할 규칙을 직접 선택하는 방식으로 구성을 정리했다.
- Trusted Updates mod는 승인한 GitHub 저장소의 업데이트와 설치된 Xcode 버전에 맞는 xcode-skills 업데이트를 자동으로 확인하고 내려받는다.
iOS·watchOS 앱을 위한 플랫폼 결정 체크리스트
A checklist of platform decisions for iOS/watchOS apps. What am I missing?
- 화면 크기와 텍스트 크기, 기기 지원 범위부터 Live Activities와 권한 처리까지, 앱이 플랫폼에서 마주치는 결정을 지원 또는 제외로 명시한다.
- Runara는 watch 화면을 기기 크기에 맞춰 조정하고, 오래된 watch의 배터리 소모를 줄이며, Live Activities의 갱신 주기를 3초에서 10초로 변경했다.
- 지원하지 않는 플랫폼과 기능도 이유를 기록해야 한다. 작성자는 이를 통해 이미 검토한 결정을 매번 다시 논의하지 않고 주요 릴리스 전 점검에 활용하라고 제안한다.
Xcode 27 MCP의 Simulator 탐색은 RocketSim CLI보다 토큰을 더 쓴다
How the Xcode 27 MCP can lead to higher token costs when navigating the Simulator
- 같은 Simulator 시나리오에서 Xcode 27.1 MCP가 읽은 텍스트는 약 400KB, RocketSim CLI는 56KB로 측정돼 Xcode 쪽이 약 7배 많았다.
- Xcode MCP는 접근성 계층 파일을 좌표 확인에 사용하고 스크린샷을 직접 열지 않지만, 각 동작 뒤에 전체 계층 정보를 읽어야 해 토큰 비용이 커졌다.
- Xcode MCP는 호출 횟수가 적고 앱 빌드·실행도 맡지만, 숨겨진 접근성 요소 활성화 등 일부 작업은 지원하지 않아 도구별 기능 차이를 고려해야 한다.
Swift Weekly #159: 서로 다른 플랫폼의 앱을 한 데스크톱에서 실행하기
Fatbobman's Swift Weekly #159
- Cutefish의 Reef는 Mach-O 로더와 Apple 프레임워크를 Linux에서 재구현해 수정하지 않은 Mac 앱을 직접 실행하며, 현재 구현의 성능 문제도 함께 다룬다.
- SimRun은 iOS 시뮬레이터용 앱을 macOS의 개별 창에서 실행하고 검사·자동화 기능을 제공하지만, Apple Silicon과 Xcode가 필요하며 SIP를 꺼야 한다.
- Mac Android Subsystem은 LineageOS 가상 환경의 앱을 Mac 창에 표시한다. 세 프로젝트는 구현 방식은 달라도 앱을 호스트 시스템에 자연스럽게 통합하려 한다.