Skip to content

Commit 23debb7

Browse files
committed
chore: 최신 sdk에서 돌아가도록 수정
1 parent 250fa9f commit 23debb7

1 file changed

Lines changed: 40 additions & 51 deletions

File tree

.github/actions/ios-simulator-build/action.yml

Lines changed: 40 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -15,72 +15,61 @@ runs:
1515
run: |
1616
set -euo pipefail
1717
18-
# macOS 메인 버전에 맞는 iOS 버전 중 최신 버전의 iPhone 선택
18+
# 설치된 iPhone 시뮬레이터 중 최신 iOS 버전 선택
1919
RESULT=$(python3 - <<'PY'
2020
import re, subprocess, sys
2121
22-
xcode_ver = subprocess.check_output(["xcodebuild", "-version"], text=True).splitlines()[0].strip()
23-
xcode_major = xcode_ver.split()[1].split('.')[0]
24-
try:
25-
xcode_major_num = int(xcode_major)
26-
except ValueError:
27-
xcode_major_num = None
28-
if xcode_major_num is not None and xcode_major_num <= 15:
29-
xcode_major = "26"
22+
def ver_key(version):
23+
return tuple(int(part) for part in version.split('.'))
3024
3125
text = subprocess.check_output(["xcrun", "simctl", "list", "devices"], text=True)
3226
lines = text.splitlines()
33-
34-
def ver_key(v):
35-
return tuple(int(x) for x in v.split('.'))
36-
37-
# 1) 최신 iOS 버전(해당 mac 메이저) 찾기
38-
latest_ver = None
39-
for line in lines:
40-
header = re.match(r"^-- iOS ([0-9]+(?:\.[0-9]+)*) --$", line.strip())
41-
if not header:
42-
continue
43-
ver = header.group(1)
44-
if not ver.startswith(f"{xcode_major}."):
45-
continue
46-
if latest_ver is None or ver_key(ver) > ver_key(latest_ver):
47-
latest_ver = ver
48-
49-
if latest_ver is None:
50-
print(f"No iOS versions found for Xcode major {xcode_major}", file=sys.stderr)
51-
sys.exit(1)
52-
53-
# 2) 해당 버전 섹션에서 첫 iPhone 찾고 즉시 종료
5427
current_ver = None
28+
candidates = []
29+
5530
for line in lines:
5631
header = re.match(r"^-- iOS ([0-9]+(?:\.[0-9]+)*) --$", line.strip())
5732
if header:
5833
current_ver = header.group(1)
5934
continue
60-
if current_ver != latest_ver:
35+
if current_ver is None:
6136
continue
6237
if "(unavailable)" in line:
6338
continue
64-
if "iPhone" in line:
65-
raw = line.strip()
66-
# key:value 형태면 딕셔너리로 파싱해서 name만 사용
67-
if "platform:" in raw and "name:" in raw and "OS:" in raw:
68-
kv = {}
69-
for part in raw.split(","):
70-
if ":" not in part:
71-
continue
72-
k, v = part.split(":", 1)
73-
kv[k.strip()] = v.strip()
74-
name = kv.get("name", raw)
75-
else:
76-
name = raw
77-
# UUID/상태만 제거하고 모델명 괄호는 유지
78-
name = re.sub(r"\s+\([0-9A-Fa-f-]{36}\)\s+\(.*\)$", "", name)
79-
print(f"{latest_ver}|{name}")
80-
sys.exit(0)
81-
82-
print(f"No iPhone candidates found for iOS {latest_ver}", file=sys.stderr)
83-
sys.exit(1)
39+
if "iPhone" not in line:
40+
continue
41+
42+
raw = line.strip()
43+
if "platform:" in raw and "name:" in raw and "OS:" in raw:
44+
kv = {}
45+
for part in raw.split(","):
46+
if ":" not in part:
47+
continue
48+
k, v = part.split(":", 1)
49+
kv[k.strip()] = v.strip()
50+
name = kv.get("name", raw)
51+
else:
52+
name = raw
53+
name = re.sub(r"\s+\([0-9A-Fa-f-]{36}\)\s+\(.*\)$", "", name)
54+
55+
candidates.append((current_ver, name))
56+
57+
if len(candidates) <= 0:
58+
print("No available iPhone simulators found", file=sys.stderr)
59+
sys.exit(1)
60+
61+
latest_version = max(candidate[0] for candidate in candidates, key=ver_key)
62+
latest_candidates = [
63+
candidate for candidate in candidates
64+
if candidate[0] == latest_version
65+
]
66+
chosen_version, chosen_device_name = min(
67+
latest_candidates,
68+
key=lambda candidate: candidate[1]
69+
)
70+
71+
print(f"{chosen_version}|{chosen_device_name}")
72+
sys.exit(0)
8473
PY
8574
)
8675

0 commit comments

Comments
 (0)