반응형

전체 글 72

expected unqualified-id NSString

필자의 경우 Unity에서 사용할 Mac용 Bundle을 만들다가 발생한 에러이다. Unity의 C#과 커뮤니케이션할 Cpp와 그 Cpp와 소통할 Objective-C가 있었는데 Cpp에서 Objective-C 코드를 호출해야 하고 Objective-C에서 Swift 코드를 호출해야 하는 상황에서 Objective-C 코드에 NSString을 사용하는 쪽에서 "expected unqualified-id NSString" 이런 에러가 발생하였다. 해결방법:해결방법은 간단했는데 Cpp코드를 그냥 쓰지 않고 Objective-C 코드만 사용하는 것이었다. Cpp파일의 확장자인 .cpp를 .mm으로 변환하여 Objective-C++ 파일로 만들어 사용하는 것인데 Objective-C++은 Objective-C와..

Issue Tracking 2024.07.09

not available in automatic reference counting mode

XCode로 프로젝트를 하다 위와 "not available in automatic reference counting mode" 라는 에러가 발생함  AutoMatic Reference Counting Mode를 사용할수 없다는 이슈로 나 같은 경우 기존에 cpp로 작성된 코드를 xcode에 넣었다가 발생하였다. 해결방법: Automatic Reference Counting을 사용할수 없는거니 사용하지 않게 세팅 하면 된다Project의 BuildSetting에 들어가 Objective-C Automatic Reference Counting을 No로 설정한다

Issue Tracking 2024.07.08

[Swift] OpaquePointer vs UnsafePointer

Swift에서 Object-C, C, CPP 코드를 써야하는 경우 OpaquePointer와 UnsafePointer를 자주 볼 수 있다. 둘다 별 생각없이 쓰거나 읽었는데 이 둘의 차이를 확인해보자 결론부터 말하면 이둘의 차이는 header 파일에서 찾을 수 있다 header 파일안에 struct가 완전히 정의되어 있다면 UnsafePointer를 Swift에서 사용가능하며 포인터를 dereference 할 수 있고 .pointee를 호출해 안에있는 content를 볼 수 있다. // sample.htypedef struct Person person;struct Person{ int age; char* first_name;}void ShowInformation(Person*) void Sho..

iOS/Swift 2024.07.04

Update your Play Core Maven dependency to an Android 14 compatible version!

Unity로 만든 게임이 Google Play Store에 Live되고 있는데  Update your Play Core Maven dependency to an Android 14 compatible version! Your current Play Core library is incompatible with targetSdkVersion 34 (Android 14) 라는 이메일이 날라왔다. Play Core? Play Core가 뭐지 처음엔 gradle에 해당 버전의 라이브러리가 있을테니 그거 버전 올려서 다시 업데이트하면 되지 라고 생각했으나 내 gradle에 play core라는 라이브러리는 존재하지 않았다 우선 검색해서 찾아보니https://developer.android.com/reference/..

Issue Tracking 2024.07.03

[Swift] Actor 란?

동시성 프로그램을 만드는데 있어 어려운 문제중 하나는 Data Race를 피하는 것이다. Data Race란, 2개 이상의 개별 스레드가 동시에 동일 데이터에 접근해 접근중 하나 이상의 write가 발생할때 일어나는 이슈이다 이 DataRace가 일어나는 원인은 데이터가 shared mutable state이기 때문인데 데이터가 변경되지 않거나 공유되지 않는다면 data race는 발생할 수 없다 Actor Actor는 shared mutable state에 대한 동기화 매커니즘으로 Actor는 자신만의 상태를 가지며 해당 상태는 Program의 나머지 부분과 분리된다. Actor를 사용하면 Actor의 상태에 동시에 접근하지 않도록 해준다 class와 같이 사용하면 되지만 클래스와 달리 상속을 지원하지..

iOS/Swift 2024.07.03

[SwiftUI] @State vs @Binding

@State- 값의 변경을 감지하고 뷰를 자동으로 Update하는데 사용된다struct ContentView: View{ @State private var count = 0 var body: some view { VStack { Text("Count: \(count)") Button(action: { count += 1 }) } }} @Binding데이터의 양방향 바인딩을 구현하는데 사용, 뷰 간에 데이터를 공유하고 업데이트 하는데 사용[특징]1. 값의 참조: 값을 저장하지 않고 값의 참조를 저장, 부모 뷰와 자식 뷰가 같은 Data값을 참조2. 양방향 데이터 흐름: 자식 뷰에서 값을 변경하면 해당 변경 ..

iOS/SwiftUI 2024.07.02

[SwiftUI] @StateObject vs @ObservedObject

SwiftUI에서 사용하는 어노테이션중 @StateObject와 @ObservedObject는 왜 사용하는 것일까? @StateObject & @ObservedObject- 둘다 관찰중인 객체의 변경에 반응해서 화면(UI)을 업데이트 할 수 있게 해주는 SwiftUI의 Property Wrapper이다  그렇담 StateObject와 ObservedObject의 차이는 무엇일까? @ObservedObject- StateObject와 ObservedObject는 둘 다 "ObservableObject"라는 Protocol을 따른다final class CounterViewModel: ObservableObject{ @Published var count = 0 func incrementCou..

iOS/SwiftUI 2024.07.01

Unity 3D Object Drag & Drop

Unity에서 3D 게임을 만들다 보면 3D GameObject를 컴퓨터의 경우 마우스, 모바일의 경우 손가락으로 자유롭게 Drag & Drop 하여 원하는 위치에 놓는 기능이 필요할때가 있다 위에서 서술한 기능을 나는 아래와 같이 구현하였다 https://www.youtube.com/shorts/H-rxX2ozjUE3D Object Drag & Drop  우선 클릭 또는 터치 했을때 내가 Drag & Drop 하고자 하는 GameObject인지 구분부터 해야한다.private GameObject OnClickObjUsingTag(string tag){ Vector3 touchPos = new Vector3(0, 0, 0);#if UNITY_EDITOR touchPos = Input.mouse..

Unity 2024.06.04

Unity Design Pattern - Object Pool

Object Pool 방식의 디자인 패턴은 비단 Unity에서만 사용하는 패턴은 아니지만 Unity에서도 유용하게 쓸 수 있는 디자인 패턴이다 Object Pooling은 많은 GameObject들을 생성하고 파괴하는데 CPU를 최적화 시키는 방법으로 GameObject를 다 사용하고 난 후 GameObject를 파괴시키지 않고 비활성화 시킨 후 pool로 되돌리는 방식이다. 이는 GC(Garbage Collector)로 인한 버벅거리는 현상을 줄여주는 효과가 있다. 1. 간단한 Object Pooling 예시 [ObjectPool.cs]public class ObjectPool : MonoBehaviour{ [SerializeField] private uint initPoolSize; [Se..

Unity 2024.06.03