Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
d6712ac
맵시 PRD에 맞는 기능 구현 확인 점검 필요 : feat : phase1 인증 관련 로직 구현 https://github.…
Cassiiopeia Jan 28, 2026
8e930ab
MapSy-FE 버전 관리 : docs : v1.0.19 README 버전 정보 업데이트 [skip ci]
actions-user Jan 28, 2026
5bce1fe
맵시 PRD에 맞는 기능 구현 확인 점검 필요 : feat : phase1 인증 관련 로직 구현2 https://github…
Cassiiopeia Jan 28, 2026
aac008d
chore : 민감한 파일 업데이트
Cassiiopeia Jan 28, 2026
8cf3a81
MapSy-FE 버전 정보 관리: chore: 버전 1.0.20 [skip ci]
actions-user Jan 28, 2026
0e127aa
Merge branch 'main' into 20260128_#14_맵시_PRD에_맞는_기능_구현_확인_점검_필요
Cassiiopeia Jan 28, 2026
09b0c59
chore : 불필요한 파일 podfile.lock macos 추가
Cassiiopeia Jan 28, 2026
aebec39
chore : 버전업글
Cassiiopeia Jan 28, 2026
5aa0566
fix(ios): Share Extension 시뮬레이터 설치 오류 수정
Cassiiopeia Jan 28, 2026
ce18137
맵시 PRD에 맞는 기능 구현 확인 점검 필요 : feat : phase 1 구현 https://github.com/MapS…
Cassiiopeia Jan 28, 2026
9d1c3a4
맵시 PRD에 맞는 기능 구현 확인 점검 필요 : fix : 워크플로우 파일에 permissions 블록을 추가 https:…
Cassiiopeia Feb 4, 2026
cbe6f63
맵시 PRD에 맞는 기능 구현 확인 점검 필요 : fix : ConsumerStatefulWidget로 스플래쉬 페이지 변경…
Cassiiopeia Feb 4, 2026
df992c1
Merge pull request #16 from MapSee-Lab/20260128_#14_맵시_PRD에_맞는_기능_구현_…
Cassiiopeia Feb 4, 2026
cab1888
MapSy-FE 버전 정보 관리: chore: 버전 1.0.21 [skip ci]
actions-user Feb 4, 2026
ef2248a
맵시 PRD에 맞는 기능 구현 확인 점검 필요 : fix : formating 처리 https://github.com/Map…
Cassiiopeia Feb 4, 2026
55e2dc0
MapSy-FE 버전 정보 관리: chore: 버전 1.0.22 [skip ci]
actions-user Feb 4, 2026
bae40d4
맵시 PRD에 맞는 기능 구현 확인 점검 필요 : fix : 지존 cicd 수정 https://github.com/MapSe…
Cassiiopeia Feb 4, 2026
5529b11
맵시 PRD에 맞는 기능 구현 확인 점검 필요 : fix : macOS 수정 keystore 수정 https://github…
Cassiiopeia Feb 4, 2026
2a19e12
Merge branch 'main' of https://github.com/MapSee-Lab/MapSy-FE
Cassiiopeia Feb 4, 2026
bd40ca6
MapSy-FE 버전 정보 관리: chore: 버전 1.0.23 [skip ci]
actions-user Feb 4, 2026
060eb1b
맵시 PRD에 맞는 기능 구현 확인 점검 필요 : fix : 안드로이드 경로 버그 문제 해결 및 macos 26으로 전체적으…
Cassiiopeia Feb 4, 2026
846124f
MapSy-FE 버전 정보 관리: chore: 버전 1.0.24 [skip ci]
actions-user Feb 4, 2026
e1a07d7
맵시 PRD에 맞는 기능 구현 확인 점검 필요 : fix : 올바른 프로젝트 빌드방식 채택으로 수정 https://githu…
Cassiiopeia Feb 4, 2026
359fef0
Merge branch 'main' of https://github.com/MapSee-Lab/MapSy-FE
Cassiiopeia Feb 4, 2026
4ae7291
MapSy-FE 버전 정보 관리: chore: 버전 1.0.25 [skip ci]
actions-user Feb 4, 2026
c210bec
맵시 PRD에 맞는 기능 구현 확인 점검 필요 : fix : .dup 으로 문자열복사해서 mutable 객체를 생성해 Fas…
Cassiiopeia Feb 4, 2026
2206148
Merge branch 'main' of https://github.com/MapSee-Lab/MapSy-FE
Cassiiopeia Feb 4, 2026
684d607
MapSy-FE 버전 정보 관리: chore: 버전 1.0.26 [skip ci]
actions-user Feb 4, 2026
5dc9ce5
macos26 , Ruby 3.4 버전대 flutter ios 빌드 및 changeLog 업데이트 하는 경우 Fastlane…
Cassiiopeia Feb 4, 2026
c76371d
macos26 , Ruby 3.4 버전대 flutter ios 빌드 및 changeLog 업데이트 하는 경우 Fastlane…
Cassiiopeia Feb 4, 2026
5fda53d
MapSy-FE 버전 정보 관리: chore: 버전 1.0.27 [skip ci]
actions-user Feb 4, 2026
ea36d05
Merge pull request #17 from MapSee-Lab/20260128_#14_맵시_PRD에_맞는_기능_구현_…
Cassiiopeia Feb 4, 2026
228608b
MapSy-FE 버전 정보 관리: chore: 버전 1.0.28 [skip ci]
actions-user Feb 4, 2026
ac57e6d
macos26 , Ruby 3.4 버전대 flutter ios 빌드 및 changeLog 업데이트 하는 경우 Fastlane…
Cassiiopeia Feb 4, 2026
b265884
MapSy-FE 버전 정보 관리: chore: 버전 1.0.29 [skip ci]
actions-user Feb 4, 2026
3b2f882
Merge branch 'deploy' into main
Cassiiopeia Feb 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .github/workflows/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -178,12 +178,13 @@ jobs:
echo "✅ .env 파일 생성됨 (크기: $(wc -c < .env) bytes)"

