はじめに
先日 Chromatic Lens という iOS アプリをリリースしました。
https://apps.apple.com/app/chromatic-lens/id6766054364
ここで得た知見を備忘録的に箇条書きします。
縦固定
アプリを縦方向のみで使用させたい場合、以下の2つの設定が必要です。
1. Delphi のプロジェクトオプションで縦を指定
2. info.plist.TemplateiOS.xml にフルスクリーン指定を追加
dict 内部であればどこでも追加できます。
<key>UIRequiresFullScreen</key>
<true/>
フルスクリーン指定が必要な理由は iPad への対応です。
iPad 対応アプリは Split View 対応が求められます。
Split View では
- 全方向対応(Portrait / Landscape)
- リサイズ対応
が前提になります。
縦固定はこの前提に反するのですが、このアプリはフルスクリーンのアプリだ!として指定すると Split View 非対応でも審査に通ります。
今回の Chromatic Lens は iPad 対応はオマケだったので、フルスクリーンアプリとして申請しました。
本来は、Landscape にも対応すると良いと思います。
ローカライズ
App Store Connect では言語を追加して、説明文などをローカライズできます。
今回は
- 日本語
- 英語
を追加しました。
ただ、App Store Connect で指定しただけだと App Store で日本語ではなく英語が表示されます。
正しくローカライズするためには、info.plist に下記の指定が必要でした。
こちらも dict 内部に追加します。
<key>CFBundleDevelopmentRegion</key>
<string>ja</string>
<key>CFBundleLocalizations</key>
<array>
<string>ja</string>
<string>en</string>
</array>
CFBundleLocalizations にはローカライズ対象の言語を並べます。
ここでは ja と en を追加しています。
不要な設定をけずる
デフォルトでは↓のとおり、色々な設定があります。
でも例えば「NSBluetoothAlwaysUsageDescription」など、Bluetooth を使わないアプリには関係ありません。
必要の無い設定があるとリジェクト対象なので不要なものを削ります。
不要な物を削除した結果が↓です
Reason をちゃんと書く
NS~UsageDescription に正当な理由を書いておかないとリジェクトされます。
このアプリでは
- NSPhotoLibraryUsageDescription
- NSPhotoLibraryAddUsageDescription
- NSCameraUsageDescription
の3つが必要だったので、それぞれ理由を書いています。
この理由文も本来はローカライズする必要があります。
ただ、Delphi がこの文言のローカライズをサポートしていないため、手作業でやることになり面倒です。
…ですが、ここは英文のままでも審査は通りました。
文言をローカライズする方法
ja.lproj/ と en.lproj/ というフォルダを作ります。
それぞれに InfoPlist.strings という文言ファイルを作ります。
そして下記の様に Key=Value; という形式(文末の ; を忘れずに)で値を設定します。
"NSPhotoLibraryUsageDescription" = "画像を保存するために写真ライブラリへアクセスします";
"NSCameraUsageDescription" = "カメラを使用してリアルタイムに色覚を確認します";
info.plist 側ではローカライズされているキーは空文にします。
最後に、配置メニューで、ja.lproj と en.lproj を追加して配置するようにします。
App Store Connect へのアプリのアップは Transporter を使う
Transporter は Apple 謹製のアプリです。
Xcode 以外で作られたアプリをアップするためのアプリです。
以前は Application Loader というアプリを使っていましたが、こちらは廃止されて、Transporter になりました。
Transporter は、App Store から入手できます。
App Store: Transporter
この Transporter にアプリをドラッグ&ドロップすると下図のようにアプリが登録されます。
登録すると簡易チェックがはしり、そのチェックを通ったら初めて App Store Connect にアプリをアップ(デリバリ)できます。
アップするたびにバージョン番号を変える
Transporter の簡易チェックではアプリのバージョン番号もチェックしています。
バージョン番号が上がっていないとアップできません。
アプリを修正した場合、必ずバージョンを上げる必要があります(リジェクトされたとしても)。
バージョンはプロジェクトオプションで指定できます。
上の「モジュールのバージョン番号」は CFBundleVersion と連動しています。
CFBundleShortVersionString は手作業で値をいれます。
上だけ更新して、こちらの更新を忘れてしまうことが良くありました!お忘れ無く!
スクリーンショット用の端末
App Store では、iPhone と iPad それぞれで動作しているスクリーンショットを追加する必要があります。
ここに追加するスクリーンショットを撮影する端末は
- iPhone 16 Pro Max
- iPad Air 13-inch (M3)
です。
サイズが厳密に指定されているので、これ以外の端末だと上手く行きません。
(17 Pro Max は使えます)
これらの端末を持っていなくてもシミュレーターを使えばスクリーンショットを撮れます。
Delphi でデプロイ先を iOS シミュレータ ARM 64 bit にして、iPhone 16 Pro Max か iPad Air 13-inch (M3) を指定します。
トレーダーステータスを設定する
トレーダーステータスは EU で配信する場合に必要な設定です。
App Store Connect の「アプリ」セクションには表示されていないので見落としがちなポイントです。
App Store Connect の「ビジネス」セクションに行きます。
ビジネスページの「デジタルサービス法」から設定できます。
表示される↓このダイアログで収益を得る(トレーダー)かどうかを指定します。
いま公開しているアプリは収益を得ないため、トレーダーではありません、を選択しました。
トレーダーステータスを指定していない場合は、ビジネスページにアクセスすると「ビジネス」の直下に警告文が出ます。
その警告文からも上のダイアログを開けます。
まとめ
Delphi で iOS アプリをリリースする際は
- iPad の向き制約
- ローカライズ
- 権限設定
- App Store の挙動
このあたりにお気を付けください。
おまけ: info.plist.TemplateiOS.xml 全文
Chromatic Lens に用いた info.plist.TemplateiOS.xml の全文です。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<%VersionInfoPListKeys%>
<%ExtraInfoPListKeys%>
<%StoryboardInfoPListKey%>
<key>UIRequiresFullScreen</key>
<true/>
<key>CFBundleDevelopmentRegion</key>
<string>ja</string>
<key>CFBundleLocalizations</key>
<array>
<string>ja</string>
<string>en</string>
</array>
</dict>
</plist>









