Xcode 11, Catalina 10.15, iOS 13の時代に 初代iPadで Hello World


昔話

iPad が登場して10年だそうだ。私も iPad 発売同時にアプリをリリースしようと不眠不休であるアプリを開発したが、審査も通りさて販売開始という直前にリジェクトされてしまった。審査は遠ていたのにだ、自分では付箋アプリのつもりだったが、機能を盛り込みすぎてマルチタスクアプリとみなされてリジェクトされたようだ。そもそも、当時はガイドラインなんて存在しなかったように記憶している。電話で頑張って審査の不当性をアピールしたが、蟻が人様に対抗するすべがないように、そのアプリは存在しない事が確定して、一週間は腑抜けになっていた自分を思い出した。

さて、横浜のiOS勉強会の帰りに、当時の日本では未発売だったiPadを並んで使って使っている様子は、海外でも記事になったそうだ。

Japan: Die U-Bahn-Dominanz des iPad
https://www.maclife.de/panorama/netzwelt/japan-die-u-bahn-dominanz-des-ipad

iPad 1 で Hello World

今回当時の iPad 1 をまだ持っていた事を思い出し、2020年4月初旬の時点で最新の環境で、Hello World アプリを初代Padで実行させてみたいと思った。

  • iPad 1 は完全に放電されていたので、なかなか充電されず、放置していたら知らない間に電源が入った。
  • iPad が Disabled になっていたので、すったもんだして初期化した。

  • 環境は:
    • iPad 1, iOS 5.1.1 (9B206)
    • MacBook Pro 15-inch 2019
    • macOS Catalina 10.15.4
    • Xcode Version 11.4 (11E146)
  • Xcode で iPad 1 につなげると

Unsupported device model
“iPad” is of a model that is not supported by this version of Xcode. Please use a different device.

詰んだ

そうだ…うちには予備の環境があったので試してみようとした。

  • 環境
    • MacBook Pro (Retina 15-inch, Mid 2014)
    • macOS High Sierra (10.13.6)
    • Xcode 10.0 (10A255)
  • Xcode で iPad1 につなげると
Unsupported device model
“iPad” is of a model that is not supported by this version of Xcode. Please use a different device.

やっぱり詰んでいる

  • Xcode をさらに ...

やめておこう

iPad 2 で Hello World

実は、うちには iPad 2 も眠っていた。iPad 1 で Hello World が無理なら、iPad 2 で代理 Hello World でお茶を濁そうと思った。

iPad 1 と同様に時間をかけて充電し、restore して iOS を最新にアップデートします。

  • 環境
    • iOS 9.3.5 (13G36)
    • MacBook Pro 15-inch 2019
    • macOS Catalina 10.15.4
    • Xcode Version 11.4 (11E146)

Xcode で iPad2 につなげてみると今度は認識してくれました。

さて、Xcode 11 で Storyboard ベースの Hello World を作ります。自己主張が確認できるように、Storyboardで、画面のに "Hello World"UILabelを配置します。

iPad 1の UDID をポータルに登録し、ターゲットを iPad 2 でビルトをすると iOS 9 には実装されていない iOS 13関連のエラーが発生します。

そこで以下のように、iOS 13未満でもビルドできるように @available (iOS 13, *) を入れます。

    @available (iOS 13, *)
    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        ...
    }
@available (iOS 13, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    ...
}

さて、実行すると、真っ暗な画面しか表示されません。コンソールをみると以下の通りです。

HelloWorld1[303:20428] The app delegate must implement the window property if it wants to use a main storyboard file.

このメッセージを検索すると以下のページがヒットしました。

The app delegate must implement the window property if it wants to use a main storyboard file swift
https://stackoverflow.com/questions/29441682/the-app-delegate-must-implement-the-window-property-if-it-wants-to-use-a-main-st

どうやら、最新の Xcode のプロジェクトテンプレートの AppDelegate には var window: UIWindow? は入っていないようです。そこで以下のように、window プロパティを追加します。

AppDelegate.swift
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    ...
}

さて、気を取り直して、ビルド&ランします。

なんとか Hello World できました。文字をもう少し大きくすればよかったと思ったもののここに時間を使うところではないのでヨシとします。

結論

さて、2020年初頭の最新環境では、iOS 5.1.1 で更新が終わっている iPad 1 でのアプリ開発は無理そうですが、iOS 9.3.5 までアップデート可能な iPad 2 までならアプリの機能次第では開発ができそうです。なんか凄いなと思いました。