Ghid

Publici un joc HTML5 pe App Store fără Mac: ruta noastră cloud

Cum am dus un joc HTML5 de pe un PC Windows până la revizuirea App Store cu Capacitor, Codemagic și TestFlight, și greșelile care ne-au costat build-uri.

Grafică principală din șablonul Sunset Rally din Polar Games Marketplace.

Da, poți publica un joc pe App Store fără Mac. Mac-ul e tot necesar, dar îl închiriezi: un joc HTML5 se împachetează cu Capacitor pe PC-ul tău, un serviciu cloud precum Codemagic îl compilează și îl semnează pe propriile sale mașini Mac, build-ul ajunge în App Store Connect și TestFlight, iar lista de produse, detaliile de confidențialitate și trimiterea se termină în browser. Ce nu poți sări este un iPhone, pentru că cineva trebuie să joace build-ul înainte să îl facă Apple.

Am făcut asta din Windows, cu jocul nostru de acțiune Little Ninja Dash. Primul build cloud reușit a durat cam șase minute, iar aplicația a intrat în App Review pe 19 octombrie 2026, unde notițele noastre o arată ca Waiting for Review (în așteptarea revizuirii). Ghidul acesta nu raportează un rezultat al revizuirii. Datele despre Apple și Codemagic provin din paginile lor oficiale, citite pe 30 octombrie 2026. Restul este ce arată notițele noastre, inclusiv părțile care au mers prost.

Ce îți trebuie ca să publici pe App Store fără Mac

  • Un abonament Apple Developer Program: 99 USD pe an de calendar de membru. Persoanele fizice și organizațiile se pot înscrie. Organizațiile au nevoie de un D-U-N-S Number și de un site web public.
  • Un cont Codemagic. Planul gratuit individual are 500 de minute de build macOS M2 pe lună și un singur build în același timp; după aceea, minutele pe Mac mini M2 costă 0,095 USD fiecare. Minutele gratuite sunt pentru utilizatori individuali, nu pentru echipe.
  • Un depozit Git privat cu proiectul tău. Codemagic compilează din depozitul pe care îl conectezi. La șabloanele noastre, depozitul trebuie să fie privat: unul public ar redistribui codul sursă, lucru interzis de licență.
  • Un iPhone cu aplicația TestFlight, pentru testarea build-ului real.
  • Un joc care funcționează offline din propriul dosar și este împachetat cu Capacitor.

Din 28 aprilie 2026, Apple cere ca aplicațiile încărcate în App Store Connect să fie construite cu Xcode 26 sau mai nou și cu un SDK iOS 26. Pagina Capacitor pentru iOS listează, de asemenea, Xcode 26.0 sau mai nou și suportă iOS 15 și versiuni ulterioare. Xcode rulează doar pe macOS, de aceea build-ul se face pe mașinile Codemagic și nu pe PC-ul tău.

Edițiile noastre de șabloane sunt jocuri pentru browser. Fiecare pagină de ediție arată că build-urile de aplicație nativă nu sunt incluse. O licență acoperă un singur produs final, iar acel joc îl poți publica oriunde vrei, inclusiv pe App Store și Google Play. Nu poți revinde șablonul în sine. Dacă intenționezi să percepi bani de la jucători, cu o aplicație plătită sau cu achiziții în aplicație, întreabă-ne mai întâi.

Răsfoiește șabloanele și ce conține fiecare ediție

Pasul 1: adaugă proiectul iOS pe Windows

Dacă ai deja un proiect Capacitor pentru Android, instalează @capacitor/ios și rulează npx cap add ios. Asta creează dosarul ios/, chiar și pe Windows. Nu îl poți deschide local în Xcode, deci fiecare modificare a proiectului nativ este o editare de fișier pe care o verifici în build-ul cloud următor.

  • Iconița: un PNG de 1024 pe 1024 fără transparență.
  • Dispozitive și orientare: jocul nostru este doar pentru iPhone și doar pe orizontală. Dacă suporți și iPad, adaugi capturi de ecran pentru iPad și mai multe layout-uri de testat.
  • Criptare: ajutorul Apple pentru conformitatea la export spune să actualizezi Info.plist al aplicației, ca să nu răspunzi la întrebările despre criptare la fiecare trimitere. Jocul nostru folosește doar HTTPS-ul sistemului, deci am setat ITSAppUsesNonExemptEncryption la false.
  • Doar fișiere incluse: jocul se află în aplicație și nu încarcă niciodată site-ul nostru. Ghidul 4.2 al Apple cere aplicații care depășesc un site web reambalat.

