🖤 iOS, Swift

🖤 iOS, Swift

[WWDC24] Swift Student Challenge 회고 + 우승(Accepted) 🏆

2관왕에 성공했어요 🚀 따끈따끈한 회고 # 주제를 선정하게 된 계기 이번 주제는 작년에 아카데미에서 아이작의 '혼자서 앱 만들기' 세션을 하면서부터 구상한 내용이다. iOS 개발을 시작하면 무조건 접하게 되는 SF Symbols에 대해 다루었다. SF Symbol은 애플이 제공하는 심볼 이미지이고, 스위프트로 개발할 때 시스템명만 잘 적어주면 이미지를 따로 넣거나 가져오지 않고 코드 한 줄만으로 쉽게 사용할 수 있다. 2019년 첫 발표된 SF Symbols의 가짓 수는 2,300여 개 정도였고, 점점 늘어나 현재는 그 개수만 5천개가 넘는다. 그런데 여기서 쓰고 싶은 아이콘의 이름을 모르면 어떻게 찾을까? 비슷한 단어로 계속 검색해본다 카테고리를 이용해 찾는다 일일이 찾는다 3단계까지 가면 눈알빠진다...

🖤 iOS, Swift

[Github Actions] 에러 코드 해결기

Error: Process completed with exit code 65. 릴리즈 스킴을 쓰려고 DontForget-Release로 설정했는데 확인이 안됐다. 기본 스킴인 DontForget으로 수정해서 해결했다. 코드가 진짜 잘못됐었다. 이미지 사용할 때 오타날까봐 String+Extension으로 static 상수를 정의해서 사용하는데 anniversaryDelete라는 상수는 없었다. 이미지 이름도 아마 이전에 사용하던 것에서 바꾸는 걸 까먹은 듯한데, 빌드 캐시에 남은게 있었는지 빌드나 배포할 때는 문제없이 동작했다.... + 24.04.15. 오류나 캐시때문에 발생한 일이 아니고 Xcode 15에서 업데이트된 내용이었다. 당시에도 에셋 이름이 anniversary_delete라서 혹시..?하..

🖤 iOS, Swift

[Swift] 메모리 캐시로 API 호출 횟수 줄이기

