[Flutter/Dart] Package 만들고 배포하기 (Library)

Tyger·2024년 1월 13일
3

Flutter Packages

목록 보기
1/3
post-thumbnail

📦 Package 만들고 배포하기 (Library)

이번 글에서는 Flutter에서 사용하는 라이브러리를 직접 만들고 배포하는 방법에 대해서 살펴보려고 한다.

Flutter 개발을 해보신 분이 아니더라도 모든 프레임워크에는 라이브러리가 존재한다. Flutter는 크로스 플랫폼 개발 플랫폼이다 보니 Dart 언어를 사용한 방식도 있고, 네이티브 언어를 사용한 방식도 있다.

가볍게 만든 Horizontal 구조에서 슬라이더로 이동하는 인디케이터 위젯을 직접 배포해 보도록 하자.

Package Types

Flutter Package에는 Dart Packages, Plugin Packages 이렇게 구분 되어 있는데, 이 둘의 차이는 Dart언어 외에 추가 플랫폼을 사용한 기능을 구현하냐 안하냐의 차이이다.

Dart Packages 타입은 오직 Dart 언어를 사용해서 만드는 flutter 패키지이다. 대부분의 패키지가 여기에 포함된다.

Plugin Packages는 플랫폼 기능을 사용해야 하는 경우, 네이티브 언어를 통해 flutter에서 기능을 사용하게 해주기 위해 배포된 패키지 타입으로, swift, kotlin 등의 플랫폼 언어를 추가로 사용해서 배포된 패키지 타입이다.

Dart Packages

General packages written in Dart, for example the path package. Some of these might contain Flutter specific functionality and thus have a dependency on the Flutter framework, restricting their use to Flutter only, for example the fluro package.

Plugin Packages

A specialized Dart package that contains an API written in Dart code combined with one or more platform-specific implementations.
Plugin packages can be written for Android (using Kotlin or Java), iOS (using Swift or Objective-C), web, macOS, Windows, or Linux, or any combination thereof.

Create

flutter create --org [organization] --template=[template] --platforms=[platforms...] -a [android_language] -i [ios_language] [package_name]

패키지 개발을 위해 프로젝트를 생성하는 기본 명령어 이다. 해당 명령어를 전부다 입력할 필요는 당연히 없고, 필요한 옵션만 넣어서 생성하면 된다.

먼저 옵션의 종류를 간략하게 살펴보도록 하자.

  • org 옵션
    Organization 설정으로, Reverse-DNS 규칙에 의해 패키지 명을 역순으로 자동 생성함.
  • template
    Template 타입으로, 해당 옵션은 필수 값임.
    Dart Package 개발 시에는 package, Plugin Package 개발 시에는 plugin을 넣어주면 됨.
  • platforms
    plugin에 해당하는 플랫폼 설정으로, 기본 값은 모든 플랫폼에 타겟됨.
    App 적용만 원하는 경우 "--platforms=android, ios" 이렇게 적용하면 됨.
  • -a
    plugin 배포시 android 개발 언어를 설정. 기본 값은 kotlin 언어 사용.
  • -i
    plugin 배포시 ios 개발 언어를 설정. 기본 값은 swift 언어 사용.

패키지 개발을 위한 프로젝트 생성 방법을 간단하게 살펴봤으니, Dart Packages 배포를 위해 프로젝트를 생성해 주도록 하자.

패키지 명은 고유하여야 하기 때문에, Dart packages에서 생성하고자 하는 패키지 명을 확인한 후에 정하시는걸 권장합니다.

터미널에서 생성하고자 하는 위치로 이동하여 아래 명령어를 입력하여 프로젝트를 만들어 주면 된다. 참고로 VS Code, Android Studio IDE를 사용하는 경우 GUI 환경으로 프로젝트를 생성할 수도 있다.

flutter create --template=package awesome_indicator

프로젝트 생성이 완료 되었다. 프로젝트 구조를 살펴보면, 기존 앱 개발시 생성한 프로젝트 구조와 거의 동일한 것을 확인할 수 있다.

lib 폴더에 파일을 들어가보면 기본 코드가 생성되어 있는데, 해당 코드를 지우고 패키지 개발을 위한 코드를 작성해주면 된다.

Plugin Packages 개발시에는 각각 플랫폼의 언어를 작성하고 Method Channel을 연결해 주면 된다.

패키지 개발을 위해 타 패키지 사용이 필요한 경우 pubspec.yaml에 패키지를 등록하고 사용하면 된다.

awesome_indicator.dart

test 폴더에서 Test Case를 작성하여 테스트 진행할 수 있는데, 우선은 작성하지 않았다.

void main() {}

Example

Package 개발에서는 디바이스 또는 시뮬레이터로 빌드해서 확인할 수가 없다. 결과물을 보면서 개발을 하기 위해 example을 생성하여 앱 개발을 하는 것과 동일하게 패키지를 개발하는 방법이 있다.

추가적으로 패키지를 다른 개발자가 단순히 확인하기 위해서라도 example은 제공하여야 한다. 이미 Dart packages 사이트에 접속해서 해당 패키지의 Git repository에 접속해 보면, example을 제공하고 있는 것을 알 수 있다.

Plugin Packages로 프로젝트를 생성한 경우에는 example이 자동으로 생성이 된다.

