Files
zellyy-finance/ios-version-manager.sh
2025-03-23 23:54:30 +09:00

128 lines
5.4 KiB
Bash
Executable File

#!/bin/bash
# iOS 앱 버전 관리 스크립트
# 사용법: ./ios-version-manager.sh
# 색상 정의
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# 프로젝트 디렉토리로 이동
cd "$(dirname "$0")"
# 프로젝트 파일 경로
XCODEPROJ_FILE="ios/App/App.xcodeproj/project.pbxproj"
# 설정 파일 경로
CONFIG_FILE="$HOME/.zellyy_ios_build.conf"
# 버전 정보 관리 함수
manage_version_info() {
# 현재 버전 및 빌드 번호 가져오기
if [ -f "$XCODEPROJ_FILE" ]; then
MARKETING_VERSION=$(grep -A 1 "MARKETING_VERSION" "$XCODEPROJ_FILE" | grep -o 'MARKETING_VERSION = [0-9]\+\.[0-9]\+\(\.[0-9]\+\)*' | sed 's/MARKETING_VERSION = //' | head -1)
CURRENT_PROJECT_VERSION=$(grep -A 1 "CURRENT_PROJECT_VERSION" "$XCODEPROJ_FILE" | grep -o '[0-9]\+' | head -1)
echo -e "${YELLOW}현재 버전 정보:${NC}"
echo -e "마케팅 버전: ${GREEN}$MARKETING_VERSION${NC}"
echo -e "빌드 번호: ${GREEN}$CURRENT_PROJECT_VERSION${NC}"
# 설정 파일 확인 및 로드
if [ -f "$CONFIG_FILE" ]; then
source "$CONFIG_FILE"
fi
# 버전 수정 여부 확인
echo -e "\n${YELLOW}버전 정보를 수정하시겠습니까? (y/n) [${LAST_VERSION_CHOICE:-n}]:${NC}"
read -r UPDATE_VERSION
UPDATE_VERSION=${UPDATE_VERSION:-${LAST_VERSION_CHOICE:-n}}
if [[ "$UPDATE_VERSION" == "y" || "$UPDATE_VERSION" == "Y" ]]; then
echo -e "\n${YELLOW}새 마케팅 버전을 입력하세요 (현재: $MARKETING_VERSION) [${LAST_MARKETING_VERSION:-$MARKETING_VERSION}]:${NC}"
read -r NEW_MARKETING_VERSION
NEW_MARKETING_VERSION=${NEW_MARKETING_VERSION:-${LAST_MARKETING_VERSION:-$MARKETING_VERSION}}
if [ -z "$NEW_MARKETING_VERSION" ]; then
NEW_MARKETING_VERSION=$MARKETING_VERSION
fi
echo -e "${YELLOW}새 빌드 번호를 입력하세요 (현재: $CURRENT_PROJECT_VERSION) [${LAST_BUILD_NUMBER:-$CURRENT_PROJECT_VERSION}]:${NC}"
read -r NEW_PROJECT_VERSION
NEW_PROJECT_VERSION=${NEW_PROJECT_VERSION:-${LAST_BUILD_NUMBER:-$CURRENT_PROJECT_VERSION}}
if [ -z "$NEW_PROJECT_VERSION" ]; then
NEW_PROJECT_VERSION=$CURRENT_PROJECT_VERSION
fi
# 버전 정보 업데이트
# macOS에서는 sed -i에 백업 확장자를 지정해야 함
sed -i '' "s/MARKETING_VERSION = [0-9][0-9]*\.[0-9][0-9]*\(\.[0-9][0-9]*\)*/MARKETING_VERSION = $NEW_MARKETING_VERSION/g" "$XCODEPROJ_FILE"
sed -i '' "s/CURRENT_PROJECT_VERSION = $CURRENT_PROJECT_VERSION;/CURRENT_PROJECT_VERSION = $NEW_PROJECT_VERSION;/g" "$XCODEPROJ_FILE"
echo -e "\n${GREEN}버전 정보가 업데이트되었습니다:${NC}"
echo -e "마케팅 버전: ${GREEN}$NEW_MARKETING_VERSION${NC}"
echo -e "빌드 번호: ${GREEN}$NEW_PROJECT_VERSION${NC}"
# AppVersionInfo.tsx 파일의 하드코딩된 버전 정보 업데이트
update_app_version_info "$NEW_MARKETING_VERSION" "$NEW_PROJECT_VERSION"
# 설정 저장
echo "LAST_VERSION_CHOICE=y" > "$CONFIG_FILE"
echo "LAST_MARKETING_VERSION=$NEW_MARKETING_VERSION" >> "$CONFIG_FILE"
echo "LAST_BUILD_NUMBER=$NEW_PROJECT_VERSION" >> "$CONFIG_FILE"
# 성공 코드 반환
return 0
else
echo -e "${YELLOW}현재 버전 정보를 유지합니다.${NC}"
# 설정 저장
echo "LAST_VERSION_CHOICE=n" > "$CONFIG_FILE"
# 성공 코드 반환
return 0
fi
else
echo -e "${RED}프로젝트 파일을 찾을 수 없습니다: $XCODEPROJ_FILE${NC}"
# 실패 코드 반환
return 1
fi
}
# AppVersionInfo.tsx 파일 업데이트 함수
update_app_version_info() {
local version_name=$1
local build_number=$2
local app_version_file="src/components/AppVersionInfo.tsx"
if [ ! -f "$app_version_file" ]; then
echo -e "${RED}AppVersionInfo.tsx 파일을 찾을 수 없습니다.${NC}"
return 1
fi
echo -e "${YELLOW}AppVersionInfo.tsx 파일의 버전 정보 업데이트 중...${NC}"
# 백업 파일 생성
cp "$app_version_file" "${app_version_file}.bak"
# AppVersionInfo.tsx 파일에서 하드코딩된 버전 정보 업데이트
# 인터페이스/타입 정의와 실제 값 할당 구분하여 패턴 수정
sed -i '' "s/versionName: '[^']*'/versionName: '$version_name'/" "$app_version_file"
# buildNumber 수정 - 객체 내에서만 수정
sed -i '' "/hardcodedVersionInfo/,/}/s/buildNumber: [0-9]*/buildNumber: $build_number/" "$app_version_file"
# versionCode 수정 - 객체 내에서만 수정 (iOS에서는 versionCode를 빌드 번호와 동일하게 설정)
sed -i '' "/hardcodedVersionInfo/,/}/s/versionCode: [0-9]*/versionCode: $build_number/" "$app_version_file"
echo -e "${GREEN}AppVersionInfo.tsx 파일의 버전 정보가 업데이트되었습니다.${NC}"
return 0
}
# 스크립트가 직접 실행될 때만 버전 관리 함수 실행
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
manage_version_info
exit $?
fi