빌드 스크립트 개선: 안드로이드 버전 정보 파일 동기화 및 iOS 빌드 스크립트 수정
This commit is contained in:
24
build-apk.sh
24
build-apk.sh
@@ -87,14 +87,30 @@ rm -rf dist
|
||||
echo -e "${GREEN}빌드 캐시가 삭제되었습니다.${NC}"
|
||||
|
||||
# 빌드 넘버 및 버전 코드 업데이트
|
||||
echo -e "${YELLOW}build.gradle 파일 업데이트 중...${NC}"
|
||||
# 빌드 넘버 업데이트
|
||||
echo -e "${YELLOW}버전 정보 파일 업데이트 중...${NC}"
|
||||
|
||||
# version.properties 파일 업데이트
|
||||
echo "buildNumber=$BUILD_NUMBER" > android/version.properties
|
||||
echo "versionCode=$NEW_VERSION_CODE" >> android/version.properties
|
||||
echo "versionName=$(grep -o 'versionName "[^"]*"' android/app/build.gradle | sed 's/versionName "//' | sed 's/"//')" >> android/version.properties
|
||||
|
||||
# app_version.json 파일 업데이트
|
||||
VERSION_NAME=$(grep -o 'versionName "[^"]*"' android/app/build.gradle | sed 's/versionName "//' | sed 's/"//')
|
||||
cat > android/app_version.json << EOF
|
||||
{
|
||||
"versionCode": $NEW_VERSION_CODE,
|
||||
"versionName": "$VERSION_NAME",
|
||||
"buildNumber": $BUILD_NUMBER,
|
||||
"notes": "사용자가 수정한 버전 정보입니다. 이 파일을 편집하여 앱 버전 정보를 변경할 수 있습니다."
|
||||
}
|
||||
EOF
|
||||
|
||||
# build.gradle 파일 업데이트 (이전 방식 유지)
|
||||
sed -i '' "s/buildConfigField \"int\", \"BUILD_NUMBER\", \"[0-9]*\"/buildConfigField \"int\", \"BUILD_NUMBER\", \"$BUILD_NUMBER\"/" android/app/build.gradle
|
||||
# 버전 코드 업데이트
|
||||
sed -i '' "s/versionCode [0-9]*/versionCode $NEW_VERSION_CODE/" android/app/build.gradle
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}build.gradle 업데이트 실패. 빌드 프로세스를 중단합니다.${NC}"
|
||||
echo -e "${RED}버전 정보 파일 업데이트 실패. 빌드 프로세스를 중단합니다.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}빌드 넘버가 ${BUILD_NUMBER}(으)로, 버전 코드가 ${NEW_VERSION_CODE}(으)로 업데이트되었습니다.${NC}"
|
||||
|
||||
385
build-ios.sh
Normal file → Executable file
385
build-ios.sh
Normal file → Executable file
@@ -12,24 +12,90 @@ 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
|
||||
fi
|
||||
|
||||
# 빌드 타입 선택 메뉴
|
||||
echo -e "${YELLOW}Zellyy Finance iOS 앱 빌드 스크립트${NC}"
|
||||
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): "
|
||||
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}"
|
||||
@@ -41,55 +107,28 @@ case $CHOICE in
|
||||
;;
|
||||
esac
|
||||
|
||||
# 현재 버전 및 빌드 번호 가져오기
|
||||
MARKETING_VERSION=$(grep -A 1 "MARKETING_VERSION" ios/App/App.xcodeproj/project.pbxproj | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+' | head -1)
|
||||
CURRENT_PROJECT_VERSION=$(grep -A 1 "CURRENT_PROJECT_VERSION" ios/App/App.xcodeproj/project.pbxproj | grep -o '[0-9]\+' | head -1)
|
||||
echo -e "${YELLOW}Zellyy Finance iOS 앱 빌드 시작 (${BUILD_TYPE}, 마케팅 버전: ${MARKETING_VERSION}, 빌드 번호: ${NEW_PROJECT_VERSION}): $(date)${NC}"
|
||||
|
||||
echo -e "${YELLOW}현재 마케팅 버전: ${MARKETING_VERSION}${NC}"
|
||||
echo -e "${YELLOW}현재 빌드 번호: ${CURRENT_PROJECT_VERSION}${NC}"
|
||||
|
||||
# 빌드 넘버 입력 받기
|
||||
echo -e "${YELLOW}새 빌드 번호를 입력하세요 (현재: ${CURRENT_PROJECT_VERSION}):${NC}"
|
||||
read -r BUILD_NUMBER
|
||||
|
||||
# 빌드 넘버 유효성 검사
|
||||
if ! [[ "$BUILD_NUMBER" =~ ^[0-9]+$ ]]; then
|
||||
echo -e "${RED}유효하지 않은 빌드 번호입니다. 숫자만 입력해주세요.${NC}"
|
||||
exit 1
|
||||
# 빌드 디렉토리 문제 해결
|
||||
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
|
||||
|
||||
# 릴리즈 빌드인 경우 마케팅 버전 업데이트 여부 확인
|
||||
if [[ "$BUILD_TYPE" == "release" ]]; then
|
||||
echo -e "${YELLOW}마케팅 버전을 업데이트하시겠습니까? 현재 버전: ${MARKETING_VERSION} (y/n)${NC}"
|
||||
read -r UPDATE_VERSION
|
||||
if [[ "$UPDATE_VERSION" == "y" || "$UPDATE_VERSION" == "Y" ]]; then
|
||||
echo -e "${YELLOW}새 마케팅 버전을 입력하세요 (형식: x.y.z):${NC}"
|
||||
read -r NEW_MARKETING_VERSION
|
||||
|
||||
# 마케팅 버전 유효성 검사
|
||||
if ! [[ "$NEW_MARKETING_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
echo -e "${RED}유효하지 않은 마케팅 버전입니다. x.y.z 형식으로 입력해주세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}마케팅 버전이 ${NEW_MARKETING_VERSION}(으)로 업데이트됩니다.${NC}"
|
||||
# 마케팅 버전 업데이트
|
||||
sed -i '' "s/MARKETING_VERSION = $MARKETING_VERSION;/MARKETING_VERSION = $NEW_MARKETING_VERSION;/g" ios/App/App.xcodeproj/project.pbxproj
|
||||
MARKETING_VERSION=$NEW_MARKETING_VERSION
|
||||
fi
|
||||
# 캐시 정리
|
||||
echo -e "${YELLOW}캐시 정리 중...${NC}"
|
||||
if [ -d "node_modules/.cache" ]; then
|
||||
rm -rf node_modules/.cache
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}Zellyy Finance iOS 앱 빌드 시작 (${BUILD_TYPE}, 마케팅 버전: ${MARKETING_VERSION}, 빌드 번호: ${BUILD_NUMBER}): $(date)${NC}"
|
||||
|
||||
# 빌드 번호 업데이트
|
||||
echo -e "${YELLOW}project.pbxproj 파일 업데이트 중...${NC}"
|
||||
sed -i '' "s/CURRENT_PROJECT_VERSION = $CURRENT_PROJECT_VERSION;/CURRENT_PROJECT_VERSION = $BUILD_NUMBER;/g" ios/App/App.xcodeproj/project.pbxproj
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}project.pbxproj 업데이트 실패. 빌드 프로세스를 중단합니다.${NC}"
|
||||
exit 1
|
||||
if [ -d "ios/App/App/public" ]; then
|
||||
rm -rf ios/App/App/public
|
||||
fi
|
||||
echo -e "${GREEN}빌드 번호가 ${BUILD_NUMBER}(으)로 업데이트되었습니다.${NC}"
|
||||
|
||||
# 1. 웹 앱 빌드
|
||||
echo -e "${YELLOW}1. 웹 앱 빌드 중...${NC}"
|
||||
@@ -172,104 +211,143 @@ if [ "$BUILD_TYPE" = "debug" ]; then
|
||||
echo -e "${YELLOW}실제 기기용 빌드 시작...${NC}"
|
||||
|
||||
# 개발자 계정 정보 입력
|
||||
echo -e "${YELLOW}Apple 개발자 계정 이메일을 입력하세요:${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}"
|
||||
CONNECTED_DEVICES=$(xcrun xctrace list devices 2>/dev/null | grep -v "Simulator" | grep -v "===" | grep -v "^$" | grep -v "Devices" | sed 's/ (.*)//')
|
||||
DEVICE_LIST=$(xcrun xctrace list devices | grep -v "^==" | sed '/^$/d')
|
||||
|
||||
if [ -z "$CONNECTED_DEVICES" ]; then
|
||||
echo -e "${RED}연결된 iOS 기기가 없습니다. 기기를 연결하고 다시 시도하세요.${NC}"
|
||||
# 실제 기기와 시뮬레이터 분리
|
||||
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
|
||||
|
||||
echo -e "${YELLOW}연결된 기기:${NC}"
|
||||
echo "$CONNECTED_DEVICES"
|
||||
# 실제 기기 목록 표시 (번호 부여)
|
||||
DEVICE_COUNTER=1
|
||||
DEVICE_ARRAY=()
|
||||
DEVICE_ID_ARRAY=()
|
||||
|
||||
echo -e "${YELLOW}빌드 및 설치할 기기 이름을 정확히 입력하세요:${NC}"
|
||||
read -r DEVICE_NAME
|
||||
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 "name=$DEVICE_NAME" -allowProvisioningUpdates -derivedDataPath build
|
||||
# 프로비저닝 프로파일 자동 관리 옵션으로 빌드
|
||||
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. 기기가 개발자 계정에 등록되지 않음"
|
||||
echo "4. 기기 이름을 정확히 입력하지 않음"
|
||||
echo -e "${YELLOW}해결 방법:${NC}"
|
||||
echo "1. Xcode에서 수동으로 프로젝트를 열고 계정 설정 확인"
|
||||
echo "2. Xcode > Settings > Accounts에서 Apple ID 로그인 확인"
|
||||
echo "3. 기기를 개발자 계정에 등록 (Xcode > Window > Devices and Simulators)"
|
||||
echo "3. 기기가 개발자 모드로 설정되지 않음"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}디버그 빌드 및 기기 설치 성공!${NC}"
|
||||
echo -e "${YELLOW}앱이 '$DEVICE_NAME' 기기에 설치되었습니다.${NC}"
|
||||
|
||||
# IPA 파일 생성 (선택 사항)
|
||||
echo -e "${YELLOW}디버그용 IPA 파일을 생성하시겠습니까? (y/n)${NC}"
|
||||
# IPA 파일 생성 여부 확인
|
||||
echo -e "${YELLOW}IPA 파일을 생성하시겠습니까? (y/n)${NC}"
|
||||
read -r CREATE_IPA
|
||||
if [ "$CREATE_IPA" = "y" ] || [ "$CREATE_IPA" = "Y" ]; then
|
||||
echo -e "${YELLOW}디버그용 IPA 파일 생성 중...${NC}"
|
||||
|
||||
# 임시 exportOptions.plist 생성
|
||||
cat > exportOptionsDebug.plist << EOF
|
||||
# 아카이브 생성
|
||||
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
|
||||
<?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">
|
||||
<dict>
|
||||
<key>method</key>
|
||||
<string>development</string>
|
||||
<key>signingStyle</key>
|
||||
<string>automatic</string>
|
||||
<key>stripSwiftSymbols</key>
|
||||
<key>teamID</key>
|
||||
<string>54RZTAU6NX</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
|
||||
|
||||
# 아카이브 생성
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Debug clean archive -archivePath "build/App-Debug.xcarchive" -allowProvisioningUpdates
|
||||
# IPA 생성
|
||||
xcodebuild -exportArchive -archivePath "build/App.xcarchive" -exportPath "build/export" -exportOptionsPlist "build/ExportOptions.plist" -allowProvisioningUpdates
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}아카이브 생성 실패. 오류를 확인하세요.${NC}"
|
||||
rm exportOptionsDebug.plist
|
||||
echo -e "${RED}IPA 생성 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 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"
|
||||
# IPA 파일 이동
|
||||
DEBUG_IPA_PATH="build/export/App.ipa"
|
||||
DEBUG_DEST_PATH="$HOME/Dev/zellyy-debug.ipa"
|
||||
|
||||
if [ -f "$DEBUG_IPA_PATH" ]; then
|
||||
echo -e "${GREEN}디버그용 IPA 파일 생성 성공!${NC}"
|
||||
echo -e "IPA 파일 위치: $(pwd)/$DEBUG_IPA_PATH"
|
||||
|
||||
# 홈 디렉토리로 IPA 복사
|
||||
# Dev 디렉토리로 IPA 복사
|
||||
cp "$DEBUG_IPA_PATH" "$DEBUG_DEST_PATH"
|
||||
echo -e "${GREEN}IPA를 홈 디렉토리에 복사했습니다: $DEBUG_DEST_PATH${NC}"
|
||||
echo -e "${GREEN}IPA를 Dev 디렉토리에 복사했습니다: $DEBUG_DEST_PATH${NC}"
|
||||
|
||||
echo -e "${YELLOW}다음 방법으로 다른 기기에 설치할 수 있습니다:${NC}"
|
||||
echo "1. Apple Configurator 2 앱 사용"
|
||||
echo "2. 기기 등록 및 프로비저닝 프로파일이 있는 경우 iTunes로 설치"
|
||||
echo "3. TestFlight를 통한 배포 (App Store Connect에 업로드 필요)"
|
||||
echo "2. iTunes를 통한 설치"
|
||||
echo "3. 무선 설치 서비스 사용"
|
||||
else
|
||||
echo -e "${RED}IPA 파일 생성 실패. 오류를 확인하세요.${NC}"
|
||||
echo -e "${RED}IPA 파일을 찾을 수 없습니다.${NC}"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
@@ -282,57 +360,138 @@ EOF
|
||||
|
||||
elif [ "$BUILD_TYPE" = "release" ]; then
|
||||
# 릴리즈 빌드
|
||||
echo -e "${YELLOW}App Store 배포용 아카이브 생성 중...${NC}"
|
||||
echo -e "${YELLOW}릴리즈 빌드 시작...${NC}"
|
||||
|
||||
# 개발자 계정 정보 입력
|
||||
echo -e "${YELLOW}Apple 개발자 계정 이메일을 입력하세요:${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/')
|
||||
|
||||
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"
|
||||
|
||||
# 아카이브 생성
|
||||
xcodebuild -workspace App.xcworkspace -scheme App -configuration Release clean archive -archivePath "build/App.xcarchive" -allowProvisioningUpdates
|
||||
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
|
||||
|
||||
echo -e "${GREEN}아카이브 생성 성공!${NC}"
|
||||
echo -e "아카이브 위치: $(pwd)/build/App.xcarchive"
|
||||
# 익스포트 옵션 파일 생성
|
||||
cat > build/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">
|
||||
<dict>
|
||||
<key>method</key>
|
||||
<string>app-store</string>
|
||||
<key>teamID</key>
|
||||
<string>54RZTAU6NX</string>
|
||||
<key>uploadSymbols</key>
|
||||
<true/>
|
||||
<key>uploadBitcode</key>
|
||||
<false/>
|
||||
<key>provisioningProfiles</key>
|
||||
<dict>
|
||||
<key>com.lovable.zellyfinance</key>
|
||||
<string>Zellyy Finance Distribution</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
# IPA 파일 생성
|
||||
echo -e "${YELLOW}IPA 파일 생성 중...${NC}"
|
||||
xcodebuild -exportArchive -archivePath "build/App.xcarchive" -exportOptionsPlist exportOptions.plist -exportPath "build/export" -allowProvisioningUpdates
|
||||
# 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}"
|
||||
echo -e "${RED}IPA 생성 실패. 오류를 확인하세요.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
IPA_PATH="build/export/App.ipa"
|
||||
DEST_PATH="$HOME/Dev/zellyy-finance-ios.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"
|
||||
|
||||
# 홈 디렉토리로 IPA 복사
|
||||
# 저장 디렉토리 확인 및 생성
|
||||
RELEASE_DIR="$HOME/Dev/zellyy-release"
|
||||
if [ ! -d "$RELEASE_DIR" ]; then
|
||||
mkdir -p "$RELEASE_DIR"
|
||||
fi
|
||||
|
||||
# Dev 디렉토리로 IPA 복사
|
||||
cp "$IPA_PATH" "$DEST_PATH"
|
||||
echo -e "${GREEN}IPA를 홈 디렉토리에 복사했습니다: $DEST_PATH${NC}"
|
||||
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시간 소요)"
|
||||
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}"
|
||||
exit 1
|
||||
echo -e "${RED}IPA 파일을 찾을 수 없습니다.${NC}"
|
||||
fi
|
||||
|
||||
else
|
||||
echo -e "${RED}지원되지 않는 빌드 타입입니다: $BUILD_TYPE${NC}"
|
||||
echo -e "${YELLOW}사용법: ./build-ios.sh${NC}"
|
||||
echo -e "${RED}알 수 없는 빌드 타입입니다: $BUILD_TYPE${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}빌드 프로세스 완료: $(date)${NC}"
|
||||
echo -e "\n${GREEN}빌드 프로세스가 완료되었습니다.${NC}"
|
||||
echo -e "빌드 종료 시간: $(date)"
|
||||
exit 0
|
||||
|
||||
Reference in New Issue
Block a user