방금 VSCode와 플러터를 설치하고 튜토리얼을 따라 새 프로젝트를 생성했다면 회사 도메인이 기본 com.example로 설정될 것이다. 새 프로젝트 이름과 합쳐져서 많은 부분에 하드코딩 되어 버리는데 이걸 나중에 자신의 도메인으로 바꿀려고 하면 여러 부분들을 찾아서 일일이 바꿔줘야 한다. 많은 플러터 설치 튜토리얼에서 이 부분을 언급하고 있지 않아 본격적으로 앱 개발을 위해 새 프로젝트를 생성해서 개발을 시작하려 했을 때 처음으로 만난 문제이다.
개발 환경 소개
OS: Mac OS X Catalina 10.15.4
IDE: VSCode 1.45.1
Flutter: 1.12.13+hotfix.9
Dart: 2.7.2
테스트일자: 2020년 6월 7일
새 프로젝트 생성을 위한 새 Organization 설정하기
VSCode에서 상단 메뉴의 Code->Preferences->Settings 로 들어가서 'flutter create organization'으로 검색하면 위와 같이 Dart: Flutter Create Organization이 검색결과로 나온다. 'Edit in settings.json'을 눌러 편집화면으로 간다.
null로 설정된 dart.flutterCreateOrganization에 자신의 도메인 이름을 설정한다.
이제 View->Command Palette (커맨드+쉬프트+P)를 눌러 flutter:new project로 새 프로젝트를 생성하면 com.example이 아니라 설정한 Organization으로 프로젝트가 만들어진다.
이미 작성된 코드의 Organization 바꾸기
이건 프로젝트 이름이 baby_names이고 Organization 세팅이 안되어 있는 경우에 일일이 찾아 수정해줘야 할 파일들이다. 안드로이드는 소스 디렉토리 이름도 바꿔줘야 한다. 여간 귀찮은게 아니다. git으로 프로젝트가 잘 관리되어 있다면 새 프로젝트를 올바른 Organization 설정으로 생성해서 패치를 옮겨 임포트하는 것이 훨씬 편할 수 있다.
baby_names % grep -r "com.example" *
android/app/build.gradle: applicationId "com.example.baby_names"
android/app/src/profile/AndroidManifest.xml: package="com.example.baby_names">
android/app/src/main/AndroidManifest.xml: package="com.example.baby_names">
android/app/src/main/kotlin/com/example/baby_names/MainActivity.kt:package com.example.baby_names
android/app/src/debug/AndroidManifest.xml: package="com.example.baby_names">
ios/Runner.xcodeproj/project.pbxproj: PRODUCT_BUNDLE_IDENTIFIER = com.example.babyNames;
ios/Runner.xcodeproj/project.pbxproj: PRODUCT_BUNDLE_IDENTIFIER = com.example.babyNames;
ios/Runner.xcodeproj/project.pbxproj: PRODUCT_BUNDLE_IDENTIFIER = com.example.babyNames;
일일이 손으로 직접 바꿔도 되지만 내가 사용한 방법은 다음과 같다.
첫째, 소스트리가 이미 빌드되어 있는 경우 flutter: clean project부터 한다.
둘째, 커맨드라인 명령어 sed를 사용해 파일내 문자열 치환을 하고 안드로이드의 경우 소스디렉토리 이름도 바꾼다.
View->Command Palette 에서 flutter: clean project 를 한다.
% cd project_directory
% find ios android -type f -exec sed -i '' 's/com.example/com.moley/g' {} \;
프로젝트 디렉토리 아래 ios와 android디렉토리 아래의 파일들 중에 com.example 문자열을 com.moley로 치환한다.
파일 내용을 바꿔버리므로 git을 사용하지 않는다면 원본 백업을 꼭 하기 바란다. 실수를 하더라도 원본 파일을 날리는 사고를 피할 수 있다.
sed 명령어 포맷이 mac os x 와 linux가 살짝 다르므로 주의 할 것.
% cd android/app/src/main/kotlin/com
% mv example moley
디렉토리 이름을 example에서 moley로 바꾼다.
이제 다시 빌드를 하면 바뀐 Organization으로 실행된다.