ios/Podfile
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == 'AdFitSDK'
`xcrun --sdk iphoneos bitcode_strip -r Pods/AdFitSDK/Frameworks/AdFitSDK.framework/AdFitSDK -o Pods/AdFitSDK/Frameworks/AdFitSDK.framework/AdFitSDK`
end
end
end
그런데, 빈(초기화된) 서버가 아니라, 이미 운영중인 서버에 세팅하려고 할 때 주의할 점을 정리한다.
테스트로 벌쳐(vultr)에서 우분투 / 센토스 등 가상서버 (초기화) 세팅 후 원격서버 적용해봤다. 빈 서버는 별 이상없이 잘 세팅 된다. OS 버전별로도 잘 적용해준다. ( apt , yum 등 다른 환경을 잘 처리해주는 듯 하다)
뜬금 광고 시간.(아래 링크로 최초 가입하시면 300$의 크레딧 -30일내사용- 을 받아서 사용해 볼 수 있습니다.)
30일동안 사용해보고 괜찮으면 연장해서 사용하면 좋을 듯 하다.
현재의 나의 환경은?
우분투 서버에 nginx 를 사용하여 웹서버로 운영중이다. 사용중인 포트는 80 포트와 443 포트 두개를 사용한다. 그런데, coolify 원격서버로 세팅하려고 하면, proxy 설정 부분에서 아래와 같은 에러가 나면서 완료가 되지 않는다.
coolify 는 80 / 443 포트를 사용하기 때문에 nginx 가 이미 해당 포트를 사용하고 있어서 에러가 나는 것이다.
어떻게 nginx 를 사용하면서 coolify 원격서버로 활용할 수 있나요?
먼저 원격서버의 nginx 포트를 바꿔준다. (아래와 비슷할 것이다.) 기존 https 포트인 443 을 8443 으로 변경했다.
cat /etc/nginx/sites-enabled/your-site.conf
server {
server_name your-site.com;
...
...
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/your-site.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/your-site.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
포트 변경 : 443 => 8443
server {
...
listen 8443 ssl; # managed by Certbot
...
}
변경 후 nginx 재시작
systemctl restart nginx
위처럼 80/443 포트를 사용하는 관련된 nginx 설정을 변경해주고, nginx 를 재시작 해준다.
coolify 관리페이지의 Server => Proxy 부분에서 (실패 지점) 일단 Proxy 서버를 Caddy 로 바꿔준다.
Caddy 를 이용해서 기존 웹서버 경로(도메인)로 우회(변경) 하는 설정을 할 것이다.
웹서비스 사용자 => nginx (80/443)
의 흐름으로 접속하게 되는데, 이를 coolify (caddy) 가 받아서 변경된 nginx 포트로 넘겨주는 설정을 해준다.
웹서비스 사용자 => coolify,caddy(80/443) => nginx (8080/8443)
Coolify 에서 Caddy 설정을 해준다.
coolify 관리메뉴 Server => Proxy 메뉴에서 Dynamic Configurations 에서 설정을 해준다.
caddy 설정 살펴보면, 기존 nginx 기능을 모두 할 수 있는 듯 하다. 즉, nginx 를 대체할 수도 있으니, 설정을 살펴보고 적용해도 된다.
내 경우는 coolify 원격서버 용도를 계속 사용할지 불확실해서, 한서버에 nginx/coolify 를 같이 운영하기로 했다. 또는 기존 nginx 로 세팅했던 사이트를 coolify 도커 기반으로 바꾸는 것도 재미있을 듯 하다.(이 부분도 하게 되면 별도 포스팅으로 )
[추가 - feat. certbot]
위 설정을 하게 되면, 기존 nginx 에 certbot 이 설정된 경우 80 port 로 접속이 안되어 certbot renew 가 실패하게 된다.
coolify 는 로컬서버 뿐 아니라, 원격지 서버를 등록해서 앱을 배포해서 사용할 수 있다. 서버 사양을 분산하거나, 프로젝트별로 분리해서 관리하는 등 여러가지 이유로 원격서버에 설치할 필요가 생긴다. 서버는 여러개가 될 수 있지만, 전체를 coolify 에서 통합관리하기에 불편하지는 않다.
원격서버는 클라우드 서버일 수도 있고, 리얼서버일 수도 있다. 인터넷 접속할 수 있다면 모두 등록 가능하다. 원격서버 등록은 크게 어렵지는 않다. 단, 원격접속 설정 한가지만 사전 등록해준다.
coolify 가 원격서버에 접속할 수 있도록 ssh key 등록을 해준다.(아래 이미지의 localhost's key )
ssh key 를 원격지서버에 등록해준다.
어떤 key 를 등록해줘야 하는가? (publick key 등록)
coolify 의 Keys & tokens 메뉴에서 아래 이미지의 표시한 부분에서 Public Key 를 복사한다.(아래는 일부지만, 전체를 복사)
원격지 서버에 접속해서 .ssh/authorized_keys 에 해당 Public Key를 입력해준다.
다음 진행하기 전에 원격서버가 웹(80/443 포트)서버로 이미 사용중이라면 정상설치가 안될 수 있다.
원격 서버에 도커엔진 설치하기
위 Validate Server & Install Docker Engine 버튼을 클릭하면, 서버에 접속가능한지 체크하고, 필요한 도커관련 설치를 한다.
특별한 이상이 없다면, 위처럼 단계가 처리된다.
원격 서버를 등록한 후에는 coolify 앱 등록 / 배포등을 진행하면 된다.
Products => Resources => (앱 또는 서비스) => [서버선택시 등록한 원격 서버 선택] => Configuration => Deploy
위와 같은 단계로 진행하는데, 중간단계에 설치/배포할 서버를 원격지 서버로 선택하면 된다.
[활용방안]
이 작업을 하는 이유는 기존의 단독으로 운영되는 스프링프로젝트 서버가 있다. 접속이 많을 때 서버가 다운되는 현상이 있어서 어떻게 조치할 까 생각중인데, 스프링앱을 일부 분리해서 도커에 올려 부하 분산을 할려고 구상중이다. 접속이 많은 현상이 항상 그런 것이 아니라, 간헐적으로 나타나기 때문에 앱을 신규 등록 했다가 다시 삭제 하는 형태로 유동적으로 운영할려고 한다.
[추가]
혹시 위 원격서버 등록시 다음과 비슷한 에러를 만난 경우
기존에 nginx 로 80/443 포트를 사용하던 원격서버에 세팅하는 경우 위와 같은 에러를 만나게 된다. 관련 조치는 nginx 설정을 다른포트(8080/8443 등)로 바꾸고 coolify 쪽에서 proxy 설정을 연동해줘야한다. 즉, coolify 가 80 / 443 포트를 컨트롤 하도록 해줘야 한다. 이 부분은 별도로 포스팅 하도록 하겠다.
# sudo -u postgres pg_ctl -D /Library/PostgreSQL/16/data/ status
pg_ctl: server is running (PID: 83175)
/Library/PostgreSQL/16/bin/postgres "-D" "/Library/PostgreSQL/16/data"
디비 서버 중지 / 실행
$ sudo -u postgres pg_ctl -D /Library/PostgreSQL/16/data/ stop
waiting for server to shut down.... done
server stopped
$ sudo -u postgres pg_ctl -D /Library/PostgreSQL/16/data/ start
waiting for server to start....
2024-09-08 23:43:17.987 KST [83267] LOG: redirecting log output to logging collector process
2024-09-08 23:43:17.987 KST [83267] HINT: Future log output will appear in directory "log".
done
server started
그런데, dockerfile 내에서 git clone 으로 소스를 가져와서 하는 방법이다보니, github webhook 를 처리하기 어려운 부분이 있다.
그래서 coolify 에서 github app 을 세팅해서 사용하는 방법을 사용하기로 한다.
# coolify 프로젝트 ( + New Resource )
with GitHub App 으로 선택한다.
처음에는 +Add GitHub App 으로 앱등록을 해준다.(해당 방법은 아래에 따로 설명)
등록된 앱을 선택하고, Load Repository 를 하고, Build Pack 을 Dockerfile 으로 선택하고 다음으로 넘어간다.
기존에 봤던 설정화면 - 본인에 맞는 입력사항을 입력하고 Save
이전 글의 Dockerfile 이 차이가 있는데, 그 부분은 아래 깃허브 앱 등록 부분을 정리 후에 마지막에 설명한다.
반응형
# GitHub App 등록
Create a new Application 에서 +Add GitHub App 를 클릭하거나, Coolify 좌측메뉴의 Sources 메뉴를 들어간다.(+Add)
적당한 이름을 입력하고, Continue ..
Webhook Endpoint 부분에 github 쪽에서 접근가능한 URL 을 선택하고, Regiser Now
깃허브로 이동한다. ( 앱을 생성하는 절차 )
다시 coolify 로 이동해서, Install Repositories on GitHub 를 클릭한다.(세부 정보 입력으로 이동)
그러면 다시 깃허브로 이동해서 세부적인 설정을 하게 된다.
본인 깃허브 계정의 전체 저장소 또는 프로젝트를 선택할 수 있다. (Install 으로 Github App 을 생성한다.)
다시 coolify 로 이동하면, 설정된 앱을 확인할 수 있다.(아래에서 따로 추가 설정할 것은 없고, 완료 화면)
해당 App 등록이 완료되면, 초기에 Create a new Application 부분에 해당 앱이 나오게 된다(선택하여 다음 진행)
# Dockerfile 설정.(깃허브 프로젝트 소스내에 포함)
예전 글(https://blog.1day1.org/719)에는 Dockerfile 내에 git clone 으로 소스 다운로드하는 형태였는데, Github App 연동 방식은 저장소를 연결해서 소스에 접근할 수 있어, 다운로드 단계를 제거 한다.
# 빌드 스테이지
FROM node:22 AS builder
# 작업 디렉토리 설정
WORKDIR /usr/src/app
# pnpm 설치
RUN npm install -g pnpm
# 모든 소스 파일 복사
COPY . .
# 의존성 설치
RUN pnpm install
# 앱 빌드
RUN pnpm run build
# 프로덕션 스테이지
FROM node:22-slim
# 작업 디렉토리 설정
WORKDIR /app
# pnpm 설치
RUN npm install -g pnpm
# 빌드 스테이지에서 필요한 파일들만 복사
COPY --from=builder /usr/src/app/package*.json ./
COPY --from=builder /usr/src/app/pnpm-lock.yaml ./
COPY --from=builder /usr/src/app/dist ./dist
# 프로덕션 의존성만 설치
RUN pnpm install --prod
# 프로덕션 모드로 실행
CMD ["pnpm", "run", "start:prod"]
# 포트 설정 (NestJS 기본 포트는 3000)
EXPOSE 3000
도커의 이미지 빌드시 두단계를 거치도록 분리했다. (multi-stage 빌드 라고 하는 듯 하다.)
빌드 단계 + 프로덕션 단계. 코드가 복잡하지는 않아 쭈욱 한번 보면 파악이 될 것이다.
깃허브 webhook 설정해서 git push 하면 자동으로 배포하게 되도록 설정한다. 일단 여기까지... webhoook 설정은 다음에...
Github App 방식으로 하니, 따로 webhook 설정 안해도 되네. 패스... 끝.
# 베이스 이미지로 Node.js 사용
FROM node:22
# 작업 디렉토리 설정
WORKDIR /usr/src/app
# git clone
RUN apt-get update && apt-get install -y git
RUN git clone https://github.com/your-account/nestjs-practice-netflix .
# pnpm 설치
RUN npm install -g pnpm
# 의존성 설치
RUN pnpm install
# 앱 빌드
RUN pnpm run build
# 프로덕션 모드로 실행
CMD ["pnpm", "run", "start:prod"]
# 포트 설정 (NestJS 기본 포트는 3000)
EXPOSE 3000
프로젝트에 접속할 주소를 적절하게 적어준다.
저장(Save) 한 후 deploy 하면 도커이미지를 만들어주고, 앱이 실행된다.
반응형
# 디비 postgres 부분
내가 테스트 한 프로젝트는 postgres 를 사용하기에 DB도 세팅해준다.
프로젝트에서 ( New Resource ) 로
PostgreSQL 을 선택해준다.
PostgreSQL 16 을 선택해줬다.
세팅에 암호를 정해준다.
중간 부분의 Postgres URL (internal) 으로 접속할 것이니, 해당 값을 nestjs 에서 사용할 것이다. DB 를 Start 해준다.
그리고, 다시 nestJS 설정으로 와서.
위 처럼 설정값을 적어준다. (DB_HOST 부분의 값이 - Postgres URL (internal) 에 있던 주소)
프로젝트에 따라 저 환경변수 값이 다를 수 있으니, 본인의 프로젝트에 맞게 수정해준다.
프로젝트를 Deploy 한다. 이미 프로젝트를 Deploy 했다면, Restart 해주면 입력한 설정값이 적용된다.
이제 프로젝트가 동작하는지 확인해본다. (정상적으로 응답된다)
아마도 다음 단계는 프로젝트 수정하고 git push 하면 자동으로 coolify 에서 자동 빌드 + 재배포 하는 프로세스를 만들어 봐야 겠다.
renewal-ssl-restart.sh >> /var/log/nginx/renewal_ssl_restart-$(date +\%Y-\%m-\%d).log
Error output from post-hook command systemctl:
Another instance of Certbot is already running.
해당 bash 코드에 certbot 확인하는 코드가 있었는데, 해당 코드를 post_hook 에서 실행되지 않게 고쳐줬다.(아래 부분이 고친 코드)
if [ "$convert" == "convert-now" ]; then
echo
else
certbot certificates --cert-name $domain
fi
# cat /etc/letsencrypt/renewal/yoursite.com.conf
# renew_before_expiry = 30 days
version = 1.11.0
archive_dir = /etc/letsencrypt/archive/yoursite.com
cert = /etc/letsencrypt/live/yoursite.com/cert.pem
privkey = /etc/letsencrypt/live/yoursite.com/privkey.pem
chain = /etc/letsencrypt/live/yoursite.com/chain.pem
fullchain = /etc/letsencrypt/live/yoursite.com/fullchain.pem
# Options used in the renewal process
[renewalparams]
authenticator = nginx
installer = nginx
account = ef9ksjdkfjskd3sdf5sdf3s23gf12g452t4g232ad2a
manual_public_ip_logging_ok = None
pre_hook = systemctl stop nginx
post_hook = systemctl start nginx
server = https://acme-v02.api.letsencrypt.org/directory
3개월(90일) 후에 재인증(?)을 해줘야 한다. 위 설정에서 pre_hook / post_hook 부분에서 systemctl start nginx 로 하면 nginx 가 정상으로 실행되지 않는 현상이 있다.
실행 체크는 certbot renew --dry-run 으로 해보면 된다.(아래와 비슷한 에러)
2024/08/04 01:40:02 [emerg] 22375#22375: bind() to 0.0.0.0:80 failed (98: Address already in use)
2024/08/04 01:40:02 [emerg] 22375#22375: bind() to 0.0.0.0:443 failed (98: Address already in use)
2024/08/04 01:40:02 [notice] 22375#22375: try again to bind() after 500ms
2024/08/04 01:40:02 [emerg] 22375#22375: bind() to 0.0.0.0:80 failed (98: Address already in use)
2024/08/04 01:40:02 [emerg] 22375#22375: bind() to 0.0.0.0:443 failed (98: Address already in use)
2024/08/04 01:40:02 [notice] 22375#22375: try again to bind() after 500ms
2024/08/04 01:40:02 [emerg] 22375#22375: bind() to 0.0.0.0:80 failed (98: Address already in use)
2024/08/04 01:40:02 [emerg] 22375#22375: bind() to 0.0.0.0:443 failed (98: Address already in use)
보통 저런 에러는 nginx 가 실행중이라 start 를 해서 이미 80/443 포트를 사용중이라는 에러 (원인의 예상은 renew 체크시 web 접속이 필요해서 nginx 가 실행중이어야 하는 듯 싶다.) letsencrypt 인증서버에서 .well-known 서버접속해서 확인하는 듯 하다.
현재 개발중인 플러터 앱의 기능에 이상현상(안드로이드쪽)이 있어서, 비교할 겸 리액트 네이티브로도 비슷하게 구성하고자 한다. (아마도 메인은 플러터 , RN 은 보조 혹은 학습 단계가 될 듯 하다.)
리액트 네이티브 세팅 후에 차이점(혹은 추가점) 을 정리한다.
기본 리액트 네이티브 설치 등은 SKIP
리액트 네이티브 - 프로젝트 내에서 실행.
# npx @react-native-community/cli doctor
Common
✓ Node.js - Required to execute JavaScript code
✓ npm - Required to install NPM dependencies
✓ Watchman - Used for watching changes in the filesystem when in development mode
● Metro - Metro Bundler is not running
Android
✓ Adb - Required to verify if the android device is attached correctly
✓ JDK - Required to compile Java code
✓ Android Studio - Required for building and installing your app on Android
✓ ANDROID_HOME - Environment variable that points to your Android SDK installation
✓ Gradlew - Build tool required for Android builds
✓ Android SDK - Required for building and installing your app on Android
iOS
✓ Xcode - Required for building and installing your app on iOS
✓ Ruby - Required for installing iOS dependencies
✓ CocoaPods - Required for installing iOS dependencies
● ios-deploy - Required for installing your app on a physical device with the CLI
✓ .xcode.env - File to customize Xcode environment
Errors: 0
Warnings: 2
Usage
› Press f to try to fix issues.
› Press e to try to fix errors.
› Press w to try to fix warnings.
› Press Enter to exit.
처음에는 watchman / adb / ANDROID_HOME 등이 에러 표시가 났다.
watchman 등은 새로 설치. ANDROID_HOME 은 /Library/Android/sdk 의 패스를 넣어주면 된다.(bash / zsh 등)
metro 도 해결책을 찾아보자. 이건 npx react-native start 로 하면 해결 되는 듯 하다.
그외 다른 인증 방식으로 몇가지 시도해봤는데, 유일하게 위 방법만 동작하였다. ( --apiKey --apiIssuer 방법 , --upload-package 방법 , xcrun notarytool 방법 => 모두 실패 ) 위 다른 방식들이 좀더 안전(?)한 방법인 듯 해서 시도해봤었는데, 실패.
Launching lib/main.dart on sdk gphone64 arm64 in debug mode...
Running Gradle task 'assembleDebug'...
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:compileFlutterBuildDebug'.
> A problem occurred starting process 'command '/..../flutter/bin/flutter''
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 2s
Error: Gradle task assembleDebug failed with exit code 1
Error executing devicectl: ProcessException: Process exited abnormally with exit code 3:
User cancelled
Command: /usr/bin/arch -arm64e xcrun devicectl list devices --timeout 5 --json-output /var/folders/d7/4qd968hd0kzc21y8jggx2qcr0000gn/T/flutter_tools.w7hJCy/core_devices.D5JYTk/core_device_list.json
Error executing devicectl: ProcessException: Process exited abnormally with exit code 3:
User cancelled
Command: /usr/bin/arch -arm64e xcrun devicectl list devices --timeout 5 --json-output /var/folders/d7/4qd968hd0kzc21y8jggx2qcr0000gn/T/flutter_tools.w7hJCy/core_devices.AHDMpc/core_device_list.json
다음과 같은 에러가 발생하였다.
flutter doctor 해봐도 특별한 이상은 안 보였다.
iOS 쪽을 시도 해봤다.
# xcodebuild -downloadPlatform iOS
Downloading iOS 17.5 Simulator (21F79): 83.1% (6.09 GB of 7.34 GB)2024-05-27 00:10:48.511 xcodebuild[38139:36929395] DVTDownloadable: Download Failed. Downloadable: https://download.developer.apple.com/Developer_Tools/iOS_17.5_Simulator_Runtime/iOS_17.5_Simulator_Runtime.dmg. Error Domain=NSPOSIXErrorDomain Code=28 "No space left on device" UserInfo={NSErrorFailingURLStringKey=https://download.developer.apple.com/Developer_Tools/iOS_17.5_Simulator_Runtime/iOS_17.5_Simulator_Runtime.dmg, NSErrorFailingURLKey=https://download.developer.apple.com/Developer_Tools/iOS_17.5_Simulator_Runtime/iOS_17.5_Simulator_Runtime.dmg, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDownloadTask <D677E7D4-290F-4ABB-AE5D-98AAF40F70BC>.<1>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDownloadTask <D677E7D4-290F-4ABB-AE5D-98AAF40F70BC>.<1>}
Downloading iOS 17.5 Simulator (21F79): Error: Error Domain=NSPOSIXErrorDomain Code=28 "No space left on device" UserInfo={NSErrorFailingURLStringKey=https://download.developer.apple.com/Developer_Tools/iOS_17.5_Simulator_Runtime/iOS_17.5_Simulator_Runtime.dmg, NSErrorFailingURLKey=https://download.developer.apple.com/Developer_Tools/iOS_17.5_Simulator_Runtime/iOS_17.5_Simulator_Runtime.dmg, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDownloadTask <D677E7D4-290F-4ABB-AE5D-98AAF40F70BC>.<1>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDownloadTask <D677E7D4-290F-4ABB-AE5D-98AAF40F70BC>.<1>}
여기도 에러.
하드 공간이 없다. 오랜만에 봤더니, 6기가 정도 밖에 안 남았네. ㅜㅜ
용량이 부족하다. 조금 정리하고 다시 시도..
Registering simulator runtime with CoreSimulator failed.
Domain: DVTDownloadableErrorDomain
Code: 29
User Info: {
DVTErrorCreationDateKey = "2024-05-26 15:36:28 +0000";
}
--
Registering simulator runtime with CoreSimulator failed.
Domain: DVTDownloadableErrorDomain
Code: 29
--
Cannot copy the image because the disk is almost full
Domain: com.apple.CoreSimulator.simdiskimaged.SimDiskImageError
Code: 14
--
System Information
macOS Version 14.4.1 (Build 23E224)
Xcode 15.4 (22622) (Build 15F31d)
Timestamp: 2024-05-27T00:36:28+09:00
더 줄여야 겠다.
하드 좀 정리하고, 다시 해보니 정상 다운로드 되었다. 그리고, 안드로이드 스튜디오에서 다시 빌드 해보니 정상 동작 했다.
이제 안드로이드 쪽 빌드를 해결해보자.(즉, iOS 쪽은 정상)
android / gradle 빌드 쪽 이슈로 좁혀졌다.
[다시 시도]
flutter upgrade --force 로 플러터 SDK 를 업그레이드 해봤다.
* What went wrong:
Execution failed for task ':gradle:compileGroovy'.
> Failed to run Gradle Worker Daemon
> A problem occurred starting process 'Gradle Worker Daemon 1'
에러가 나지만, 메시지가 달라졌다.
android/ 에서 gradle 을 콘솔에서 명령을 내려봤다.
# ./gradlew app:installDebug
FAILURE: Build failed with an exception.
* Where:
Build file '.../android/app/build.gradle' line: 2
What went wrong:
An exception occurred applying plugin request [id: 'com.android.application']
> Failed to apply plugin 'com.android.internal.application'.
> Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
Your current JDK is located in /Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home/jre
You can try some of the following options:
- changing the IDE settings.
- changing the JAVA_HOME environment variable.
- changing `org.gradle.java.home` in `gradle.properties`.
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 24s
4 actionable tasks: 2 executed, 2 up-to-date
다른 프로젝트에서 1.8 오래된 버전이 필요해서 바꿨었는데, 그것이 영향을 준것 같다. 근데, 안드로이드 스튜디오 젤리피시 버전업 하기까지는 이상이 없었는데..??
android/gradle.properties
파일에 JAVA_HOME 패스를 넣었다.(.bash_profile 등에 넣어도 된다.)
org.gradle.java.home=/Library/Java/JavaVirtualMachines/adoptopenjdk-16.jdk/Contents/Home/
다시 빌드...
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':connectivity_plus:compileDebugJavaWithJavac'.
> error: invalid source release: 17
이거 점점 미궁으로 가는거 아닌가? ㅜㅜ
java 버전 17 으로 맞춰준다.
# brew install openjdk@17
sudo ln -s /opt/homebrew/Cellar/openjdk\@17/17.0.11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk
gradle.properties 나 IDE 세팅등에 버전을 맞춘다.
org.gradle.java.home=/Library/Java/JavaVirtualMachines/openjdk-17.jdk/Contents/Home/
일단 release-test 로 릴리즈 테스트 로 만들었다. (기존 debug 설정에 넣어도 될 듯 함) - 아! 화면에는 오타가 암튼 중요한 건 아니니 -
Build Variants 에 해당 Signing Config 를 선택해준다.
여기까지 하고, 플러터에서 빌드 => 업로드 . 다시 에러.
테스트 빌드도 세부적인 것을 많이 체크하나보다. 암튼 저것도 맞춰준다.
저것까지 맞추고 다시 업로드.
OK 성공.
그러나.
.
.
내부 테스트를 위해 할일이 많군. ( 경고 쪽은 안내대로 해주면 OK)
오류 => 계정문제 는 최근에 계정 등록해서 인증이 완료되지 않았다.
위 절차를 해야 한다.
근데, 관련 필요 서류로 할 만한 것이 없다. 오프라인 서류는 당연히 없고, 온라인 서류로 발급 될 만한 것을 찾아봐야 겠다.
=== 일단 될만한 것이 있어 시도 해본다. ===
위 서류 예시에는 없지만, 국세청에서 부가세 우편물에 이름/주소가 있어서 시도해본다.(공공요금 청구서에 해당하려나?)
과연 승인이 떨어질지...
[추가+2일]
승인이 되었다. - 영업일 기준 1일 이내에 처리되는 듯 하다(주말이 끼어 있어...)
내부테스터 로 출시 후에 설치 시도를 해보았다.
그런데, 아래 메시지 와 함께 설치가 안된다.
개발용 기기에 설치를 하려고 한 듯 해서, 폰에서 설정 > 앱 메뉴에서 해당 앱을 삭제 했다.
그래도 안된다. "모든 사용자에서 삭제" 로 해야 한다고 하는데, 그 부분 때문일까?
위 현상이 안드로이드 스튜디오에서 Run 할때도 이상현상이 발생한다.
[설치 이상 현상 조치]
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 을 매번 해줘야 하네. (불편하군)
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
맥에서 이렇게 뜨면서 안된다.(앱을 전송하는데, 개발자 인증에 이상이 있는 듯 )
아마도 애플 개발자 계정 세팅을 해야 하는 듯 하다.
[일단 개발자 계정 등록 전까지 정리 보류]
. . . [Several long days later ...]
개발자 등록/ 팀 등록 을 한 후에 다시 시도해 본다.(플러터 에서 시도)
Could not build the precompiled application for the device.
Error (Xcode): Provisioning profile "iOS Team Provisioning Profile: *" doesn't include the currently selected device "폰-이름" (identifier 폰의ID).
/Users/유저네임/StudioProjects/프로젝트명/ios/Runner.xcodeproj
It appears that there was a problem signing your application prior to installation on the device.
Verify that the Bundle Identifier in your project is your signing id in Xcode
open ios/Runner.xcworkspace
Also try selecting 'Product > Build' to fix the problem.
Error launching application on 폰-이름.
에러가 안나면 섭하지.
메시지상 폰의 아이디를 등록해줘야 하나보다.
open ios/Runner.xcworkspace
Xcode 를 열고, Runner 에서 디바이스(폰)를 선택하고, 빌드를 해보면.
빌드하면, 디바이스를 등록하라는 메시지가 나온다.
(나는 2번 나왔는데, 등록을 누른 후) 빌드 실패가 뜬다.
등록 후에 바로 되는게 아닌가 보다.
애플 개발자 계정에 들어가보니.
중간의 기기(영문) 으로 들어간다.
보면, 나의 디바이스(폰)의 이름과 ID 등이 나온다. 등록에 시간이 필요한 듯 하다. 안내에 24~72 시간이라는게 보이는데, 저렇게 오래걸리나?
암튼 좀 지난후에 다시 시도해 본다.
..
[One hours later ..]
비교적 빠르게(?) 해당 Processing 메시지가 없어졌다. 다시 시도...
동일한 메시지가 나온다. 다른 부분이 문제라는 것인가...
애플 개발자 계정에서 profiles 쪽에 등록을 해줬다.(이것 때문인지, 정상 빌드 되고 폰에서 설치되었다)
Xcode 열었을 때 다음 메시지도 나오던데.
정확히 어떤 부분으로 인해 해결(?)이 된 것인지 명확하진 않지만, profiles 쪽 등록이 좀더 가능성이 높아 보인다.
[알아본 김에 일단 testFlight 까지]
앱을 폰에 빌드까지 해봤으니, 앱스토어에도 올려보려 한다.
testFlight 로 먼저 올려야 겠지.
xcode 열고 Product / archive 를 실행하면 빌드하고, 업로드 준비를 하는 듯 하다. archive 창에서 Validate App => Distribute App 을 하면 앱이 Apple Connect 업로드 된다.
testFlight 쪽을 보면, 해당 앱이 등록이 되는데. 다음과 같은 메시지가. 수출관련 인 듯 한데, 일단 모두 해당하지 않음 으로 처리.