Cocoaメモ

Appleプラットフォームでの開発メモ

1月9日、初代iPhone発表の日にiPhone SDK 2時代をふりかえる

これははてなエンジニアアドベントカレンダー2022の40日目の記事です。昨日は id:kouki_danCI/CDサービスのOpenID Connect対応 Dive Intoでした。

16年前の今日、2007年の1月9日は初代iPhoneが発表された日です。思い返すと、初期のiPhoneネイティブアプリ開発環境には今となっては当たり前の各種機能がありませんでしたね。簡単にふりかえってみます。

初代iPhone発表〜iPhone SDK

2007年1月9日、初代iPhoneが発表されました。

日本では未発売。ネイティブアプリ向けのSDKもまだありませんでした。翌年2008年のiPhone 3Gから日本でも発売開始、そしてこの年、iPhone SDKApp Storeも登場します。

AppKitから派生したUIKit、Objective-CXcodeなど今まで馴染みのなかったAppleの技術に触れる人が一気に増えていきました。

iPhone OS 2 SDK時代なかったもの

iPhone OS 2時代にありそうでなかったものの中から、初期の数年で実装された印象的なものを中心に、簡単にふりかえってみます。

カット・コピー・ペースト

OSの機能として存在していませんでした。サポートは、iPhone OS 3から。

当時、『iPhoneはコピペもできない』との言及をよく見た気がします。確かに不便!ですがコピペなしでどう暮らしていたのか、あまり記憶にありません。あまり不便に感じていなかったのかな…。

iPadiOS(OS名)

iPhone OS 3.2と共にiPadが登場したのをきっかけに、OS名のリブランディングが行われました。iPhone OS 2、iPhone OS 3 、ときてバージョン4からはiOS 4に。

iPad OS 13で再びデバイス名がOS名に組み込まれましたが、iOSiPhone OSに戻りませんでしたね。

AVFoundationによる細かいカメラ操作

iPhone OS 3までは、カメラの細かい操作ができませんでした。iOS 4で、AVFoundationによりカメラの制御機能が追加されました。

カメラアプリはApp Storeで人気のカテゴリーですが、iPhone OS 3までは機能の少ないUIImagePickerControllerしかAPIがありませんでした。黎明期のカメラアプリ開発者たちはUIImagePickerControllerを深く掘り起こすなどして、なんとか機能を実現していたようです。iOS 4で追加された高度なカメラ制御機能で、カメラアプリは一気に進化していきます。

Push通知

Push通知の登場は iPhone OS 3から。

iPhoneは、通話やメッセージを受信する基本機能を備えています。Push通知により、アプリはこの基本機能を拡張できるようになりました。

Push通知は、電力消費の観点でも興味深いものでした。現在もそうですが、Appleはデバイスの電力消費を抑えるため、アプリのバックグラウンドでの動作を厳しめに制限しています。iPhone OS 3時代は現在よりさらにデバイス性能も低く、制限はより厳しいものでした。Push通知は、アプリを停止状態を維持したまま復帰タイミングの決定をサーバーサイドに寄せることで電力消費問題を解決する、Appleらしい提案でした。

アプリ内課金

非消耗型のアプリ内課金は、iPhone OS 3から。定期購読はiOS 4から。

アプリ内課金の登場で、アプリのビジネスモデルが大きく変わりました。開発者は収入源が増え、ユーザーはよりよいサービスを享受できるようになり、黎明期の機能追加の中では非常に重要なものだったと考えます。

Core Data

iPhone OS 2にはsqliteライブラリだけが搭載されていました。Core DataのサポートはiPhone OS 3から。

Core Dataは歴史が古く、macにはiPhone以前から搭載されていました。さらに、NeXT時代のEnterprise Objects Framework(EOF)まで遡ることができます。

私はWebObjectsのEOF、macのCore Dataを趣味で触っていましたが、業務で利用したことはありませんでした。iPhoneにCore Dataが搭載されたのをきっかけに、業務で利用しはじめました。

Core Dataは習得が難しいフレームワークです。その後、Core Data Stackの構築を簡単にしたり、バッチ処理など弱点を補う機能が追加されたり、と進化を続けていますが、難しいのは相変わらずです。

そろそろApple純正の新しいデータレイヤーのフレームワークが登場しないか、とずっと思っていますがなかなか実現されません。Craig FederighiさんがEOFの開発メンバーで、思い入れが深いのかな、と勝手に想像しています。

マルチタスキング

iPhone OS 3までは、アプリはバックグラウンドに遷移するとプロセスが終了する仕様でした。バックグラウンド遷移後もプロセスが生きているマルチタスキングのサポートは、iOS 4から。

マルチタスキング搭載以前は、アプリを切り替えて戻ると最初からやり直しになるため、ユーザー体験向上のために直前の状態を復帰させる実装が重要でした。しかしアプリの状態復帰は実装がなかなか大変で、省略される場合もしばしば。マルチタスキング以後は、実装を頑張らなくても状態復帰できるケースが増え、利便性が向上しました。依然としてバックグラウンドでアプリプロセスが終了するケースはあるので、復元の実装は頑張りたいところです。

Objective-C ARC

メモリ管理がほぼ自動化されたARC(Automatic Reference Counting)はiOS 5時代のXcode 4.2から。

ARC以前は、オブジェクトのメモリ管理を開発者が手動で行う必要がありました(MRC=Manual Reference Counting)。

MRCは、ガベージコレクションで自動メモリ管理された言語からObjective-Cに入った人がつまづきやすいポイントでした。ARCは、参照カウントによる効率の良いメモリ管理をコンパイラが自動でサポートする画期的なもので、より洗練された形でSwiftに受け継がれています。

ちなみにmac環境ではガベージコレクションがサポートされていた時期がありますが、2015年にdeprecatedになっています。

Swift

当然まだありません。

SwiftはWWDC 2014のKeynoteで発表されました。私は当時Keynote会場で生で見ていたのですが、現場はまさに歓喜の渦だったのを鮮明に覚えています。その後のSwiftの発展は記憶に新しいところでしょう。

20周年に向けて

気づけばiPhoneも登場から20年が近づいてきました。20周年はどのようなふりかえりになるか、楽しみですね。

(おまけ。App Store 10周年の記事) www.apple.com