日本語 | English
吉里吉里Z (krkrz) を iOS / iPadOS で動かすための外枠リポジトリです。CMake の Xcode ジェネレータで Xcode プロジェクトを作ってビルドし、システムまわりは SDL3 を使います。
- エンジン本体とプラグインのソースは krkrz_dev を
KRKRZ_BASE経由で参照します。このリポジトリには iOS 固有のビルド定義とパッケージングだけを置きます - タイトルごとの設定 (
ios-config.json) と資材は別のフォルダ (プロジェクトフォルダ) に置けます。 このリポジトリだけでも、同梱のサンプルとしてビルドできます cmake(プラグイン構成) とassetPack(資材の取り込み) は krkrz_android / krkrz_linux / krkrz_gdk / krkrz_web と共通の書式です。iOS はdlopenできないため、プラグインは全て static で組み込まれます
- macOS と Xcode 15 以降 (Command Line Tools を含む)
- CMake 3.24 以降
- Python 3 (
scripts/gen-config.pyなどの生成スクリプトに使います) - vcpkg — 環境変数
VCPKG_ROOTに導入先を指定 - krkrz_dev — このリポジトリと同じ場所に clone
- 実機ビルドでは Apple Developer の Team ID (
local.mkにDEVELOPMENT_TEAM=XXXXXXXXXX)
krkrz_dev をこのリポジトリと同じ階層に clone します (krkrz_android / krkrz_web と同じ配置です)。
mkdir kirikiri && cd kirikiri
git clone --recursive https://github.com/wamsoft/krkrz_dev.git
git clone https://github.com/wamsoft/krkrz_ios.git
cd krkrz_ios
make runkirikiri/ ← KRKRZ_BASE (既定 = このリポジトリの親フォルダ)
├── krkrz_dev/ ← エンジン本体・プラグイン
└── krkrz_ios/ ← このリポジトリ
別の場所の krkrz_dev を使う場合は、環境変数 KRKRZ_BASE (krkrz_dev の親フォルダ) を指定します。
iOS 対応のエンジン修正は krkrz_dev の develop ブランチ (2026-10 以降) に入っています。
make build # Simulator 用 Debug ビルド (初回は vcpkg 依存のビルドで時間がかかります)
make run # 起動中の Simulator にインストールして起動
make run SIM_DEVICE=<UDID> # Simulator を指定 (未起動なら boot)。一覧: xcrun simctl list devices available
make build SDK=device DEVICE=<UDID> # 実機用 (UDID は xcrun xctrace list devices)
make run SDK=device DEVICE=<UDID> # 実機にインストールして起動
make xcode # 生成された Xcode プロジェクトを開く (デバッガ用)
make ipa # 配布用 Release ビルド (REPL なし) → build/ios/ipa/*.ipa → docs/release.md
make ipa EXPORT_METHOD=app-store-connect # App Store Connect / TestFlight 提出用
make distclean # build/ios を削除
make build PROJECT_DIR=/path/to/mygame # 自分のプロジェクトフォルダをビルドkrkrz_dev (src/core) を更新したら、ビルドの前に make configure (実機なら
make configure SDK=device) を実行してください。make build は Xcode プロジェクトが
既にあると作り直さないため、エンジン側でソースファイルが追加・削除されても拾わず、
追加されたファイルがリンクされません (未定義シンボルのリンクエラーになります)。
| 変数 | 意味 |
|---|---|
SDK |
simulator (既定) / device |
CONFIG |
Debug (既定) / Release |
DEVICE |
実機の UDID (SDK=device のとき) |
SIM_DEVICE |
Simulator の UDID (既定 booted = 起動中のもの) |
REPL |
起動時に -replweb=<port> を渡す (REPL) |
EXPORT_METHOD |
make ipa の書き出し方法 (development (既定) / release-testing / app-store-connect) |
ビルド出力:
${PROJECT_DIR}/build/ios/
├── generated/ # gen-config.py の出力 (app.cmake, myapp.cmake, assets/, Assets.xcassets)
├── simulator-<arch>/ # Xcode プロジェクト + ビルド物 (krkrz/Debug-iphonesimulator/krkrz.app)。arch はホストの CPU
├── device-arm64/
├── generated-dist/ # 配布ビルド (make archive / ipa) 用の生成物
├── dist/ # 配布ビルドの Xcode プロジェクト
├── archive/ # krkrz.xcarchive
└── ipa/ # 書き出した ipa
このリポジトリは共通のビルドシステムで、ビルドするタイトルの設定と資材は別のフォルダに置けます。
| 変数 | 意味 |
|---|---|
BUILD_SYSTEM_DIR |
このリポジトリのルート。Makefile が自動で決めます |
PROJECT_DIR |
プロジェクトフォルダ。${PROJECT_DIR}/ios-config.json を読み、${PROJECT_DIR}/build/ios/ に出力します。未指定ならこのリポジトリ自身 (サンプル) |
KRKRZ_BASE |
krkrz_dev の親フォルダ。既定はこのリポジトリの親フォルダ |
ios-config.jsonの相対パスはPROJECT_DIR基準です。このリポジトリの中を指すときは${BUILD_SYSTEM_DIR}/...と書きます- タイトルをまたいで使う環境設定 (
DEVELOPMENT_TEAMなど) は、このリポジトリ直下のlocal.mk(git の管理外) に書きます
バンドル ID・バージョン・対応機種・画面の向き・プラグイン・資材を指定します。リポジトリ直下のファイルが サンプル兼ひな形です。全体の例と各項目の説明は docs/ios-config.md にあります。
| キー | 内容 |
|---|---|
bundleId / displayName |
バンドル ID とホーム画面の名前 |
version / build |
表示バージョン (CFBundleShortVersionString) とビルド番号 (CFBundleVersion) |
deploymentTarget / devices / orientations |
最低 iOS バージョン、対応機種 (iPhone / iPad)、画面の向き |
graphics |
gles (既定。OpenGL ES。Canvas / Shader 等の GL 機能が使えます) / metal (SDL_Renderer のみ) |
repl |
ブラウザ REPL (-replweb) を組み込むか。配布ビルドは設定に関係なく含めません |
a11y |
読み上げ (VoiceOver) 対応を組み込むか。Elements のダイアログ・setGameA11y / a11yLayers のノード・announce を VoiceOver へ出します。既定で有効です |
icon |
アプリアイコン (1024x1024 PNG)。docs/icon.md |
ipa.baseName |
make ipa の出力ファイル名 |
infoPlist / entitlements |
Info.plist への追加キー、entitlements |
cmake |
組み込むプラグイン (外枠共通の書式)。全て static で組み込まれます |
assetPack |
資材の取り込み (外枠共通の書式)。結果はアプリバンドル直下にコピーされます |
cmake / assetPack / パスの ${...} 展開の書式は、公開サイトの
外枠リポジトリの共通設定 を参照してください。
- Xcode > Settings > Accounts で Apple ID にサインインし、Settings > Components で iOS プラットフォームを導入します
(
xcodebuild -downloadPlatform iOSでも可)。デバイス指定ビルドに必要です local.mkに Team ID を書きます:DEVELOPMENT_TEAM=XXXXXXXXXX- iPhone 側でデベロッパモードを有効にします (設定 > プライバシーとセキュリティ > デベロッパモード)
make build SDK=device DEVICE=<UDID>— 自動署名で接続中のデバイスが Team に登録され、プロファイルが作られます- 署名で
errSecInternalComponentが出る場合 (ターミナル / エージェントからのビルドでキーチェーンの 許可ダイアログが出せない)、Terminal.app で一度だけ次を実行します:security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k '<ログインパスワード>' ~/Library/Keychains/login.keychain-db - 初回起動時は iPhone で 設定 > 一般 > VPN とデバイス管理 > 開発元を「信頼」します
DEVICE 未指定の make build SDK=device は -target ビルドになり、デバイス登録は行われません
(登録済みの Team / プロファイルがあればそれで署名されます)。
make archive / make ipa は、開発用ビルドとは別のビルドディレクトリで Release + エンジンの MASTER 構成
(REPL なし) のビルドを作ります。事前準備・書き出し方法 (development / release-testing / app-store-connect)・
App Store Connect へのアップロード・提出前チェックリストは docs/release.md にあります。
"repl": true のビルドには、エンジンのブラウザ REPL (-replweb, HTTP+SSE) が入ります。
起動引数で -replweb=<port> を渡したときだけ待ち受けます (全インタフェース・IPv6+IPv4)。
make run REPL=8899 # Simulator → http://127.0.0.1:8899/
make run SDK=device DEVICE=<UDID> REPL=8899 # 実機 → USB 経由で http://[<IPv6>]:8899/実機には、USB 接続時に CoreDevice が張る IPv6 トンネル経由で届きます。アドレスは
dscacheutil -q host -a name <端末名>.coredevice.local で引けます (端末名は
xcrun devicectl list devices の Hostname)。ブラウザで開くと Console / Watch / Pad の
UI が使えます。curl -X POST --data '<TJS>' http://[...]:8899/cmd でも評価できます (結果は /events の SSE)。
REPL の使い方はエンジン側の doc/REPL.md と skill krkrz-repl を参照してください。
初回はローカルネットワーク利用の許可ダイアログが出ることがあります (NSLocalNetworkUsageDescription
は repl 有効時に自動で Info.plist に入ります)。配布ビルドでは REPL は自動で外れます。
iOS ではタッチからマウスへの変換をエンジン側で行います (SDL 標準の変換は無効です)。
| 操作 | 送られるもの |
|---|---|
| 1 本指タップ / ドラッグ | 左ボタンの押下・移動・解放 (押下は 100ms 保留して 2 本指と区別) |
| 2 本指タップ (動かさずに離す) | ESC キー (戻る) |
| 2 本指で上下スワイプ | マウスホイール (指を上へ = 下へスクロール) |
Window.enableTouch = true にすると onTouch* イベントも届きます。
Window.enableTouchMouse = false でマウスへの変換を止められます。
既定で有効です (ios-config.json の "a11y")。Elements のダイアログは何もしなくても VoiceOver で読まれ、
操作できます。Layer に描いた UI は ElementsDialog.setGameA11y / a11yLayers で、任意の文は
ElementsDialog.announce で読ませられます。使い方はエンジンのドキュメント (読み上げのガイド) とコアデモ
data/a11y を見てください。"a11y": false にすると OS へは出しません (API はそのまま使えます)。
組み込むと実行ファイルが約 0.35 MB 増えます。
- 実機: 設定 > アクセシビリティ > VoiceOver。設定 > アクセシビリティ > ショートカット で VoiceOver を選ぶと、 サイドボタンのトリプルクリックで切り替えられます
- Simulator: VoiceOver は使えないので、Xcode の Accessibility Inspector で要素・名前・枠・操作を確かめます
- REPL:
.a11yで読み上げツリー、.a11ylogで読み上げログ、ElementsDialog.a11yActiveで接続の有無を見られます
plugins/ に iOS 専用のプラグインがあります。ios-config.json の cmake.plugins に名前を書くと組み込まれます
(cmake.pluginFolders に ${BUILD_SYSTEM_DIR}/plugins が必要です)。使い方の詳細は docs/plugins.md にあります。
| プラグイン | 内容 |
|---|---|
virtualpad |
画面に半透明の仮想パッドを出し、タッチをゲームパッド入力 (VK_PAD*) として渡します。krkrz_android と同じソースです |
iosconfig |
システムメニュー (左端からスワイプ) と、機能設定画面・権利情報画面を追加します |
gamecenter |
Game Center (実績)。TJS の GameCenter クラスは krkrz_android の PlayGames と同じ形です。有料の Apple Developer Team での署名が必要です |
| ドキュメント | 内容 |
|---|---|
| docs/ios-config.md | ios-config.json の全体の例と各項目、生成物 |
| docs/plugins.md | iOS 固有プラグイン (仮想パッド・システムメニュー・Game Center) の使い方 |
| docs/release.md | 配布ビルド (Archive / ipa)、App Store Connect 提出、提出前チェックリスト |
| docs/icon.md | アプリアイコンの置き場所・設定・画像要件 |
| docs/ios-design.md | 設計検討と実装経緯 |
吉里吉里Z 本体のドキュメントは 公開サイト にあります。
このリポジトリ (ビルドスクリプト・ツール・テンプレート) は MIT License です。
ビルド時に参照・取得する以下のものは、それぞれのライセンスに従います。このリポジトリのライセンスは及びません。
- 吉里吉里Z 本体とプラグイン (krkrz_dev 配下の各 submodule)
- SDL3 (zlib License) と、vcpkg で取得する依存ライブラリ
- Xcode / iOS SDK (Apple のライセンス条項)
配布物に必要なライセンスの表記は、使ったエンジン・プラグイン・ライブラリに合わせてタイトル側で同梱してください。