Pornești de la un șablon? Velvet Pool este unul pe care l-am împachetat cu Capacitor pentru Google Play, deci dosarul lui de joc a trecut deja prin acest pas pe Android. Niciunul dintre șabloanele noastre nu a trecut încă prin revizuirea App Store.

Vezi Velvet Pool, un șablon pe care l-am împachetat deja cu Capacitor

Pasul 2: semnarea fără Mac sau Keychain

Semnarea este partea care înainte cerea un Mac. Cu o cheie API App Store Connect, Codemagic o poate face în cloud.

  1. Pe site-ul Apple Developer, creează un App ID (identificator de pachet) pentru joc, cu In-App Purchase dacă vinzi ceva în interiorul lui.
  2. În App Store Connect, creează înregistrarea aplicației cu acel ID de pachet, un SKU și limba principală.
  3. Generează o cheie API App Store Connect. Documentația Codemagic recomandă o cheie dedicată pentru Codemagic. Adaug-o în setările de integrare ale Codemagic și nu pune niciodată fișierul cheii în depozitul tău.
  4. Lasă Codemagic să genereze certificatul de distribuție și să aducă profilul de provizionare cu cheia. Poate prelua certificatele generate anterior și profiluri din portalul Apple Developer.

Ce a mers prost la noi

  • Primele noastre două build-uri au eșuat pentru că nu fusese configurat încă un profil de provizionare pentru ID-ul de pachet. Configurează certificatul și profilul înainte de primul build.
  • Un profil importat fără nume de referință în Codemagic nu a funcționat, iar butonul a eșuat fără niciun mesaj. Completează întotdeauna numele.
  • Prima configurare a cheii API a eșuat pentru că am tastat greșit Issuer ID. Copiază-l și lipește-l din pagina de chei a Apple.
  • Numerele de build trebuie să crească mereu. Cererea către Apple pentru ultimul număr a eșuat cât timp o încărcare anterioară era încă procesată, așa că am trecut la un număr derivat din ceas.

Pasul 3: build pe Codemagic și test pe TestFlight

Rețeta de build se află într-un fișier codemagic.yaml din depozit. A noastră instalează dependențele, pregătește fișierele jocului, le sincronizează în proiectul iOS cu npx cap sync ios, aplică profilele și construiește IPA-ul pe o mașină Mac mini M2. Apoi Codemagic publică build-ul în App Store Connect. Primul nostru build reușit a durat cam șase minute, iar build-ul de producție ulterior sub patru.

O surpriză: cu submit_to_testflight setat la false, Codemagic a încărcat totuși build-ul în App Store Connect. Documentația Codemagic descrie această opțiune ca fiind cea necesară pentru distribuirea către grupuri beta.

Limitele TestFlight

  • Testeri interni: până la 100 de utilizatori App Store Connect din echipa ta.
  • Testeri externi: până la 10.000, după ce primul tău build pentru testare externă este aprobat de App Review.
  • Un build rămâne disponibil testerilor până la 90 de zile.

O invitație de tester intern rămâne în așteptare până când este acceptată din e-mailul TestFlight, iar aplicația nu apare în TestFlight înainte de asta. Verifică folderul de spam.

Ce a găsit iPhone-ul și Windows-ul nu a putut

  • Fișierele audio înregistrate nu se încărcau. În aplicație, fetch returna statusul 0 cu octeții corecți, iar codul nostru îl trata ca eroare. Acceptarea statusului 0 pentru fișierele locale a rezolvat problema.
  • Butoanele erau tăiate în orizontală, lângă decupaj. Am refăcut layout-ul rezultatelor și am testat fiecare colț.
  • Ecranele de cumpărare comune cu Android încă spuneau Google Play. Pe iOS spun acum App Store.
  • Achizițiile de test făcute în TestFlight nu puteau fi resetate, așa că build-urile de test aveau un buton care simula că nu ai cumpărat. Build-urile de magazin nu îl au.

Pasul 4: lista din App Store Connect, confidențialitatea și vârsta

