XCTest.framework において XCTest
クラスを定義しているヘッダファイルはちょっとイレギュラーな形になっている。
通常 XXAbc
というクラス名であれば XXAbc.h というヘッダファイルで定義されるが XCTest
の場合は XCAbstractTest.h というヘッダファイルにて
@interface XCTest : NSObject
と定義されている。
その上で framework 内には別途 XCTest.h ファイルも存在している。
XCTest.h には何が書かれているかというと、XCText.h は XCTest.framework で使用するパブリックなクラスファイル群を import するためのヘッダファイルになっている。
要は framework 名がまず先にあって、その framework 内で使用したいクラス名が framework 自体の名前と被ってしまっているため XCTest
クラスの方の定義ファイルの名称を変更した形になっている。
framework を自作する際の例として考えると、
XXTwitter.framework を作るとしてそこで XXTwitter
クラスを定義して使いたい場合、XXFooTwitter.h のような別名のファイルで
@interface XXTwitter : NSObject
とクラス定義して、XXTwitter.h で
#import <XXTwitter/XXFooTwitter.h>
で import する形になる。
Apple 純正の framework の場合 framework 名には prefix が付いていない事が多く、クラス名のみに prefix をつけておいてクラス群を import するヘッダファイルは <FrameworkName>.h
の形にしておけばファイル名の衝突が起こらない。
例えば AssetsLibrary.framework の場合、使用されるクラスは ALAssetsLibrary
ALAsset
ALAssetsGroup
と prefix がついていて、それらを読み込むヘッダファイルは AssetsLibrary.h となっている。
一部の例外はあるが、これが純正 framework では一番多い形になっている。