@@ -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