UK

Ваша гра як застосунок для 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 (і симулятор)
  1. Під час першого запуску вона запитує ідентифікатор застосунку (io.github.vous.mon-jeu: після публікації в App Store він більше не змінюється).
  2. Вона записує версію в games/mon-jeu/apple/app.json, кладе workflow .github/workflows/apple.yml у ваш проєкт, комітить їх і, після вашого «так», надсилає зміни.
  3. GitHub збирає застосунки на Mac (вперше ~40 хвилин, потім ~10: PHP і бібліотеки кешуються), а потім пробує їх: застосунок для Mac запускає гру та зберігає її кадр, застосунок для iPhone встановлюється в симульований iPhone, запускається й фотографується.
  4. Вона публікує реліз вашого репозиторію із застосунками та двома скриншотами й завантажує їх у 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 у вашому проєкті.