作業時間記録アプリ「MinuteMind」をUnityで開発し、Androidに続いてiOSにも対応させて無事App Storeに公開しました。
この記事では、iOS対応のためにやったこと、詰まったポイント、審査通過までの流れをまとめています。
開発環境
- Unity 2022.3 LTS
- Xcode 15
- macOS Ventura
- 開発対象:iOS 15以降
- Apple Developer Program(年額12,800円)
JSONファイルの読み込み:UIDocumentPicker連携
AndroidではSAF+AAR連携でGoogle Driveからファイルを選択していましたが、
iOSでは UIDocumentPickerViewController を使って、ユーザーにファイルを選択してもらう形式にしました。
構成概要
- Unityからネイティブコードを呼び出し(PostProcessBuildでブリッジ追加)
- UIDocumentPickerでJSONファイルを選択
- 選択完了後に
UnitySendMessage()
でUnityへ通知
// ネイティブ側(Swift)で選択完了後にUnityへ通知
UnitySendMessage("MainBridge", "OnJsonImported", jsonString)
通知(Local Notification)とカスタムサウンド対応の試み
iOSでカスタム通知音を使いたくて、以下のような対応を検討・試行しました:
.caf
ファイルをXcodeプロジェクトに追加(Copy Bundle Resources に含める)soundName
を通知に指定- AVAudioSession や category 設定で音が鳴るように調整
しかし、Unity標準の Mobile Notifications パッケージと組み合わせるのが想像以上に手間だったため、
今回は一旦カスタムサウンドを見送り、iOSのデフォルト通知音を使用する形に戻しました。
※関連して Info.plist から UIBackgroundModes の項目も削除しました
Appleの審査ガイドラインでは、実際にバックグラウンド実行しない場合に UIBackgroundModes
を指定しているとリジェクト対象になるため、
最終的に使用せず削除しています。
Unity IAP(課金処理)の実装と注意点
iOSでも同じ商品IDを使用
- Androidと同様に「広告非表示」だけを課金要素に実装
com.minutemind.removeads
などのIDを App Store Connect 側にも追加- サンドボックス環境での購入確認には少しコツが必要(テストユーザー登録)
App Store審査とリジェクト対策
初回申請時にやったこと:
- App Store Connectで新規アプリ登録
- 各種情報(プライバシー、広告設定など)を入力
- Unityでビルド → XcodeでArchive → Upload
- 審査に提出(TestFlight配布→本番リリース)
リジェクトされた理由と対処法
リジェクト理由 | 対応内容 |
---|---|
UIBackgroundModes が無効なのに設定あり | Info.plist から削除して再ビルド(※サウンド機能簡略化により不要になった) |
「サードパーティと共有されるデータがありますか?」 | Google Drive は連携するが、ユーザー操作によるものと説明 |
アプリが戻ってこない問題 | UIActivityViewController 使用時の挙動を改善(共有シート) |
最終的な申請〜公開までの流れ
- Xcodeで
Archive
→App Store Connect
にUpload - TestFlight審査:約30〜60分で通過
- 本番審査:約1営業日で通過(特に審査員対応はなし)
関連リンク
おわりに
iOSでのアプリ公開は、Androidと比べて準備や申請手順がやや多く、最初は戸惑うこともありました。
しかし、環境さえ整えばUnityでもスムーズにiOSアプリを出せると実感できました。
同じようにUnityでiOSアプリを出したい方の参考になれば嬉しいです!
コメント