지난번 앱 배포를 정상적으로 성공한뒤

배포 자동화에도 욕심이 생겨 진행해봤다.

 

기본적으로는 fastlane 공식 문서를 보며 따라했다.

https://docs.fastlane.tools/

 

fastlane docs

fastlane fastlane is the easiest way to automate beta deployments and releases for your iOS and Android apps. 🚀 It handles all tedious tasks, like generating screenshots, dealing with code signing, and releasing your application. You can start by creati

docs.fastlane.tools

친절하게 나와있다. 따라하면 되고
따라하다 막히거나 오류가 있다면
인터넷에 치면 많이 나온다.

 

내가 진행하면서 막혔던 부분이나. 해결 팁을 알려주겠다.

 

1.  AOS

먼저 안드로이드는 IOS에 비해 큰 어려움이 없었다.

한가지 팁을 주자면

Key.json, app-release.abb, pubspec.yami 와 같이 파일의 경로를 작성해야할때는

상대경로가 아닌 경로복사를 이용하는게 좋다.

나도 이걸로 자꾸 오류가 떠서 조금 당황했다...

platform :android do
  desc "Runs all the tests"
  lane :increase_version do
    yaml_file_path = "/Users/..../pubspec.yaml"
    data = YAML.load_file(yaml_file_path)
    version = data["version"]
    version_number = data["version"].split(".")[0].to_i
    new_version_number = version_number + 1
    new_version = "#{new_version_number}.0.0+#{new_version_number}"
    data["version"] = new_version
    File.open(yaml_file_path, 'w') { |f| YAML.dump(data, f) }
    end

  desc "Deploy a new version to the Google Play"
  lane :deploy do
    gradle(task: "clean assembleRelease")
    increase_version
    sh"flutter build appbundle"
    upload_to_play_store(aab: "/Users/.../build/app/outputs/bundle/release/app-release.aab")
  end
end

increase_version

 - pubspec.yami에 있는 버전을 1 증가한다.

주의할점이 있다면 이걸 실행할때마다 1 증가되오니

테스트로 돌렸던 버전 증가치를 배포전 낮춰주자

 

deploy

 - grandle 이부분은 배포전 디렉토리를 깔끔하게 정리해준다.

   따라서 해당 명령어는 꼭 deploy시작 바로 첫번째 줄에 써주는것이 좋다.

 - sh"flutter build appbundle"은 말그래로 배포에 필요한 .abb 파일을 빌드해준다.

- uplode_to_play_store(..)은 해당 경로에 있는 .abb 파일을 업로드 시켜준다.

 

 

2.  IOS

IOS가 좀 더 복잡하고 할게 많았는데

다행히 성공했다.

 

1. .env 파일은 ios/fastlane/  경로에 넣어줬다.

2. cocoapods, build_app, screeenshot 오류를 겪었다.

cocoapods의 경우

cocoapods(
repo_update: true,
use_bundle_exec: false
)

실행 마다 업테이트 명령어를 넣어 해결해 주었으며

 

build_app의 경우

