Localization을 위해 String 파일을 추가하려고 보니 Strings File이 레거시 파일이 되어버렸다. 그래서 처음 보는 String Catalog 파일을 통해 작업했다. 처음 String Catalog 파일을 추가하면 English가 기본으로 나온다. 다른 언어 파일을 추가하고 싶다면 왼쪽 하단의 + 버튼을 눌러 원하는 언어를 추가할 수 있다. English에 test_key를 하나 추가했다. English에 회색 글씨로 키값이 나오는 걸 보니 값을 넣지 않아 디폴트로 키값이 노출된다는 뜻인 것 같다. English에 key를 하나 추가하니까 Korean 옆에 0%라고 뜬다! Korean에 값을 넣어보자. 헐, 다 채웠다고 초록색 체크마크를 띄워준다... 신기해.... 실제 코드에 Tex..
SwiftUI로 앱을 개발하면서 하위 뷰에서 상위뷰의 Published 값을 Binding 해서 사용을 해야 하는 일이 생겼다. 하위 뷰에서 값이 바뀌면 상위 뷰에서도 뷰 업데이트가 일어나야해서 Combine의 sink를 사용하게 되었는데, sink 내부에 로직 업데이트 하는 코드를 넣어놨더니 값이 이상하게 바뀌는 것..! 알고보니 sink 내부는 Published 값이 바뀌기 전에 호출이 되는 거였다. swift property로 따져보면 willSet. 내가 만들어놨던 메서드는 Published 값에 바로 접근해서 사용하는 코드라서 함수의 파라메터로 값을 받아서 업데이트 하도록 수정했다. 이렇게 얼렁뚱땅 Combine 제대로 써보기 시작..!
현재 사용하고 있는 github worksflow 코드 name: Build and Test on: push: branches: [ "develop" ] pull_request: branches: [ "develop" ] jobs: build: name: Build and Test runs-on: macos-14 steps: - uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: '15.0.1' - name: Checkout uses: actions/checkout@v3 - name: Build and Test run: | xcodebuild clean -project PlantingMind/PlantingMind.xcodeproj -scheme Plant..
마음심기 프로젝트에서 마음들을 CoreData에 저장하기로 결정했다. 근데 이제 CoreData를 이용한 로직들에 대해 테스트까지 겸한..! (TDD로 짜보겠다고 노력하고 있는데 과연 잘 하고 있는지 모르겠군..) CoreData 사용 file 생성할 때 Data Model 선택한 후 생성 ENTITIES 생성한 뒤 해당 엔티티에 필요한 attribute 추가 final class CoreDataStack: ObservableObject { let persistentContainer: NSPersistentContainer init(_ storageType: StorageType = .persistent) { self.persistentContainer = NSPersistentContainer(name..