feat: Phase 1 mobile tablet — Jenkins APK, PC tab, in-app update

Capacitor 확장으로 git push 시 Mobile Jenkins 빌드, PC 탭 Android/iPad 다운로드,
앱 내 APK 업데이트, iOS TestFlight API 및 Capacitor ios 프로젝트를 추가한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Macbook
2026-06-14 16:31:55 +09:00
parent 36c06b55ea
commit f34104b721
38 changed files with 1468 additions and 15 deletions
@@ -15,4 +15,8 @@ public class MobileAppReleaseInfoDto {
private String downloadUrl;
/** 모바일 설치 안내 페이지 URL */
private String installPageUrl;
/** iPad TestFlight 초대 URL (App Store 정책상 ipa 직접 배포 불가) */
private String iosTestFlightUrl;
/** TestFlight 링크 제공 여부 */
private boolean iosAvailable;
}
@@ -36,13 +36,19 @@ public class MobileAppReleaseService {
@Value("${goldenchart.mobile-app.public-base-url:}")
private String configuredPublicBaseUrl;
@Value("${goldenchart.mobile-app.ios-testflight-url:}")
private String iosTestFlightUrl;
public MobileAppReleaseInfoDto getInfo(String requestBaseUrl) {
String publicBaseUrl = resolvePublicBaseUrl(requestBaseUrl);
boolean iosAvailable = iosTestFlightUrl != null && !iosTestFlightUrl.isBlank();
Optional<Path> apk = resolveApkPath();
if (apk.isEmpty()) {
return MobileAppReleaseInfoDto.builder()
.available(false)
.installPageUrl(buildInstallPageUrl(publicBaseUrl))
.iosAvailable(iosAvailable)
.iosTestFlightUrl(iosAvailable ? iosTestFlightUrl.trim() : null)
.build();
}
Path file = apk.get();
@@ -61,12 +67,16 @@ public class MobileAppReleaseService {
.updatedAt(DT_FMT.format(updated))
.downloadUrl(downloadUrl)
.installPageUrl(buildInstallPageUrl(publicBaseUrl))
.iosAvailable(iosAvailable)
.iosTestFlightUrl(iosAvailable ? iosTestFlightUrl.trim() : null)
.build();
} catch (IOException e) {
log.warn("[mobile-app] stat failed: {}", e.getMessage());
return MobileAppReleaseInfoDto.builder()
.available(false)
.installPageUrl(buildInstallPageUrl(publicBaseUrl))
.iosAvailable(iosAvailable)
.iosTestFlightUrl(iosAvailable ? iosTestFlightUrl.trim() : null)
.build();
}
}
@@ -112,6 +112,14 @@ goldenchart:
version: ${GC_MOBILE_APP_VERSION:}
# QR·APK 다운로드 절대 URL (로컬 개발 시에도 exdev 서버 APK 사용)
public-base-url: ${GC_MOBILE_APP_PUBLIC_BASE_URL:http://exdev.co.kr}
ios-testflight-url: ${GC_MOBILE_APP_IOS_TESTFLIGHT_URL:}
jenkins:
enabled: ${GC_MOBILE_JENKINS_ENABLED:true}
url: ${GC_MOBILE_JENKINS_URL:http://127.0.0.1:8090}
job: ${GC_MOBILE_JENKINS_JOB:goldenChart-Mobile-Pipeline}
user: ${GC_MOBILE_JENKINS_USER:}
token: ${GC_MOBILE_JENKINS_TOKEN:}
trigger-token: ${GC_MOBILE_JENKINS_TRIGGER_TOKEN:goldenchart-mobile-build}
desktop-app:
release-dir: ${GC_DESKTOP_APP_RELEASE_DIR:data/desktop-releases}
version: ${GC_DESKTOP_APP_VERSION:}