내 게임을 Mac, iPhone, iPad 앱으로
JumPHP는 게임을 브라우저 없이 동작하는 진짜 Apple 앱으로 만들어 줘요. PHP 8.5, SDL, OpenGL, OpenAL이 앱 안에서 실행돼요. 컴퓨터에서, 그리고 네이티브 Android 앱에서와 같아요.
- Mac: Apple 칩(M1 이후)과 Intel Mac용 앱, macOS 11 이상,
.dmg형식이에요. - iPhone과 iPad:
.ipa앱, iOS 14 이상이에요. 엔진이 그리는 터치 컨트롤과 게임의 화면 방향이 적용돼요. Xcode 시뮬레이터용 앱도 같이 만들어요.
Apple 앱을 만들려면 Xcode, 즉 Mac이 필요해요. 하지만 Mac이 없어도 괜찮아요. GitHub가 자기 Mac에서 만들어 줘요(공개 저장소는 무료). 어떤 컴퓨터에서든 할 수 있어요. 내 컴퓨터에 JumPHP 프로젝트(내 컴퓨터에서)와 GitHub 저장소가 필요해요. Claude가 전부 대신 해 줄 수 있어요. "내 게임의 Mac과 iPhone 앱을 만들어 줘"라고 부탁하세요.
명령 하나
bin/jumphp apple mon-jeu # Mac + iPhone / iPad
bin/jumphp macos mon-jeu # Mac만
bin/jumphp ios mon-jeu # iPhone / iPad만(그리고 시뮬레이터)
- 처음 실행하면 앱의 식별자(
io.github.vous.mon-jeu: App Store에 올린 뒤에는 바꿀 수 없어요)를 물어봐요. - 버전을
games/mon-jeu/apple/app.json에 기록하고, 워크플로.github/workflows/apple.yml을 프로젝트에 넣고, 커밋한 다음 내가 동의하면 푸시해요. - GitHub가 Mac에서 앱을 만들고(처음에는 약 40분, 이후에는 약 10분: PHP와 라이브러리가 캐시돼요) 시험해 봐요. Mac 앱은 게임을 실행하고 화면 이미지를 남기며, iPhone 앱은 가상 iPhone에 설치되어 실행되고 촬영돼요.
- 앱과 스크린샷 두 장이 담긴 저장소의 release를 게시하고,
games/mon-jeu/dist/apple/에 내려받아요(스크린샷은check/에 있어요. 꼭 확인하세요).
이후 버전: bin/jumphp apple mon-jeu --version 1.1(빌드 번호는 매번 1씩 올라가요). Xcode가 있는 Mac에서는 --local로 모든 것을 그 자리에서 만들 수 있어요.
git 밖에 있는 파일(공개 저장소에 둘 수 없는 원작 게임의 데이터로, 플레이그라운드의 비공개 파일과 같아요): 명령이 이를 찾아서, 내가 동의하면 저장소의 초안 release에 올려요. 그 저장소에 쓸 수 있는 사람만 볼 수 있어요. GitHub의 Mac이 빌드하기 전에 이 파일들을 게임에 다시 넣어요. 이 경우 앱에 이 파일들이 포함되므로 앱의 release도 초안이 되고, 게시 여부는 내가 결정해요.
Apple 개발자 계정 없이(처음 시작할 때)
앱은 신원 없이 "ad hoc"으로 서명돼요.
- Mac: 처음에는 앱을 오른쪽 클릭 > 열기를 하세요(macOS가 한 번 물어봐요). 나, 친구, 테스터가 쓰기에는 충분해요.
- iPhone / iPad: iPhone은 자기 앞으로 서명된 앱만 설치해요.
.ipa는 계정을 기다려요(아래 참고). 그때까지는 시뮬레이터용 앱(Xcode가 있는 Mac에서)을 쓰고, 웹 버전은 Safari에서 설치할 수 있어요(공유 > 홈 화면에 추가).
Apple 개발자 계정이 있다면(그다음 단계)
개발자마다 Apple Developer Program에서 자기 계정을 만들어요(연 99달러). 앱은 그 사람의 이름으로 게시되고, 인증서는 저장소의 시크릿에 보관돼요. 계정으로 할 수 있는 일은 다음과 같아요.
- 오른쪽 클릭 없이 Mac 앱 열기: Developer ID 서명과 Apple의 공증
- iPhone에 앱 설치, TestFlight에 올린 뒤 App Store에 게시
이것이 JumPHP의 다음 단계예요. App Store는 PHP로 만든 게임도 받아 줘요. 코드가 앱 안에서 실행되고 앱과 함께 배포되며, 이후에 다운로드하는 것이 없기 때문이에요(규정 2.5.2).
터치 컨트롤
iPhone과 iPad에서는 엔진이 브라우저와 Android에서처럼 화면 컨트롤을 그려요. 십자키(또는 조이스틱), A, B, START예요. game.yaml에서 설정해요.
game:
touch: { pad: stick, a: Space, b: Escape, labels: { a: SAUT } } # pad: stick = 조이스틱, 아니면 십자키
게임패드(블루투스, MFi)도 쓸 수 있어요. Mac에서는 컴퓨터처럼 키보드, 마우스, 게임패드를 써요.
앱 안에서
- Mac(Apple 칩과 Intel)과 iPhone용으로 컴파일한 PHP 8.5에 JumPHP의 확장(SDL과 이미지·사운드·폰트 모듈, OpenGL, OpenAL, gd, openssl, mbstring…), SDL2, OpenAL Soft가 들어 있어요. JIT은 없어요. Apple이 iPhone에서 금지해요.
- 내 게임이 그대로 앱 안에 들어가요. 저장 파일과 옵션은 앱 폴더(Application Support)에 저장되고 업데이트해도 유지돼요.
- 이름, 아이콘(
assets/icon.png, 없으면 제목의 첫 글자), 화면 방향(게임의 화면 비율)은game.yaml에서 가져와요. - 3D 게임(
gl(),opengl())도 동작해요. iPhone에서는 OpenGL ES, Mac에서는 OpenGL이에요(엔진이 셰이더를 알아서 변환해요). - HTTPS도 동작해요(
$engine->http(),wss://로 하는 온라인 게임).
기술적인 자세한 내용은 내 프로젝트의 docs/apple.md에 있어요.