OCMockをApplication Testで使う

最初この記事を見てstatic libraryではなく、OCMock.frameworkを使う方法を試していたのだが、この方法ではApplication Testではうまくいかない。

OCMockのWebサイトに書かれている通り、static libraryを使う必要がある。これを見落としていて3時間くらい悩んだ。

To use the library in an iOS project, you have to make the actual library, ie. libOCMock.a, as well as the header files available to the project containing the tests. One way of achieving this is to copy the library and headers into a directory named "Libraries" in the project directory (this does not exist by default) and then adding the following flags to the project:

LIBRARY_SEARCH_PATHS = $(inherited) "$(PROJECT_DIR)/Libraries"
Due to some issues, which are described in this Apple Technical Q&A, you also have to add the following flags:

OTHER_LDFLAGS = -ObjC -force_load $(PROJECT_DIR)/Libraries/libOCMock.a

If you have copied the library or headers to a different place all of these settings must be adjusted accordingly.


どういう風にstatic libraryを自分のプロジェクトに取り込むかも悩みどころだが、上の引用にある通り、プロジェクト直下ディレクトリにLibrariesというディレクトリをつくり、その下にOCMockの配布物からHeadersとlibOCMock.aをコピーして置くことにした。

├── Libraries
│ ├── Headers
│ │ └── OCMock
│ └── libOCMock.a
├── MyProject
│ ├── en.lproj
│ └── main.m
├── OCMockTesting.xcodeproj
└── MyProjectTests
    ├── MyGreatestTests.h
    ├── MyGreatestTests.m
    └── en.lproj