보통 아요에서는 이미지를 다룰 때 메모리 캐시로 관리한다.근데 이번에 다룬건 이미지는 아님넥스터즈에서 만든 음력기념일 서비스에서 등록된 기념일의 상세 정보를 볼 수 있는 뷰가 있는데, 이 뷰가 나타날(onAppear) 때마다 서버에 이 정보를 요청한다. 그리고 연필모양의 편집 버튼을 누르면 나오는 뷰가 나타날 때나 편집을 취소하고 나올때나 편집을 완료하고 이 화면으로 돌아올 때도 매번 요청한다. 매번 네트워크 기반의 api를 주고받는 것보다, 한 번 받아온 정보는 메모리 캐시에 담아두고 정보가 수정되지 않는 이상은 캐시에 있는 값을 확인하는 게 효율적일 것 같아서 수정해봤다.import Foundationfinal class CacheManager { static let shared = CacheM..

🖤 iOS, Swift

[Swift]가 메모리를 관리하는 방법

나는 스위프트 이전에 자바로 개발을 해왔기 때문에 .. 자바의 메모리 관리 방식을 생각해보면 가비지 컬렉션을 먼저 떠올릴 수 있다. GC(Garbage Collection) 런타임 중 더 이상 필요가 없는 garbage라고 판단되면 메모리에서 해제 반면 스위프트는 ARC라는 메모리 관리 기법이 적용된다. ARC(Automatic Reference Counting) 컴파일시 자동으로 retain, release 코드를 생성 참조 횟수를 세어 더 이상 참조되지 않는 인스턴스를 메모리에서 알아서 해제 두 기법의 가장 큰 공통점은 개발자가 따로 메모리 해제에 대해 관리할 필요가 없다는 점이며, 가장 큰 차이점은 메모리의 해제가 결정되는 시점이다. GC는 런타임 중 객체를 계속 감시하기 때문에 추가적인 오버헤드가..

🖤 iOS, Swift

[Swift] Network 연결 상태를 실시간으로 관찰하고 업데이트하기

넥스터즈에서 챙겨챙겨를 개발하면서 서버에 계속 접근하면서 데이터를 조회했는데, 네트워크가 조금이라도 불안정하거나 잠시라도 끊기면 기존 기념일이 화면에서 전부 사라지고 기념일 상세 조회를 하려고 하면 UI가 무너지기도 했다. 사용자 입장에서 너무 당황스러운 경험일 것 같아 네트워크 연결 상태를 확인해서 UI에 반영해주어야겠다고 생각했다. import Foundation import Network final class NetworkMonitor: ObservableObject { static let shared = NetworkMonitor() private let networkMonitor = NWPathMonitor() private let workerQueue = DispatchQueue(label: ..

🖤 iOS, Swift

[Swift] LiveActivity에 애니메이션이 넣고 싶(었)던 것..

작년 여름에 드팔이를 개발하면서 라이브액티비티에 애니메이션을 넣어달라는 요구사항이 있었다. 당시 레퍼런스를 찾아보다가 유튜브나 음악 앱에서 플레이하면 오디오 구성에 따라 움직이는 것과, 동물들로 위젯과 다이나믹아일랜드를 꾸밀 수 있는 앱으로 pixel pals를 보게 되었다. 특히 Youtube 더신자에서 위 pixel pals 소개 영상을 보고서 가능할 것이라 생각하고 디자인을 받았었다. 근데 오잉.. 애니메이션 적용이 안되더라. gif 파일을 넣는 것도 불가능했다. 드팔이는 주행 중에 실시간으로 주행습관을 트래킹하는 앱이었기 때문에 정적인 라이브액티비티는 그 의미를 주기 어려웠다. 가능한 모든 공식 자료를 뒤져보고 서치해서 나오는 모든 글을 다 찾아봤던 것 같다.. 그런데도 해결책을 못찾았고, 애니메..

🖤 iOS, Swift

[TCA] State의 변화가 정상적으로 반영되지 않을 때

10월 중반 작성된 글입니다. 열심히 써놨다가 날라간줄 알았는데 지금 보니 살아있는 🥹 지금 작업하고 있는 그리디 프로젝트에서는 아키텍처로 TCA(The Composable Architecture)를 채택하여 개발하고 있다. 그리드 시스템 기반의 macOS앱인데, shift와 클릭을 통해 여러 셀을 한번에 홀드할 수 있는 기능을 개발하던 중 발생한 이슈와 해결과정을 기록한다. 문제 상황은 gif와 같다. 녹화된 화면에서는 기록되지 않았지만 shift를 누른 상태에서 그리드를 드래그하면 현재 커서 위치까지 셀이 홀드되어야 하는데, 클릭하거나 shift 키에서 손을 떼어야 적용이 되었다. 클릭 제스처와 드래그 제스처, 키보드 제스처가 모두 각각 다르게 선언되는데, 이 문제상황에서는 드래그 제스처에 대한 처리..

🖤 iOS, Swift

[Swift] Full Name을 computed property(연산 프로퍼티)로 작성할 때

나는 보통 사용자의 full name을 작성해야 할 때 아래와 같이 string interpolation을 사용했다. struct User { var firstName: String var lastName: String } extension User { var fullName: String { "\(firstName) \(lastName)" } } 그런데 생각해보면 모든 나라에서 full name을 표기할 때 한국처럼 성 + 이름의 표기법을 따르지 않는다. 미국의 경우 일반적으로 이름(first name || given name) + middle name + 성(last name || family name)의 순서에 따라 표기한다. 그럼 여러 국가를 대상으로 서비스하는 앱을 개발중이라면 어떻게 현지화해야..

🖤 iOS, Swift

[Swift] String에게 reduce와 joined는 뭐가 다를까?

이 궁금증의 발단은 백준의 한 알고리즘 문제를 풀면서 시작됐다. BOJ 2812번이다. 이 포스트에서 문제는 별로 중요하지 않아서 설명하지 않는다. 다만 문제를 해결하는 방식에서 [String 배열을 한 문자열로 합친다]를 코드로 작성해야 했다. 하...😂 평소같았으면 2번을 joined() 함수를 사용해서 한 문자열로 합쳐줘서 간단히 해결됐을 것 같은데, 머리를 너무 써서 더 바보같은 방법을 사용했다! 그건 바로 reduce()! 이미지에서 시간초과가 난 것들은 모두 reduce를 사용해준 풀이이다. 처음 맞았을 때는 joined()도 아니고 반복문을 돌려 print해서 맞춘거다. reduce도 O(n), for문도 O(n)이라 생각한 나는 믿기지 않아서 reduce 풀이로 다시 제출했다가 또 틀려줬음..

🖤 iOS, Swift

[SwiftUI] Navigation 후 animation이 적용된 뷰 자체가 함께 움직인다면

SwiftUI Animations: Why is the container view moving? I'm struggling to understand this behavior I'm building a simple rotating circle loading animation. I've got the circle rotating but the container view is also moving downward for the duration of the animation. I can't figure out what could... stackoverflow.com 이것도 이전 포스트와 같은 프로젝트라 네 달 전에 해결한 문제였다. 팀원이 원인을 모르겠다고 같이 해결하려고 보내준 문제였는데 나도 원인을 바로 ..

iOS MOON
'🖤 iOS, Swift' 카테고리의 글 목록