#!/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