iOS の開発を行うには Mac と Xcode が必要である。そのほかに開発したアプリを実機にインストールしたり、App Store に登録しようとする場合、Apple 社の Developer Program に加入する必要がある(有償)
実機にアプリをインストールするには、iOS開発者証明書を発行し、iOS Developer Center 上にデバイスを登録し、登録したデバイス用のプロビジョニングプロファイルを作成し、作成したプロビジョニングプロファイルをプロジェクトに設定する必要があり、そのための手続きが非常に複雑となっている。
iPhone でプログラミングする難しさは以下のように挙げられる。
1. Mac の調達、開発者登録や、証明書作成、Provisioning Profile の作成など開発を行うまでのハードルが非常に高い。
2. メモリー管理を自前で行う必要があり、メモリーがリークしないように、非常に神経を使う必要がある。
3. 構文が現代的なオブジェクト指向型のプログラミング言語ではなく、SmallTalk の影響を強く受けたメッセージ指向型のプログラミング言語となっている。そのため、シンタックスや構文を見ただけで戸惑うことが多く、生産性を低下させる一因となっている。
■ Provisioning Profile
Provisioning Profile ファイルとは開発者とアプリとデバイスを紐付け、アプリをデバイスににインストールを行うために必要な認証用のファイルである。Provisioning Profile ファイルには、Application ID、Friendly Name、Application IdentifierPrefi、秘密鍵、公開鍵のペア、CSRなどが含まれており、認証されたデバイスに、認証されたアプリしかインストールできないようになっている。iPhone 向けアプリを実機でテストを行うには、デバイスの UDID を iOS Developer Center に登録し、アプリとデバイスを紐付け、Provisioning Profile ファイルを作成し、そのファイルをデバイスにインストールする。
■ メモリ管理
iOS は Java のガベージコレクションのようにメモリを完全に自動で管理する仕組みがない。その代わり ARC と呼ばれる半自動のメモリ管理の仕組みが存在する。これは参照カウンタ方式で、メモリが参照されているかどうかを確認し、カウンタが0になった場合にメモリを解放する。ただし、これでメモリーリークがなくなるわけではなく、プログラマが細かくメモリを解放する必要がある。
■ Objective-C
Objective-C の歴史は非常に古く、1983年に NeXT 社(正確にはStepstone社創業者のブラッド・コックス)によって開発された。NeXT 社が開発した OS である NEXTSTEP の開発用と言語として使用された。その後、NeXT 社は Apple 社に買収され、Mac OS の開発用言語として採用され、iOS の開発用言語としても採用されている。ただ Objective-C のシンタックス、構文は Small Talk などのメッセージ志向言語の影響を強く受け、現在主流の言語とは非常に異なった雰囲気を持つ。例えばあるクラスのメソッドを実行する場合には、[ClassName MethodName] といった形でメッセージ式で記述する。またメモリ管理機能が弱く、プログラマがメモリ管理を細かく行う必要がある。