![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/oMk76/btsv7m67Ils/Va2bKhITEPwBWLasNZchz1/img.png)
나의 첫 앱 심사가 드디어 승인되었다! 그래서 Ready for Sale이 되었는데... Developer Removed from Sale이라면서 메일이 하나 더 와 있었다. 어? 나는 판매를 중단한 적이 없는데??? 저 시간에 자고 있었는데??? 그래서 구글링을 해보니 App Connect에서 가격 및 사용 가능 여부를 확인해보라고 했다. 앱 사용 가능 여부에서 아직 사용 가능 여부 설정이 되어 있지 않았다. 출시할 앱이 영어를 기본으로 지원하기 때문에 175개국 모든 국가에서 사용 가능하도록 하였다. 그랬더니 짜잔! 드디어! 앱이 판매 준비가 되었다!!!!! 하지만.... 앱 스토어에 노출이 되려면 최대 24시간이 걸린다고 한다. 빨리 내 눈으로 앱 스토어에서 나의 첫 번째 앱을 볼 수 있길 바란다.
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bYU8z0/btsv7ftkime/4U2IgDRP0IL7JdZj4EIiMk/img.png)
기도 노트 앱 출시를 위해 심사를 요청하였는데, 다음과 같은 사유로 거절이 되었다. 5.1.2 Legal: Privacy - Data Use and Sharing 기도 노트에는 광고 수익화를 위해 admob을 사용한다. admob은 사용자에게 맞춤 광고를 보여주기 위해서 사용자 데이터를 수집하게 된다. iOS 14.5부터는 사용자의 프라이버시를 보호하기 위해서 앱 트래킹 투명성(AppTrackingTransparency) 프레임워크를 통해서 사용자의 허락을 받은 후에 데이터를 수집해야 한다고 한다. # 문구 다국어화하기 기도 노트는 다국어를 지원하기 때문에 InfoPlist.strings에 다국어 문구로 작성했다. https://velog.io/@sun02/iOS-Info.plist-%EB%AC%B8%E..
개인정보 처리 방침 1986hz는 광고 지원 앱으로서 '내 기도 노트 앱(My Prayer Note)'를 개발하였습니다. 이 서비스는 1986hz에서 무료로 제공되며 그대로 사용하기 위한 목적으로 제공됩니다. 본 페이지는 이 서비스를 사용하려는 경우 개인 정보 수집, 이용 및 공개에 대한 정책을 방문자에게 알리기 위해 사용됩니다. 만약 본 서비스를 사용하려고 선택한다면, 본 정책과 관련하여 정보 수집과 이용에 동의하는 것으로 간주됩니다. 저는 본 개인 정보를 서비스를 제공하고 개선하기 위한 용도로 사용합니다. 본 개인 정보를 본 개인 정보 처리 방침에 기술된 대로 외부와 공유하지 않을 것입니다. 본 개인 정보 처리 방침에서 사용되는 용어는 My Prayer Note에서 특별히 정의되지 않는 한 우리의 이..
Privacy Policy 1986hz built the My Prayer Note app as an Ad Supported app. This SERVICE is provided by 1986hz at no cost and is intended for use as is. This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal Information if anyone decided to use my Service. If you choose to use my Service, then you agree to the collection and use of informat..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bZhuL0/btsvb2ocpEq/Umtd5Qmf76bLfO94BWboV0/img.png)
iOS 앱 개발 중에 다국어를 지원하는 방법을 알아보자. # 앱 설정 1. 문자열 파일 만들기 New File로 String File을 생성한다. 파일명은 Localizable으로 하자. 그래야 나중에 NSLocalizedString() 함수를 디폴트로 테이블 이름을 사용할 수 있어서 편하다. 다름 이름을 하게 되면 매번 테이블 이름을 전달해야 한다. 2. 생성한 문자열 파일을 인스펙터에서 Localize...로 선택한다. 3. Project > Info > Localization 에서 언어를 추가한다. # 다국어 추가하기 언어별로 문자열 파일이 생성되어 있을 것이다. 각 문자열 파일에 키-값 쌍으로 다국어를 추가한다. 꼭 끝에 콜롬을 추가해야 한다. (안하면 에러 발생) // en "groups" = ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bKniJo/btsubLtE638/DF6vd9TI4d7UCKtoR2w1C1/img.png)
참고사이트: https://developers.google.com/admob/ios/test-ads?hl=ko 공식문서와 구글링한 정보에서 Info.plist에 정보를 업데이트해라고 하는데... 도저히 Info.plist를 찾을 수가 없었다. 다음과 같이 진행해보자. info.plist의 기본 소스 코드에서 사이에 여기에!!!! CFBundleURLTypes 다음 스피넷 코드를 추가한다. GADApplicationIdentifier 여기에! 본인 앱id 입력하기 SKAdNetworkItems SKAdNetworkIdentifier cstr6suwn9.skadnetwork SKAdNetworkIdentifier 4fzdc2evr5.skadnetwork SKAdNetworkIdentifier 4pfyvq9l..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/beqHTZ/btst7SzIy0W/YAHsrMsOiWJuVFQpHAOGyK/img.png)
SwiftUI의 TabView는 PageTabViewStyle을 제공한다. 다음 코드는 CoreData의 모델을 PageTabViewStyle로 만든 코드가 된다. indexViewStyle도 추가해서 하단에 인덱스뷰도 보이게 했다. struct ContentView: View { @Environment(\.managedObjectContext) private var viewContext @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \Item.name, ascending: true)], animation: .default) private var items: FetchedResults var body: some View { TabView { Fo..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/C7ify/btsudjvSa3m/yODRXEm4vVAnXXKQenshhK/img.gif)
List에서 행의 인덱스가 필요해서 다음과 같이 코드를 작성했다. struct PrayersView: View { ... @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \Prayer.name, ascending: true)], animation: .default) private var items: FetchedResults var body: some View { List { ForEach(items.indices, id: \.self) { index in NavigationLink(destination: { PrayerDetailView(items: items, startIndex: index) }, label: { Text(items[index..