iOS Dev
-
[XCode] cannot be opened because it is in a future Xcode project file formatiOS Dev 2024. 8. 11. 04:27
이전 버전의 xcode에서 프로젝트를 열려고 하면 위 사진처럼 에러메세지를 띄운다.이 이유는 상위 버전의 xcode 사용자가 프로젝트 파일을 건들여서 그렇다. (타겟 추가, 스킴 변경, 파일 변경 등등) Q. 앗 그럼 이전 사용자도 베타로 올리면 되겠네요? A. 그러면 앱스토어에 제출을 못합니다! 허허.. 정리해보면 베타버전 사용자는 앱 심사 제출을 못하고, 이전 버전 사용자는 프로젝트를 열 수 조차 없는 난감한 상황이 생긴다.몇가지 해결 방법이 있다.1. 프로젝트를 잘 열렸던 때로 되돌리고, 작업한 내용을 수동으로 옮긴다.2. 프로젝트 파일 중 버전에 영향이 있는 부분만 대체한다. 나는 초고수가 아니기 때문에 1번 방법을 택했다.이전 버전 XCode는 아래 경로에 있는 파일을 실행하면 된다./Appli..
-
[Tuist 4.x] Tuist External Dependencies 관련iOS Dev 2024. 3. 14. 22:39
공식 홈페이지에서는 Package.swift에 external dependency를 추가해서 관리할 수 있다고 나와있다. 하지만 그대로 따라하면 안된다.. 우선 https://sunrinnote.tistory.com/187 여기를 모두 진행했다는 가정 하에 mise exec -- tuist init --platform ios 위 명령어로 프로젝트를 새로 시작한다고 가정한다. 1. Tuist 폴더 생성, Package.swift 파일 생성 원래는 init할 때 자동으로 Tuist 폴더가 생기고, ProjectDescriptionHelper 폴더가 생겼던 걸로 기억하는데, 바뀐 버전에서는 생기지 않는다. 우선 Tuist 폴더를 만들어주고, 그 안에 Package.swift 파일을 만들어준다. 파일의 내용은 ..
-
[Tuist 4.x] Tuist install이 먹히지 않을 때.iOS Dev 2024. 3. 13. 21:37
https://github.com/tuist/tuist/releases/tag/4.0.0 Tuist 3.x 버전을 주로 쓰고 있다가 Tuist 4.x 버전으로 넘어갈 때 Tuist install이 잘 안된다. 이런 경우에는 이전 버전을 삭제해야 하는데, 이전 버전을 curl로 삭제한 후 다시 깔아줘야 한다. 개발자들은 Mise를 적극 추천한다고 한다. Release 4.0.0 · tuist/tuist These release notes are longer than usual because it's a major release and we include migration guidelines. Breaking changes are prefixed with Breaking. Tuist Improved Impr..
-
[SwiftUI][Lottie] Lottie for SwiftUIiOS Dev/SwiftUI 2023. 10. 9. 02:01
https://github.com/airbnb/lottie-ios/discussions/2189 Lottie 4.3.0 now available, with official support for SwiftUI · airbnb/lottie-ios · Discussion #2189 Today we released Lottie 4.3.0. This version adds many new features, including: Official support for SwiftUI! A public Core Animation CALayer subclass Support for reduced motion Support for drop sh... github.com Lottie가 SwiftUI 대응을 해줬다. 원래 스유에..
-
[SwiftUI] Back Button Custom하기iOS Dev/SwiftUI 2023. 10. 9. 00:46
SwiftUI에서 back button을 커스텀하기 어렵다. 그럴 때는 다음 코드를 넣어주자. struct BackButton: View { @Environment(\.dismiss) private var dismiss var color: Color = .black var body: some View { Button { dismiss() } label: { Image(systemName: "chevron.backward") .renderingMode(.template) .foregroundColor(color) .shadow(radius: 2.0) .contentShape(Rectangle()) } } } struct BackButtonModifier: ViewModifier { let color: Co..
-
[Tuist][TCA] EXC_BAD_ACCESS 에러가 뜰 때iOS Dev/SwiftUI 2023. 10. 2. 02:46
Tuist에서 TCA를 사용해서 모듈을 나눌 때 뜬금없이 다음 에러가 뜰 때가 있었다. 정확히는, viewStore.send(:) 에서 뜬다. Thread 1: EXC_BAD_ACCESS (code=1, address=0x0) 메모리를 잘못 참조하고 있다는데.. 저는 코드를 다 맞게 짰는데요?! 기존 상태는 다음과 같은 상태였다. Interface에 Reducer들을 넣어두고 가장 위의 DoForest App타겟에서 Scope로 넣어줬다. 하지만 안먹힌다. 왜지?!?!??? 사실 해결하고 나서도 왜 그런지는 모르겠지만 나름 추측해보면 현재 Reducer가 담겨있는 Interface들은 dynamic framework이다. Scope으로 넣어준 Reducer와 실제 store로 사용할 때 다른 메모리 주소..
-
Apple Developer Academy @ POSTECH 3기 합격 후기iOS Dev 2023. 7. 20. 00:21
얼마 전부터 열심히 준비한 애플 디벨로퍼 아카데미 최종 발표 결과, 합격했다! (테크, 디자인, 도메인 중 테크 분야로 지원) 이제 2024년 3월부터 12월까지 포항에서 열심히 아카데미 활동을 할 예정이다. 지원 프로세스 서류 & 온라인 테스트 -> 면접 -> 최종 발표 순서이다. 기간 상 서류 제출 마감이 먼저이고, 온라인 테스트가 그 다음이지만, 합/불 여부는 서류와 온라인 테스트 결과를 합산해서 결정한다고 한다. 후기 서류, 온라인 테스트, 면접 모든 과정에서 기존에 관행적으로 해오던 모든 것들과 다르다는 느낌을 받았다. 서류에서는 Life Journey를 제출했어야 했는데, 내가 할 수 있는 것보단, 내가 어떤 사람인지를 더 궁금해하는 것 같다는 느낌을 받았다. 온라인 테스트에서는 일반적인 전공..
-
마이크로피처 아키텍처란? (µFeatures Architecture)iOS Dev 2023. 7. 15. 02:08
시작하기에 앞서, 이 글은 tuist의 µFeatures Architecture를 요약, 번역, 정리한 글임을 알림. iOS에 편향되어있음. µFeatures Architecture | Tuist Documentation based on MicroServices 주의할 점 이 아키텍처는 silver-bullet이 아님. 모든 프로젝트에 적용하려 하지 말고 적절한 곳에 잘 사용하자. 마이크로피처 아키텍처란? 마이크로피처 아키텍처는 확장성을 높이고 빌드 및 테스트 주기를 최적화한다. 명확하고 간결한 API를 사용하여 상호 연결된 독립적인 기능 구축. 마이크로 피처는 다음 5개의 타겟의 조합으로 이루어져 있다. Source : Feature 소스 코드와 이에 대한 resource (image, font, st..
-
[SwiftUI] Square Shape를 활용하여 Image 조정하기iOS Dev/SwiftUI 2023. 7. 3. 22:37
SwiftUI에는 미리 정의된 여러가지 Shape들이 있다. Rectangle(), Circle(), RoundedRectangle() 등이 있다. 하지만 Square()는 없다. 그래서 직접 Path를 만들어서 넣어주자. struct Square: Shape { func path(in rect: CGRect) -> Path { let side = min(rect.maxX, rect.maxY) return Path { path in path.move(to: CGPoint(x: rect.midX, y: rect.midY - side / 2)) path.addLine(to: CGPoint(x: rect.midX + side / 2, y: rect.midY - side / 2)) path.addLine(to:..
-
[SwiftUI] 8. Interfacing with UIKit [마지막]iOS Dev/SwiftUI 2023. 5. 11. 01:41
SwiftUI로 이루어진 뷰에 UIKit 요소를 적용시킬 수 있을까? 이번 튜토리얼에서는 UIKit 요소를 어떻게 활용할 수 있는지를 알아본다. Section 1. Create a View to Represent a UIPageViewController UIView 요소를 사용하고 싶다면 UIViewRepresentable을, UIViewController 요소를 사용하고 싶다면 UIViewControllerRepresentable 프로토콜을 채택해야 한다. Views 그룹에 PageView 라는 이름의 그룹을 만들고, 그 안에 PageViewController.swift 파일을 만든다. 다음과 같은 내용으로 채워준다. import SwiftUI import UIKit struct PageViewCont..