ios 스크립트 수정
This commit is contained in:
726
build-ios.sh
726
build-ios.sh
@@ -12,297 +12,213 @@ NC='\033[0m' # No Color
|
||||
# 프로젝트 디렉토리로 이동
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
# 프로젝트 파일 경로
|
||||
XCODEPROJ_FILE="ios/App/App.xcodeproj/project.pbxproj"
|
||||
|
||||
# 현재 버전 및 빌드 번호 가져오기
|
||||
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}"
|
||||
|
||||
# 설정 파일 확인 및 로드
|
||||
CONFIG_FILE="$HOME/.zellyy_ios_build.conf"
|
||||
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}"
|
||||
|
||||
# 설정 저장
|
||||
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"
|
||||
else
|
||||
echo -e "${YELLOW}현재 버전 정보를 유지합니다.${NC}"
|
||||
# 설정 저장
|
||||
echo "LAST_VERSION_CHOICE=n" > "$CONFIG_FILE"
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}프로젝트 파일을 찾을 수 없습니다: $XCODEPROJ_FILE${NC}"
|
||||
exit 1
|
||||
# 설정 파일 확인 및 로드
|
||||
CONFIG_FILE="$HOME/.zellyy_ios_build.conf"
|
||||
if [ -f "$CONFIG_FILE" ]; then
|
||||
source "$CONFIG_FILE"
|
||||
fi
|
||||
|
||||
# 빌드 타입 선택 메뉴
|
||||
echo -e "\n${YELLOW}Zellyy Finance iOS 앱 빌드 스크립트${NC}"
|
||||
echo -e "${YELLOW}=============================${NC}"
|
||||
echo -e "빌드 타입을 선택하세요:"
|
||||
echo -e "1) 디버그 빌드 (개발 및 테스트용)"
|
||||
echo -e "2) 릴리즈 빌드 (App Store 배포용)"
|
||||
echo -e "3) 종료"
|
||||
echo -n "선택 (1-3) [${LAST_BUILD_TYPE:-1}]: "
|
||||
read -r CHOICE
|
||||
CHOICE=${CHOICE:-${LAST_BUILD_TYPE:-1}}
|
||||
|
||||
case $CHOICE in
|
||||
1)
|
||||
BUILD_TYPE="debug"
|
||||
CONFIGURATION="Debug"
|
||||
echo "LAST_BUILD_TYPE=1" >> "$CONFIG_FILE"
|
||||
;;
|
||||
2)
|
||||
BUILD_TYPE="release"
|
||||
CONFIGURATION="Release"
|
||||
echo "LAST_BUILD_TYPE=2" >> "$CONFIG_FILE"
|
||||
;;
|
||||
3)
|
||||
echo -e "${YELLOW}빌드를 취소합니다.${NC}"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}잘못된 선택입니다. 빌드를 취소합니다.${NC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo -e "${YELLOW}Zellyy Finance iOS 앱 빌드 시작 (${BUILD_TYPE}, 마케팅 버전: ${MARKETING_VERSION}, 빌드 번호: ${NEW_PROJECT_VERSION}): $(date)${NC}"
|
||||
|
||||
# 빌드 디렉토리 문제 해결
|
||||
echo -e "${YELLOW}빌드 디렉토리 준비 중...${NC}"
|
||||
BUILD_DIR="ios/App/build"
|
||||
if [ -d "$BUILD_DIR" ]; then
|
||||
echo -e "${YELLOW}기존 빌드 디렉토리에 Xcode 빌드 시스템 속성 추가 중...${NC}"
|
||||
xattr -w com.apple.xcode.CreatedByBuildSystem true "$BUILD_DIR"
|
||||
else
|
||||
echo -e "${YELLOW}빌드 디렉토리 생성 중...${NC}"
|
||||
mkdir -p "$BUILD_DIR"
|
||||
xattr -w com.apple.xcode.CreatedByBuildSystem true "$BUILD_DIR"
|
||||
fi
|
||||
|
||||
# 캐시 정리
|
||||
echo -e "${YELLOW}캐시 정리 중...${NC}"
|
||||
if [ -d "node_modules/.cache" ]; then
|
||||
rm -rf node_modules/.cache
|
||||
fi
|
||||
if [ -d "ios/App/App/public" ]; then
|
||||
rm -rf ios/App/App/public
|
||||
fi
|
||||
|
||||
# 1. 웹 앱 빌드
|
||||
echo -e "${YELLOW}1. 웹 앱 빌드 중...${NC}"
|
||||
npm run build
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}웹 앱 빌드 실패. 빌드 프로세스를 중단합니다.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}웹 앱 빌드 완료${NC}"
|
||||
|
||||
# 2. Capacitor에 웹 코드 복사 및 동기화
|
||||
echo -e "${YELLOW}2. Capacitor에 웹 코드 동기화 중...${NC}"
|
||||
npx cap sync ios
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}Capacitor 동기화 실패. 빌드 프로세스를 중단합니다.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}Capacitor 동기화 완료${NC}"
|
||||
|
||||
# 3. iOS 앱 빌드
|
||||
echo -e "${YELLOW}3. iOS 빌드 시작 (${BUILD_TYPE})...${NC}"
|
||||
|
||||
# 빌드 타입에 따라 다른 명령어 실행
|
||||
cd ios/App
|
||||
if [ "$BUILD_TYPE" = "debug" ]; then
|
||||
# 디버그 빌드
|
||||
echo -e "${YELLOW}빌드 대상을 선택하세요:${NC}"
|
||||
echo -e "1) 시뮬레이터용 빌드"
|
||||
echo -e "2) 실제 기기용 빌드"
|
||||
echo -n "선택 (1-2): "
|
||||
read -r TARGET_CHOICE
|
||||
# 캐시 삭제 함수
|
||||
clean_cache() {
|
||||
echo -e "${YELLOW}캐시 삭제 중...${NC}"
|
||||
|
||||
case $TARGET_CHOICE in
|
||||
echo -e "${YELLOW}1. Xcode 파생 데이터 삭제중...${NC}"
|
||||
rm -rf ~/Library/Developer/Xcode/DerivedData/App-*
|
||||
|
||||
echo -e "${YELLOW}2. Pod 캐시 삭제중...${NC}"
|
||||
rm -rf ios/App/Pods
|
||||
rm -rf ios/App/Podfile.lock
|
||||
|
||||
echo -e "${YELLOW}3. iOS 빌드 디렉토리 삭제중...${NC}"
|
||||
rm -rf ios/App/build
|
||||
mkdir -p ios/App/build
|
||||
xattr -w com.apple.xcode.CreatedByBuildSystem true ios/App/build
|
||||
|
||||
echo -e "${YELLOW}4. Node 모듈 캐시 삭제중...${NC}"
|
||||
rm -rf node_modules/.cache
|
||||
|
||||
echo -e "${YELLOW}5. Capacitor 빌드 캐시 삭제중...${NC}"
|
||||
rm -rf ios/App/App/public
|
||||
|
||||
echo -e "${GREEN}캐시 삭제 완료!${NC}"
|
||||
}
|
||||
|
||||
# 신뢰 인증서 안내 함수
|
||||
show_certificate_trust_guide() {
|
||||
echo -e "\n${YELLOW}=== 앱 실행 시 인증서 신뢰 문제가 발생하는 경우 ====${NC}"
|
||||
echo -e "${YELLOW}실제 기기에서 앱을 실행하려면 개발자 인증서를 신뢰해야 합니다.${NC}"
|
||||
echo -e "${YELLOW}다음 단계를 따라 인증서를 신뢰하세요:${NC}"
|
||||
echo -e "1. iOS 기기에서 '설정' 앱을 엽니다."
|
||||
echo -e "2. '일반' > 'VPN 및 기기 관리'로 이동합니다."
|
||||
echo -e "3. 개발자 앱 인증서(사용자 이름 포함)를 선택합니다."
|
||||
echo -e "4. '신뢰'를 탭하여 인증서를 신뢰합니다."
|
||||
echo -e "${YELLOW}인증서 신뢰 후 다시 앱을 실행해보세요.${NC}"
|
||||
echo -e "${YELLOW}=============================================${NC}\n"
|
||||
}
|
||||
|
||||
# 메인 메뉴 표시
|
||||
show_main_menu() {
|
||||
echo -e "\n${YELLOW}Zellyy Finance iOS 앱 빌드 스크립트${NC}"
|
||||
echo -e "${YELLOW}=============================${NC}"
|
||||
echo -e "작업을 선택하세요:"
|
||||
echo -e "1) 앱 빌드"
|
||||
echo -e "2) 캐시 삭제"
|
||||
echo -e "3) 종료"
|
||||
echo -n "선택 (1-3) [${LAST_MAIN_CHOICE:-1}]: "
|
||||
read -r MAIN_CHOICE
|
||||
MAIN_CHOICE=${MAIN_CHOICE:-${LAST_MAIN_CHOICE:-1}}
|
||||
echo "LAST_MAIN_CHOICE=$MAIN_CHOICE" > "$CONFIG_FILE"
|
||||
|
||||
case $MAIN_CHOICE in
|
||||
1)
|
||||
# 시뮬레이터용 빌드
|
||||
echo -e "${YELLOW}시뮬레이터용 빌드 시작...${NC}"
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Debug -sdk iphonesimulator -derivedDataPath build
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}디버그 빌드 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}시뮬레이터용 빌드 성공!${NC}"
|
||||
echo -e "앱 파일 위치: $(pwd)/build/Build/Products/Debug-iphonesimulator/App.app"
|
||||
|
||||
# 시뮬레이터 실행 여부 확인
|
||||
echo -e "${YELLOW}iOS 시뮬레이터에서 앱을 실행하시겠습니까? (y/n)${NC}"
|
||||
read -r RUN_SIMULATOR
|
||||
if [ "$RUN_SIMULATOR" = "y" ] || [ "$RUN_SIMULATOR" = "Y" ]; then
|
||||
# 사용 가능한 시뮬레이터 목록 표시
|
||||
echo -e "${YELLOW}사용 가능한 시뮬레이터:${NC}"
|
||||
xcrun simctl list devices available | grep -v "unavailable" | grep "^ "
|
||||
|
||||
echo -e "${YELLOW}시뮬레이터 이름을 입력하세요 (예: iPhone 15):${NC}"
|
||||
read -r SIMULATOR_NAME
|
||||
|
||||
# 시뮬레이터 UDID 가져오기
|
||||
SIMULATOR_UDID=$(xcrun simctl list devices available | grep "$SIMULATOR_NAME" | grep -o -E '[A-Za-z0-9\-]{36}' | head -1)
|
||||
|
||||
if [ -z "$SIMULATOR_UDID" ]; then
|
||||
echo -e "${RED}시뮬레이터를 찾을 수 없습니다. 정확한 이름을 입력하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 시뮬레이터 실행
|
||||
echo -e "${YELLOW}시뮬레이터 실행 중...${NC}"
|
||||
open -a Simulator --args -CurrentDeviceUDID "$SIMULATOR_UDID"
|
||||
|
||||
# 앱 설치 및 실행
|
||||
xcrun simctl install "$SIMULATOR_UDID" "$(pwd)/build/Build/Products/Debug-iphonesimulator/App.app"
|
||||
xcrun simctl launch "$SIMULATOR_UDID" "io.ionic.starter"
|
||||
|
||||
echo -e "${GREEN}앱이 시뮬레이터에서 실행 중입니다.${NC}"
|
||||
fi
|
||||
# 앱 빌드 선택 시 자동으로 캐시 삭제 수행
|
||||
echo -e "${YELLOW}빌드 전 자동 캐시 삭제 중...${NC}"
|
||||
clean_cache
|
||||
start_build_process
|
||||
;;
|
||||
|
||||
2)
|
||||
# 실제 기기용 빌드
|
||||
echo -e "${YELLOW}실제 기기용 빌드 시작...${NC}"
|
||||
|
||||
# 개발자 계정 정보 입력
|
||||
clean_cache
|
||||
echo -e "\n${YELLOW}메인 메뉴로 돌아갑니다...${NC}"
|
||||
show_main_menu
|
||||
;;
|
||||
3)
|
||||
echo -e "${YELLOW}스크립트를 종료합니다.${NC}"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}잘못된 선택입니다. 종료합니다.${NC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 빌드 프로세스 시작
|
||||
start_build_process() {
|
||||
# 버전 관리 스크립트 실행
|
||||
echo -e "${YELLOW}버전 정보 관리 시작...${NC}"
|
||||
source ./ios-version-manager.sh
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}버전 정보 관리 중 오류가 발생했습니다.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}버전 정보 관리 완료!${NC}"
|
||||
|
||||
# 빌드 타입 선택 메뉴
|
||||
echo -e "\n${YELLOW}빌드 타입을 선택하세요:${NC}"
|
||||
echo -e "1) 디버그 빌드 (개발 및 테스트용)"
|
||||
echo -e "2) 릴리즈 빌드 (App Store 배포용)"
|
||||
echo -e "3) 취소"
|
||||
echo -n "선택 (1-3) [${LAST_BUILD_TYPE:-1}]: "
|
||||
read -r CHOICE
|
||||
CHOICE=${CHOICE:-${LAST_BUILD_TYPE:-1}}
|
||||
|
||||
case $CHOICE in
|
||||
1)
|
||||
BUILD_TYPE="debug"
|
||||
CONFIGURATION="Debug"
|
||||
echo "LAST_BUILD_TYPE=1" >> "$CONFIG_FILE"
|
||||
;;
|
||||
2)
|
||||
BUILD_TYPE="release"
|
||||
CONFIGURATION="Release"
|
||||
echo "LAST_BUILD_TYPE=2" >> "$CONFIG_FILE"
|
||||
;;
|
||||
3)
|
||||
echo -e "${YELLOW}빌드를 취소합니다.${NC}"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}잘못된 선택입니다. 빌드를 취소합니다.${NC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# 개발자 등록 여부 확인
|
||||
echo -e "${YELLOW}Apple 개발자 계정에 등록되어 있습니까? (y/n) [${LAST_DEV_REGISTERED:-n}]:${NC}"
|
||||
read -r DEV_REGISTERED
|
||||
DEV_REGISTERED=${DEV_REGISTERED:-${LAST_DEV_REGISTERED:-n}}
|
||||
echo "LAST_DEV_REGISTERED=$DEV_REGISTERED" >> "$CONFIG_FILE"
|
||||
|
||||
# 개발자 등록이 된 경우에만 계정 정보 입력
|
||||
if [[ "$DEV_REGISTERED" == "y" || "$DEV_REGISTERED" == "Y" ]]; then
|
||||
echo -e "${YELLOW}Apple 개발자 계정 이메일을 입력하세요 [${LAST_APPLE_ID:-}]:${NC}"
|
||||
read -r APPLE_ID
|
||||
APPLE_ID=${APPLE_ID:-${LAST_APPLE_ID:-}}
|
||||
|
||||
# 설정 저장
|
||||
echo "LAST_APPLE_ID=$APPLE_ID" >> "$CONFIG_FILE"
|
||||
|
||||
# 연결된 기기 확인
|
||||
echo -e "${YELLOW}연결된 iOS 기기 확인 중...${NC}"
|
||||
DEVICE_LIST=$(xcrun xctrace list devices | grep -v "^==" | sed '/^$/d')
|
||||
|
||||
# 실제 기기와 시뮬레이터 분리
|
||||
REAL_DEVICES=$(echo "$DEVICE_LIST" | grep -v "Simulator" | grep -v "MacBook" | grep -v "Mac")
|
||||
SIMULATORS=$(echo "$DEVICE_LIST" | grep "Simulator" || echo "")
|
||||
|
||||
# 기기 목록 표시
|
||||
echo -e "${YELLOW}연결된 실제 기기:${NC}"
|
||||
if [ -z "$REAL_DEVICES" ]; then
|
||||
echo "연결된 실제 기기가 없습니다."
|
||||
echo "USB 케이블로 iOS 기기를 연결하고 다시 시도하세요."
|
||||
echo "또는 시뮬레이터를 사용하려면 시뮬레이터용 빌드를 선택하세요."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 실제 기기 목록 표시 (번호 부여)
|
||||
DEVICE_COUNTER=1
|
||||
DEVICE_ARRAY=()
|
||||
DEVICE_ID_ARRAY=()
|
||||
|
||||
while IFS= read -r line; do
|
||||
DEVICE_NAME=$(echo "$line" | sed -E 's/^(.*) \(([0-9\.]+)\) \((.*)\)$/\1/')
|
||||
DEVICE_OS=$(echo "$line" | sed -E 's/^(.*) \(([0-9\.]+)\) \((.*)\)$/\2/')
|
||||
DEVICE_ID=$(echo "$line" | sed -E 's/^(.*) \(([0-9\.]+)\) \((.*)\)$/\3/')
|
||||
|
||||
echo "$DEVICE_COUNTER) $DEVICE_NAME (iOS $DEVICE_OS)"
|
||||
DEVICE_ARRAY+=("$DEVICE_NAME")
|
||||
DEVICE_ID_ARRAY+=("$DEVICE_ID")
|
||||
((DEVICE_COUNTER++))
|
||||
done <<< "$REAL_DEVICES"
|
||||
|
||||
# 기기 선택
|
||||
echo -e "${YELLOW}빌드 및 설치할 기기 번호를 선택하세요 [${LAST_DEVICE_INDEX:-1}]:${NC}"
|
||||
read -r DEVICE_INDEX
|
||||
DEVICE_INDEX=${DEVICE_INDEX:-${LAST_DEVICE_INDEX:-1}}
|
||||
|
||||
# 인덱스 범위 검증
|
||||
if ! [[ "$DEVICE_INDEX" =~ ^[0-9]+$ ]] || [ "$DEVICE_INDEX" -lt 1 ] || [ "$DEVICE_INDEX" -gt ${#DEVICE_ARRAY[@]} ]; then
|
||||
echo -e "${RED}잘못된 기기 번호입니다. 1부터 ${#DEVICE_ARRAY[@]} 사이의 숫자를 입력하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 선택된 기기 정보
|
||||
SELECTED_INDEX=$((DEVICE_INDEX-1))
|
||||
DEVICE_NAME="${DEVICE_ARRAY[$SELECTED_INDEX]}"
|
||||
DEVICE_ID="${DEVICE_ID_ARRAY[$SELECTED_INDEX]}"
|
||||
echo -e "${YELLOW}선택된 기기: $DEVICE_NAME (ID: $DEVICE_ID)${NC}"
|
||||
|
||||
# 설정 저장
|
||||
echo "LAST_DEVICE_INDEX=$DEVICE_INDEX" >> "$CONFIG_FILE"
|
||||
|
||||
# 디버그 빌드 및 기기 설치
|
||||
echo -e "${YELLOW}디버그 빌드 및 기기 설치 중...${NC}"
|
||||
# 프로비저닝 프로파일 자동 관리 옵션으로 빌드
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Debug -destination "id=$DEVICE_ID" -allowProvisioningUpdates -derivedDataPath build
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}디버그 빌드 실패. 오류를 확인하세요.${NC}"
|
||||
echo -e "${YELLOW}가능한 원인:${NC}"
|
||||
echo "1. 개발자 계정이 유효하지 않거나 로그인되지 않음"
|
||||
echo "2. 프로비저닝 프로파일이 없거나 유효하지 않음"
|
||||
echo "3. 기기가 개발자 모드로 설정되지 않음"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}디버그 빌드 및 기기 설치 성공!${NC}"
|
||||
echo -e "${YELLOW}Apple 개발자 팀 ID를 입력하세요 [${LAST_TEAM_ID:-}]:${NC}"
|
||||
read -r TEAM_ID
|
||||
TEAM_ID=${TEAM_ID:-${LAST_TEAM_ID:-}}
|
||||
echo "LAST_TEAM_ID=$TEAM_ID" >> "$CONFIG_FILE"
|
||||
|
||||
CREATE_IPA="y"
|
||||
else
|
||||
echo -e "${YELLOW}개발자 등록 없이 진행합니다. IPA 파일 생성 기능은 제한됩니다.${NC}"
|
||||
APPLE_ID=""
|
||||
TEAM_ID=""
|
||||
CREATE_IPA="n"
|
||||
fi
|
||||
|
||||
# 빌드 시작
|
||||
echo -e "\n${YELLOW}iOS $CONFIGURATION 빌드를 시작합니다...${NC}"
|
||||
|
||||
# 웹 앱 빌드
|
||||
echo -e "${YELLOW}웹 앱 빌드 중...${NC}"
|
||||
npm run build
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}웹 앱 빌드 중 오류가 발생했습니다.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Capacitor 동기화
|
||||
echo -e "${YELLOW}Capacitor 동기화 중...${NC}"
|
||||
npx cap sync ios
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}Capacitor 동기화 중 오류가 발생했습니다.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# iOS 앱 빌드
|
||||
echo -e "${YELLOW}iOS 네이티브 앱 빌드 중...${NC}"
|
||||
cd ios/App
|
||||
pod install
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}CocoaPods 설치 중 오류가 발생했습니다.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 빌드 타입에 따른 처리
|
||||
if [ "$BUILD_TYPE" = "debug" ]; then
|
||||
# 디버그 빌드
|
||||
echo -e "${YELLOW}디버그 빌드 시작...${NC}"
|
||||
|
||||
# 기본적인 빌드 (IPA 없이)
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Debug -derivedDataPath build
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}디버그 빌드 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}디버그 빌드 성공!${NC}"
|
||||
echo -e "빌드 경로: $(pwd)/build/Build/Products/Debug-iphoneos"
|
||||
|
||||
# 개발자 등록이 된 경우에만 IPA 생성 옵션 제공
|
||||
if [[ "$DEV_REGISTERED" == "y" || "$DEV_REGISTERED" == "Y" ]]; then
|
||||
# IPA 파일 생성 여부 확인
|
||||
echo -e "${YELLOW}IPA 파일을 생성하시겠습니까? (y/n)${NC}"
|
||||
read -r CREATE_IPA
|
||||
if [ "$CREATE_IPA" = "y" ] || [ "$CREATE_IPA" = "Y" ]; then
|
||||
echo -e "${YELLOW}디버그용 IPA 파일을 생성하시겠습니까? (y/n) [${LAST_DEBUG_IPA_CHOICE:-n}]:${NC}"
|
||||
read -r CREATE_DEBUG_IPA
|
||||
CREATE_DEBUG_IPA=${CREATE_DEBUG_IPA:-${LAST_DEBUG_IPA_CHOICE:-n}}
|
||||
echo "LAST_DEBUG_IPA_CHOICE=$CREATE_DEBUG_IPA" >> "$CONFIG_FILE"
|
||||
|
||||
if [[ "$CREATE_DEBUG_IPA" == "y" || "$CREATE_DEBUG_IPA" == "Y" ]]; then
|
||||
echo -e "${YELLOW}디버그용 IPA 파일 생성 중...${NC}"
|
||||
|
||||
# 아카이브 생성
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Debug -destination "generic/platform=iOS" clean archive -archivePath "build/App.xcarchive" -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}아카이브 생성 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 익스포트 옵션 파일 생성
|
||||
cat > build/ExportOptions.plist << EOF
|
||||
# exportOptions.plist 파일 생성
|
||||
cat > exportOptionsDebug.plist << EOF
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
@@ -310,129 +226,96 @@ if [ "$BUILD_TYPE" = "debug" ]; then
|
||||
<key>method</key>
|
||||
<string>development</string>
|
||||
<key>teamID</key>
|
||||
<string>54RZTAU6NX</string>
|
||||
<string>${TEAM_ID}</string>
|
||||
<key>compileBitcode</key>
|
||||
<false/>
|
||||
<key>provisioningProfiles</key>
|
||||
<dict>
|
||||
<key>com.lovable.zellyfinance</key>
|
||||
<string>iOS Team Provisioning Profile: com.lovable.zellyfinance</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
# IPA 생성
|
||||
xcodebuild -exportArchive -archivePath "build/App.xcarchive" -exportPath "build/export" -exportOptionsPlist "build/ExportOptions.plist" -allowProvisioningUpdates
|
||||
# 아카이브 생성
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Debug clean archive -archivePath "build/App-Debug.xcarchive" -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}IPA 생성 실패. 오류를 확인하세요.${NC}"
|
||||
echo -e "${RED}아카이브 생성 실패. 오류를 확인하세요.${NC}"
|
||||
rm exportOptionsDebug.plist
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# IPA 파일 이동
|
||||
DEBUG_IPA_PATH="build/export/App.ipa"
|
||||
DEBUG_DEST_PATH="$HOME/Dev/zellyy-debug.ipa"
|
||||
# IPA 파일 생성
|
||||
xcodebuild -exportArchive -archivePath "build/App-Debug.xcarchive" -exportOptionsPlist exportOptionsDebug.plist -exportPath "build/export-debug" -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
|
||||
rm exportOptionsDebug.plist
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm exportOptionsDebug.plist
|
||||
|
||||
DEBUG_IPA_PATH="build/export-debug/App.ipa"
|
||||
DEBUG_DEST_PATH="$HOME/Dev/zellyy-finance-ios-debug.ipa"
|
||||
|
||||
if [ -f "$DEBUG_IPA_PATH" ]; then
|
||||
echo -e "${GREEN}디버그용 IPA 파일 생성 성공!${NC}"
|
||||
echo -e "IPA 파일 위치: $(pwd)/$DEBUG_IPA_PATH"
|
||||
|
||||
# Dev 디렉토리로 IPA 복사
|
||||
# 홈 디렉토리로 IPA 복사
|
||||
cp "$DEBUG_IPA_PATH" "$DEBUG_DEST_PATH"
|
||||
echo -e "${GREEN}IPA를 Dev 디렉토리에 복사했습니다: $DEBUG_DEST_PATH${NC}"
|
||||
echo -e "${GREEN}IPA를 홈 디렉토리에 복사했습니다: $DEBUG_DEST_PATH${NC}"
|
||||
|
||||
echo -e "${YELLOW}다음 방법으로 다른 기기에 설치할 수 있습니다:${NC}"
|
||||
echo "1. Apple Configurator 2 앱 사용"
|
||||
echo "2. iTunes를 통한 설치"
|
||||
echo "3. 무선 설치 서비스 사용"
|
||||
echo "2. 기기 등록 및 프로비저닝 프로파일이 있는 경우 iTunes로 설치"
|
||||
echo "3. TestFlight를 통한 배포 (App Store Connect에 업로드 필요)"
|
||||
else
|
||||
echo -e "${RED}IPA 파일을 찾을 수 없습니다.${NC}"
|
||||
echo -e "${RED}IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
echo -e "${RED}잘못된 선택입니다. 빌드를 취소합니다.${NC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
elif [ "$BUILD_TYPE" = "release" ]; then
|
||||
# 릴리즈 빌드
|
||||
echo -e "${YELLOW}릴리즈 빌드 시작...${NC}"
|
||||
|
||||
# 개발자 계정 정보 입력
|
||||
echo -e "${YELLOW}Apple 개발자 계정 이메일을 입력하세요 [${LAST_APPLE_ID:-}]:${NC}"
|
||||
read -r APPLE_ID
|
||||
APPLE_ID=${APPLE_ID:-${LAST_APPLE_ID:-}}
|
||||
|
||||
# 설정 저장
|
||||
echo "LAST_APPLE_ID=$APPLE_ID" >> "$CONFIG_FILE"
|
||||
|
||||
# 연결된 기기 확인
|
||||
echo -e "${YELLOW}연결된 iOS 기기 확인 중...${NC}"
|
||||
DEVICE_LIST=$(xcrun xctrace list devices | grep -v "^==" | sed '/^$/d')
|
||||
|
||||
# 실제 기기와 시뮬레이터 분리
|
||||
REAL_DEVICES=$(echo "$DEVICE_LIST" | grep -v "Simulator" | grep -v "MacBook" | grep -v "Mac")
|
||||
SIMULATORS=$(echo "$DEVICE_LIST" | grep "Simulator" || echo "")
|
||||
|
||||
# 기기 목록 표시
|
||||
echo -e "${YELLOW}연결된 실제 기기:${NC}"
|
||||
if [ -z "$REAL_DEVICES" ]; then
|
||||
echo "연결된 실제 기기가 없습니다."
|
||||
echo "USB 케이블로 iOS 기기를 연결하고 다시 시도하세요."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 실제 기기 목록 표시 (번호 부여)
|
||||
DEVICE_COUNTER=1
|
||||
DEVICE_ARRAY=()
|
||||
DEVICE_ID_ARRAY=()
|
||||
|
||||
while IFS= read -r line; do
|
||||
DEVICE_NAME=$(echo "$line" | sed -E 's/^(.*) \(([0-9\.]+)\) \((.*)\)$/\1/')
|
||||
DEVICE_OS=$(echo "$line" | sed -E 's/^(.*) \(([0-9\.]+)\) \((.*)\)$/\2/')
|
||||
DEVICE_ID=$(echo "$line" | sed -E 's/^(.*) \(([0-9\.]+)\) \((.*)\)$/\3/')
|
||||
else
|
||||
echo -e "${YELLOW}개발자 등록이 필요하여 IPA 파일 생성 단계를 건너뜁니다.${NC}"
|
||||
echo -e "${YELLOW}시뮬레이터에서 앱을 테스트하거나 Apple 개발자 계정을 등록하세요.${NC}"
|
||||
fi
|
||||
|
||||
echo "$DEVICE_COUNTER) $DEVICE_NAME (iOS $DEVICE_OS)"
|
||||
DEVICE_ARRAY+=("$DEVICE_NAME")
|
||||
DEVICE_ID_ARRAY+=("$DEVICE_ID")
|
||||
((DEVICE_COUNTER++))
|
||||
done <<< "$REAL_DEVICES"
|
||||
|
||||
# 기기 선택
|
||||
echo -e "${YELLOW}빌드 및 설치할 기기 번호를 선택하세요 [${LAST_DEVICE_INDEX:-1}]:${NC}"
|
||||
read -r DEVICE_INDEX
|
||||
DEVICE_INDEX=${DEVICE_INDEX:-${LAST_DEVICE_INDEX:-1}}
|
||||
|
||||
# 인덱스 범위 검증
|
||||
if ! [[ "$DEVICE_INDEX" =~ ^[0-9]+$ ]] || [ "$DEVICE_INDEX" -lt 1 ] || [ "$DEVICE_INDEX" -gt ${#DEVICE_ARRAY[@]} ]; then
|
||||
echo -e "${RED}잘못된 기기 번호입니다. 1부터 ${#DEVICE_ARRAY[@]} 사이의 숫자를 입력하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 선택된 기기 정보
|
||||
SELECTED_INDEX=$((DEVICE_INDEX-1))
|
||||
DEVICE_NAME="${DEVICE_ARRAY[$SELECTED_INDEX]}"
|
||||
DEVICE_ID="${DEVICE_ID_ARRAY[$SELECTED_INDEX]}"
|
||||
echo -e "${YELLOW}선택된 기기: $DEVICE_NAME (ID: $DEVICE_ID)${NC}"
|
||||
|
||||
# 설정 저장
|
||||
echo "LAST_DEVICE_INDEX=$DEVICE_INDEX" >> "$CONFIG_FILE"
|
||||
|
||||
# 아카이브 생성
|
||||
echo -e "${YELLOW}App Store 배포용 아카이브 생성 중...${NC}"
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Release -destination "id=$DEVICE_ID" clean archive -archivePath "build/App.xcarchive" -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}아카이브 생성 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 익스포트 옵션 파일 생성
|
||||
cat > build/ExportOptions.plist << EOF
|
||||
elif [ "$BUILD_TYPE" = "release" ]; then
|
||||
# 릴리즈 빌드
|
||||
echo -e "${YELLOW}릴리즈 빌드 시작...${NC}"
|
||||
|
||||
# 기본 Xcode 빌드
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Release -derivedDataPath build
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}릴리즈 빌드 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}릴리즈 빌드 성공!${NC}"
|
||||
echo -e "빌드 경로: $(pwd)/build/Build/Products/Release-iphoneos"
|
||||
|
||||
# 개발자 등록이 된 경우에만 아카이브 생성 옵션 제공
|
||||
if [[ "$DEV_REGISTERED" == "y" || "$DEV_REGISTERED" == "Y" ]]; then
|
||||
# App Store 배포용 아카이브 생성 여부 확인
|
||||
echo -e "${YELLOW}App Store 배포용 아카이브를 생성하시겠습니까? (y/n) [${LAST_RELEASE_ARCHIVE_CHOICE:-n}]:${NC}"
|
||||
read -r CREATE_RELEASE_ARCHIVE
|
||||
CREATE_RELEASE_ARCHIVE=${CREATE_RELEASE_ARCHIVE:-${LAST_RELEASE_ARCHIVE_CHOICE:-n}}
|
||||
echo "LAST_RELEASE_ARCHIVE_CHOICE=$CREATE_RELEASE_ARCHIVE" >> "$CONFIG_FILE"
|
||||
|
||||
if [[ "$CREATE_RELEASE_ARCHIVE" == "y" || "$CREATE_RELEASE_ARCHIVE" == "Y" ]]; then
|
||||
echo -e "${YELLOW}App Store 배포용 아카이브 생성 중...${NC}"
|
||||
|
||||
# 아카이브 생성
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Release clean archive -archivePath "build/App.xcarchive" -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}아카이브 생성 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}아카이브 생성 성공!${NC}"
|
||||
echo -e "아카이브 위치: $(pwd)/build/App.xcarchive"
|
||||
|
||||
# exportOptions.plist 파일 생성
|
||||
cat > exportOptions.plist << EOF
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
@@ -440,58 +323,69 @@ elif [ "$BUILD_TYPE" = "release" ]; then
|
||||
<key>method</key>
|
||||
<string>app-store</string>
|
||||
<key>teamID</key>
|
||||
<string>54RZTAU6NX</string>
|
||||
<key>uploadSymbols</key>
|
||||
<true/>
|
||||
<string>${TEAM_ID}</string>
|
||||
<key>uploadBitcode</key>
|
||||
<false/>
|
||||
<key>uploadSymbols</key>
|
||||
<true/>
|
||||
<key>provisioningProfiles</key>
|
||||
<dict>
|
||||
<key>com.lovable.zellyfinance</key>
|
||||
<string>Zellyy Finance Distribution</string>
|
||||
<string>Zellyy Finance App Store</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
# IPA 생성
|
||||
echo -e "${YELLOW}App Store 제출용 IPA 파일 생성 중...${NC}"
|
||||
xcodebuild -exportArchive -archivePath "build/App.xcarchive" -exportPath "build/export" -exportOptionsPlist "build/ExportOptions.plist" -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}IPA 생성 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
IPA_PATH="build/export/App.ipa"
|
||||
DEST_PATH="$HOME/Dev/zellyy-release/zellyy-ios.ipa"
|
||||
|
||||
if [ -f "$IPA_PATH" ]; then
|
||||
echo -e "${GREEN}IPA 파일 생성 성공!${NC}"
|
||||
echo -e "IPA 파일 위치: $(pwd)/$IPA_PATH"
|
||||
|
||||
# 저장 디렉토리 확인 및 생성
|
||||
RELEASE_DIR="$HOME/Dev/zellyy-release"
|
||||
if [ ! -d "$RELEASE_DIR" ]; then
|
||||
mkdir -p "$RELEASE_DIR"
|
||||
|
||||
# IPA 파일 생성
|
||||
echo -e "${YELLOW}IPA 파일 생성 중...${NC}"
|
||||
xcodebuild -exportArchive -archivePath "build/App.xcarchive" -exportOptionsPlist exportOptions.plist -exportPath "build/export" -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
|
||||
rm exportOptions.plist
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm exportOptions.plist
|
||||
|
||||
IPA_PATH="build/export/App.ipa"
|
||||
DEST_PATH="$HOME/Dev/zellyy-finance-ios.ipa"
|
||||
|
||||
if [ -f "$IPA_PATH" ]; then
|
||||
echo -e "${GREEN}IPA 파일 생성 성공!${NC}"
|
||||
echo -e "IPA 파일 위치: $(pwd)/$IPA_PATH"
|
||||
|
||||
# 홈 디렉토리로 IPA 복사
|
||||
cp "$IPA_PATH" "$DEST_PATH"
|
||||
echo -e "${GREEN}IPA를 홈 디렉토리에 복사했습니다: $DEST_PATH${NC}"
|
||||
|
||||
echo -e "${YELLOW}다음 단계:${NC}"
|
||||
echo "1. App Store Connect에 로그인: https://appstoreconnect.apple.com"
|
||||
echo "2. 앱 > 젤리의 적자탈출 > iOS 앱 > 빌드 섹션으로 이동"
|
||||
echo "3. Transporter 앱을 사용하여 IPA 파일 업로드: $DEST_PATH"
|
||||
echo "4. 검토 과정이 완료될 때까지 기다리기 (보통 몇 시간에서 24시간 소요)"
|
||||
else
|
||||
echo -e "${RED}IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}개발자 등록이 필요하여 아카이브 생성 단계를 건너뜁니다.${NC}"
|
||||
echo -e "${YELLOW}시뮬레이터에서 앱을 테스트하거나 Apple 개발자 계정을 등록하세요.${NC}"
|
||||
fi
|
||||
|
||||
# Dev 디렉토리로 IPA 복사
|
||||
cp "$IPA_PATH" "$DEST_PATH"
|
||||
echo -e "${GREEN}IPA를 저장했습니다: $DEST_PATH${NC}"
|
||||
|
||||
echo -e "${YELLOW}다음 단계:${NC}"
|
||||
echo "1. App Store Connect에 로그인: https://appstoreconnect.apple.com"
|
||||
echo "2. 앱 업로드 도구(Application Loader)를 사용하여 IPA 파일 업로드"
|
||||
echo "3. 또는 다음 명령어로 직접 업로드: xcrun altool --upload-app -f \"$DEST_PATH\" -t ios -u \"$APPLE_ID\" -p \"앱 전용 비밀번호\""
|
||||
else
|
||||
echo -e "${RED}IPA 파일을 찾을 수 없습니다.${NC}"
|
||||
echo -e "${RED}지원되지 않는 빌드 타입입니다: $BUILD_TYPE${NC}"
|
||||
echo -e "${YELLOW}사용법: ./build-ios.sh${NC}"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}알 수 없는 빌드 타입입니다: $BUILD_TYPE${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "\n${GREEN}빌드 프로세스가 완료되었습니다.${NC}"
|
||||
echo -e "빌드 종료 시간: $(date)"
|
||||
exit 0
|
||||
# 빌드 완료 후 인증서 신뢰 안내 표시
|
||||
show_certificate_trust_guide
|
||||
|
||||
echo -e "${GREEN}빌드 프로세스 완료: $(date)${NC}"
|
||||
}
|
||||
|
||||
# 메인 프로그램 시작
|
||||
show_main_menu
|
||||
|
||||
127
ios-version-manager.sh
Executable file
127
ios-version-manager.sh
Executable file
@@ -0,0 +1,127 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user