Ваша гра як застосунок для Mac, iPhone та iPad
JumPHP робить із вашої гри справжні застосунки Apple, без браузера: PHP 8.5, SDL, OpenGL і OpenAL працюють усередині застосунку, як на комп'ютері та в нативному застосунку Android.
- Mac: застосунок для Mac на Apple Silicon (M1 і новіші) та Intel, macOS 11 або новіша, у вигляді
.dmg; - iPhone та iPad: застосунок
.ipa, iOS 14 або новіша, з сенсорним керуванням, яке малює рушій, і з орієнтацією гри; і такий самий для симулятора Xcode.
Для збирання застосунку Apple потрібен Xcode, а отже, 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, кладе workflow.github/workflows/apple.ymlу ваш проєкт, комітить їх і, після вашого «так», надсилає зміни. - GitHub збирає застосунки на Mac (вперше ~40 хвилин, потім ~10: PHP і бібліотеки кешуються), а потім пробує їх: застосунок для Mac запускає гру та зберігає її кадр, застосунок для iPhone встановлюється в симульований iPhone, запускається й фотографується.
- Вона публікує реліз вашого репозиторію із застосунками та двома скриншотами й завантажує їх у
games/mon-jeu/dist/apple/(скриншоти — уcheck/: подивіться на них).
Наступні версії: bin/jumphp apple mon-jeu --version 1.1 (номер збірки збільшується на одиницю щоразу).
На Mac з Xcode: --local збирає все на місці.
Файли поза git (дані оригінальної гри, що зберігаються поза публічним репозиторієм, як приватні файли playground): команда знаходить їх і, після вашого «так», кладе в чернетку релізу вашого репозиторію, яку бачать лише ті, хто може туди писати; Mac на GitHub повертає їх у гру перед збиранням. Самі застосунки містять ці файли: їхній реліз тоді теж чернетка, і ви вирішуєте, чи публікувати його.
Без акаунта розробника Apple (для початку)
Застосунки підписуються «ad hoc», без особи:
- Mac: уперше клацніть правою кнопкою на застосунку > Відкрити (macOS запитає один раз). Ідеально для вас, ваших друзів, ваших тестувальників.
- iPhone / iPad: iPhone встановлює лише застосунок, підписаний для нього.
.ipaчекає на акаунт (нижче). Тим часом: застосунок для симулятора (на Mac з Xcode), а веб-версію можна встановити із 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 = джойстик, інакше хрестовина
Геймпад (Bluetooth, MFi) також працює. На Mac: клавіатура, миша, геймпад, як на комп'ютері.
Усередині застосунку
- PHP 8.5, скомпільований для Mac (Apple та Intel) і для iPhone з розширеннями JumPHP (SDL та його модулі зображень, звуку й шрифтів, OpenGL, OpenAL, gd, openssl, mbstring…), SDL2 і OpenAL Soft. Без JIT: Apple забороняє його на iPhone.
- Ваша гра як є, всередині застосунку. Збереження та налаштування потрапляють у теку застосунку (Application Support) і залишаються між оновленнями.
- Назва, іконка (
assets/icon.png, інакше перша літера назви) та орієнтація (за формою гри) беруться зgame.yaml. - 3D-ігри (
gl(),opengl()) працюють: OpenGL ES на iPhone, OpenGL на Mac (рушій сам адаптує шейдери). - HTTPS працює (
$engine->http(), гра онлайн черезwss://).
Технічні подробиці: docs/apple.md у вашому проєкті.