본문 바로가기

전체 글139

CocoaPods PBXFileSystemSynchronizedRootGroup 오류 (Xcode 16 ) Xcode 16으로 업그레이드한 뒤에 CocoaPods를 쓰려고 pod init을 실행했는데,아래와 같은 오류가 자주 발생한다.RuntimeError - `PBXGroup` attempted to initialize an object with unknown ISA `PBXFileSystemSynchronizedRootGroup` 이 문제를 해결하는 가장 빠르고 간단한 방법 중 하나는프로젝트 내에 “Folder”로 표시된 디렉터리를 전부 “Group”으로 변환해주는 것이다.문제가 해결이 우선이라면 여기까지만 읽어도 해결이 될듯하다.핵심 해결 방법Xcode 프로젝트 열기프로젝트 트리(좌측 Navigator)에서 폴더 아이콘으로 표시된 디렉터리를 우클릭“Convert to Group” 메뉴가 있으면 선택하여 .. 2025. 1. 23.
APNs 푸시 알림이 오지 않는다 - DeviceToken, aps-environment, Provisioning Profile 1. 문제 상황(1) 운영 APNs에서 푸시 알림이 도착하지 않음배경: iOS 앱에서 푸시 알림이 정상적으로 오지 않는 상황이 발생함.증상: 운영(Production) 환경으로 APNs 푸시를 보냈는데, 실제 기기에서는 알림이 전혀 수신되지 않음.(2) 디바이스 토큰이 환경별로 다른 것으로 보임포인트: APNs에서 개발(Sandbox) 환경과 운영(Production) 환경은 각기 다른 디바이스 토큰을 발급하는가?상세: 개발 환경에서 발급된 토큰을 운영 환경 서버로 사용하면 푸시가 오지 않을 수 있음.(3) Entitlements.plist 설정 문제발견: aps-environment 값이 development로 설정되어 있음.의문: 운영 환경 배포 시에는 production으로 바꿔야 하는지, 그리고 .. 2024. 12. 28.
컴퓨터 그래픽스 - Object Picking Picking 했을때 우리가 얻을 수 있는 것은 스크린에서의 2차원 Pixel좌표 (x,y)밖에 없었다. 어떻게 주전자가 하이라이트되어 색이 바뀔까? 각 픽셀은 어떤 영역에 속하는지 정보가 없다. 3차원으로 넘어가서 기하적인 추론을 해야할 것이다. 그림에 보이는 박스는 View Port 영역이다. 2차원 Screen 공간에서는 커서가 (X_s, Y_s) 2차원 좌표로 주어지지만, 클릭한 점이 3차원 공간에서는(X_s, Y_s, 0)일 것이다. 여기서 뻗어나가는 ray를 생각해보자. ray란 시작점이 있고 한쪽으로 무한하게 뻗어나가는 직선이다. 3차원 뷰포트에서 모든 Ray는 z축 방향으로 뻗어나간다고 생각하면된다. 이때 direction Vector는 (0,0,1)이다. 3차원 Ray가 뻗어나가면서 누구.. 2024. 3. 1.
컴퓨터 그래픽스 - Quaternions Euler Transform이 직관적이지만 올바르게 보간된다는 보장이 없기 때문에 KeyFrame Animation에서는 쓰기가 어렵다는 결론으로 지난 포스팅을 마무리 하였다. 이번엔 이에 대한 해결책을 알아본다. Quaternion 기법은 항상 올바르게 보간된다. Quaternion은 Complex Number 복소수를 확장한 것이다. a + bi b를 허수부, a를 실수부라고 배웠었다. 여기서 b를 확장하게 된다. i에서 j와 k가 추가된다. 그 앞에 스칼라값이 붙게 되어 허수부를 결정하게 된다. 그 결과 4개의 스칼라값이 나오는데 이것을 4차원 벡터로 표현하게 된다. 4차원 벡터이기 때문에 쿼터니언이라 부른다. 두개의 서로 다른 허수 단위가 곱해지면 Cyclic Permutation 적인 특징을 가.. 2024. 2. 18.
[iOS] RealityKit, ARKit - MotionCapture 예제 ARViewContainer SwiftUI는 기본적으로 UIKit 또는 AppKit 컴포넌트를 직접 지원하지 않는다. 즉, ARView와 같은 UIKit 컴포넌트를 SwiftUI에서 바로 사용할 수 없다. 따라서, UIKit의 ARView를 SwiftUI 뷰에서 사용하고자 할 때는 UIViewRepresentable 프로토콜을 채택하여 UIKit 뷰를 SwiftUI 뷰로 변환해야 한다. ARView, Entity란? struct ARViewContainer: UIViewRepresentable { typealias UIViewType = ARView //이 메서드는 SwiftUI 뷰가 생성될 때 호출. //여기서 실제 ARView 인스턴스를 생성하고 초기 설정을 수행. func makeUIView(con.. 2024. 2. 14.
컴퓨터 그래픽스 - Euler Transform 설 연휴 전날 점심에 칼퇴를 시켜주셨다 ㅎㅎ. 다음주부터 하고싶은 게 많기에 얼른 카페에 와서 이번주 공부한 그래픽스를 정리하고 있다. 그동안 배웠던 3차원 회전은 기본축을 중심으로 이루어지는 변환이었다. 그림을 예시로 x축을 중심으로 회전을해도 여전히 yz평면 위에서 회전할 뿐이다. x축 중심을 회전한 후 y축 중심으로 60도 회전한다면 주전자 주둥이 끝이 yz평면을 벗어나게 된다. 이와 같이 x,y,z축 중심 회전을 고루 이용한다면 물체의 임의 방향으로 변환할 수 있다는 것이다. 이것이 Euler Transform이다. 다시 말해, x,y,z 축 중심의 회전을 결합해서 임의의 방향을 제공하는 것이다. 세 주축을 쓰기 때문에 각도 세가지가 주어지며 이것이 Euler angles이다. 다시 말해, x,.. 2024. 2. 8.
[iOS] SIMD3 현재 보고 있는 AR, 그래픽스 관련하여 3D모델의 위치를 추적하고 저장하는 과정에서 많이 보이는 타입이다. SIMD3는 단일 명령 다중 데이터(Single Instruction, Multiple Data, SIMD) 프로그래밍 모델을 따르는 벡터 타입으로, 세 개의 스칼라 값을 갖는 벡터를 표현한다. struct SIMD3 where Scalar : SIMDScalar SIMD3는 제네릭 구조체로, Scalar 타입의 세 개의 요소를 갖는다. 이때, Scalar는 SIMDScalar 프로토콜을 준수해야 하며, 이는 주로 기본 수치 타입(int, float 등)을 의미한다. 연산자와 메서드 SIMD3 구조체는 연산자를 통해 벡터 간 연산을 지원한다. 예를 들어, &* 연산자는 두 벡터의 요소별 곱셈을 수.. 2024. 2. 6.
728x90