일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- TestFlight
- NVME
- 타뷸레이션
- 팀 개발을 위한 git
- .pbxproj
- JPG
- webp
- contentalignmentpoint
- 메모이제이션
- Firestore
- 캐러셀
- nidthirdpartylogin
- Tuist
- Cocoa Pod
- github 시작하기
- xcode 엔터 표시
- spm 에러
- fetchdescriptor
- SwiftUI
- png
- JPEG
- swift 모듈화
- 테스트 타겟
- heic
- xcode 공백 표시
- 클린 아키텍처
- 코드스쿼드
- 함께자라기
- swiftdata
- 무한스크롤
- Today
- Total
Sure, Why not?
문의하기, 평가하기, 공유하기, 앱정보 표시 본문
흔하게 경험할 수 있는
앱의 4가지 요소
이를 직접 구현하면서
재미있기도 하고,
신기하기도 하면서,
나중에도 또 들여다볼 일이 반드시 있을 것 같아 기록하고자 한다.
[ 2 / 22 ]
중간에 나오는 AppID는 App Store Connect -> 앱 정보에서 Apple ID를 확인하면 된다.
문의하기
메일 보내는 방법은
- 서버에 직접 문의 내용을 전달
- 이메일 앱을 직접 열기
- 앱에서 직접 이메일 작성할 수 있는 공식 API 사용하기
정도로 추려낼 수 있을 것이다.
그 중에 3번으로 MFMailComposeViewController 을 사용하여 문의하기를 구현하기로 결정하였다.
https://developer.apple.com/documentation/messageui/mfmailcomposeviewcontroller
MFMailComposeViewController | Apple Developer Documentation
A standard view controller, whose interface lets the user manage, edit, and send email messages.
developer.apple.com
앱 내에서 이메일을 작성하고 보낼 수 있는 표준 뷰컨트롤러이다.
제목, 받는 사람, 본문, 첨부 파일로 설정해서 이메일을 구성할 수 있음.
사용하기 전에 이메일 보낼 수 있는 상태인지 canSendMail()을 호출하면 됨.
메일을 보낼 수 없는 상태면, 비활성화하거나 대에 이메일 방식인 mailto 해야 한다. -> 나는 알림창으로 대응하기로 하였다.
private func handleContactUs() {
if MFMailComposeViewController.canSendMail() {
let mailComposeVC = MFMailComposeViewController()
mailComposeVC.mailComposeDelegate = self
mailComposeVC.setToRecipients(["josama2022.dev@gmail.com"])
mailComposeVC.setSubject("[InvestMate] 문의하기")
let deviceInfo = """
이곳에 내용을 작성해주세요
================================
App Version : \(appVersion)
Device Model : \(UIDevice.current.model)
Device OS : \(UIDevice.current.systemVersion)
================================
"""
mailComposeVC.setMessageBody(deviceInfo, isHTML: false)
present(mailComposeVC, animated: true)
} else {
self.showMailErrorAlert()
}
}
해당 코드로 다음과 같은 결과를 확인할 수 있다.
평가하기
1년 내에 최대 3회만 가능한 인앱리뷰와 다르게 앱스토어 리뷰 페이지 이동하는 방식으로 구현하였다.
(Deprecated이기도 하고 ㅎㅎ)
https://developer.apple.com/documentation/storekit/requesting-app-store-reviews
Requesting App Store reviews | Apple Developer Documentation
Implement best practices for prompting users to review your app in the App Store.
developer.apple.com
샘플코드를 인용하였다. 실제 앱 준비 단계에서 앱 ID로 교체해야 함
private func handleRateApp() {
// TODO: 실제 앱 ID로 교체하기
let appID = "idYOUR_APP_ID"
guard let url = URL(string: "https://apps.apple.com/app/id\(appID)?action=write-review") else {
return
}
UIApplication.shared.open(url)
}
공유하기
UIActivityViewController 사용하여 일관된 공유하기 경험을 제공할 수 있음
init(activityItems:applicationActivities:)에서
activityItems는 공유할 데이터, Any 타입 파리미터
applicationActivities는 커스텀 공유 액션추가할 수 있는 파리미터
private func handleShare() {
let appStoreURL = "https://apps.apple.com/app/id\(appID)?action=write-review"
let message = """
[InvestMate]
주식 물타기 계산기 📈
합리적인 매수 전략을 세워보세요!
"""
let itemsToShare: [Any] = [
message,
appStoreURL
]
let activityVC = UIActivityViewController(
activityItems: itemsToShare,
applicationActivities: nil
)
present(activityVC, animated: true)
}
앱 정보 표시
let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Unknown"
let buildNumber = Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "Unknown"
간단히 코드로 표현할 수 있다.
그런데, 원래 프로젝트를 생성하는 방법과 달리
난 프로젝트 설정을 Tuist로 관리하고 있기 때문에
별도로 앱 버전과 빌드 번호 설정이 필요했다.
그리고 각 모듈을 나눠서, Presentation레이어로 분리하여 작업중이다.
그래서
앱 버전과 빌드 번호 다르게 나올 때도 있었는데,
앱 모듈에 돌린다면, 정상적으로 나오니 놀라지 말자. (내가 놀랬었음)
'💻' 카테고리의 다른 글
앱스토어 출시 과정 (+ TestFlight 업로드 ) (0) | 2025.02.11 |
---|---|
앱스토어 출시 과정 (+ Identifiers ) (0) | 2025.02.10 |
콜백 방식의 비동기 코드를 async/await으로 사용하기 (0) | 2025.02.01 |
UIScrollView 콘텐츠 오른쪽 정렬하기 (1) | 2024.12.22 |
SwiftData) FetchDescriptor 에러 (0) | 2024.12.20 |