project/Kuring(공지알림) 28

[CI] 로컬 빌드 성공 하지만, Github Action 빌드 실패하던 문제

[CI] 로컬 빌드 성공 하지만, Github Action 빌드 실패하던 문제 문제 상황로컬에서 모든 작업자가 빌드가 잘 되지만,  Github Action에서만 빌드가 실패하는 문제가 발생Process completed with exit code 65.문제 분석에러 파일이 길어서 콘솔에는 나타나지 않아 에러 파일을 다운 받아 분석패키지 의존성에 문제가 있는지 점검테스트 코드 통과하지 못한 영역이 있는지 점검최근 작업한 영역에서 빌드에 영향을 줄 수 있는 부분이 있는지 점검당시 Translation 프레임워크를 도입 iOS 17, 18에서 지원하는 사용할 수 있는 API 가 다름 (18에서 확장됨)Xcode 15와 Xcode 16에 따라 iOS 타겟 범위가 다름 (15는 17버전, 16은 18버전 지..

[iOS] 학과 검색 알고리즘 개선 (초성검색)

[iOS] 학과 검색 알고리즘 개선 (초성검색) 쿠링에 학과 검색 알고리즘을 아주 살짝(?) 개선했다. 우선 쿠링 서비스의 학과와 관련한 시퀀스를 살펴보자 해당 시퀀스로 설계하게 된 당시의 배경으로는 1. debounce 등 클라단 로직이 줄어들어 개발 공수가 훨씬 줄어든다. 2. 학과 검색 과정에서 api 응답까지 지연시간이 없으므로 사용자에게 더 좋은 경험을 줄 수 있다. 3. 서버도 학과 검색 개발 로직이 줄어들어 개발 공수가 줄어든다. 4. 한번에 내려줘야하는 학과의 갯수가 api를 통한 페이징 혹은 검색을 통해 받을 만큼 많지 않다. 여러모로 당시 상황을 고려했을때 이런 방향으로 설계를 주장했었는데, 다행히도 다른 분들도 승낙해 주셔서 해당 시퀀스로 구현되었다. 다만 해당 시퀀스 형태로 구현 몇..

[iOS] Spotlight (SearchAPI)

Spotlight Kuring 1.4.3 버전에 해당 기능을 도입했습니다. 현재 public 레포지토리로 kuring-v2를 작업하고 있어서, 해당 기능을 v1 레포에서 작업했습니다. Kuring은 app과 sdk로 이루어져 있는데, 해당 기능은 app단 작업만으로도 가능했습니다. 목차 - 개발환경 - 작동화면 - kuring에 적용한 코드 설명 - 개발 이슈 정리사항 개발 환경 Xcode 15.0 iOS 16.0 + SwiftUI 🎉 벌써 프로젝트가 2년이 넘었네요!! 118번째 PR 🌟 쿠링 새로운 기능 🌟 https://kuring.notion.site/kuring/iOS-eef51c986b7f4320b97424df3f4a5e3c 작동화면 GIF Core Spotlight 중 Search 기능을 사..

[Kuring] 1.4.0 release 개발일지

1.4.0 release 개발일지 이번에 1.4.0을 개발하면서 있었던 것들을 정리해두고자 함. 해당 버전에서 주로 학과 기능 공지 개발을 담당하였음. 🔨 Xcode 14.2 iOS 15.0 + # 구현해야 할 기능 - API - 학과 공지 - 학과 공지 구독 - 학과 리스트 - api v2로 모두 변경 - 화면 - 학과 공지와 관련한 모든 뷰 - 구현 - 학과 리스트 검색 - 구독한 학과 리스트 검증 # 학과 구현 외 버그 개선 작업 - notification 버그 개선 (사일런트 푸시 및 기존 내가 받은 알림이 저장되지 않던 버그) - 학교 url이 변경되어 그에 따른 대응 🏗️ 프로젝트 구조 개선 작업 - Tuist 도입 처음에 개발을 맡게 되었을 때는 얼마나 한 2~3주 정도 걸릴 것 같다고 생각..

[iOS] Debug Scheme 분리하기

[iOS] Debug Scheme 분리하기 - Debug Scheme을 분리하기로 한 이유. - 개발단계의 작업물을 iOS 개발자 외에 다른 분들도 사용해야하는 경우가 있는데, 기존 프로젝트와 동일하게 두어서 출시한 앱과 헷갈리는 불편함 존재 - 또한 Debug 앱은 출시한 앱과 달리 다른 버그를 잡기 위한 토큰 값 등이 UI로 노출되어 있으며, 개발 단계에서도 스킴을 수정해 줄 필요 없이 한번 설정해두면 좋겠다 싶었음. 1. 아래와 같은 사진의 상태에서 New Scheme을 클릭 - 아래 사진은 벌써 만들어 둔 상태 2. 타겟을 둔 상태로 이름을 작성 3. Asset으로 이동하여 기존 AppIcon을 복사하여 AppIconDebug를 생성 후 Debug용 이미지를 넣어주기. 4. 아래 사진처럼 Disp..

iOS SPM No Such Module

iOS SPM No Such Module  기존에는 패키지 기반으로 작업하지 않았는데, 최근에 로컬 소스도 Swift Package로 작업하는 예제들을 보아서 이를 공부하고 적용해보고자 함. 에러 스크린샷 패키지에서 개발할 때는 안되었는데 해당 패키지를 다른 영역에서 사용할 때 해당 에러가 발생  오류가 발생한 패키지 코드아래는 오류가 발생한 패키지 코드임// swift-tools-version: 5.6// The swift-tools-version declares the minimum version of Swift required to build this package.import PackageDescriptionlet package = Package( name: "kuring-campus-m..

[iOS] SPM 프로젝트 이름 변경시 오류

SPM 프로젝트 이름 변경시 오류 🚨 에러코드 Build input file cannot be found: '/Users/Jason/Desktop/kuring-campus-map-ios/kuring-campus-map-ios.xcodeproj/kuring_campus_map_ios_Info.plist 🚨에러상황 프로젝트에서 새로운 기능을 추가하고자 했습니다. 해당 기능을 추가하면서, 프로젝트를 따로 관리하고자 했고, 처음에 만든 프로젝트 이름이 마음에 들지 않아서 프로젝트 이름을 변경하고자 했습니다. 변경은 성공했으나 위와 같은 에러가 나타났습니다. - 방법 2가지 1. 경로 변경: 이렇게 해서 해결되면 아주 쉽다,, 근데 안되며 2번으로 2. info.plist 파일 만들어서 넣어주기 그냥 직접 만들어..

[git] Git-flow 전략과 프로젝트 예시(feat. Kuring)

Git-flow 전략과 프로젝트 예시(feat. Kuring) (포스팅 최초 작성) 2022.06.10(포스팅 수정) 2024.08.29커밋 내역 관리하는 방법 수정   ✅ Kuring에서 사용하는 Git-flow 분석과 Git-flow에 대해서 공부하며, Kuring에서 내가 사용하는 커밋 규칙을 정리하고자 포스팅합니다.  🥕 목차 🥕1. 우아한 형제들 Git-flow 전략에 대해서 알아보기2. Kuring의 Git-flow 전략 분석 (소규모 팀에서의 Git-flow 전략)3. Git-flow 전략을 개인 레포에 적용하고 연습해보기4. git 충돌 해결 방법  ✅ 1. 우아한 형제들 Git-flow 전략에 대해서 알아보기우아한 형제들 기술 블로그를 참고하여 Git-flow 전략에 대해서 공부해 봅..

[SwiftUI] UIActivityViewController를 SwiftUI로

UIActivityViewController를 SwiftUI로히스토리2022.05.31쿠링 사이드에서 공유하기 기능을 SwiftUI에서 사용하기 위한 포스팅2024.12.11해당 포스팅보다 더 좋은 방법을 발견하여 링크 추가 개선한 방법 해당 포스팅보다 더 좋은 방법을 발견하여 링크 추가iOS 공유하기 LPLinkMetadata (UIKit, SwiftUI) 이번 제목도 UIKit스러움이전에도 말했지만, 프로젝트에서 UIKit을 SwiftUI로 코드롤 전환하고 있는데 여기서 만난 문제를 해결하고자 내가 구글링한 단어 그대로 작성했다. 🟠 ActivityItemimport UIKit/// `activitySheet` modifier 를 통해 `ActivityView`를 띄울 때 사용하는 activitys..

[SwiftUI] List accessory (feat. disclosure indicator)

List accessory (feat. disclosure indicator) ✅ 이번에도 제목이 다소 UIKit스럽다. 저번 포스팅에서도 언급했지만, UIKit을 먼저 공부하고 SwiftUI를 하다보니까, 검색도 UIKit스럽게 하기 때문에! StackOverflow에서는 ZStack을 이용해서 해결하던데, 맘에 들지 않았다. 그래서 처음 생각! init() { UITableViewCell ... } 이렇게 해서 해결해 보려고 했는데, 근데 적용할 만한 메소드가 보이지가 않았다. 결국 StackOverflow처럼 해결해야 했는데 한번 같이 알아보자! ✅ 올바른 case import SwiftUI struct didSelectRow: View { var body: some View { Navigation..