What I do is rather complicated, but it works well for me.
In the settings of the static library project, in the "Packaging" section, I set the "Wrapper Extension" to "framework". I then change:
"Public Headers Folder Path" to "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)/Headers"
and
"Private Headers Folder Path" to $(PRODUCT_NAME).$(WRAPPER_EXTENSION)/PrivateHeaders
The end result in the build products is a folder named "MyLibraryName.framework" the guts of which look just like... well.. a Framework. One thing I like about this is I can use Framework-style includes in my code:
#include <MyLibraryName/blah.h>
The downside is that (as discovered in the answer from "zoul") the "Archive" command doesn't work properly. The reason it doesn't work is because the Archive command separates the final build products and the target build products into separate directories. A normal "build" doesn't do that. When you archive the system tries to find the static libraries headers in the final build products directory and can't find them because the system put them in the target build directory for the static library.
If you think about it, Xcode thinks your static library's target has a single "product". That product is "libMyLibraryName.a". But really the target has two products... one is the library, and the other is the set of headers for the library. The problem with the Archive command is that the library is copied as a build product, but the headers are not. You end up with "header could not be found" when you try to run the archive.
To fix THAT, what I do is use a Run Script build phase. The script looks like this (written in Ruby):
if ENV["TARGET_BUILD_DIR"] != ENV["BUILT_PRODUCTS_DIR"] then
$product_name = ENV['PRODUCT_NAME']
$wrapper_extension = ENV['WRAPPER_EXTENSION']
$target_build_dir = ENV['TARGET_BUILD_DIR']
answered 2012-10-24T19:58:07.437