Cocoaは、macOS向けのアプリケーションを開発するための主要なフレームワーク(API)です。その起源はNeXTSTEP(後のOPENSTEP)のAPIにあり、macOSのネイティブアプリケーション構築に最適化されています。このため、従来の
Classic Mac OS(Mac OS 9.x以前)向けのアプリケーション開発には利用できません。
Cocoaを用いた開発では、
Appleが提供する
統合開発環境XcodeとInterface Builderが一般的に使用されます。Xcodeはプロジェクト管理やコード編集を、Interface BuilderはGUI(グラフィカルユーザーインターフェース)のデザインを支援します。また、iOSの主要フレームワークである
Cocoa Touchは、タッチインターフェースを前提としてCocoaを再設計したものであり、開発環境もCocoaと共通する部分が多くあります。
アーキテクチャ
Cocoaは、
Objective-Cをコア言語とする
オブジェクト指向フレームワークです。その構造は、OSの機能やコレクションクラスなどをまとめたサービス層であるFoundationと、主にGUIパーツの集合であるAppKitの二層から成り立っています。狭義には、この二つのフレームワーク(Core frameworks)をCocoaと呼びます。一方で、AddressBook APIのような周辺サービスを提供する
Objective-Cで記述されたフレームワークを広義にCocoaと捉えることもあります。
基本構造には、MVC(Model-View-Controller)アーキテクチャが採用されています。その他にも、委譲(デリゲート)、ファクトリ、Chain of Responsibilityといったデザインパターンが多用され、抽象度の高い下位サービスと柔軟なViewの組み合わせによって、そのままの利用から高度なカスタマイズまで幅広い適応力を持っています。macOS X v10.3では、ModelとView間の同期を自動化するCocoa Binding(Controller層)が導入され、macOS X v10.4では、モデリングを自動化するCore Dataが実装されました。これにより、開発における記述の抽象度はさらに高まっています。
Cocoa自体は、
Objective-C実行環境との連携を確立すれば他の言語からも利用可能です。そのため、
Java、
Perl、
Ruby、
Python、
Common Lispなどの
コンパイラ言語や
スクリプト言語との言語ブリッジが実現しています。これらの言語でクラスを定義し、
Objective-C側から呼び出すことも可能です。ただし、Cや
C++からは直接Cocoaを使用することができないため、macOSでは従来のC/
C++プログラマ向けに、Cocoaとほぼ同等の機能を持つCarbon APIが用意されています。
その他
Cocoaは、コードネーム『Rhapsody』におけるYellow Boxに相当します。NeXTSTEPに由来するCocoaと、旧Mac OSのToolbox APIに由来するCarbonは、必ずしも対立するものではありません。Carbon APIをラッピングしたものや、Core Foundationとして共有基盤へ実装を移したものなど、Cocoa側にはインターフェースとして現れるものも少なくありません。ただし、
Objective-Cは一般にCよりも柔軟性が高いため、インターフェースの差異は大きくなります。
関連事項
プロパティリスト
GNUstep
* SwiftUI