Restul se face în browser. Aceasta este ordinea care ne-a mers.

  1. App Information: subtitlul, categoria și chestionarul de vârstă. Răspunde sincer pentru ce arată jocul cu adevărat.
  2. Pricing and Availability: prețul și țările. Disponibilitatea pentru Mac și Apple Vision Pro era activată implicit. Am dezactivat-o, pentru că jocul nostru este făcut pentru atingere.
  3. App Privacy: Apple cere aceste detalii pentru aplicațiile noi și pentru actualizări, inclusiv practicile partenerilor terți al căror cod se află în aplicație, de exemplu rețele de reclame și SDK-uri. Este obligatoriu un URL public al politicii de confidențialitate.
  4. Achiziții în aplicație, dacă există: nume, descrieri, o captură de ecran pentru revizuire și note pentru revizor.
  5. Pagina versiunii: descriere, cuvinte cheie, URL-uri de suport și de marketing, drepturi de autor, build-ul, notele pentru revizuire și opțiunea de lansare. Noi am ales lansare manuală.
  6. Capturile de ecran, apoi fiecare limbă suplimentară cu textul și capturile ei.
  • Capturi de ecran: ghidul 2.3.3 spune că ele trebuie să arate aplicația în uz, nu doar grafica de titlu sau ecranul de încărcare. Ale noastre sunt capturi reale ale jocului.
  • Numele aplicației: un nume pe care îl voiam era deja luat în App Store. Ai pregătit un al doilea nume, sau un nume cu o parte descriptivă scurtă.
  • Note pentru revizuire: am scris că jocul este complet în aplicație, funcționează offline, nu cere autentificare și unde se găsesc achiziția și butonul de restaurare.

Citește termenii licenței noastre înainte să publici un șablon ca aplicație

Pasul 5: trimiterea și ce verifică Apple

Trimiterea te obligă să publici răspunsurile de confidențialitate ale aplicației și să confirmi că sunt adevărate, apoi să trimiți ciorna. A noastră a plecat pe 19 octombrie 2026, cu versiunea aplicației și achiziția ei unică, iar starea a devenit Waiting for Review (în așteptarea revizuirii). Dacă o revizuire se întoarce cu respingere, răspunsul merge prin Resolution Center, cu fapte, nu cu o retrimitere oarbă.

Pentru un joc făcut dintr-un șablon, trei ghiduri contează cel mai mult. 4.2 cere mai mult decât un site web reambalat, deci păstrează jocul în aplicație. 4.3(a) cere să nu creezi mai mulți ID-uri de pachet pentru aceeași aplicație. 4.3(b) spune că Apple nu vrea aplicații care nu pot fi deosebite de ce este deja larg disponibil. Un reskin trebuie să schimbe reguli, conținut și interfață, nu doar grafica.

Ce includ șabloanele noastre și partea pe care o putem face noi

Fiecare șablon vine cu dosarul de joc gata de găzduit, cu sursă lizibilă, un manual și 6 luni de suport, sau 12 cu extensia. Suportul acoperă instalarea și utilizarea fișierelor furnizate și remedierea defectelor reproductibile. Un wrapper iOS, reclame native, achizițiile în aplicație, configurarea build-ului cloud și lista din App Store sunt servicii separate.

Dacă preferi să nu configurezi tu semnarea și Codemagic, trimite-ne șablonul, planul tău de cont Apple și termenul. Îți răspundem cu domeniul, prețul și calendarul înainte să începem vreo lucrare. Nu publicăm o listă de prețuri pentru lucrări personalizate.

Cere o ofertă ca să duci jocul tău pe App Store

Întrebări frecvente

Pot publica un joc pentru iPhone fără să am un Mac?

Da. Ai nevoie totuși de macOS și de Xcode pentru build, dar un serviciu cloud precum Codemagic le oferă. Restul, de la App Store Connect până la TestFlight, funcționează în browser și pe un iPhone.

Cât costă publicarea pe App Store?

Apple Developer Program costă 99 USD pe an de calendar de membru. Planul gratuit individual de la Codemagic include 500 de minute macOS M2 pe lună, iar minutele suplimentare se facturează pe minut. Adaugă licența jocului și grafica pentru magazin.

Am nevoie de un iPhone?

Pentru testare reală, da. iPhone-ul nostru a găsit audio lipsă, butoane tăiate și nume greșite în magazin, pe care build-ul Windows și testele din browser nu le arătaseră.

Va accepta Apple un joc HTML5 împachetat într-o aplicație?

Nu putem promite un rezultat. Ghidul 4.2 cere mai mult decât un site web reambalat, deci includem jocul complet în aplicație, îl facem să funcționeze offline și îi dăm funcții native. Ghidul 4.3 se aplică și reskin-urilor.

Șabloanele tale includ un build iOS?

Nu. Edițiile noastre sunt jocuri pentru browser, iar paginile produselor spun că build-urile de aplicație nativă nu sunt incluse. Poți urma singur această rută sau o poți comanda de la noi, pe ofertă.