SlideShare a Scribd company logo
주니어 개발자의 배포일지
PlatformChannel & Flavor , Environment
Variables을 알아보고 빌드 세팅을 해보자
Incheon/Songdo
김마로
발표자 소개
자바(Spring) -> Flutter
모비어스
TMS (Transportation Management System) 개발자
LinkedIn
목차
1. Flavor
2. Platform-Channel
3. Environment variables
4. pipeline
5. +@ In-House Deployment
Flavor
Flavor 란?
안드로이드의 Flavor, iOS의 configuration,scheme 과 같은 기능
간단하게 표현을 한다면 하나의 프로젝트 소스를 n개의 앱으로 “분리" 시켜
준다.
앱을 왜 분리해야할까?
제일 큰 이유는
● 동일한 코드 베이스를 유지
● 개발,QA,운영(무료버전,유료버전)과
같은 환경분리(ex. Api EndPoint),
● 효율적인 개발 및 테스트
Flavor가 없었다면…..
DEV QA PROD QA PROD
DEV
APP QA
APP
PROD
APP
DEV
APP
어느게 더 안전해보이는가?
분리하지않았을때 분리했을때
Android
android/app/build.gradle
Android
AndroidManifest.xml
iOS
iOS
iOS
iOS
iOS
iOS
iOS
Platform-Channel 을 이
용하여 가지고 올 예정
iOS
+@Firebase
+@Firebase
Script
if [ "${CONFIGURATION}" == "Debug-prod" ] || [ "${CONFIGURATION}" == "Release-prod" ] ||
[ "${CONFIGURATION}" == "Profile-prod" ];
then
cp -r "${PROJECT_DIR}/Runner/firebase/prod/GoogleService-Info.plist"
"${PROJECT_DIR}/Runner/GoogleService-Info.plist"
elif [ "${CONFIGURATION}" == "Debug-qa" ] || [ "${CONFIGURATION}" == "Release-qa" ] ||
[ "${CONFIGURATION}" == "Profile-qa" ];
then
cp -r "${PROJECT_DIR}/Runner/firebase/qa/GoogleService-Info.plist"
"${PROJECT_DIR}/Runner/GoogleService-Info.plist"
elif [ "${CONFIGURATION}" == "Debug-dev" ] || [ "${CONFIGURATION}" == "Release-dev" ] ||
[ "${CONFIGURATION}" == "Profile-dev" ];
then
cp -r "${PROJECT_DIR}/Runner/firebase/dev/GoogleService-Info.plist"
"${PROJECT_DIR}/Runner/GoogleService-Info.plist"
fi
+@Firebase
Flavor 에 맞게끔
FirebaseOptions를 넣어주면 끝.
Tip
Flavor를 세팅을 하고 나면 실행시 마다 flavor를
지정해주어야 하기 때문에 main의 실행버튼을
쓸 수 없기에 터미널에서 직접 입력을 필요.
Vscode나 AndroidStudio에서 해당 부분을 간편
하게 할수 있게 세팅시 편하게 실행 가능
Platform-Channel
어…. 이건 Dart가 아닌데..?
Language doesn’t matter!
JNI
Bridging
Header
Platform
Channel
Platform-Channel 이란?
Platform-Channel
● (Binary Messaging)
● BasicMessageChannel
● MethodChannel
● EventChannel
Flutter <-> Native 통신 기능
Binary messaging
BasicMessageChannel
BasicMessageChannel
● Binary Messaging + Codec
● 비동기
MethodChannel
MethodChannel
● Method 호출/응답
● Argument 전달
● 기본 코덱설정
● 비동기
EventChannel
PubDev 의 Libraries
1. Geolocator
2. Camera
3. AudioPlayers
4. In_App_purchase
5. Battery_plus
6. …
7. …
8. …
9. …
왜 Channel 인가?
수많은 네이티브 기능들..
알림, 딥링크, 센서, 카메라, 배터리, 위치, 사운드, 커넥션, 다
른앱과 정보공유, 다른앱 실행,로컬 스토리지 등등…
플랫폼이 시간이 지날수록 추가되는
각종 신규 기능들을 어떻게 다 빠르게
지원할 수 있을까?
플랫폼 채널 데이터 유형
Flutter
● Method-Channel 로
Flavor 가져오기
● Flavor에 맞게끔 서비스환경
세팅
Android
MainActivity.kt
● getFlavor
Android
MainActivity.kt
● +@isDebuggerAttached
iOS
AppDelegate.swift
● getFlavor
iOS
AppDelegate.swift
● +@isDebuggerAttached
Flutter
● Method-Channel 로
Flavor 가져오기
● Flavor에 맞게끔 서비스환경
세팅
Flutter
1. ServiceConfig (Singleton)
Flutter
1. ServiceConfig (Singleton)
만약 더 제대로 써보고싶다면..?
- 나는 플랫폼의 네이티브 기능들을 많이 사용해야 한다.
- 모든 플랫폼에 각각 채널코드를 일일히 짜기가 너무 힘들다.
- 뭔가 편한 방법이 없을까?
비둘기
- 역사적으로 검증된 가장 오래된 통신
수단 (a.k.a 전서구)
- 우리들에게 매우 친숙함
- 수명도 긴편 (10년~20년)
Pigeon
Flutter Seoul 의 박제창님 비둘
Pigeon
Pigeon is a code generator tool to make communication between Flutter and the host platform type-
safe, easier, and faster.
Pigeon removes the necessity to manage strings across multiple platforms and languages. It also
improves efficiency over common method channel patterns. Most importantly though, it removes the
need to write custom platform channel code, since pigeon generates it for you.
Supported Platforms
Currently pigeon supports generating:
● Kotlin and Java code for Android
● Swift and Objective-C code for
iOS and macOS
● C++ code for Windows
Flutter Seoul 의 박제창님 비둘
@FlutterApi
@FlutterApi
@HostApi
Pigeon
@HostApi
- Flutter 에서 Native 호출
@FlutterApi
- Native 에서 Flutter 호출
이걸로는 부족하다
FFIgen(Foreign Function Interface generator)
(Foreign Function Interface generator)
JNIgen (Java Native Interface generator )
How it works?
+@
- method overLoading
Dart Interoperability tools
Dart Interoperability DeepDive
Environment Variable
Way to set Flutter environment variables
- .env (feat. flutter_dotenv)
- --dart-define
- --dart-define-from-file
--Dart-Define
- Dart 에서 제공하는 환경변수를 설정해주는 커맨드라인 옵션
(Compilation environment declarations)
- 예.) API end-point, logging level 등등
How to use?
- command-line 에 빌드시
--dart-define=<NAME>=<VALUE> 추가
- fromEnvironment
- hasEnvironment
Flutter 3.7.0 update
- 3.7.0 부터는 json file로 여러 값들을 넣어서
호출할수 있도록 기능을 추가
- --dart-define-from-file = <filepath>
how to use
set up your pipeline
CI/CD
- CI (Continuous Integration)
- Build, Test
- CD (Continuous Deployment)
- Deploy
다 알아야 할까?
Trigger
Stage pool job task
Android
End
task * n
ubuntu
Pipeline Flow
task
task
N * task
main-branch
pool job task
task
task
N * task
iOS
macOS task * n
Prod,Qa,Dev
Prod,Qa,Dev
.apk
.aab
.ipa
Task
- task: FlutterBuild@0
displayName: Build dev-fest-main
inputs:
target: apk
projectDirectory:
$(Build.SourcesDirectory)/dev-fest-main
buildFlavour : prod
extraArgs: >-
--release
--dart-define=SAFETY_CHECK=true
- task: FlutterBuild@0
displayName: Build dev-fest-main
inputs:
target: ipa
projectDirectory:
$(Build.SourcesDirectory)/dev-fest-main
extraArgs: >-
--release
--flavor=prod
--dart-define=SAFETY_CHECK=true
exportOptionsPlist: $(exportOptionsPlistPath)
정리
1. 앱을 분리 한다 -> Flavor
1. 네이티브 코드를 적용해야한다 -> Plaform-Channel
1. 환경변수를 세팅해야한다 -> Dart-define
1. 빌드시 extraArg 에 Flavor, dart-define 을 넣어 주고 세팅완료
Thank you
In-House Deployment
iOS In-House Distribution
- TestFlight
- Ad-Hoc
- Firebase App Distribution
- 웹을 이용한 IPA 배포 (feat.Apple Developer Enterprise Program)
App Developer Enterprise Development
- Have 100 or more employees.
- Be a legal entity. We do not accept DBAs, fictitious businesses, trade names, or
branches.
- Use the program only to create proprietary, in-house apps for internal use, and to
distribute these apps privately and securely to employees within the organization.
- Have systems in place to ensure only employees can download your internal-use
apps, and to protect membership credentials and assets.
- Participate in and pass Apple’s verification interview and continuous evaluation
process.
Unlisted App Distribution
- 2022년 부터 제공한 비공개 AppStore 배포
- 엔터프라이즈 계정이 아닌 일반 개발자 계정으로도 배포가 가능
- 배포방식은 일반 스토어 배포와 동일하게 AppStoreConnect 에 심사
를 맡기지만 추가로 Unlisted App Distribution 이라는 배포 방식을 하
겠다고 description 란에 적어줘야함
- 또 별도의 Unlisted App Distribution 신청서를 작성
Unlisted App Distribution
Thank you

