일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- alamofire
- button
- cocoapods
- charts
- 그래프
- UITableView
- ios
- TableView
- Chart
- 개발
- androidstudio
- graph
- UIButton
- Android
- PyQt
- Storyboard
- Xcode
- Apple
- Swift
- ui
- Chrats
- kotlin
- 개발자
- modal
- 라이브러리
- Python
- library
- UIKit
- PyQt5
- 어플리케이션
- Today
- Total
목록전체 글 (316)
Jiwift
배경색을 주고 패딩을 적용해 넓어 보이는 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() // 공통 초기화 작업을 수행하는 메서드..
FCM은 토큰이 아닌 토픽 방식으로 메세지를 주고 받을 수 있습니다. 평소에는 파이어베이스 라이브러리를 통해서 쉽게 구독해제를 할 수 있으나 코드를 가지고도 구독해제를 할 수 있습니다. (특별한 상황이 아니면 그냥 라이브러리에서 지원하는 기능을 사용하셔서 구현하세요.) 아래는 Swift 코드입니다.// 사용자의 FCM 토큰let token = "tokentokentoken" // 구독 해제하고 싶은 토픽let topic = "notice" // FCM 서버 키 파이어베이스 콘솔에서 확인 가능let serverKey = "fcm_server_key"// Request 생성let url = URL(string: "https://iid.googleapis.com/iid/v1:batchRemove..
Bundle Identifier와 CloudKit Containers는 변경되면 안된다. 한번 정하면 다신 변경할 일이 없지만 혹시나 기록. Containers를 고정한 상태로 Bundle Indentifier를 변경해보았는데, iCloud에서 데이터를 읽지 못한다. 너무나 당연한 이야기.
앱을 애플 앱스토어에 제출하는 과정은 여러 단계입니다. 각 단계는 앱의 현재 상태를 나타내며, 심사 상태를 이해하고 적절히 대응하는 것이 중요합니다. 아래는 일반적인 진행 상황과 예외 상황에 대한 설명입니다.일반적인 진행 상황제출 준비중설명: App Store Connect에 앱을 생성하였을 때의 기본적인 상태입니다.대응 방법: 앱의 기본 정보를 입력하고, 제출 준비를 진행합니다.심사 준비됨설명: 제출을 위한 준비를 마친 상태로, App Store Connect에서 “심사에 추가” 버튼을 누른 상황입니다.대응 방법: 모든 제출 서류와 요구사항을 확인하고, 심사에 필요한 모든 정보를 입력합니다.심사 대기중설명: “앱 심사에 제출” 버튼을 눌러 애플 심사원이 심사를 해주기를 기다리는 단계입니다.대응 방법: ..
UI 스토리보드(Storyboard)에서 코드(Code)로 전환 요즘 SnapKit을 통하여 코드로 UI를 작성하고 있다. 이게 하다 보니 너무 간편한 것이다. 로딩이나 수정에만 좋은 줄 알았는데, 재사용성과 코드를 분리하는 게 매우 편리하다. 스토리보드를 사용하여 Xib를 생성해 class를 분리하면 똑같이 분리를할 수 있지만, xib와 Swift 코드의 연결을 계속 확인해야 하고 똑같은 것을 더 만드려고 해도 xib는 신경 써야 한다. 근데 코드로 하다 보니 그런 부분에서 너무 자유롭다. 회사 프로젝트는 신규 화면이나 앱은 SnapKit을 모두 사용하고있다. 개인적으로 만든 앱도 유지보수를 위해서 코드로 옮기고 있다. 다행히 앱이 너무 간단해서 금방 작업된다. 이제 개인앱은 모두 같은 코드를 ..