IOS 12

앱 스토어 스크린샷 대충 올렸다가 후회한 이야기

1. 테스트용 스크린샷으로 심사 통과처음에 앱 개발 끝나고 테스트용으로 대충 찍은 스크린샷을 앱 스토어에 올렸어요.해상도만 맞춰서(1320*2868) 올렸지, 디자인이나 레이아웃은 전혀 신경 안 썼죠.결국 그대로 심사 통과돼서 앱 스토어에 성의 없어 보이는 스크린샷이 올라갔습니다...(후회 200%)2. Canva로 스크린샷 꾸미기앱 스토어에서 스크린샷이 얼마나 중요한지 깨닫고, Canva로 스크린샷을 꾸미기로 했어요.Canva 템플릿 쓰니까 생각보다 쉽게 이쁘게 만들 수 있었습니다.거창한건 아니지만 전보다는 훨 나은느낌...3. 리빌드 후 앱 스토어 업데이트Canva로 만든 새 스크린샷으로 앱을 리빌드하고, 앱 스토어에 업데이트했습니다.이제야 뭔가 제대로 된 앱처럼 보이네요.(역시 첫인상이 중요하다는 ..

플러팅 AI/배포 2025.01.27

IOS 배포 후 문제점찾아 버전 변경 1.1

📢 App Store 배포 후 개선 작업 진행 완료배포는 완료했지만, 실제 검색해보니 다른 앱들과 차이가 느껴짐앱 스크린샷이 너무 단순해 보여서 Canva로 꾸며서 다시 배포할 예정앱 내부에 App Store 링크 추가 완료 (배포 후 필요했던 부분)Android 배포 완료 후 iOS & Android 링크를 하나로 통합하여 변경할 계획버전 1.1로 업데이트 완료 🚀

플러팅 AI/배포 2025.01.27

🎉 App Store 배포 완료! 🎉

첫 앱 출시를 위해 많은 과정을 거쳤고, 드디어 App Store 배포를 완료!📌 개발 외 신경 쓸 것들✅ 기능 구현은 약 2개월 전 완료✅ UI 디테일 수정 및 최적화✅ 사업자 등록 & 통신판매업 신고✅ iOS 심사 & Android 테스트 진행✅ Android 출시 준비 (테스터 수 20명 → 12명으로 완화됨)🚀 다음 계획📌 iOS 사용자 피드백 반영 & 버그 수정📌 Android는 14일 후 출시 가능 → 준비 시작📌 SNS & 마케팅 홍보 진행🎯 이제는 홍보 & 유지보수 단계!더 성장할 수 있도록 업데이트 & 최적화하면서 좋은 성과 내길 바라! 🔥🔥 앱 링크 https://apps.apple.com/us/app/%ED%94%8C%EB%9F%AC%ED%8C%85ai/id6739812..

플러팅 AI/배포 2025.01.27

구매 복원 기능 요약

구매 복원 기능 요약문제사용자가 앱을 삭제 후 다시 설치하거나 새로운 기기에서 로그인했을 때, 구독 상태(isUnlimited)가 유지되지 않음.복원 버튼을 눌러 구독을 복원했지만, 앱을 재실행해야 상태가 반영되는 문제가 발생.해결 방법구독 복원 기능 구현:RNIap.getAvailablePurchases()를 사용하여 복원 가능한 구매 내역을 확인.복원 가능한 구매 항목에서 productId를 기반으로 구독 상태 확인.앱 재실행 기능 추가:복원 완료 후 앱을 재실행하여 구독 상태가 즉시 반영되도록 구현.UI 개선:복원 성공 시 사용자에게 알림을 표시하고 앱을 자동으로 재실행.최종 코드restorePurchase 함수import { Alert, Platform, Linking } from 'react-n..

오류 메시지: purchase is not suitable to be purchased RN.IAP android

문제와 해결 요약문제오류 메시지: purchase is not suitable to be purchased발생 상황:RNIap.finishTransaction 호출 시, purchase 객체가 적절하지 않거나 유효하지 않음.이전에 완료되지 않은 트랜잭션이 존재하거나, purchaseToken이 없을 때 발생.해결 방법getAvailablePurchases로 최신 구매 정보 가져오기:RNIap.getAvailablePurchases()를 호출하여 사용 가능한 모든 구매 데이터를 가져옵니다.필요한 구매를 productId로 필터링하여 적절한 purchase 객체를 확인.트랜잭션 완료 처리 개선:getAvailablePurchases로 가져온 데이터를 사용해 finishTransaction 호출.디버깅 및 상..

offerToken is required for constructing ProductDetailsParams for subscriptions 에러 해결 방법

문제 및 해결 방법 정리문제에러 메시지:offerToken is required for constructing ProductDetailsParams for subscriptions 에러가 발생.상황:requestSubscription 호출 시 offerIdToken 필드에 offerToken 값을 전달했음.로그 상으로 offerToken은 제대로 가져오고 있었으나, 구매 요청에서 에러 발생.원인:requestSubscription 호출 시 매개변수 이름이 잘못 설정됨:잘못된 필드 이름: offerIdToken.올바른 필드 이름: offerToken.해결 방법수정 내용:requestSubscription 호출 시 매개변수 이름을 offerIdToken에서 offerToken으로 변경.기존 코드: const..

플러팅 AI ( 배포 ) 2025 01 11

1. IOS 심사 취소 문제가 되던 SKUS 문제가 일단 심사 후 문제가 해결 되는 줄 알았지만 그게 아니였음 코드 자체에 문제가 있었음  IOS 실제 결제까지 되는거 SANDBOX apple ID로 테스트 후 심사 제출 완료 관련 글은 따로 작성 . https://talk7053.tistory.com/51  2. Android IOS 에서 문제 해결한 후 Android로 코드 옮김. Android 에서는 google 로그인 관려 문제 발생 관련글 따로 작성 . https://talk7053.tistory.com/52 그 후 Android 에서 구독 상품 인식 안됨 .

플러팅 AI/배포 2025.01.11

RN 으로 짠 Modal 이 android 에서는 잘만 작동하다가 IOS는 이유

React Native를 활용한 앱 개발에서 Modal은 매우 유용한 컴포넌트입니다. 그런데 Modal이 Android에서는 잘 작동하지만 iOS에서만 이상한 문제가 발생하는 경우가 있습니다. 특히, 모달이 열리지 않거나 UI가 깨지는 상황은 많은 개발자들에게 혼란을 줄 수 있습니다. 이번 글에서는 이러한 문제가 왜 발생하는지, iOS와 Android의 차이는 무엇인지, 그리고 어떻게 해결할 수 있는지를 자세히 알아보겠습니다.1. iOS와 Android의 Modal 처리 방식 차이iOS: 새로운 View 계층 생성iOS에서 Modal은 기존 화면 위에 **새로운 뷰 계층(View Hierarchy)**을 생성하여 렌더링됩니다. 이 뷰는 전체 화면을 덮으며 다른 모든 요소와 독립적으로 동작합니다. 따라서,..

IOS 배포 시도! 드디어 Apple 개발자 프로그램에서 승인이 낫다 !

처음 애플 개발자 프로그램 결제할 때 주소를 잘못 입력해서 다시 입력하라는 이메일을 받은 후, 제대로 수정하여 다시 보냈습니다. 그로부터 4일이 지나 드디어 승인이 났습니다. 진작 해야 될 것들이 이제야 진행되네요 ㅠㅠ오늘 한 작업:플러팅 AI 배포 준비:플러팅 AI 기능을 앱에 배포할 준비를 완료했습니다.미리보기 영상 및 스크린샷 추가:앱 스토어에 올릴 미리보기 영상과 스크린샷을 추가했습니다.어플 설명 텍스트 완료:앱 설명 텍스트를 작성하고 완료했습니다.개인정보 처리 완료:개인정보 처리방침을 작성하고 완료했습니다.구독 관리 암호 생성:구독 관리에 필요한 앱 공유 암호를 생성하여 SubscriptionManager.js에 추가했습니다.애플 비즈니스 섹션:애플 비즈니스 섹션에서 필요한 정보를 추가했습니다...

플러팅 AI/배포 2024.12.25

React Native iOS에서 겪은 두 가지 문제와 해결 방법

안녕하세요! 오늘은 React Native 프로젝트를 iOS에서 빌드하면서 발생했던두 가지 문제를 공유하려고 합니다.이 글이 비슷한 문제를 겪는 분들께 도움이 되었으면 좋겠습니다.1. SavedResultsScreen에 뒤로가기 버튼 추가문제 상황SavedResultsScreen에서 뒤로 가기를 통해 메인 화면으로 돌아가는 기능이 없었습니다.iOS의 기본 뒤로 가기 버튼이나 제스처가 작동하지 않는 경우 사용자 경험이 불편할 수 있습니다.해결 방법뒤로 가기 버튼을 추가하고 navigation을 통해 메인 화면으로 이동하도록 설정했습니다.추가된 코드뒤로 가기 함수 추가:const navigateToMainScreen = () => {    navigation.navigate('MainScreen'); // ..