# Release Keystore 설정
# build.gradle.kts에서 rootProject.file()을 사용하므로 android/ 기준으로 경로 설정
- name: Setup Release Keystore
run: |
mkdir -p android/app/keystore
echo "${{ secrets.RELEASE_KEYSTORE_BASE64 }}" | base64 -d > android/app/keystore/key.jks
mkdir -p android/keystore
echo "${{ secrets.RELEASE_KEYSTORE_BASE64 }}" | base64 -d > android/keystore/key.jks
echo "✅ Release Keystore 생성 완료"
ls -la android/app/keystore/
ls -la android/keystore/

# key.properties 생성 (Release 서명 정보)
- name: Create key.properties
Expand Down
9 changes: 5 additions & 4 deletions .github/workflows/PROJECT-FLUTTER-ANDROID-SYNOLOGY-CICD.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,14 @@ jobs:
ls -la

# Keystore와 key.properties 설정
# build.gradle.kts에서 rootProject.file()을 사용하므로 android/ 기준으로 경로 설정
- name: Setup Keystore and key.properties
run: |
mkdir -p android/app/keystore
echo "${{ secrets.DEBUG_KEYSTORE }}" | base64 -d > android/app/keystore/key.jks || echo "Base64 decoding failed"
mkdir -p android/keystore
echo "${{ secrets.DEBUG_KEYSTORE }}" | base64 -d > android/keystore/key.jks || echo "Base64 decoding failed"
echo "Keystore created from DEBUG_KEYSTORE"
ls -la android/app/keystore
echo "storeFile=app/keystore/key.jks" > android/key.properties
ls -la android/keystore
echo "storeFile=keystore/key.jks" > android/key.properties
echo "storePassword=android" >> android/key.properties
echo "keyAlias=androiddebugkey" >> android/key.properties
echo "keyPassword=android" >> android/key.properties
Expand Down
66 changes: 27 additions & 39 deletions .github/workflows/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ on:
repository_dispatch:
types: [build-android-app]

permissions:
contents: read
issues: write
pull-requests: write

# ============================================
# 🔧 프로젝트별 설정 (아래 값들을 수정하세요)
# ============================================
Expand Down Expand Up @@ -335,42 +340,30 @@ jobs:
- name: Pull latest changes
run: git pull origin ${{ github.event_name == 'repository_dispatch' && github.event.client_payload.branch_name || github.ref_name }}

# Debug Keystore 설정 (선택적)
- name: Setup Debug Keystore
run: |
mkdir -p ~/.android
if [ -n "${{ secrets.DEBUG_KEYSTORE }}" ]; then
echo "${{ secrets.DEBUG_KEYSTORE }}" | base64 -d > ~/.android/debug.keystore
echo "✅ Debug Keystore created from secrets"
else
echo "ℹ️ DEBUG_KEYSTORE secret not provided, using default"
fi
ls -la ~/.android/ || true

