1부에 이어 2부를 작성해보겠다.
오늘의 내용은 1부에서 이어지는 'Plugin의 폴더와 파일 뜯어보기' 로 시작해보겠다.
1부
2부
Flutter Plugin의 폴더와 파일들.
사실 내 개인적으로는 Flutter를 사용하는 가장 큰 장점은, 각각 OS에 Native언어를 사용하지 않고 개발을 진행할 수 있다는 점이라고 생각한다.
하지만 단점을 생각하면 Native언어를 모르면서 개발을 한다는것도 단점이라고 생각한다. 물론 Flutter에는 잘못이 없겠지만, 플러터만 맹신하고 네이티브를 등한시하면 그거대로 좀 아닌거같다는 생각이 든다.
어쨌든 서론은 뒤로하고, Flutter Plugin을 생성하도록 하자.
1부에 있는 명령어를 실행하여 만든다.
flutter create --template=plugin --platforms=android,ios -a java -i swift plugin_name
이에대한 자세한 설명은 1부를 참조하면 좋다.
이렇게 생성한 폴더를 Visual Studio Code에서 오픈하면 다음과 같은 화면이 보인다.
성공적으로 iOS와 Android가 생성된 모습이다. 각 폴더에 대해서 설명을 먼저 하고 들어가겠다.
android - ios
이 두개의 폴더는 각각 native에 연결되는 폴더이다. 즉 Flutter Plugin을 호출하면 연결되는 네이티브 코드들이라고 보면 된다.
example
이 폴더는 내가 생성한 Flutter Plugin (지금은 plugin_name)을 직접 테스트해볼 수 있는 곳이다. 내가 만든 플러그인이 정상적으로 호출이 되는지, 잘 불러와지는지 등등 실제로 다른 개발자가 내 플러그인 쓸때 어떻게 사용되는지 테스트할 수 있다.
lib
Flutter Plugin을 플러터 pubspec.yaml에 추가하면 가져와서 쓸 수 있는 dart 코드이다. 즉 이 lib에다가 native언어를 dart언어와 연결하여 만들고, 개발자들은 이 파일들을 import하여 사용하는 부분이다.
LICENSE
라이선스, pub.dev에 살펴보면
우측 하단에 보면 라이선스가 있다. 이렇게 자신이 어떤 저작권법상의 허가를 따르는지 명시하는 곳이다. Samsung Wallet의 경우에는 BSD-2-Clause를 따르고있다. 일반적으로 많이 쓰는 오픈소스 라이선스는 다음과 같다.
- BSD
- APACHE
- MIT
이 3가지가 오픈 라이선스에서 보편적으로 사용이 된다. 이 세가지가 비슷하면서도 약간씩 차이가 있다. 자세하게 쓰려면 내용이 길어지므로, 찾아보는걸 추천한다.
pubspec.yaml
Flutter를 개발하면 자주 들어가는 pubspec.yaml이다.
일반적인 플러터 프로젝트에서 보이는 pubsepc.yaml과 다르다. 하나씩 설명해주자면,
- name : 현재 Flutter Plugin의 이름을 나타낸다.
- description : 현재 Plugin의 간단한 설명을 나타낸다. Pub.dev의 우측에 있는 Metadata에 설명이 적어져서 보이게 된다.
- version : Plugin의 버전을 나타내며, pub.dev에 검색하면 '플러그인 + 버전' 으로 나오는데, 이때 버전이 여기에서 가져온다.
- environment : 현재 만드는 Plugin을 쓸 수 있는 버전을 알려주며, pub.dev에 올릴 경우 다른 개발자가 사용할 때 버전이 맞지 않으면 사용못할 수 있다. 그리고 주의할 점은, 플러그인이 지원하는 플러터 최대버전과 현재 플러터 버전보다 차이가 많이나는 경우는 흔히 볼 수 있는 pub.dev의 스코어 점수에 반영이 되어서 낮게 나올 수 있다.
예를들어, 내가만든 Plugin이 Flutter 2.0까지만 지원된다고 하면, pub.dev에서 자동으로 점수를 매길 때, 낮게 점수를 줄 수 있다는 뜻이다. - dependencies : 내가 이 Flutter Plugin을 작성할 때, 사용하는 다른 패키지들을 작성하는 곳이다. 다른 패키지들을 가져와서 조합을 해서 만들 수 있다는 뜻이다. 다만 이것도 주의할점이 있다. 내가 만든 플러그인에서 사용하는 패키지가, 내 플러그인을 사용하는 다른 개발자 분의 패키지와 충돌이 일어날 수 있다는 점이다. 충돌이 일어나면 내가 만든 플러그인 사용을 안 할 가능성이 높다.
예를들어, 내가만든 Plugin에서 shared_preference를 0.1.1을 사용하고 배포했다고 가정해보자. 다른 유저가 나의 플러그인을 사용하는데 그 유저는 shared_preference를 2.2.1을 사용한다면, 나의 0.1.1버전과 충돌이 발생하여 사용하지 못할 가능성이 크다.
따라서 최대한 다른 패키지를 가져와서 종속성을 높이는건 지양하는게 좋으며, 만약 사용한다면, 다른 패키지들의 버전이 올라갈때마다 버전업하여 반영하고 배포하는게 좋다. 이 또한 pub.dev의 점수에 반영된다. - dev-dependencies : 개발하면서 사용하는거에 대한 내용이다. 원하는 린트를 적용할 수 있다.
- flutter 아래부분 : plugin의 native연결되는 부분들을 말한다. 만약 plugin의 android의 번들 이름을 'com.test.plugin_sample ' 로 바꾼다면, 이 부분도 바꿔주어야 한다. ios도 마찬가지.
CHANGELOGO.md
나의 플러그인이 버전 업데이트되면서 유저들에게 보여주어야하는 업데이트 내용이다.
pub.dev의 Changelogd의 탭에 보여지게 된다.
다음 3부에서는 진짜로 native와 연결하는 방법을 알아보도록 하자.
'My Project > Samsung Wallet(Flutter)' 카테고리의 다른 글
Samsung Wallet Flutter Plugin 개발기 [1부] (0) | 2023.08.29 |
---|