♻️ Refactor: MyPageView 이식 기본 섹션: ProfileCardSection, AuthSection, SettingSection #961
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: iOS CI | |
| on: | |
| push: | |
| branches: [ "develop" ] | |
| pull_request: | |
| branches: [ "develop" ] | |
| jobs: | |
| build: | |
| name: Build using iOS Simulator | |
| runs-on: macos-26 | |
| defaults: | |
| run: | |
| working-directory: AppProduct | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Select Xcode 26.4+ | |
| run: | | |
| XCODE_PATH=$(ls -d /Applications/Xcode_26.4*.app 2>/dev/null | sort -V | tail -n 1) | |
| if [ -z "$XCODE_PATH" ]; then | |
| echo "❌ Xcode 26.4+ not found on runner. Available:" | |
| ls -d /Applications/Xcode_*.app 2>/dev/null || true | |
| exit 1 | |
| fi | |
| echo "Selecting $XCODE_PATH" | |
| sudo xcode-select -s "$XCODE_PATH/Contents/Developer" | |
| xcodebuild -version | |
| - name: Create Secrets.xcconfig placeholder | |
| run: | | |
| cp AppProduct/Core/Secret/Secrets.xcconfig.template AppProduct/Core/Secret/Secrets.xcconfig | |
| - name: Create GoogleService-Info.plist placeholder | |
| run: | | |
| cat > GoogleService-Info.plist << 'PLIST' | |
| <?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>API_KEY</key> | |
| <string>placeholder</string> | |
| <key>GCM_SENDER_ID</key> | |
| <string>000000000000</string> | |
| <key>PLIST_VERSION</key> | |
| <string>1</string> | |
| <key>BUNDLE_ID</key> | |
| <string>com.umc.product</string> | |
| <key>PROJECT_ID</key> | |
| <string>placeholder</string> | |
| <key>STORAGE_BUCKET</key> | |
| <string>placeholder.appspot.com</string> | |
| <key>IS_ADS_ENABLED</key> | |
| <false/> | |
| <key>IS_ANALYTICS_ENABLED</key> | |
| <false/> | |
| <key>IS_APPINVITE_ENABLED</key> | |
| <true/> | |
| <key>IS_GCM_ENABLED</key> | |
| <true/> | |
| <key>IS_SIGNIN_ENABLED</key> | |
| <true/> | |
| <key>GOOGLE_APP_ID</key> | |
| <string>1:000000000000:ios:0000000000000000</string> | |
| </dict> | |
| </plist> | |
| PLIST | |
| - name: Set Default Scheme | |
| run: | | |
| scheme_list=$(xcodebuild -list -json | tr -d "\n") | |
| default=$(echo $scheme_list | ruby -e "require 'json'; puts JSON.parse(STDIN.gets)['project']['targets'][0]") | |
| echo $default | cat >default | |
| echo Using default scheme: $default | |
| - name: Build | |
| env: | |
| scheme: ${{ 'default' }} | |
| platform: ${{ 'iOS Simulator' }} | |
| run: | | |
| device="iPhone 17 Pro" | |
| if [ $scheme = default ]; then scheme=$(cat default); fi | |
| if [ "`ls -A | grep -i \\.xcworkspace`" ]; then filetype_parameter="workspace" && file_to_build="`ls -A | grep -i \\.xcworkspace`"; else filetype_parameter="project" && file_to_build="`ls -A | grep -i \\.xcodeproj`"; fi | |
| file_to_build=`echo $file_to_build | awk '{$1=$1;print}'` | |
| xcodebuild build -scheme "$scheme" -"$filetype_parameter" "$file_to_build" -destination "platform=$platform,name=$device" | |
| notify: | |
| name: Notify Discord | |
| needs: build | |
| if: ${{ always() }} | |
| runs-on: ubuntu-latest | |
| env: | |
| DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }} | |
| DISCORD_MENTION_ROLE_ID: ${{ secrets.DISCORD_MENTION_ROLE_ID }} | |
| BUILD_RESULT: ${{ needs.build.result }} | |
| REPOSITORY: ${{ github.repository }} | |
| REF_NAME: ${{ github.ref_name }} | |
| ACTOR: ${{ github.actor }} | |
| COMMIT_SHA: ${{ github.sha }} | |
| WORKFLOW_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
| PR_URL: ${{ github.event.pull_request.html_url }} | |
| steps: | |
| - name: Send build result to Discord | |
| run: | | |
| if [ -z "${DISCORD_WEBHOOK_URL:-}" ]; then | |
| echo "DISCORD_WEBHOOK_URL is not configured. Skipping Discord notification." | |
| exit 0 | |
| fi | |
| python3 - << 'PY' > payload.json | |
| import json | |
| import os | |
| build_result = os.environ["BUILD_RESULT"] | |
| short_sha = os.environ["COMMIT_SHA"][:7] | |
| pr_url = os.environ.get("PR_URL") or "N/A" | |
| mention_role_id = os.environ.get("DISCORD_MENTION_ROLE_ID", "").strip() | |
| if build_result == "success": | |
| status_text = "SUCCESS ✅" | |
| color = 5763719 # green | |
| mention = "" | |
| else: | |
| status_text = "FAILED ❌" | |
| color = 15548997 # red | |
| mention = f"<@&{mention_role_id}>" if mention_role_id else "@here" | |
| payload = { | |
| "content": mention, | |
| "embeds": [ | |
| { | |
| "title": "iOS CI Build Result", | |
| "url": os.environ["WORKFLOW_URL"], | |
| "color": color, | |
| "fields": [ | |
| {"name": "Build Status", "value": status_text, "inline": True}, | |
| {"name": "Branch", "value": os.environ["REF_NAME"], "inline": True}, | |
| {"name": "Commit", "value": f"`{short_sha}` by {os.environ['ACTOR']}", "inline": True}, | |
| {"name": "PR", "value": pr_url, "inline": False}, | |
| ], | |
| "footer": {"text": os.environ["REPOSITORY"]}, | |
| } | |
| ], | |
| } | |
| print(json.dumps(payload)) | |
| PY | |
| curl -sS -X POST "$DISCORD_WEBHOOK_URL" \ | |
| -H "Content-Type: application/json" \ | |
| --data @payload.json |