AI 게임 개발기: 웹게임을 아이폰 앱 안에 넣어봤다
초기 제작일은 미확정입니다. 보존된 스팀 저장소의 첫 기록일(4월 22일)을 대표 날짜로 삼았습니다. 표시 날짜는 이 글이 다루는 작업의 대표 기록일이며, 당시 발행된 글을 뜻하지 않습니다. 이후 회고와 적용 방법은 2026년 9월에 정리했습니다.
웹게임을 네이티브 앱 셸에 빠르게 담으려는 사람에게, ‘앱으로 만들기’가 실은 파일 서빙과 광고 SDK 연결이라는 서로 다른 두 작업이라는 걸 웨일서바이버 iOS 포팅 소스로 보여준다.
초기 SwiftUI 앱은 번들 www 폴더를 app://라는 커스텀 URL 스킴으로 웹뷰에 연결했고, 보상형 광고는 별도 메시지 핸들러로 네이티브 광고 매니저에 넘겼다 — 화면이 뜨는 것과 광고가 연결되는 것은 각각 확인해야 했다.
웹뷰 포팅 프로젝트라면 ‘첫 화면 열림’과 ‘광고 요청이 네이티브로 전달됨’을 각각 별도 체크 항목으로 나눠 테스트한다.
연재 목차
- AI 게임 개발기: 러버블에서 고래 게임을 시작했다
- AI 게임 개발기: 웹게임을 아이폰 앱 안에 넣어봤다
- AI 게임 개발기: 스팀을 생각하니 조작부터 다시 봐야 했다
- AI 게임 개발기: 브라우저에서는 됐는데 실행 파일에서는 멈췄다
- AI 게임 개발기: 이미지를 만드는 일과 게임에 넣는 일은 달랐다
- AI 게임 개발기: 서바이버 게임에 덱빌딩을 넣어봤다
- AI 게임 개발기: 시스템을 늘리자 설명할 것도 많아졌다
- AI 게임 개발기: 브랜치를 합친 뒤에도 게임을 다시 고쳐야 했다
- AI 게임 개발기: 다시 모바일로 옮기면서 덜어낸 것들
- AI 게임 개발기: 앱스토어에 올리는 데도 개발이 필요했다
먼저 답하면
이 초기 포팅은 게임을 통째로 Swift로 새로 짠 게 아니었다. ContentView.swift 하나가 SwiftUI 화면 안에 WKWebView를 얹고, 그 안에서 웹게임을 그대로 열게 했다.
웹으로 만든 게임을 아이폰에서도 실행해보고 싶었다. 게임은 웹 코드에 그대로 두고, 앱에 필요한 기능만 바깥에서 붙이는 방식을 택했다. 이미 만든 것을 살릴 수 있다는 점에서 먼저 시도할 만했다.
화면 밖에서 필요한 일
앱 안에는 HTML만 들어가는 것이 아니다. 자바스크립트와 이미지도 같이 읽혀야 한다. 초기 코드에서는 번들의 www 폴더에서 파일을 가져와 별도 URL 스킴으로 웹뷰에 전달했다. 웹 서버가 하던 일을 앱 안에서 처리한 셈이다.
광고는 또 다른 연결이 필요했다. 웹게임이 보상형 광고를 요청하면 네이티브 광고 관리자로 메시지를 넘겼고, 배너 영역도 SwiftUI 쪽에 뒀다. 게임 화면이 뜨는 것만 확인해서는 이 연결까지 확인한 것이 아니었다.
남아 있는 소스에서 이 구조는 확인된다. 다만 초기 포팅의 정확한 날짜와 당시 실제 기기에서 어디까지 점검했는지는 기록이 충분하지 않다. 광고 연동 코드가 있다는 이유로 그때 모든 광고가 정상 작동했다고 쓰지는 않겠다.

8월 25일 스토어 자료에 들어간 후대 비교 화면. 브라우저 캡처이며 초기 SwiftUI 앱의 실기기 화면은 아니다.
나중의 모바일 화면에는 터치 이동 안내와 큰 대시 버튼이 들어갔다. 앱 안에서 웹게임을 여는 일과 손가락으로 편하게 플레이하게 만드는 일은 따로 남았다.
다시 포팅한다면 ‘앱으로 만들기’를 한 항목으로 두지 않을 것 같다. 첫 화면이 열리는지, 전투가 되는지, 광고를 보고 돌아오는지 나눠서 확인하려 한다. 같은 아이폰 앱을 향한 작업이라도 이후의 Capacitor 전환과 이 초기 시도는 다른 구현이었다.
← 이전 글: 러버블에서 고래 게임을 시작했다 · 전체 목차 · 다음 글: 스팀을 생각하니 조작부터 다시 봐야 했다 →