앱을 배포하다보면
항상 동일한 일을 반복하는 경우가 많다.
매번 찾아보기 귀찮기 때문에 한번에 정리해놓고자 한다.
iOS
1. 수출 규정 관련 문서 누락 메시지 해결
앱을 빌드한 후 항상 "수출 규정 관련 문서가 누락됨" > "아니요" 누르게 되는데
코드상에서 처리하면 이 과정을 하지 않아도 된다.
※ HTTPS와 로그인 정보 암호화 정도는 "NO"에 속한다.
info.plist에서 아래와 같이 추가해준다.
2. build 번호 자동 증가
매 빌드마다 빌드번호를 고치는 게 귀찮기 때문에 자동 증가할 수 있도록 스크립트를 넣는다.
1) Xcode 메뉴 Product > Scheme > Edit Scheme를 클릭
2) 팝업이 나타나는데 좌측 메뉴에서 Archive > Post-actions를 클릭
3) 하단의 + 버튼 > New Run Script > Action을 클릭
Provide build settins from ... 에 target을 선택한 뒤 스크립트를 작성
cd "${PROJECT_DIR}" ; agvtool bump
3. AppTrackingTransparency 팝업 설정
앱 내 광고가 포함되어있으면 식별값 IDFA를 사용 여부 팝업 요청을 해야하는데
없을 경우 심사를 통과하지 못한다.
1) app_traking_transparency 설치
https://pub.dev/packages/app_tracking_transparency/install
2) main.dart 코드 추가
class _MyHomePageState extends State<MyHomePage> {
String _authStatus = 'Unknown';
@override
void initState() {
super.initState();
initPlugin();
}
Future<void> initPlugin() async {
final TrackingStatus status =
await AppTrackingTransparency.trackingAuthorizationStatus;
setState(() => _authStatus = '$status');
// If the system can show an authorization request dialog
if (status == TrackingStatus.notDetermined) {
// Request system's tracking authorization dialog
final TrackingStatus status =
await AppTrackingTransparency.requestTrackingAuthorization();
setState(() => _authStatus = '$status');
}
final uuid = await AppTrackingTransparency.getAdvertisingIdentifier();
}
}
3) info.plist 에 아래와 같이 추가
<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>
Android
1. 앱 버전 변경
1) pubspec.yaml 수정
- versionName : 1.0.1
- versionCode : 2
version: 1.0.1+2
2) 프로젝트/android/local.properties 수정
flutter.versionName=1.0.1
flutter.versionCode=2
3) 프로젝트/android/app/build.gradle 수정
defaultConfig {
versionCode 1
versionName '1.0.0'
}
2. Proguard 구성하기
프로젝트/android/app 폴더에 proguard-rules.pro 파일을 추가하여 아래 내용을 적어준다.
## Flutter wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
-dontwarn io.flutter.embedding.**
같은 폴더의 build.gradle 파일에 아래 내용을 추가해준다.
buildTypes {
release {
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
공통
1. 개인정보처리방침 만들기
https://www.privacy.go.kr/front/per/inf/perInfStep01.do
2. 앱 아이콘 만들기
1024 X 1024 아이콘을 아래 사이트에 넣고 Generate 버튼을 눌러서 다운받는다.
다운받고 압축을 풀면
아래와 같은 파일을 얻을 수 있다.
1) android :
2) appstore.png :
3) Assets.xcassets :
4) playstore.png :
3. DEBUG 배너 삭제
Store에 올릴 스크린샷을 위해서 DEBUG 배너를 삭제해야하는데
아래와 같이 debugShowCheckedModeBanner 설정을 해주면 된다.
4. 앱 리뷰
1) in_app_review 설치
https://pub.dev/packages/in_app_review
2) 원하는 곳에 추가
5. Google Analytics 설정하기
1) firebase 프로젝트 생성
https://console.firebase.google.com/u/0/?hl=ko
상단 홈페이지에 접속하여 로그인 뒤, 새 프로젝트를 추가한다.
2) Flutter 프로젝트 - Firebase 프로젝트 연결
우선, 터미널에 아래와 같이 입력하여 FlutterFire CLI를 설치한다.
dart pub global activate flutterfire_cli
만약, command에 로그인이 안 되어있는경우
firebase login을 통해 로그인을 우선 해준다.
그리고 Flutter - Firebase 프로젝트를 연결하기 위해 하기 명령어를 입력한다.
flutterfire configure
※ zsh: command not found: flutterfire 에러 발생할 경우,
export PATH="$PATH":"$HOME/.pub-cache/bin" 입력
3) 필요한 라이브러리 설치
flutter pub add firebase_core
flutter pub add firebase_analytics
4) 기본 셋팅 코드 작성
import 'package:firebase_core/firebase_core.dart'; // 추가
import 'package:firebase_analytics/firebase_analytics.dart'; // 추가
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(); // 추가
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
static FirebaseAnalytics analytics = FirebaseAnalytics.instance; // 추가
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Test',
theme: ThemeData(
primarySwatch: Colors.blue,
),
navigatorObservers: [ // 추가
FirebaseAnalyticsObserver(analytics: analytics),
],
home: const MyHomePage(),
);
}
}
5) 화면 이동 기록
하기 코드를 작성해주지 않으면 firebase에서 화면 이동이 제대로 기록되지 않는다.
화면 이동하는 코드에 아래처럼 이름을 작성해준다.
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SearchScreen(),
settings: RouteSettings(name: 'searchScreen')), // 추가
);
6) 이벤트 기록 함수
아래와 같이 공통 함수를 만들어놓으면 편하다.
Future<void> gaEvent(String eventName, Map<String, dynamic> eventParams) async {
await FirebaseAnalytics.instance.logEvent(
name: eventName,
parameters: eventParams
);
}
이런 식으로 사용하면 된다.
gaEvent('select_type', {'people': widget.peopleCnt});
'💻 개발IT > Flutter' 카테고리의 다른 글
[Flutter] .pub-cache/hosted/pub.dev/http-0.13.5/lib/src/io_client.dart 에러 (0) | 2023.03.30 |
---|---|
[Flutter] hot reload 안 될 때 (0) | 2023.03.12 |
[Flutter] Unable to boot the simulator 에러 (0) | 2023.03.10 |
[Flutter] main.dart 구조 분석 (0) | 2023.01.25 |
Flutter 프로젝트 폴더 구조 (0) | 2023.01.24 |