build_app(xcargs: "-allowProvisioningUpdates"

처럼 xcargs 명령어를 넣어줬다.

 

screeenshot의 경우는

사이즈가 안맞는다 자꾸 오류가 뜨길래 그냥 스킵해줬다.

upload_to_app_store(
skip_screenshots: true,
)

3. version 오류

increase version을 했는데 자꾸만 안되어서 강제로 지정해줬다..

lane :release do
version_number = "2.0.1"

위 처럼 버전을 지정해주는 명령어를 했는데 안된다면 아래 명령어를 터미널에서 실행해보자

fastlane run increment_version_number version_number:2.1.0

 

이렇게 해주면 된다.

 

 

GDG in songdo
플러터 사이드 팀프로젝트가 끝나고

지금까지 약 한달 가량

 

혼자 프로젝트를 진행했다.

팀프로젝트에서는 디자이너 개발자가 각각 포지션에 맞는 역할에 집중해서 수행하면됬는데

혼자 하다보니.. 많은 어려움이 있었다.

UI 쪽으로 많은 신경을 쓰는 난.. 디자인 작업에 많은 시간을 썻던것같다.

사실 처음엔 10정도의 퀄리티를 갖는 앱을 구상했지만 내 욕심에 점점 기능은 추가되었고

구현하는 과정에 있어 많은 시간이 더 소요됐다.

 

사실 앱만 보면 별 기능 없다...

어떤 사람에겐 일주일이면 뚝딱 만들 앱이지만

초보인 나에겐 한달정도 걸린것이다.

 

더 많은 기능을 추가하고싶었는데

앱 출시를 더 미룰 수 없기에 그만 개발하고 출시했다.

앱 출시 만큼 중요한 포트폴리오는 없다고 생각했기 때문이다.

 

개인적으로 아주 만족스러운 앱이다.

첫 배포 앱인데 디자인적이나 기능적이나 현재 나에게 딱 맞는 수준인것 같다.

 

다음 앱은 뭘 만들면 좋을지 고민이 되면서

이제는 취업을 하여 빡시게 배워보고싶은 마음도 있다.

 

https://apps.apple.com/kr/app/task-us/id6445977626

 

‎task/us

‎직관적인 UI와 최소화된 기능들로 빠르고 효율적으로 일정을 관리하세요.

apps.apple.com

https://play.google.com/store/apps/details?id=com.taskus.taskus&pli=1 

 

쉽고 간편한 일정 관리 앱(task/us) - Google Play 앱

최소화된 기능으로 쾌적하고 빠르게 일정을 관리하세요

play.google.com

'코딩 > Flutter_miniproject' 카테고리의 다른 글

[Migration] Todo App  (0) 2024.02.19
[Mini_project] pomodoro TIMER  (0) 2022.12.27

정말 몇 가지 남지않았다.

그래서 주위 사람들에게 테스트겸 배포하고자 apk 파일을 만들어 뿌려보았다.

다행인지 주위에 안드유저가 좀 있다.

 

apk 파일 빌드는 아래 명령에로 하면 바로된다.

flutter build apk --release --target-platform=android-arm64
flutter build apk --debug --target-platform=android-arm64

 

release 와 debug의 차이점에 대해 간략하게 설명하면

 

release  -  디버깅 및 런타임 오류 보고 기능 비활성화, 앱 사이즈가 작음

debug - 디버깅 및 런타임 오류 보고 기능 활성화, 앱 사이즈가 큼

본인의 상황에 따라 선택해서 빌드하면된다.

 

명령어를 실행하면 파일이 저장된 경로가 보여진다.

 

지난번 Hero위젯을 이용해 popup Container를 구현했다. 

 팝업이 뜨고 다시 닫았을때 오른쪽 하단 시계 텍스트가
조금 깨지는 것을 볼 수 있다.

이런 디테일이 너무 신경쓰여서

계속 고민을 해보다 오늘 결국 해결에 성공했다.

 

 

 

 

 

 

 

 

 

방법은 아주 간단했다.

예를 들어

 A 위젯 <---> B 위젯

Hero을 적용시켯다고 하면

나는 페이지라우터를 이용하여 구현했기 때문에

B위젯의 컨테이너를  Material으로 한번 감싸줬다.

따라서

 A 위젯(Material X)<---> B 위젯(Material O)

왔다갔다하니 UI 엔진에서 문제가 생긴듯하다 (내 생각 ㅎㅎ)

 

A 위젯에도 Material로 한번 감싸주니 해결 완료됐다.

앱에 따라 다르겠지만

게임을 제외하고는 보통 세로로 사용할 것이다.

 

제작하고 있는 앱의 UI를 다그리고

혹시나해서 화면을 회전 시켰더니


오른쪽과 같이 레이아웃에 오류가 떴다..

해당 앱은 세로모드를 지원안해도 될꺼같아 화면회전을 막는 법에 대해 소개하겠다.

 

방법은 간단하다.

 

import 'package:flutter/services.dart';

해당 파일을 import 후

Widget build(BuildContext context)

이 안에 아래 코드를 추가해주면된다.

  SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);

위 코드를 간단하게 설명하자면 화면을 고정시키는 것이다. 

 

portraitUp - 정방향

landscapeRight :정방향에서 시계 방향으로90도 회전한 형태

portraitDown :정방향에서 시계 방향으로 180도 회전한 형태

landscapeLeft : 정방향에서 시계 방향으로 270도 회전한 형태

 


개인 프로젝트를 새롭게 시작하고

구현중에 있다.

현재 UI는 다 그렸는데 이제 DB 작업만 남았다..

앱 개발자를 준비하면 프론트, 백 둘다 빡시게 준비해야되는건가,,,

어렵다,,

 

오늘은 오늘 구현중 알게된 신박한 기능하나 소개하려고한다.

나는 보통 GetX를 이용하여 상태관리를 하고 있는데

수 많은 Get의 기능중

snackbar 이다.

간단한 사용법은

    Get.snackbar("저장 실패", "빈칸 없이 채워주세요",
          colorText: Mycolor().snackbarText,
          snackPosition: SnackPosition.TOP,
          backgroundColor: Mycolor().snackbarBg,
          icon: const Icon(Icons.warning_amber));

이며 설명이 필요한 부분은 따로 없어보인다.

이렇게까지 구현하고 테스트 해봤는데

사진과 같이 버튼을 막누르면 그 횟수만큼 계속해서 창이 나온다는점이다.

이를 해결하기 위해선

isSnackbarOpen를 써주면 된다.

 if (Get.isSnackbarOpen) {
      } else {
        Get.snackbar("저장 실패", "빈칸 없이 채워주세요",
            colorText: Mycolor().snackbarText,
            snackPosition: SnackPosition.TOP,
            backgroundColor: Mycolor().snackbarBg,
            icon: const Icon(Icons.warning_amber));
      }

코드와 같이 If문을 한번 걸어 현재 snackbar가 떠있는 상황인지 확인후 기능을 수행하도록

바꿔주면 아래와같이 해결된 결과를 확인할 수 있다.

 

+ Recent posts