我輩はブロガーではない。ネタもまだない

SASとかDelphiあたりの人様の役に立たないネタを提供します

Delphi11で古いiOS端末を使ってデバッグする

これはAdvent Calendar2021 Delphiの3日目の投稿です。
qiita.com


さて、どんなシステム開発でもリリース前にしなきゃいけないのは、「デバッグ作業」ですね。

DelphiiOS開発する上では以前はXcodeiOSシミュレータが使用できましたが、Delphi11ではiOSシミュレータが使用できなくなっています。ですので、実機デバッグという作業が必要になります。
実機デバッグの方法はいくつか記事があるのですが、古いiOS端末だとスムーズに行かなかったので、今回まとめることにしました。

リリースサイクルの速いモバイルOSに対応していくためには、macOSXcodeDelphiもできるだけ新しいものが好ましい、とは建前で、やっぱり古いiPadを安く手に入れてアプリ開発、というのもアリだと思うのです。(直ちにリリースするのでなければ)



必要なもの

mac(今回はMacbook Air 2015、BigSur)
iOS端末(今回はiPad mini2、iOSのバージョンは12.5.5)
・WindowsPC(Delphi11がインストールされている)


まず、WindowsにはDelphi11を、macにはXCode(この記事ではVersion13.0を使用)、PAServerをインストールしておきます。
デバッグするアプリ名は「test」、
自身の所属は「com.japelin」としておきます。

1. Xcodeの作業

1-1. Xcodeで新規プロジェクトを作成する

File>New>Projectを選択
f:id:japelin:20211202122431p:plain


1-2. iOSのAppを選択してNext

f:id:japelin:20211202122453p:plain


1-3. Product Nameにアプリ名「test」、Organication Identifierに所属である「com.japelin」と指定してNext

f:id:japelin:20211202122520p:plain


1-.4 プロジェクトの保存先を指定して「Create」

f:id:japelin:20211202122546p:plain


1-5. デバイスのターゲットを自分のiPadに変更

f:id:japelin:20211202123900p:plain

f:id:japelin:20211202123943p:plain
バイス名の後ろにiOSバージョンが古いというコメントが表示されている
1-6. プロジェクトを2回クリックし、TARGETのオプション画面を表示

f:id:japelin:20211202124213p:plain


1-7. Build SettingsでiOS Deployment TargetをiOS 14.0から12.4に変更(自分の端末に合うように)

f:id:japelin:20211202124246p:plain


1-8. Xでオプション画面を閉じる。
f:id:japelin:20211202124444p:plain
先程まで出ていたiOSのバージョンに関する表示がなくなっていることに注目
1-9. コード画面に戻ると、多数のエラー、警告が表示されている

f:id:japelin:20211202124544p:plain


1-10. まずは1つ目の「'View' is only available in iOS 13.0 or newer」という表示のエラーアイコンをクリック

f:id:japelin:20211202124754p:plain


1-11. Add @available attirbute to enclosing propertyのFixをクリック

f:id:japelin:20211202124858p:plain


1-12. 2秒ほど待つと関連するエラーが消える。

f:id:japelin:20211202124923p:plain


1-13. 続いて、残ったエラーも同様にしてFixする

f:id:japelin:20211202131425p:plain


1-14. エラーメッセージが消えたのを確認し、プロジェクトツリーからtestAppを選択する

f:id:japelin:20211202131528p:plain


1-15. 同様にエラーを修正する

main()>WindowGroupの順で処理するとよさげ。
(WindowGroupでFixした後に別のエラーが出る場合、⌘+Zで元に戻すと、エラーが消えたりする。このあたりは深く追求しない…)
f:id:japelin:20211202131755p:plain


1-16. エラーがなくなったらProduct>Run

f:id:japelin:20211202131802p:plain


1-17. 警告がでるので、一旦OKで閉じる。

f:id:japelin:20211202131820p:plain


Xcodeの作業は以上で終了です。プロジェクトもCloseで閉じてしまって構いません。(Xcode自体は起動されている必要があります)

2. iPad での作業

2-1. iPadを確認すると、空アプリがインストールされている。

f:id:japelin:20211202132853p:plain

f:id:japelin:20211202132522p:plain
起動すると警告が表示される
2-2. iPadの設定>一般>デバイス管理>デベロッパAPPを選択

f:id:japelin:20211202132504p:plain


2-3. 信頼する

f:id:japelin:20211202133136p:plain


iPadの作業は以上で終了です。

3. Delphiでの作業

3-1. DelphiのアプリケーションでiOSのプラットフォームでターゲットが表示されていることを確認

f:id:japelin:20211202121236p:plain


3-2.プロジェクトをオプションを開き、CFBundleIdentifierにアプリの固有名を指定する。

固有名は「所属ドメイン逆順+アプリ名」というのが一般的ですので「com.japelin.test」とします。
f:id:japelin:20211202134500p:plain


3-3. F9を押してデバッグ実行します

コンパイルに少し時間がかかりますが、無事起動しました。もちろんブレークポイントもちゃんと動きます。
f:id:japelin:20211202134653p:plain


3-4. Xcodeで作成したアプリを置き換える形で、Delphiで作成したアプリがインストールされているのがわかります。

f:id:japelin:20211202134839p:plain



これで、古いデバイスでもデバッグ実行ができるようになりました!


なお、本投稿における情報はDelphi Discordにてjunさん(https://qiita.com/pik)に教えていただいたり、山本さんのウェブサイト(https://www.gesource.jp/weblog/?p=7212)の情報を参考にさせていただきました。
この場を借りて御礼申し上げます。