일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- button
- TableView
- ui
- PyQt
- Apple
- Chart
- library
- 개발
- Chrats
- UITableView
- 그래프
- UIKit
- Storyboard
- modal
- 라이브러리
- Swift
- 어플리케이션
- Xcode
- androidstudio
- PyQt5
- UIButton
- ios
- kotlin
- Python
- Android
- cocoapods
- alamofire
- graph
- charts
- 개발자
- Today
- Total
목록전체 글 (320)
Jiwift

둥근 모양의 Circle Progress입니다. 진행 상태를 직관적으로 보여주는 반원형 게이지 스타일의 커스텀 프로그레스바입니다.주요 기능:프로그레스바 색상 커스터마이징 가능선 두께 조절 가능 (progressWidth)시작/끝 각도 설정을 통한 호(arc) 범위 조절기본 설정: 150도에서 시작하여 390도까지 시계방향으로 진행미완료 부분은 음영 효과로 입체감 표현SnapKit을 활용한 오토레이아웃 지원 사용예시// 기본 설정으로 생성let progressView = CircleProgressView(progressColor: .systemBlue)// 커스텀 설정let customProgress = CircleProgressView( startAngle: 180, // 시작 각도 en..

요즘 AI를 사용한 결과물이 매우 좋아지고 있다. 물론 100% 원하는 답이 나오지 않을 때가 있는데, 나의 질문하는 스킬도 점점 늘어나는 기분이다. 개발을 처음 시작했을 때 구글 검색에서 원하는 검색 결과를 찾아내는 게 어려웠지만 사용할수록 원하는 결과가 잘 나오는 것과 같은 모습이다. 아직까지 AI가 개발자 자리를 대처하지 못한다고 생각하는 분들은 AI를 얼마나 잘 활용하고 있는지 생각해 볼 필요도 있다. 요즘 느끼는 점은 AI는 충분하게 좋은 결과를 내고 있다. 질문만 잘한다면 최고의 도구가 된다. 물론 그 질문을 사람이 하는 문제가 있지만 업무 처리 속도가 정말 빠르게 올라간다. 나도 이전까지는 사람이 질문하고 코드를 적용하고 디버깅하는 과정들 때문에 AI가 일 자리를 뺏을 것 같지 않았지..

이 글은 소규모 스타트업 혹은 소규모 회사 앱 개발 잡부에게 적용되는 글입니다. 대기업이시거나 능력 좋으신 분들은 지나가셔도 좋습니다. 앱 개발자 채용 공고를 보면 '스토어 출시 경험 우대'라는 글을 간혹 본다. 솔직히 이제는 그게 크게 무슨 의미가 있는지 모르겠다. 앱 개발자가 많이 없던 시절.. 앱 학생도 많이 없던 시절에는 당연하게 출시 경험 많은 사람이 부족했다고 생각된다. 스타트업에서도 앱 개발하다가 드롭하는 경우도 많았을 것이다. 하지만 예전에는 앱 개발을 공부만 하고 끝냈다면 지금은 출시까지 진행하는 사람들이 많아지고 있다. 출시라는 장벽이 많이 낮아졌다. 스타트업도 출시는 그냥 어찌 저찌 하긴 한다. 자료도 많고 앱스토어 심사도 빨라진 탓인 것 같다. 개인앱을 그냥 거창하게 만들..

Claude를 사용해서 동행 복권 로또 조회 API를 호출하고 JSON으로 저장하는 앱을 만들었다. 한 시간 만에 끝났다. AI는 진짜 개발자 일자리를 잃게 만드는 게 맞다.

배경색을 주고 패딩을 적용해 넓어 보이는 TextField를 적용했습니다. TextField("이름을 입력하세요", text: $member.name) .padding() .foregroundStyle(.title) .font(.pretendard(type: .bold, size: 20)) .background { RoundedRectangle(cornerRadius: 7) .foregroundColor(.surface320) } .padding([.leading, .trailing], 36) 안녕하세요! 저는 단순한 코딩을 넘어, 서비스와 사용자 경험을 깊이 고민하며 발전하는 개발자가 되기 위해 끊임없이 노력하고 있습니다. 함..

