在 Xcode 4中将静态库链接到 iOS 项目

我有一个编译成静态库的项目(AQGridView) ,但是我似乎不能将它添加到我的项目中。

将项目拖动到我的项目中会创建一个工作区,如果我尝试从 DerivedData目录链接 libAQGridView.a文件,它不会将其识别为库。我不知道我哪里做错了。

这是 AQGridView项目。有人知道如何在 Xcode 4项目中使用它吗?

77721 次浏览

Find your .a file in finder, and drag it into your project.

Select the 'copy items into destination group's folder (if needed)', and add your headers to your project.

Now, Xcode 4 should automatically link against that framework for you.

Here is what the library should look like in your project:

Xcode menu > View > Utilities > File Inspector

Select the static library file, and then set 'File Type' as 'Mach-O object code' in 'Identity and Type'.

I do this as follows:

  1. Drag in the static library project. If you have the static library project open in Xcode, close it now.
  2. Select the main project in the project navigator (the project I'm adding the static library to) and in the editor, under the header TARGETS in the left-hand column, select my main project's target and navigate to the Build Phases tab.
  3. Click the "+" for Target Dependencies and add the library icon target dependency from the added static library project.
  4. Click the "+" for Link Binary with Libraries and add the library icon that is under the folder "Workspace".
  5. It may also be necessary to enter a Header Search Path for the headers of the static library project if that is how the headers are linked in the static library project itself.

If you don't see the static library project as nested under the main project in the main project's project navigator, the most likely reason for that is that the static library's own Xcode project is still open. Quit Xcode and open up the main project that has the nested static library project in it without opening up the original static library project itself, and you should see it appearing as a nested project in your main project.

Workspaces are supposed to make this easier, but I don't know that they do. The way I do it is create a workspace, add my main project, add my library project. Then go into the main project's build phases and add the library in the "Link binary with libraries" section and add the library. That should be all that is necessary, at least that's my reading, but it isn't. What I do is go into Xcode preferences, then to the Source Trees pane. Add a source tree that points to your static library's headers, then go back to the build settings for your project, then to the Header Search Paths key, and enter ${foo} there, where "foo" is whatever you called the source tree.

That's what works for me, though I don't know if that's the best or easiest way to do it.

The Halle's answer works for me with one addition:

  1. Check in Build Settings of the static library project the Private( or Public) Headers Folder Path value and copy it.
  2. Add copied value to the client project Build Settings Header Search Path or User Header Search Path depending of the include directive you are using

Follow Apple's documentation.

In brief:

  1. Link your target against the library.
  2. Add -ObjC to 'Other Linker Flags' (OTHER_LDFLAGS) under the target's build settings.

Also, I needed to add the library to the scheme of my main project since the library was not visible in the target's dependencies.