59 lines
2.0 KiB
Python
Executable File
59 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""GoogleService-Info.plist 의 REVERSED_CLIENT_ID 를 Xcode 빌드 설정에 넣는다.
|
|
|
|
**왜 스크립트인가.** Google 로그인 콜백 스킴은 Firebase 프로젝트마다 다르고,
|
|
Info.plist 에 손으로 옮기면 오타 한 글자에 로그인이 **조용히** 실패한다.
|
|
오류도 뜨지 않고 콜백만 돌아오지 않아 원인을 찾는 데 한나절이 든다.
|
|
|
|
설정 파일이 투입될 때 한 번 돌리면 `ios/config/Google.xcconfig` 가 만들어지고,
|
|
Info.plist 의 `$(GOOGLE_REVERSED_CLIENT_ID)` 가 그 값으로 치환된다.
|
|
|
|
실행: python3 tool/ios/inject_url_scheme.py
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import plistlib
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
SOURCE = ROOT / "ios/Runner/GoogleService-Info.plist"
|
|
OUT = ROOT / "ios/config/Google.xcconfig"
|
|
|
|
|
|
def main() -> int:
|
|
if not SOURCE.exists():
|
|
print(
|
|
f"설정 파일이 아직 없습니다: {SOURCE.relative_to(ROOT)}\n"
|
|
"Firebase 콘솔에서 iOS 앱 설정 파일을 받아 그 자리에 두십시오.",
|
|
file=sys.stderr,
|
|
)
|
|
return 1
|
|
|
|
with SOURCE.open("rb") as f:
|
|
data = plistlib.load(f)
|
|
|
|
reversed_id = data.get("REVERSED_CLIENT_ID")
|
|
if not reversed_id:
|
|
# Firebase 콘솔에서 Google 로그인을 켜지 않으면 이 키가 빠진 채로 나온다.
|
|
print(
|
|
"REVERSED_CLIENT_ID 가 없습니다. Firebase 콘솔에서 "
|
|
"Authentication → Google 제공자를 켠 뒤 설정 파일을 다시 받으십시오.",
|
|
file=sys.stderr,
|
|
)
|
|
return 1
|
|
|
|
OUT.parent.mkdir(parents=True, exist_ok=True)
|
|
OUT.write_text(
|
|
"// 자동 생성 — tool/ios/inject_url_scheme.py\n"
|
|
"// GoogleService-Info.plist 가 바뀌면 다시 돌리십시오.\n"
|
|
f"GOOGLE_REVERSED_CLIENT_ID = {reversed_id}\n",
|
|
encoding="utf-8",
|
|
)
|
|
print(f"기록: {OUT.relative_to(ROOT)}")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|