# .env 파일 생성
- name: Create .env file
run: |
cat << 'EOF' > ${{ env.ENV_FILE_PATH }}
${{ secrets.ENV_FILE || secrets.ENV }}
EOF
echo "${{ secrets.ENV_FILE || secrets.ENV }}" > ${{ env.ENV_FILE_PATH }}
echo "✅ ${{ env.ENV_FILE_PATH }} file created"

# Keystore와 key.properties 설정 (선택적)
- name: Setup Keystore and key.properties
# Release Keystore 설정 (Play Store 워크플로우와 동일한 방식)
- name: Setup Release Keystore
run: |
mkdir -p android/app/keystore
if [ -n "${{ secrets.DEBUG_KEYSTORE }}" ]; then
echo "${{ secrets.DEBUG_KEYSTORE }}" | base64 -d > android/app/keystore/key.jks
echo "✅ Keystore created from DEBUG_KEYSTORE"
echo "storeFile=app/keystore/key.jks" > android/key.properties
echo "storePassword=android" >> android/key.properties
echo "keyAlias=androiddebugkey" >> android/key.properties
echo "keyPassword=android" >> android/key.properties
echo "✅ key.properties created"
else
echo "ℹ️ DEBUG_KEYSTORE not provided, skipping keystore setup"
fi
ls -la android/ || true
mkdir -p android/keystore
echo "${{ secrets.RELEASE_KEYSTORE_BASE64 }}" | base64 -d > android/keystore/key.jks
echo "✅ Release Keystore 생성 완료"
ls -la android/keystore/

# key.properties 생성 (Release 서명 정보)
- name: Create key.properties
run: |
cat > android/key.properties << EOF
storeFile=keystore/key.jks
storePassword=${{ secrets.RELEASE_KEYSTORE_PASSWORD }}
keyAlias=${{ secrets.RELEASE_KEY_ALIAS }}
keyPassword=${{ secrets.RELEASE_KEY_PASSWORD }}
EOF
echo "✅ key.properties 생성 완료"

# google-services.json 생성 (선택적)
- name: Create google-services.json
Expand Down Expand Up @@ -412,8 +405,10 @@ jobs:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/build.gradle', '**/gradle-wrapper.properties') }}
~/.gradle/buildOutputCleanup
key: ${{ runner.os }}-gradle-8.12-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', '**/gradle.properties') }}
restore-keys: |
${{ runner.os }}-gradle-8.12-
${{ runner.os }}-gradle-

# 프로젝트 의존성 설치
Expand All @@ -431,7 +426,7 @@ jobs:

# Java 설정
- name: Set up Java
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: ${{ env.JAVA_VERSION }}
Expand All @@ -441,13 +436,6 @@ jobs:
echo "✅ Java setup completed"
java -version

# Android SDK 설정
- name: Set up Android SDK
uses: android-actions/setup-android@v3

- name: Verify Android SDK setup
run: echo "✅ Android SDK setup completed"

# Ruby 설정
- name: Set up Ruby
uses: ruby/setup-ruby@v1
Expand Down
194 changes: 167 additions & 27 deletions .github/workflows/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ on:
repository_dispatch:
types: [build-ios-app]

permissions:
contents: read
issues: write
pull-requests: write

# ============================================
# 🔧 프로젝트별 설정 (아래 값들을 수정하세요)
# ============================================
Expand All @@ -63,7 +68,7 @@ env:
jobs:
prepare-test-build:
name: 테스트 빌드 준비
runs-on: macos-15
runs-on: macos-26

outputs:
version: ${{ steps.test_version.outputs.version }}
Expand Down Expand Up @@ -394,7 +399,7 @@ jobs:
# ============================================
build-ios-test:
name: iOS 테스트 빌드
runs-on: macos-15
runs-on: macos-26
needs: prepare-test-build

outputs:
Expand Down Expand Up @@ -469,51 +474,186 @@ jobs:
p12-file-base64: ${{ secrets.APPLE_CERTIFICATE_BASE64 }}
p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}