More Related Content

PDF
AWS Fargate on EKS 실전 사용하기
PDF
初心者向けWebinar AWS上でのネットワーク構築
PDF
ELB & CloudWatch & AutoScaling - AWSマイスターシリーズ
PDF
AWS Black Belt Online Seminar 2017 AWS X-Ray
PDF
20190319 AWS Black Belt Online Seminar Amazon FSx for Windows Server
PDF
Hadoop and Kerberos
PDF
Best Practices for Oracle Exadata and the Oracle Optimizer
AWS Fargate on EKS 실전 사용하기
初心者向けWebinar AWS上でのネットワーク構築
ELB & CloudWatch & AutoScaling - AWSマイスターシリーズ
AWS Black Belt Online Seminar 2017 AWS X-Ray
20190319 AWS Black Belt Online Seminar Amazon FSx for Windows Server
Hadoop and Kerberos
Best Practices for Oracle Exadata and the Oracle Optimizer

What's hot (20)

PDF
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
PPTX
What's new in apache hive
PDF
Feature Stores: Building Machine Learning Infrastructure on Apache Pulsar_Sim...
PDF
AWS glue technical enablement training
PDF
CJ프레시웨이 All-in 클라우드 전환 사례를 통해서 알아보는 Modernization성공 사례-오동규, 메가존 인프라 모더나이제이션 그...
PPT
Cassandraのしくみ データの読み書き編
PPTX
Scylla on Kubernetes: Introducing the Scylla Operator
PDF
AWS Black Belt Techシリーズ Amazon Redshift
PDF
Db2 Warehouse セッション資料 db tech showcase
PDF
深入淺出 autocomplete
PDF
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
PDF
AWS 시작하기 및 Amazon S3 살펴보기 (윤석찬) - AWS 웨비나 시리즈
PDF
[Games on AWS 2019] AWS 입문자를 위한 초단기 레벨업 트랙 | AWS 레벨업 하기! : 네트워크 - 권신중 AWS 솔루션...
PDF
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...
PDF
Apache Hbase バルクロードの使い方
PDF
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
PDF
[Outdated] Secrets of Performance Tuning Java on Kubernetes
PDF
AWS Black Belt Online Seminar AWS 認定クラウドプラクティショナー取得に向けて
PDF
데이터 분석가를 위한 신규 분석 서비스 - 김기영, AWS 분석 솔루션즈 아키텍트 / 변규현, 당근마켓 소프트웨어 엔지니어 :: AWS r...
PDF
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 - 김준형 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
What's new in apache hive
Feature Stores: Building Machine Learning Infrastructure on Apache Pulsar_Sim...
AWS glue technical enablement training
CJ프레시웨이 All-in 클라우드 전환 사례를 통해서 알아보는 Modernization성공 사례-오동규, 메가존 인프라 모더나이제이션 그...
Cassandraのしくみ データの読み書き編
Scylla on Kubernetes: Introducing the Scylla Operator
AWS Black Belt Techシリーズ Amazon Redshift
Db2 Warehouse セッション資料 db tech showcase
深入淺出 autocomplete
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
AWS 시작하기 및 Amazon S3 살펴보기 (윤석찬) - AWS 웨비나 시리즈
[Games on AWS 2019] AWS 입문자를 위한 초단기 레벨업 트랙 | AWS 레벨업 하기! : 네트워크 - 권신중 AWS 솔루션...
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...
Apache Hbase バルクロードの使い方
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
[Outdated] Secrets of Performance Tuning Java on Kubernetes
AWS Black Belt Online Seminar AWS 認定クラウドプラクティショナー取得に向けて
데이터 분석가를 위한 신규 분석 서비스 - 김기영, AWS 분석 솔루션즈 아키텍트 / 변규현, 당근마켓 소프트웨어 엔지니어 :: AWS r...
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 - 김준형 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
Ad

