Skip to content

Commit 3f5184f

Browse files
committed
test: ci v0
1 parent 1b6242b commit 3f5184f

1 file changed

Lines changed: 75 additions & 0 deletions

File tree

.github/workflows/build.yml

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
name: iOS CI
2+
3+
on:
4+
push:
5+
pull_request:
6+
7+
jobs:
8+
build:
9+
runs-on: macos-14 # iOS 16 시뮬레이터 런타임 포함
10+
steps:
11+
- uses: actions/checkout@v4
12+
13+
- name: Select iOS Simulator Runtime (>= 16.0)
14+
id: pick_ios
15+
shell: bash
16+
run: |
17+
set -euo pipefail
18+
19+
MIN_IOS="16.0"
20+
21+
# 설치된 iOS Simulator 런타임 버전들 추출 (예: 17.2, 18.0 ...)
22+
# 출력 포맷이 달라질 수 있어, "iOS <version>" 패턴에서 숫자만 뽑습니다.
23+
mapfile -t versions < <(
24+
xcrun simctl runtime list 2>/dev/null \
25+
| grep -Eo 'iOS ([0-9]+(\.[0-9]+)?)' \
26+
| awk '{print $2}' \
27+
| sort -V \
28+
| uniq
29+
)
30+
31+
if [ "${#versions[@]}" -eq 0 ]; then
32+
echo "No iOS simulator runtimes detected. Falling back to MIN_IOS=${MIN_IOS}"
33+
chosen="$MIN_IOS"
34+
else
35+
highest="${versions[-1]}"
36+
# chosen = max(MIN_IOS, highest)
37+
if [ "$(printf "%s\n%s\n" "$MIN_IOS" "$highest" | sort -V | tail -n 1)" = "$highest" ]; then
38+
chosen="$highest"
39+
else
40+
chosen="$MIN_IOS"
41+
fi
42+
fi
43+
44+
echo "Detected runtimes: ${versions[*]:-<none>}"
45+
echo "Chosen iOS runtime version: $chosen"
46+
47+
echo "ios_version=$chosen" >> "$GITHUB_OUTPUT"
48+
49+
- name: Build
50+
shell: bash
51+
run: |
52+
set -euo pipefail
53+
IOS_VER="${{ steps.pick_ios.outputs.ios_version }}"
54+
55+
# 스킴 목록 수집 (가장 짧은 이름 선택)
56+
SCHEMES_JSON=$(xcodebuild -list -json)
57+
mapfile -t SCHEMES < <(python3 -c 'import json, os; data=json.loads(os.environ["SCHEMES_JSON"]); schemes=data.get("workspace", {}).get("schemes") or data.get("project", {}).get("schemes") or []; print("\n".join(schemes))')
58+
59+
if [ "${#SCHEMES[@]}" -eq 0 ]; then
60+
echo "No schemes found." >&2
61+
exit 1
62+
fi
63+
64+
# 가장 짧은 이름(동일 길이면 사전순) 선택
65+
SCHEME=$(printf '%s\n' "${SCHEMES[@]}" | awk '{ print length, $0 }' | sort -n -k1,1 -k2,2 | head -n 1 | cut -d" " -f2-)
66+
67+
echo "Detected schemes: ${SCHEMES[*]}"
68+
echo "Chosen scheme: $SCHEME"
69+
70+
# 예시: 시뮬레이터 대상으로 빌드/테스트 시 destination에서 OS 지정
71+
xcodebuild \
72+
-scheme "$SCHEME" \
73+
-configuration Debug \
74+
-destination "platform=iOS Simulator,OS=${IOS_VER},name=iPhone 14" \
75+
build

0 commit comments

Comments
 (0)