- name: Install Provisioning Profiles (Main App + Share Extension)
- name: Install Provisioning Profiles
id: install_profile
run: |
# 메인 앱 프로비저닝 프로파일 설치
echo "${{ secrets.APPLE_PROVISIONING_PROFILE_BASE64 }}" | base64 --decode > profile_main.mobileprovision
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
uuid_main=$(grep -A1 -a "UUID" profile_main.mobileprovision | grep string | sed -e "s/<string>//" -e "s/<\/string>//" -e "s/[[:space:]]//g")
cp profile_main.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$uuid_main.mobileprovision
echo "✅ 메인 앱 프로파일 설치 완료: ${{ secrets.IOS_PROVISIONING_PROFILE_NAME }}"

# Share Extension 프로비저닝 프로파일 설치
echo "${{ secrets.APPLE_PROVISIONING_PROFILE_SHARE_BASE64 }}" | base64 --decode > profile_share.mobileprovision
uuid_share=$(grep -A1 -a "UUID" profile_share.mobileprovision | grep string | sed -e "s/<string>//" -e "s/<\/string>//" -e "s/[[:space:]]//g")
cp profile_share.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$uuid_share.mobileprovision
echo "✅ Share Extension 프로파일 설치 완료: ${{ secrets.IOS_PROVISIONING_PROFILE_SHARE_NAME }}"
# 메인 앱 프로파일 설치
echo "${{ secrets.APPLE_PROVISIONING_PROFILE_BASE64 }}" | base64 --decode > profile.mobileprovision
cp profile.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/

# UUID 추출
uuid=$(grep -A1 -a "UUID" profile.mobileprovision | grep string | sed -e "s/<string>//" -e "s/<\/string>//" -e "s/[[:space:]]//g")
cp profile.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$uuid.mobileprovision

# 프로파일 이름 추출 (동적)
profile_name=$(security cms -D -i profile.mobileprovision | plutil -extract Name xml1 -o - - | sed -n 's/.*<string>\(.*\)<\/string>.*/\1/p')

echo "✅ Main App Provisioning Profile installed"
echo " UUID: $uuid"
echo " Name: $profile_name"

# 출력 저장
echo "profile_uuid=$uuid" >> $GITHUB_OUTPUT
echo "profile_name=$profile_name" >> $GITHUB_OUTPUT

# Share Extension 프로파일 설치 (선택적)
if [ -n "${{ secrets.APPLE_PROVISIONING_PROFILE_SHARE_BASE64 }}" ]; then
echo "${{ secrets.APPLE_PROVISIONING_PROFILE_SHARE_BASE64 }}" | base64 --decode > share_extension_profile.mobileprovision
cp share_extension_profile.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/

- name: Verify ExportOptions.plist
# Share Extension UUID 추출
share_uuid=$(grep -A1 -a "UUID" share_extension_profile.mobileprovision | grep string | sed -e "s/<string>//" -e "s/<\/string>//" -e "s/[[:space:]]//g")
cp share_extension_profile.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$share_uuid.mobileprovision

# Share Extension 프로파일 이름 추출 (동적)
share_profile_name=$(security cms -D -i share_extension_profile.mobileprovision | plutil -extract Name xml1 -o - - | sed -n 's/.*<string>\(.*\)<\/string>.*/\1/p')

echo "✅ Share Extension Provisioning Profile installed"
echo " UUID: $share_uuid"
echo " Name: $share_profile_name"

# 출력 저장
echo "share_profile_uuid=$share_uuid" >> $GITHUB_OUTPUT
echo "share_profile_name=$share_profile_name" >> $GITHUB_OUTPUT
fi

- name: Create ExportOptions.plist
run: |
cd ios
if [ ! -f "ExportOptions.plist" ]; then
echo "❌ ios/ExportOptions.plist이 없습니다!"
echo "웹 마법사를 실행하여 설정 파일을 생성하세요:"
echo " 브라우저에서 .github/util/flutter/ios-testflight-setup-wizard/index.html 열기"
exit 1

