본문 바로가기

💻 개발IT/Flutter

[Flutter] 앱 배포 전 설정 정리! (ios, android)

 

앱을 배포하다보면

항상 동일한 일을 반복하는 경우가 많다.

매번 찾아보기 귀찮기 때문에 한번에 정리해놓고자 한다.

 

 

 

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

 

app_tracking_transparency | Flutter Package

This Flutter plugin allows you to display ios tracking authorization dialogue and request permission to collect data.

pub.dev

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

 

개인정보 포털

개인정보보호위원회는 개인정보의 처리와 보호에 관한 사안을 독립적으로 수행하기 위해 설립된 합의제 중앙행정기관입니다.

www.privacy.go.kr

 

 

 

 

 

2. 앱 아이콘 만들기

1024 X 1024 아이콘을 아래 사이트에 넣고 Generate 버튼을 눌러서 다운받는다.

 

https://www.appicon.co

 

App Icon Generator

 

www.appicon.co

 

다운받고 압축을 풀면

아래와 같은 파일을 얻을 수 있다.  

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

 

in_app_review | Flutter Package

Flutter plugin for showing the In-App Review/System Rating pop up on Android, iOS and MacOS. It makes it easy for users to rate your app.

pub.dev

2) 원하는 곳에 추가

 

 

5. Google Analytics 설정하기

1) firebase 프로젝트 생성

 

https://console.firebase.google.com/u/0/?hl=ko 

 

로그인 - Google 계정

이메일 또는 휴대전화

accounts.google.com

 

상단 홈페이지에 접속하여 로그인 뒤, 새 프로젝트를 추가한다. 

 

 

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});
반응형