본문 바로가기

전체 글213

Xcode Asset에서 unassigned가 발생할 때 해결 방법 Asset에 넣은 뒤에는 이름을 영어로 바꾸어서 사용하고 있었지만 원본 파일 이름에 한글이 들어가 있던 파일이 하나 있었는데, 해당 파일에서 unassigned 문제가 생겼습니다.  처음으로 한글이 들어간 파일을 사용해봤더니 처음 보는 문제였습니다. commit 과정에서 문제가 있었나 싶어서 파일을 삭제하고 clean build도 해본 다음 다시 파일을 넣었는데도 동일한 문제가 있어서 뭔가 이상하다 생각하게 되었습니다. 구글링을 좀 해보니 다행히도 금방 해결책을 찾을 수 있었습니다. 영어로만 이루어진 이름으로 원본 파일명을 바꿔서 해결했다는 사례가 있어서 저도 시도해보았고 이 방법을 이용하니 unassigned 문제가 사라졌습니다.혹시 그래도 문제가 남아 있는 경우라면 clean build도 한 번 해보.. 2024. 12. 23.
SwiftUI Segment Picker의 round 유지하며 background color 변경하기 SwiftUI의 Picker view의 `pickerStyle`을 .segmented로 설정해주면, UIKit의 `Uisegmentedcontrol`과 같은 모양의 UI를 사용할 수 있습니다.   기본적으로 배경색이 회색이고 round된 corner를 가진 모양입니다. 배경색상을 변경할 필요가 있었고, `background`를 설정해주면 될 것 같아 적용해 보았습니다. struct SegmentedView: View { @Binding var element: PickerElement var body: some View { Picker(selection: $element) { ForEach(PickerElement.allCases) { .. 2024. 11. 18.
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory 에러 해결방법 Terminal로 편하게 XCode project를 열기 위해서 `xed` 명령어를 애용하고 있습니다.최근에 XCode 버전을 여러 개 설치하면서 XCode app의 이름을 바꿨더니, 아래와 같은 에러를 만나게 되었습니다.xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory ...(생략)...  XCode 앱의 이름을 바꿨다 보니 아무래도 해당 부분을 바꾸어 줘야 되는 건가 싶은 생각이 들었습니다. 우선, 현재 xed 명령어 실행 시에 어느 경로를 체크하는 지 알기 위해서는 아래 명령어를 입력해 줍니다. xcode-select -p 그러면 현재 설정되어 있는 경로를 반환해줍니다.저는 `/Applicatio.. 2024. 11. 14.
SwiftUI Pinch Gesture 적용하기 (view crop도 같이 적용) 적용된 기능1. 두 손가락 pinch2. Pinch 되는 view가 특정한 frame size를 넘어가면 이미지가 잘리도록3. Pinch가 시작되는 부위부터 zoom 되도록 struct PinchView: View { @GestureState private var magnifyBy = 1.0 @State private var accumulatedScale: CGFloat = 1.0 @State private var scaleAnchor: UnitPoint = .center var magnification: some Gesture { MagnifyGesture() .updating($magnifyBy) { value, gestureState, tranx.. 2024. 11. 8.
Console에서 info, debug 내용 나오지 않을 때 혹시 console에서 로그가 안보이는 경우 확인해볼 사항! info, debug로 만약 로그를 찍고 있다면, Console 옵션바 Action에서 체크표시를 해주어야 console에서 볼 수 있음. 2024. 7. 20.
os_log private 으로 나오는 내용 확인하기 os_log 를 사용해서 console 앱으로 로그를 찍어보면 으로 내용이 나오는 경우가 있다. 해당 정보를 보기위해서는 info.plist에서 설정을 추가해주면 된다. OSLogPreferences put.your.subsystem.name.here put.your.category.name.here Level Enable Debug Persist Debug Enable-Private-Data 참고자료 https://stackoverflow.com/questions/45908875/apple-iphone-debugging-with-console-private 2024. 7. 19.
Structure의 immutability value 타입인 struct의 인스턴스는 let로 선언되는 경우, 내부의 변수가 var로 선언되어 있다 할지라도 해당 변수의 값을 변경할 수 없습니다. struct MyStruct { var id: Int } let structA = MyStruct(id: 0) structA.id = 1 // Error: Cannot assign to property: 'structA' is a 'let' constant struct 인스턴스 자체를 var로 선언해야만 내부 값을 변경할 수 있습니다. 왜 그럴까? 이는 struct가 value 타입인 것과 연관이 있습니다. value 타입인 struct는 내부의 변수 값이 변경될 때, 기존의 인스턴스의 값이 변하는 것이 아니라 마치 새로운 인스턴스가 생성되는 것 처럼 .. 2024. 4. 21.
저장프로퍼티를 extension에 정의할 수 없는 이유 Extension은 class, struct, protocol, enum에 사용이 가능한 기능으로, 기존 타입에 새로운 기능을 추가하도록 도와줍니다. 직접적인 코드 접근 권한이 없는 프레임워크나 라이브러리 등의 기능을 확장할 수 있게 해주어 매우 유용하게 사용이 됩니다. 이런 extension에는 저장 프로퍼티를 사용할 수 없다는 제한이 있습니다. 그 이유는 기존 타입의 추가적인 메모리를 사용할 수 없다는 특성 때문입니다. 기존 타입의 추가적인 메모리를 사용하면, compile 시 instance를 생성할 때 문제를 일으킬 수가 있다고 합니다. 저장 프로퍼티는 추가적인 메모리를 요구하는 프로퍼티이기 때문에 compile 시 문제를 야기하게 되고, 그렇기 때문에 extension 내부에 저장이 불가능 합니.. 2024. 4. 8.
super.viewDidLoad를 호출하는 이유 ViewController를 만들 때 기본적으로 구현되어 있는 코드이기 때문에 아무런 생각 없이 호출하던 super.viewDidLoad(). 왜 꼭 호출해야 하는 것인지 문득 궁금해져서 알아보게 되었습니다. (viewDidLoad로 특정지었지만 viewWillAppear나 viewDidAppear 등등 여러 override 메서드들에 모두 해당되는 이야기입니다.) SO에도 몇몇 해당 질문들이 있었는데, 'super.viewDidLoad() 메서드를 호출하지 않아도 아무런 문제가 없고 호출했을 때와 차이가 없다. 그런데 왜 꼭 호출을 해야하는가?'를 문의하는 글들이었습니다. 그 중에 가장 저에게 와닿았던 답변은 이러했습니다. Also, let's say you have some view controlle.. 2024. 3. 21.
반응형