# Share Extension 프로파일이 있는지 확인
if [ -n "${{ steps.install_profile.outputs.share_profile_name }}" ]; then
# Share Extension 포함
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">
<dict>
<key>method</key>
<string>app-store</string>
<key>teamID</key>
<string>${{ secrets.APPLE_TEAM_ID }}</string>
<key>provisioningProfiles</key>
<dict>
<key>com.elipair.mapsy</key>
<string>${{ steps.install_profile.outputs.profile_name }}</string>
<key>com.elipair.mapsy.share</key>
<string>${{ steps.install_profile.outputs.share_profile_name }}</string>
</dict>
<key>signingStyle</key>
<string>manual</string>
<key>signingCertificate</key>
<string>Apple Distribution</string>
<key>stripSwiftSymbols</key>
<true/>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<true/>
</dict>
</plist>
EOF
echo "✅ ExportOptions.plist 생성 완료 (Share Extension 포함)"
echo " Main Profile: ${{ steps.install_profile.outputs.profile_name }}"
echo " Share Extension Profile: ${{ steps.install_profile.outputs.share_profile_name }}"
else
# 메인 앱만
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">
<dict>
<key>method</key>
<string>app-store</string>
<key>teamID</key>
<string>${{ secrets.APPLE_TEAM_ID }}</string>
<key>provisioningProfiles</key>
<dict>
<key>com.elipair.mapsy</key>
<string>${{ steps.install_profile.outputs.profile_name }}</string>
</dict>
<key>signingStyle</key>
<string>manual</string>
<key>signingCertificate</key>
<string>Apple Distribution</string>
<key>stripSwiftSymbols</key>
<true/>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<true/>
</dict>
</plist>
EOF
echo "✅ ExportOptions.plist 생성 완료 (메인 앱만)"
echo " Main Profile: ${{ steps.install_profile.outputs.profile_name }}"
fi
echo "✅ ExportOptions.plist 확인됨"

- name: Flutter build (no codesign)
run: |
flutter build ios --release --no-codesign \
--build-name="0.0.0" \
--build-number="${{ needs.prepare-test-build.outputs.build_number }}"

- name: Configure Code Signing in Project
run: |
cd ios

# xcodeproj gem 설치
gem install xcodeproj

# Ruby 스크립트로 프로젝트 설정 수정
ruby <<RUBY_SCRIPT
require 'xcodeproj'

project = Xcodeproj::Project.open('Runner.xcodeproj')

# Runner 타겟 설정
runner_target = project.targets.find { |t| t.name == 'Runner' }
if runner_target
runner_target.build_configurations.each do |config|
if config.name == 'Release'
config.build_settings['CODE_SIGN_STYLE'] = 'Manual'
config.build_settings['CODE_SIGN_IDENTITY'] = 'Apple Distribution'
config.build_settings['PROVISIONING_PROFILE_SPECIFIER'] = '${{ steps.install_profile.outputs.profile_name }}'
puts "✅ Runner target configured with profile: ${{ steps.install_profile.outputs.profile_name }}"
end
end
end

# Share Extension 타겟 설정 (있는 경우)
share_profile = '${{ steps.install_profile.outputs.share_profile_name }}'
if !share_profile.empty?
share_target = project.targets.find { |t| t.name == 'com.elipair.mapsy.share' }
if share_target
share_target.build_configurations.each do |config|
if config.name == 'Release'
config.build_settings['CODE_SIGN_STYLE'] = 'Manual'
config.build_settings['CODE_SIGN_IDENTITY'] = 'Apple Distribution'
config.build_settings['PROVISIONING_PROFILE_SPECIFIER'] = share_profile
puts "✅ com.elipair.mapsy.share target configured with profile: #{share_profile}"
end
end
end
end

project.save
puts "✅ Project signing configuration saved"
RUBY_SCRIPT

- name: Create Archive
env:
IOS_PROVISIONING_PROFILE_NAME: ${{ secrets.IOS_PROVISIONING_PROFILE_NAME }}
run: |
cd ios
echo "📦 Creating Archive with Manual Signing"

xcodebuild -workspace Runner.xcworkspace \
-scheme Runner \
-configuration Release \
-archivePath build/Runner.xcarchive \
-destination 'generic/platform=iOS' \
archive \
CODE_SIGN_STYLE=Manual \
PROVISIONING_PROFILE_SPECIFIER="$IOS_PROVISIONING_PROFILE_NAME" \
CODE_SIGN_IDENTITY="Apple Distribution"
archive

- name: Export IPA
run: |
Expand Down Expand Up @@ -666,7 +806,7 @@ jobs:
# ============================================
deploy-testflight-test:
name: TestFlight 테스트 배포
runs-on: macos-15
runs-on: macos-26
needs: [prepare-test-build, build-ios-test]

steps:
Expand Down
Loading