App Store 심사 반려 20회 이상, 서버 플래그 스위치로 해결한 트러블 슈팅
1. 프로젝트 배경 회사 프로젝트로 일본인과 한국인을 매칭하여 소개팅과 결혼을 도와주는 iOS 앱을 담당하게 되었다. 앱 개발을 완료한 후 App Store에 등록하기 위해 심사 요청을 제출했다. 2. 문제 발생 상황 Apple 심사팀으로부터 지속적으로 심사 반려를 받았다. 반려 사유는 소개팅·매칭 카테고리의 앱 서비스가 이미 시장 포화 상...
1. 프로젝트 배경 회사 프로젝트로 일본인과 한국인을 매칭하여 소개팅과 결혼을 도와주는 iOS 앱을 담당하게 되었다. 앱 개발을 완료한 후 App Store에 등록하기 위해 심사 요청을 제출했다. 2. 문제 발생 상황 Apple 심사팀으로부터 지속적으로 심사 반려를 받았다. 반려 사유는 소개팅·매칭 카테고리의 앱 서비스가 이미 시장 포화 상...
Swift의 JSONSerialization이란? JSONSerialization은 Swift에서 JSON 데이터를 파싱하거나 생성하기 위한 Foundation 프레임워크의 클래스다. 주로 네트워크 통신 과정에서 JSON ↔︎ Swift 객체 변환을 담당한다. JSONSerialization의 역할 JSONSerialization은 크게 두 가지 기능...
NotificationCenter가 필요한 이유 객체끼리 직접 참조하여 콜백을 보내면 강한 결합이 생김. NotificationCenter에서는 발신자, 수신자가 서로 몰라도 통신 가능 특징 특정 데이터 변경 시 여러 뷰에서 동시 업데이트 가능 1. 기본 개념 1. NotificationCenter.default 가장 많이 쓰...
[Swift] 클로저 캡처: 내가 알던 값이 왜 아니지? (Value vs Reference Capture) Swift 개발을 하다 보면 비동기 처리나 콜백 함수에서 예상과는 다른 값이 출력되어 당황하는 경우가 있습니다. “분명 값을 바꿨는데 왜 옛날 값이 나오지?” 혹은 반대로 “Struct인데 왜 최신 값이 나오지?” 같은 의문들이죠. 오늘은 ...
enum만 정의했는데 어떻게 매핑을 알아먹는지? Swift에서 JSON을 모델로 디코딩하다 보면 이런 코드를 많이 작성합니다. struct LikeListItemModel: Codable { var targetIdx: Int var mName: String var mNickname: String var mAge: Strin...
SwiftUI WebView 앱에서 쿠키 기반 로그인 유지하기 WKWebView의 쿠키가 사라지는 문제를 UserDefaults를 활용해 해결한 트러블슈팅 기록 문제 상황 SwiftUI로 웹뷰 기반 앱을 만들었다. 웹에서 로그인하면 정상적으로 동작하지만, 앱이 백그라운드로 갔다가 돌아오면 로그인이 풀려 있었다. 심한 경우 앱이 메모리에서 ...
iOS 앱 개발·빌드·배포에 필요한 모든 개념 총정리 1. Apple Developer 생태계 전체 구조 iOS는 Apple이 승인한 개발자가 Apple이 허용한 기기에 Apple 인증으로 서명된 앱만 실행할 수 있다. 이를 위해 필요한 요소: 개념 역할 Certi...
1. Completion handler를 사용하여 비동기 구현 이렇게 작성하면 비동기처리가 가능하지만 미묘한 버그가 끼어들 수 있음 가독성이 좋지 않고 코드의 길이가 길어짐 func fetchThumbnail(for id: String, completion: @escaping (Result<UIImage, Error>) -&...
1. JSONDecoder란? JSONDecoder는 Foundation 프레임워크에 포함된 클래스로, JSON 데이터를 Swift의 타입(Struct, Class)으로 변환해 주는 객체입니다. 핵심은 ‘자동화’입니다. 우리가 정의한 모델이 Codable 프로토콜을 채택하고 있다면, JSONDecoder는 JSON의 키(Key)와 모델의 프로퍼티 이...
URLSession의 기본 구조 URLSession은 네트워크 요청을 처리하는 큰 컨테이너 객체이고, 그 안에서 개별 작업을 담당하는 것이 URLSessionTask URLSessionConfiguration 세션의 동작 방식을 정의 (캐시 정책, 쿠키 저장 여부, 타임아웃, 백그라운드 여부 등) 옵션이라 필요에 따라 사용가능함. ...