Dart Pakcages 타입으로 프로젝트를 생성 하였기에, example을 직접 생성해 주면 된다.
project 수준에서 터미널에 아래 명령어를 입려해주자.

flutter create example

example 프로젝트가 정상적으로 생성이 되었다.

lib/main.dart로 이동해서 빌드를 해보면 기존 앱 개발하던 것과 동일하게 개발을 할 수 있게 된다.

개발한 패키지를 import 해오려고 하면, example에서는 나타나지 않는다. 동일하게 패키지를 사용하던 것과 같이 pubspec.yaml에 패키지를 등록하여야 한다.

example/pubspec.yaml에서 새롭게 생성한 "awesome_indicator:"를 추가해주고, 아래 경로를 넣어주면 된다.

Publish

이제 직접 만든 패키지를 배포해 보도록 하자.

배포 전 작성해야 하는 부분이 조금 있는데, 언제든지 수정 가능하니 우선은 간단하게만 작성하도록 하자.

Information

먼저, pubspec.yaml 파일에서 상단에 있는 패키지 정보를 등록해 주자. 기본적으로 템플릿이 생성되어 있기에 해당 내용만 작성해 주도록 하겠다.

name: 패키지 명
description: 설명.
version: 버전
homepage: 홈페이지

네임은 실제 사용되는 패키지 명을 넣어주면 되고, 설명을 간단하게 작성해주자.

버전은 앱 버전 관리와 동일한 부분이기에, 각자가 사용하는 버전 규칙에 맞게 해주면 된다. 저는 아직 정식 배포를 하지 않을 것이기에, 0.0.1 상태로 두었다.

홈페이지는 일반적으로 해당 프로젝트의 Git repository를 넣어주면 된다. 홈페이지가 있는 경우 홈페이지를 제공하고 싶다면, homepage에 자신의 홈페이지 주소를 넣어주고, repository를 추가하여 깃 주소를 넣어주시면 된다.

name: awesome_indicator
description: Indicator that operates with horizontal scrolling !!
version: 0.0.1
homepage: https://github.com/boglbbogl/awesome_indicator

CHANGELOG.md

이번엔 버전별 로그를 작성해 주도록 하자.

project에 보면 CHANGELOG.md라는 파일이 있는데, 여기서 수정을 해주면 된다. 수정 방법은 IDE를 통해서 해도 되고, Github에서 직접 수정도 할 수 있다.

간단하게 초기 버전을 로그에 작성하였다.

[0.0.1]
* Initial version.

LICENSE

라이센스에 관련된 부분을 작성해 보도록 하자.

오픈소스 라이센스에 따라 패키지의 수정, 배포, 상업적 이용 등의 라이센스를 명시할 수 있다. 여기서는 라이센스에 대해서 알아보지는 않고, 모든 사용자에게 수정, 배포, 상업적 이용이 전부 가능한 MIT License로 명시하도록 하겠다.

실제로 라이센스 종류가 엄청 다양하고 많으니, 라이센스 부분이 궁금하신 분들은 구글에 검색해 보면 자세한 내용이 나온다. 필요에 따라 라이센스를 작성해 주면 된다.

패키지 깃허브에 접속해서 LICENSE 파일로 들어가보자.

아직 작성한 라이센스가 없으니, 편집을 해주도록 하자.

깃허브에서 템플릿을 제공하고 있다. 그걸 사용해 주도록 하자.
"Choose a license template" 버튼을 눌러주도록 하자.

"MIT License" 템플릿 사용을 원하기에, 왼쪽 탭에 템플릿을 선택하고 수정할 내용은 수정한 후에 "Review and Submit"을 클릭해 주면 된다.

마지막으로 변경된 사항을 Commit 해주도록 하자.

README.md

마지막으로 Readme를 작성해 주면된다. pub.dev에서 보는 상세 설명이 여기에 해당된다. readme에 패키지에 대한 자세한 설명과 디자인을 잘해주는 것이 좋다.

Readme에 대해서는 작성 방법을 공유한 좋은 글들이 많으니, 참고하셔서 작성하시면 된다.

Publishing

이제 pub.dev에 배포를 해보도록 하자. 배포 전 사전 테스트를 진행하여 프로젝트 구조의 이상이 없는 것을 확인한 후 배포를 진행하면 된다.

아래 명령어를 실행시키고 나면, 결과를 알 수 있는데 문제가 발생한다면 해당 에러는 수정하고 다시 진행해 주면 된다.

flutter packages pub publish --dry-run

이상이 없다면 배포를 해주자.

flutter packages pub publish

인증 요청이 나오면 해당 URL로 접속해서 인증을 진행하면 된다.

마무리

Flutter Packages 배포를 위해 프로젝트 생성 부터 배포까지 살펴 봤다.

해보면 어렵지 않으니 간단한 패키지라도 직접 해보시는 것을 추천드리며, 패키지의 기능도 우수해야 하지만 README 작성이 정말 중요하다 생각된다. 영어로만 작성해야 하다보니, 전달하고자 하는 내용을 전부 전달하기가 쉽지 않다 ㅠㅠ

다음 번에는 Plugin 배포에 대해서도 자세하게 살펴보도록 하겠다.

궁금하신 점은 댓글 남겨주세요 !

profile
Flutter Developer

0개의 댓글