플러터 앱을 테스트 하기에 가장 좋은 방법이 뭘까?

apk 파일을 보내서 설치 테스트 하는 것은 뭔가 찜찜하다.

플레이 콘솔에서 공식 지원하는 내부테스트 방법으로 해보고자 한다. (apk 대신 aab - android app bundle ? )

플러터 기본 빌드 기능에서 "Build App Bundle" 이 있어서 해봤다.

플레이 콘솔에서 앱 업로드를 해보니,

디버그 모드로 서명한 APK 또는 Android App Bundle을 업로드했습니다. 
출시 모드로 APK 또는 Android App Bundle에 서명해야 합니다.

위와 같은 메시지. ( 서명 키를 만드는 방법 - https://developer.android.com/studio/publish/app-signing#generate-key )

위 방법중 "Generate Signed Bundle / APK " 플러터 프로젝트에는 메뉴가 없다.

android studio 를 플러터 프로젝트 로 열어서 그렇다.
프로젝트의 android 라는 폴더를 안드로이드 스튜디오에서 File / Open 으로 열면 해당 메뉴가 보인다. (즉, android 프로젝트 로 연다.)

키스토어 관련 정보를 입력하고,

일단 된 듯 하여, 플러터 프로젝트에서 빌드해서 업로드 해봐도 동일한 메시지가 나왔다. 뭔가 키스토어 연결이 안된 듯 하다.
(위 링크중 https://developer.android.com/studio/publish/app-signing#sign-auto 부분을 설정한다.)
요약하자면, singing config 를 만들고 => Build Type 에 해당 config 를 맞추고 =>

최근 안드로이드 스튜디오의 메뉴 위치는 살짝 다르다.

일단 release-test 로 릴리즈 테스트 로 만들었다. (기존 debug 설정에 넣어도 될 듯 함)
- 아! 화면에는 오타가 암튼 중요한 건 아니니 -

Build Variants 에 해당 Signing Config 를 선택해준다.

여기까지 하고, 플러터에서 빌드 => 업로드 . 다시 에러.

테스트 빌드도 세부적인 것을 많이 체크하나보다. 암튼 저것도 맞춰준다.

 

저것까지 맞추고 다시 업로드.

OK 성공.

 

그러나.

.

.

내부 테스트를 위해 할일이 많군. ( 경고 쪽은 안내대로 해주면 OK)

오류 => 계정문제 는 최근에 계정 등록해서 인증이 완료되지 않았다.

위 절차를 해야 한다.

근데, 관련 필요 서류로 할 만한 것이 없다.
오프라인 서류는 당연히 없고, 온라인 서류로 발급 될 만한 것을 찾아봐야 겠다.

=== 일단 될만한 것이 있어 시도 해본다. ===

위 서류 예시에는 없지만, 국세청에서 부가세 우편물에 이름/주소가 있어서 시도해본다.(공공요금 청구서에 해당하려나?)

과연 승인이 떨어질지...

 

[추가+2일]

승인이 되었다. - 영업일 기준 1일 이내에 처리되는 듯 하다(주말이 끼어 있어...)

내부테스터 로 출시 후에 설치 시도를 해보았다.

그런데, 아래 메시지 와 함께 설치가 안된다.

 

개발용 기기에 설치를 하려고 한 듯 해서, 폰에서 설정 > 앱  메뉴에서 해당 앱을 삭제 했다.

그래도 안된다.  "모든 사용자에서 삭제" 로 해야 한다고 하는데, 그 부분 때문일까?

위 현상이 안드로이드 스튜디오에서 Run 할때도 이상현상이 발생한다.

여기서 멈춘다. Install 로 안 넘어간다.

 

[설치 이상 현상 조치]

adb 로 직접 폰에 접속해서 조치 하기로 했다.

무선 디버깅 / USB 기기 연결 등 한 후에

adb shell
으로 접속

pm list packages | grep "패키지 명"

위 명령 하여 패키지 명을 알아낸다.

pm uninstall "전체패키지명"

예시) pm uninstall com.example.myapp


한번에 해도 된다.

adb shell pm uninstall com.example.myapp

위 명령으로 조치 후 - 설치 시도를 해보니 정상 설치 된다.

 

==>

그런데, 실제 앱 테스트 하니, 인터넷 접속이 안되는지, API 서비스 연결이 안되는지 , 정상동작 하지 않는다.
릴리즈 용 권한설정이 빠진것일까?

더 알아봐야 겠다.

 

[추가 - 역시 권한 문제]

디버그 쪽에는 자동으로 들어가 있는데, 릴리즈 시에는 없으니, 인터넷이 꼭 필요한 앱은 넣어줘야 한다.

다시 내부 테스트 릴리즈 해보니 정상 동작 함.

그런데, 개발기기에서는 위 adb shell pm uninstall 을 매번 해줘야 하네. (불편하군)

 

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

아이폰 무선 디버깅을 해보고 있다.

요약하면

1. 아이폰 맥북/맥미니 등에 연결
2. xcode 실행 => 메뉴 window / devices and simulators (Connect via network 체크)
3. 아이폰 에서 기기 신뢰
4. 아이폰 설정 => 개인정보 보호 및 보안 => 개발자모드 (위 3을 해야 보임)
5. 개발자 모드 끔 => 켬 (재부팅 필요)
6. 다시 xcode 실행 => xcode 에서 연결 확인 (devices 에 지구본 모양?)

 

플러터에서 Run 하면 다음과 같은 메시지

════════════════════════════════════════════════════════════════════════════════
No valid code signing certificates were found
You can connect to your Apple Developer account by signing in with your Apple ID
in Xcode and create an iOS Development Certificate as well as a Provisioning 
Profile for your project by:
  1- Open the Flutter project's Xcode target with
       open ios/Runner.xcworkspace
  2- Select the 'Runner' project in the navigator then the 'Runner' target
     in the project settings
  3- Make sure a 'Development Team' is selected under Signing & Capabilities > Team. 
     You may need to:
         - Log in with your Apple ID in Xcode first
         - Ensure you have a valid unique Bundle ID
         - Register your device with your Apple Developer Account
         - Let Xcode automatically provision a profile for your app
  4- Build or run your project again
  5- Trust your newly created Development Certificate on your iOS device
     via Settings > General > Device Management > [your new certificate] > Trust

For more information, please visit:
  https://developer.apple.com/library/content/documentation/IDEs/Conceptual/
  AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html

Or run on an iOS simulator without code signing
════════════════════════════════════════════════════════════════════════════════
Error: No development certificates available to code sign app for device deployment

맥에서 이렇게 뜨면서 안된다.(앱을 전송하는데, 개발자 인증에 이상이 있는 듯 )

 

아마도 애플 개발자 계정 세팅을 해야 하는 듯 하다.

[일단 개발자 계정 등록 전까지 정리 보류]

 

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

ubuntu 16.04  터미널에서 로그파일등에서 주요 키워드를 볼때 색상을 표시하고자 한다.

watch --color -n 10 \
 'bash your-program-run.sh |  \
GREP_COLOR="01;33" grep --color=always -i -e "Warnning.*" -e "^" | \
GREP_COLOR="01;35" grep --color=always -i -e "Fail.*" -e "^" | \
GREP_COLOR="01;31" grep --color=always -i -e "Alert.*" -e "^"  \
 '

프로그램 실행 명령이 출력으로 나올 때 grep 으로 색상을 표시한다. ( --color=always )
GREP_COLOR 로 키워드 별로 색상을 다르게 줄 수 있다.
(색상코드는 여기 참조 : https://chrisyeh96.github.io/2020/03/28/terminal-colors.html )

또한 -e ".*Keyword.*" 처럼 하면 해당 키워드가 나온 모든 줄이 되고, -e "Keyword" 를 하면 해당 키워드만 색상표시된다.

그런데, 문제는 watch 를 조합하면 색상 표시가 안된다.(우분투 16.04)

동일 명령을 ubuntu 22.04 에서는 정상으로 나온다.

터미널에서 색상코드(ansi code) 표시를 제대로 처리 못하는 것 같다.

ㄴ정상인 경우 코드
비정상 처리된 코드

우분투 16.04 의 watch 버전은 3.3.10 버전 ( 22.04 는 3.3.17 버전이다)

 

# 해결 방안

방법1. 정상동작 하는 터미널에서 원격으로 접속 명령을 내린다.

watch --color -n 10 'ssh {your-username}@{your-server} {원래 명령}'

위 처럼 해서 watch 가 색상코드를 정상적으로 처리하도록 한다.

 

방법2. watch 버전을 해결된 버전으로 소스 컴파일 한다.

위 방법이 뭔가 찜찜하다면, 소스를 직접 컴파일한다.

소스 : https://gitlab.com/procps-ng/procps/-/releases/v3.3.13

해당 릴리즈의 Changelog 를 보니

watch: Support ANSI 39,49 reset sequences              issue #73

가 해당 버그인 듯 싶다.

암튼 소스를 받고 컴파일 한다.

wget https://gitlab.com/procps-ng/procps/-/archive/v3.3.13/procps-v3.3.13.tar.gz

tar xvzf procps-v3.3.13.tar.gz
cd procps-v3.3.13/

sudo apt install autoconf libtool autopoint libtool-bin ncurses-dev

./autogen.sh
./configure
make

설치는 make install 으로 하면 /usr/local/bin 으로 설치가 될 것이다.

그런데, 이 경우 watch 만 필요하니 $HOME/bin 디렉토리에 복사해서 사용했다.

정상적으로 색상이 나오는 것을 확인했다.

 

방법3. 상위버전 deb 패키지에서 watch 파일을 추출한다.

위 방법2 로 소스컴파일 하니, 문제는 한글이 watch 를 거치면서 사라져 버린다. ㅜㅜ

상위 deb 패키지에서 추출하기로 한다.(현버전 16.04 => 18.04 의 패키지)

상위버전 패키지 - https://launchpad.net/ubuntu/+source/procps/2:3.3.12-3ubuntu1.2/+build/17397008

procps_3.3.12-3ubuntu1.2_amd64.deb (219.4 KiB)

하단의 deb 파일을 다운로드

패키지를 설치하면 다른 이상이 있을 수 있으니, watch 실행파일만 추출한다.
(참조 : https://www.cyberciti.biz/faq/how-to-extract-a-deb-file-without-opening-it-on-debian-or-ubuntu-linux/ )

ar x procps_3.3.12-3ubuntu1.2_amd64.deb

tar xvJf data.tar.xz

cp usr/bin/watch $HOME/bin

이제 한글도 제대로 나온다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

얼마전 알리익스프레스에서 행사를 해서 몇개를 구매해봤다.(처음 써봄)

알리 / 테무 등이 핫하다고는 하지만, 왠지 꺼려져 안 써봤었는데, 행사를 해서 일단 시도해봄
그러나 가급적 저가 제품들로 시도

1. 쇼핑광(?)은 아니라서 제품들이 싼건지는 모르겠다.

2. 전자제품쪽들은 어느정도 상향편중화 된 듯 하다. (배송온 제품들이 나쁘지는 않다.)

3. 일주일 만에 오니 좋을 것 같다. (예전 악명?으로 한달넘게 걸린다는 둥 , 잊을 만하면 온다는 둥 들은.. - 오래된 이야기 인가?)

4. 아직 덜 온 제품들이 있지만, 잘 오길. ..

5. 문제는 조그만 책장 하나를 주문했는데, 파손되어 왔다. ㅜㅜ

01234

일단 박스가 제품을 보호할 수 없는 수준. 그냥 손으로 뜯어지는 수준.
제품 일부가 파손 되었다.

아마도 배타고 왔을텐데, 제품 위에 다른 제품이 눌려져 있으면 무조건 파손될 것 같은 포장상태다.

---

과연 이런경우 어떻게 처리될까?

반품이 될려나?

01

일단 절차대로 신고를 해봤다.

아마도  구매자 <==> 알리 <=> 판매자  의 구조라, 신고하면 일단 알리에서 일방적? 으로 조치하는 것 같다.(대부분 마켓이 그렇겠지만)

반품신고를 하니, 바로 다음날  현지(국내) 택배-우체국-에서 반품접수 되어 온다고 한다. 헐. 준비도 안했는데?
최소한 판매자 피드백이 온 후 처리될 줄 알았는데,( 알리가 일방적인 조치를 하는 형태인듯 하다)
심지어 알리측 피드백도 없다. 그냥 프로세스 진행.

박스 까지 손상되어 그대로 다시 보낼 수도 없고, 책장이라 세로로 긴 박스가 필요하다.

결국 조치할 수 없어, 일단 반품취소 를 했다. 주말후 다음주에 다시 시도를 해볼까 고민중.(어쩌면 반품 포기 할지도 ㅜㅜ )
반품을 하려면 미리 준비해놔야 할 듯 하다.(구매 전에 미리 생각을 해야 할려나?)
아니면 반품할 생각은 아예 안하는게 맞나?

그러고 보니,  구매할 때 가구쪽 은 제품 값보다 배송비가 몇배 되는 제품들이 있어서 이건 뭐야 했는데, 이제 생각해보니 왠지 이해가 간다.

 

결론) 아무래도 알리는 파격적인 할인제품이 있지 않는 한 이용하지 않을 듯 하다.

 

[추가]

셀러에게서 답변이 왔다. 그러나.

이건 뭐지? 그냥 의미없는 답변.

피드백은 없고, 그냥 프로세스를 따르라는 이야기.

아! 모르겠다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

오래된 서비스가 돌아가는 머신이 있다.

ubuntu 10.04 버전이니 14년이 넘어가는 머신 - 리얼서버 => 가상서버 로 몇번 옮겨지기도 했다.

새버전으로 바꾸기에는 레거시 코드가 있어서 그냥 돌리고 있다.

리얼 => 가상 서버로 옮겨지면서, 가상머신 내부는 최소의 용량으로 두고, 데이터는 외부로 두고 nfs 로 마운트해서 사용하고 있다.

재부팅할 때 - 아래 부분에서 딜레이가 발생한다.

원인을 찾아보다가, 보아하니 nfs 마운트한 위치를 bind 로 재마운트 한 부분에서 딜레이가 발생하는 것 같다.

# apache logs
/data8/apache2                /var/log/apache2   bind    bind,rw,defaults  0  2

/data8 이 nfs 로 마운트 된 위치 , 그것을 mount bind 로 했다.

재부팅 reboot / 종료 halt 시에 딜레이가 발생한다. ( 이 부분이 ubuntu 상위 버전에서는 일어나지 않는 듯 하다)
10.04 버전에서 이상현상.(다른 모든 버전을 체크하지는 못 함 - 비슷한 환경을 구성한 14.04 은 정상 )

종료프로세스인 /etc/rc6.d 부분이

umount 코드들이 실행되지만, mount bind 는 제대로 언마운트를 못하는 듯 하다.

그래서

S22umount-work-nfs -> ../init.d/umount-work-nfs*

위 파일을 만들어 줬다.

# cat /etc/init.d/umount-work-nfs 
#! /bin/sh
### BEGIN INIT INFO
# Provides:          unmount work nfs
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop:      6
# Short-Description: Umount nfs work dir before reboot.
# Description:
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/lsb/init-functions

do_stop () {
	# Message should end with a newline since kFreeBSD may
	# print more stuff (see #323749)
	log_action_msg "Will umount all nfs work dir - before restart"
	umount /var/log/apache2 
}

case "$1" in
  start)
	# No-op
	;;
  restart|reload|force-reload)
	echo "Error: argument '$1' not supported" >&2
	exit 3
	;;
  stop)
	do_stop
	;;
  *)
	echo "Usage: $0 start|stop" >&2
	exit 3
	;;
esac

do_stop 부분에 bind mount 한 위치를 umount 해준다.

10.04 버전을 아직도 쓰실 분이 얼마나 있겠냐마는 ㅜㅜ

난 여러버전을 쓰고 있구나. 10.04 / 14.04 / 18.04 .. 최근 22.04 도 ,  곧 나올 24.04 도 쓰겠군.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,