[SwiftUI] TextField - 밑줄 있는 디자인, Custom Under Line 위에는 기본 상태이고 아래는 입력 상태입니다. 저는 TextField로 하는 방법을 몰라서 VStack을 사용해서 만들었습니다. TextField와 Rectangle을 사용했습니다. 상황에 따라 Rectangle의 foregroundColor 색상을 변경하여 다양한 옵션을 제공할 수 있을 것 같습니다. VStack(spacing: 0) { TextField("그룹 이름을 입력해주세요.", text: $name) .font(.pretendard(type: .bold, size: 24)) .padding([.leading, .trailing], 36) .textField..

현재 제 블로그는 개발 블로그입니다. 공부, 일이 주 내용이다 보니 평일과 쉬는 날에 유입량 차이가 나는 것을 볼 수 있습니다. 그리고 보통 월,화,수 피크를 찍고 목,금은 낮아집니다.

위에 List에 보시면 View마다 기본적으로 있는 선이 있습니다. List { ForEach(movies) { movie in NavigationLink(destination: MovieDetailView()) { // List Row 에 해당하는 View Text("Hi 안녕하세요.") } .listRowSeparator(.hidden) }} ".listRowSeparator(.hidden)"를 통해서 위 사진처럼 선을 제거할 수 있습니다. 안녕하세요! 저는 단순한 코딩을 넘어, 서비스와 사용자 경험을 깊이 고민하며 발전하는 개발자가 되기 위해 끊임없이 노력하고 있습니다. 함께 재미있는 이야기 나누고 싶으시..

SwiftUI List를 사용하면서 View와 View 사이에 간격을 추가하는 방법List { ForEach(movies) { movie in NavigationLink(destination: MovieDetailView()) { Text(movie.name) } }} List를 만들면 위와 같이 붙어있습니다. 저 사이에 공백을 추가하기 위해서는 listRowSpacing을 사용합니다.List { ForEach(movies) { movie in NavigationLink(destination: MovieDetailView()) { Text(movie.name) } }}.listRowSpacing(10)이렇게 간..
아이폰 흰색 화면 상태에서 반응이 없는 경우 해결 방법. 해결 방법을 따라 하기 전에 증상이 같은지 먼저 확인을 해보고 수행하세요. 증상이 다른 경우 다른 문제가 발생할 수 있습니다. 증상: 아이폰을 사용하다 보면 가끔 흰색화면 상태에서 핸드폰이 반응이 없는 경우가 있습니다. 잠금 화면은 문제가 없고 알림도 오고 다 되는데, 잠금을 풀어 들어가면 흰색 화면이 나오고 아무것도 되지 않습니다. 전원 버튼을 눌러서 꺼보려고 시도해도 진동? 같은 건 울려도 종료하는 화면이 나오지 않습니다. 저는 아이폰 13 Pro Max를 사용하는데 종종 이런 문제가 발생하곤합니다. 해결: 아래 순서대로 빠르게 진행해 주시고 핸드폰이 꺼지면 다시 실행하면 됩니다.1. 볼륨 버튼 위2. 볼륨 버튼 아래3. 전원 버튼 꾹4. 기..

(예시 GIF 색상 변화가 크지 않습니다. 눌렀을 때 변화가 있습니다.) 버튼이 눌리기 전/후 색상을 원하는 값으로 지정하는 커스텀 버튼입니다. UIKit은 class를 상속 받아서 만들었습니다. SwiftUI는ButtonStyle을 사용해서 원하는 스타일을 낼 수 있습니다. struct PrimaryButtonStyle: ButtonStyle { let normalColor: Color = .primary5 let pressedColor: Color = .primary6 func makeBody(configuration: Configuration) -> some View { configuration.label .font(.pretenda..

버튼을 눌렀을 때와 아닐 때를 이미지로 적용하는 Custom 버튼을 적용하는 코드 Custom Codestruct CustomImageButtonStyle: ButtonStyle { let normalImage: Image = Image(.circlePlusN) let pressedImage: Image = Image(.circlePlusS) let size: CGFloat = 50 func makeBody(configuration: Configuration) -> some View { (configuration.isPressed ? self.pressedImage : self.normalImage) .resizable() ..

애플 앱스토어 심사를 주말에도 진행할까?? 프로젝트를 진행하다 보면 시간 가는 줄 모르고 개발하다가 심사를 제출해야 하는 경우가 있습니다. 요즘은 심사 기간이 많이 줄어들고 빠르게 처리되어 딜레이가 심하게 되지는 않는데 주말에 제출한 경우 업무를 안 하는 것 같아 걱정되기도 합니다. 하지만 애플 심사는 주말에도 진행합니다. 심사원분들도 사람들이기 때문에 24시간 강요를 할 수는 없지만 심사를 받다 보면 진짜 다양한 시간대에 응답 오는 것을 확인할 수 있습니다. 그중에서 제가 겪은 주말 시간대는 한국 시간으로 토요일은 오후 3시 이전까지 응답 일요일은 오후 3시 이후로 응답 위 시간대로 좁혀집니다. 진짜 심사를 제출하고 통과하고 취소하고를 몇번 반복하다 보니 특정할 수 있는 시간대가 좁혀지는 것이..

안녕하세요. 오늘은 애플 앱스토어 심사도 실수를 할까에 대해서 이야기를 하려고 합니다. 애플 생태계에서 앱을 개발하는 누구나 심사원들과 티키타카를 해본 적이 있다고 볼 수 있습니다. 분명 아닌데.. 억울한데 싶은 부분도 있습니다. 하지만 애플이 심사를 반려할 때는 심사 가이드만 언급할 뿐 정확하게 어떻게 해결하라고 하는 부분이 많이 없긴 합니다. 찾아보면 정확하게 애플 심사원들이 어떻게 심사를 진행하는지, 어디서 하는지, 누구인지 정확한 정보가 없습니다. 다들 심사 과정을 진행하고 겪으면서 추측할 뿐이지요. 하지만 애플 심사원들도 사람이기 때문에 실수를 합니다. 저는 앱스토어용 배포 빌드 1개와 테스트플라이트 배포 3개를 같은 날 진행한적이있습니다. 근데,,, 심사원이 A 빌드를 실행하고 B ..
애플 앱스토어 심사 반려(리젝) 경험 공유 및 기록 We found that the usefulness of your app is limited by the minimal amount of content or features it includes. Next StepsWe encourage you to review your app concept and incorporate different content and features that are in compliance with the App Review Guidelines.We understand that there are no hard and fast rules to define useful or entertaining, but Apple and Appl..
애플 앱스토어 심사 반려(리젝) 경험 공유 및 기록 We noticed an issue in your app that contributes to a lower-quality user experience than App Store users expect:- Your app's permissions requests are not written in the same language as your app's Ehglish localization. To help users understand why your app is requesting access to a specific feature, your app's permission requests should be in the same language as you..

Notification Service Extension이 작동하지 않을 때 확인해야 하는 몇 가지 사항들을 정리하도록 하겠습니다. 우선 해당 Extension은 앱에서 받은 Push의 내용을 수정하기 위해서 사용합니다. 예시 사용법들은 Node 환경 Firebase로 테스트하고 작성되었습니다. 1. Extension 번들이 제대로 등록되었는지 확인- Xcode에서 Extension을 추가하면 Bundle identifier가 설정되었을 겁니다. 하지만 그게 애플 개발자 센터 Identifiers에 등록되지 않았을 수 있습니다. 확인을 통하여 추가를 해주세요. - 직접 추가하거나 아카이브 후 앱스토어 커넥트로 업로드하면 자동으로 가능합니다. 2. Push를 전송하는 서버와 앱과 연동이 제대로 되었는지 ..
애플 앱스토어 심사 반려(리젝) 경험 공유 및 기록 Your app's location feature is not integrated with the built-in mapping functionality, which limits users to a third-party maps app.Next StepsTo resolve this issue, please revise your app to give users the option to launch the native Apple Maps app.Best regards,App Review상황이 리젝은 당하는 앱마다 모두 다른 이유로 받을 것 같습니다. 내용 그대로 앱을 수정하거나 반박을 위한 회신을 준비하면 될 것 같습니다. 저는 애플 맵이 애플 로그인처럼 ..
애플 앱스토어 심사 반려(리젝) 경험 공유 및 기록 2.1 App Completeness Submissions to App Review, including apps you make available for pre-order, should be final versions with all necessary metadata and fully functional URLs included; placeholder text, empty websites, and other temporary content should be scrubbed before submission. Make sure your app has been tested on-device for bugs and stability before you subm..
애플 앱스토어 심사 반려(리젝) 경험 공유 및 기록 Your app is still intended to be used by a specific business or organization, including partners, clients, or employees, but you've selected public distribution on the App Store in App Store Connect.Since the App Store is intended for apps with a public audience, we recommend reviewing the other distribution options available to you through your Apple Developer Progr..
애플 앱스토어 심사 반려(리젝) 경험 공유 및 기록 The app or its metadata appears to contain potentially misleading content. Specifically, the app still includes content that resembles A****** without the necessary authorization.Next StepsPlease demonstrate your relationship, B******., with any third-party brand owners, A*****, represented in the app by providing documentary evidence.상황 의뢰받은 앱을 제작하는데 의뢰사의 이름을 넣었더니 ..
애플 앱스토어 심사 반려(리젝) 경험 공유 및 기록 We were unable to review your app as it crashed on launch. We have attached detailed crash logs to help troubleshoot this issue.Review device details: - Device type: iPad Air (5th generation) - OS version: iOS 17.4.1Next StepsTo address the crash in your app, follow these steps:1. Fully symbolicate the crash report. See Adding Identifiable Symbol Names to a Crash Rep..
애플 앱스토어 심사 반려(리젝) 경험 공유 및 기록 The app encourages or directs users to allow the app to access the location and Bluetooth. Specifically, the app directs the user to grant permission in the following way(s): - A custom message appears before the permission request, and to proceed users press a “접근권한 허용” button. Use words like "Continue" or "Next" on the button instead.Permission requests give users ..
애플 앱스토어 심사 반려(리젝) 경험 공유 및 기록 (a) Submissions to App Review, including apps you make available for pre-order, should be final versions with all necessary metadata and fully functional URLs included; placeholder text, empty websites, and other temporary content should be scrubbed before submission. Make sure your app has been tested on-device for bugs and stability before you submit it, and includ..
애플 앱스토어 심사 반려(리젝) 경험 공유 및 기록 We have started your app's review, but we were unable to successfully access all or part of your app. In order for us to continue the review, we need to have a way to verify all app features and functionality. Typically this is done by providing a demo account that has access to all features and functionality in your app. Specifically, please provide an account with ..
애플 앱스토어 심사 반려(리젝) 경험 공유 및 기록 The app declares support for audio in the UIBackgroundModes key in your Info.plist, but we are unable to play any audible content when the app is running in the background.Background audio is intended for use by apps that provide audible content to the user while in the background, such as music player, music creation, or streaming audio apps. Next StepsIf the app ha..
애플 앱스토어 심사 반려(리젝) 경험 공유 및 기록 This app duplicates the content and functionality of other apps on the App Store, which is considered a form of spam.Specifically, this app is available in the same locations as another identical app you submitted to the App Store. Apps that duplicate content or functionality create clutter, diminish the overall experience for the end user, and reduce the ability of ..

SwiftData와 CloudKit을 사용하면서 로그가 너무 많이 발생해서 불편한 경험을 했던 적이 있으신 분들을 위해 오늘은 로그를 어떻게 안 보이게 할 수 있는지에 대해 알아보려고 합니다. 로그가 너무 많이 쌓이게 되면 디버깅이 힘들어지고 성능에도 영향을 줄 수 있기 때문에 로그 출력은 생각보다 중요합니다. SwiftData와 CloudKit을 사용하다 보면 CoreData Logging 로그와 CloudKitDebug 로그가 정말 많이 출력됩니다. 끄는 방법은 매우 간단합니다. [Edit Scheme - Debug - Arguments - Arguments Passed On Launch]로 이동합니다. 그리고 + 버튼을 눌러서 항목 두개를 추가해 줍니다.// CloudKit과 관련된 로그입니다...

Xcode 15부터 지원하는 색상, 이미지 애셋 자동 완성 기능 Generate Swift Asset Symbol Extensions 만약 이런 식으로 색상을 애셋에 정의하고 사용한다면 기존에는 name을 직접 입력해서 사용했습니다. view.backgroundColor = UIColor(named: "white-Dark1") 이런 식으로 이름을 직접 입력하던가 enum을 선언해서 사용하던가 했습니다. 하지만 Xcode 15부터는 자동완성을 지원합니다. view.backgroundColor = .whiteDark1view.layer.borderColor = UIColor.whiteDark1.cgColor 이런식으로 바로 자동 완성 할 수 있는데요. 위코드는 UIColor와 CGColor를 사용하는 코..

iOS 개발자라면 누구나 알고 있어야 하는 코드 방식으로 UITableViewCell을 구현하는 코드 스토리보드 방식이 아닌 코드로 구현하기 위한 Class를 기록합니다. import UIKitclass TestTableViewCell: UITableViewCell { // 초기화 메서드. 스타일과 재사용 식별자를 매개변수로 받아 초기화를 수행합니다. override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) self.commonInit() // 공통 초기화 작업을 수행하는 메서드..