Similar to 2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variable .pptx (20)

PDF
20170813 django api server unit test and remote debugging
PDF
Modern PHP
PPTX
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
PDF
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
PDF
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
PDF
DevOps - CI/CD 알아보기
PDF
Meetup tools for-cloud_native_apps_meetup20180510-vs
PPTX
라즈베리파이로 슬랙 봇 개발하기
PDF
[232] 성능어디까지쥐어짜봤니 송태웅
PPTX
PHP Slim Framework with Angular
PPTX
LetsSwift(강민규스피커,안정민서포터).pptx
PDF
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
PPT
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
PDF
안드로이드 플랫폼 설명
PDF
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
PPTX
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
PPTX
처음 시작하는 라라벨
PPTX
피니엔진
PDF
[213]monitoringwithscouter 이건희
PDF
[AWS Dev Day] 실습워크샵 | Amplify 와 AI 서비스를 활용한 서버리스 기반 소셜 안드로이드 앱 만들기
20170813 django api server unit test and remote debugging
Modern PHP
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
DevOps - CI/CD 알아보기
Meetup tools for-cloud_native_apps_meetup20180510-vs
라즈베리파이로 슬랙 봇 개발하기
[232] 성능어디까지쥐어짜봤니 송태웅
PHP Slim Framework with Angular
LetsSwift(강민규스피커,안정민서포터).pptx
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
안드로이드 플랫폼 설명
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
처음 시작하는 라라벨
피니엔진
[213]monitoringwithscouter 이건희
[AWS Dev Day] 실습워크샵 | Amplify 와 AI 서비스를 활용한 서버리스 기반 소셜 안드로이드 앱 만들기
Ad

2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variable .pptx