본문 바로가기

전체 글213

pod install 시 진행이 더뎠던 문제 지난번 좋은 사이드 메뉴 라이브러리 중 하나인 https://github.com/jonkykong/SideMenu 를 사용해 보려고 먼저 Example을 확인하기 위해 프로젝트 Clone을 하였음. Cocoapods를 사용하고 있는 프로젝트였기에, pod install을 진행해 준 상황에서, 특정 부분에서 진행이 막히는 문제가 있었음. 최하단에 "Cloning spec repo..." 부분인데, CocoaPodds/Specs가 무엇인지 찾아보니 stackoverflow 에 "Cocoapods will add that source by default if no other source is present. By adding your own source Cocoapods assumes everything ca.. 2023. 11. 15.
JSON 동일한 key에 다른 type의 value가 있는 경우 인코딩/디코딩 하기 JSON parsing을 하다보면, key의 이름은 동일한데 서로 다른 타입의 값을 가진 데이터들을 파싱해야할 때가 있습니다. 예를 들어서, "value"라는 key인데 하나는 int값을 가지고 다른 하나는 string값을 가집니다. // Int 타입인 경우 { "value": 1 } // String 타입인 경우 { "value": "hat" } 이러한 경우에는 Xcode에 에러가 보통 "typeMismatch"로 아래와 같이 나올 것입니다. typeMismatch( Swift.String, Swift.DecodingError.Context( codingPath: [ CodingKeys(stringValue: "ownedNfts", intValue: nil), _JSONKey(stringValue: ".. 2023. 11. 12.
ActivityKit으로 Dynamic Island 만들어보기! 1. Widget Extension 추가하기 1) App project를 생성해 준 다음, File -> New -> Target 선택. 2) widget extension을 검색해서 타겟을 추가해준다. 3) Info.plist에 Supports Live Activities를 추가하고 YES로 value를 설정해준다. 주의: SwiftUI 프로젝트에는 navigation panel에 info.plist가 안보이므로, Targets에 들어가서 수정해주면 된다. 2. ActivityAttributes 모델 생성 1. Swift 파일로 ActivityAttributes를 conform하는 struct를 하나 만들어 준다. 주의: ActivityAttributes는 Target Membership에 앱과 위젯 .. 2023. 10. 21.
Property Wrapper 알아보기 @가 붙어있는 애노테이션을 Swift에서는 Property Wrapper라고 부릅니다. Property wrapper 변수에 접근하는 방법은 세 가지가 있는데, 각각의 차이점에 대해서 알아보려고 합니다. 예를 들어서, myName이라는 변수에 @Binding Property wrapper를 붙여주겠습니다. @Binding var myName: String 이제 myName이라는 변수에 접근할 때, 1. self.myName 2. self._myName (wrapped value) 3. self.$myName (projected value) 이렇게 세 가지 방식으로 접근이 가능합니다. 첫번째 방식은, Binding 자체에 접근할 수 있게 해줍니다. @Binding은 structure형태 입니다. 그렇기 때.. 2023. 10. 3.
JSONSerialization 사용방법 JSONSerialization 이란? JSON과 그에 동등한 Foundation 객체 간 변환을 가능하게 해주는 객체. (JSON에서 Foundation에서 지원하는 타입의 객체로 혹은 그 반대로 변환되도록 해준다는 의미) Methods 1. JSON에서 Foundation 객체로 변환 시 class func jsonObject(with: Data, options: JSONSerialization.ReadingOptions) -> Any 2. Foundation 객체에서 JSON으로 변환 시 class func data(withJSONObject: Any, options: JSONSerialization.WritingOptions) -> Data 3. JSON으로 변환이 가능한 객체인지 확인 시 cla.. 2023. 9. 30.
Xcode Error: "The updated Apple Developer Program License Agreement for xxx needs to be reviewed." Xcode나 ASC 관련 에러는 항상 마음이 철렁합니다 ㅎㅎ 이번에는 "The updated Apple Developer Program License Agreement for xxx needs to be reviewed." 에러가 발생했습니다. 다행히 별 것은 아니었지만 미래에도 당황하지 않기 위해 기록으로 남겨둡니다. 일단 ASC에 접속하여 Agreements 페이지로 들어가 줍니다. 상단에 Xcode에서 본 것과 동일한 에러문구가 나와있었습니다. account를 눌러 Developer 사이트 내 해당 문제를 해결하는 페이지로 바로 이동이 가능했습니다. 현재 어떤 상황인지 설명이 되어있었고, 동의하기 버튼을 누르니 해결이 되었습니다. Agree를 눌러준 다음 Xcode로 바로 돌아가 작업을 이어서 하려.. 2023. 7. 23.
UIButton 탭 시 image 색상 변경되지 않도록 설정하기 UIButton에 이미지를 설정하고, 탭을 하면 탭 되는 순간에 색상이 잠시 변경됩니다. 탭이 되었다는 효과를 주기는 하지만, 텍스트와 이미지에 색상을 설정해 주다보니 오히려 어색해 보이더라구요. 탭 전과 직후의 모습인데, 이미지 부분에 색상이 어둡게 변한 것을 확인할 수 있습니다. 이런 효과는 swift에서 기본적으로 제공하는 애니메이션인데, 다행히 disable이 가능합니다 :) `adjustsImageWhenHighlighted` 프로퍼티를 false로 설정해주면 탭 시 색상 변경 애니메이션이 비활성화 됩니다. private let keepMeSignedInButton: UIButton = { let button = UIButton() //... button.adjustsImageWhenHighli.. 2023. 7. 22.
Xcode cloud로 CI/CD 편리하게 사용하기 - private repo swift package 에러 해결방법 이번에 iOS meetup을 다녀와서 Xcode cloud로도 CI/CD가 가능하다는 것을 알게되었습니다. 최근 CI/CD를 적용해보고자 어떤 툴을 사용하는 게 좋을지 고민이었는데, 밋업 이후에 Xcode cloud에 궁금증이 생겨 한 번 사용해보게 되었습니다. Githun Actions나 Bitrise 등등을 사용할 때는 github에 secrets도 넣어주어야 하고 yml파일 설정도 해주는 등등 코드 사이닝을 위한 설정들이 손품이 많이 간다고 생각이 들었습니다. 한 번 설정해두면 이후에 편할테니 좋겠지만 설정해는 과정이 쉽지만은 않더라구요 😵‍💫 그런데 Xcode cloud를 사용하니 이런 설정들을 할 필요가 없었습니다. github 계정, App store connect와 연동만 해주면 되었습니다... 2023. 5. 21.
Firebase firestore 서브컬랙션(subcollection) 편리하게 조회하기 Firestore를 사용해보신 분들이라면 아시겠지만 컬랙션(collection)이라는 개념이 있습니다. 컬랙션 안에 document들이 있고, document에는 서브 컬랙션을 넣어줄 수 있습니다. 서브 컬랙션도 역시나 컬랙션이기 때문에 document들을 넣어 둘 수 있구요. 어떻게 하면 다수의 뎁스를 가진 구조에서 서브 컬랙션 내부 쿼리를 쉽게 할 수 있는지 알아보려 합니다. 제가 Firestore를 사용하며 가진 고민이 몇가지 있었습니다. 1. field가 없으면 미완성 document로 구분되어 쿼리가 불가능 Firestore를 사용하며 조금 특이하다고 생각했던게, document를 만들고 그 안에 collection이 생성되어 있더라도 field가 없으면 미완성된 doc으로 여겨져서 코드로 쿼리.. 2023. 5. 21.
반응형