xcode 5 workspace 与 static lib 工程的联合使用
1.新建一个WorkSpace:MyWorkSpace保存到MyWorkSpace文件夹下
2.在此工作空间下新建一个项目:在project navigator 右键菜单 New Project:MyProj
4.在项目MyProj下新建一个静态库:在project navigator 右键菜单 New Project-》Framework & Library > Cocoa Touch Static Library:MyStaticLib1 (建立时选择Add to:MyWorkSpace Group:MyProj)
3.在此工作空间下新建一个静态库:在project navigator 右键菜单 New Project-》Framework & Library > Cocoa Touch Static Library:MyStaticLib2(建立时选择Add to:MyWorkSpace Group:MyWorkSpace)
(注意:MyStaticLib1是建立在MyProj下,而MyStaticLib2是建立在MyWorkSpace 下)
xcode下的目录结构是:
-MyProj
-MyStaticLib1
-MyStaticLib1
-MyStaticLib1Tests
-Frameworks
-Products
-MyProj
-MyProjTests
-Frameworks
-Products
-MyStaticLib2
-MyStaticLib2
-MyStaticLib2Tests
-Frameworks
-Products此时文件系统下的目录结构是:
-MyWorkSpace
-MyProj
-MyStaticLib1
-MyStaticLib2
-MyWorkSpace.xcworkspace
4.为项目添加静态库:
选中MyProj,打开 Build Phases配置选项 然后展开 Link Binary With Libraries ,点击 + 会看到 Workspace > MyStaticLib1.a,MyStaticLib2,添加这两个.a库
5.设置头文件搜索目录:
选中MyProj,打开 Build Settings配置选项 ,找到Search Paths 下的User Header Search ,点击 + 会添加$(BUILT_PRODUCTS_DIR)/include/MyStaticLib1 recursive
$(BUILT_PRODUCTS_DIR)/include/MyStaticLib2 recursive
这里需要补充一下的是为什么这个路径?
打开organizer 选中工作空间MyWorkSpace点击Derived Data进入到编译的文件夹可以发现文件结构:
-MyWorkSpace-hh..................
-scm.plish
-Logs
-build
-Products
-Debug-iphonesimulator
-libStaticLib1.a
-MyProj.app.dSYM
-MyProj.app
-inculude
-MyStaticLib1
MyStaticLib1.h
-MyStaticLib2
MyStaticLib2.h
...............................................................
$(BUILT_PRODUCTS_DIR):编译后的产品路径
头文件搜索路径也可以设置为$(BUILT_PRODUCTS_DIR)/include/ recursive
non-recursive:只搜索此文件夹下的文件
recursive:递归搜索此文件夹下的文件,即不但搜索此文件夹,还搜索子文件夹
6.在静态库里每次新建一个.h .m文件都要设置为公开,这样项目才可以在第5步的include/staticLib下发现这个头文件
选中静态库项目staticLib, Build Phases->Copy Files 点击+选中新建的 .h文件
7.如果在静态库中新建了类目文件,还得设置项目的Other Linker Flags 中-ObjC
8.也可以将MyStaticLib2 的Build Settings的Per-configuration Build Products Path设置成$PROJECT_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME),这样MyStaticLib2编译后的.a库就放在$PROJECT_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)路径下,然后在MyProj的Build Settings的Other Linker Flags 添加-force_load $(SRCROOT)/MyStaticLib1/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/libMyStaticLib1.a,这样就不用在MyProj里添加MyStaticLib1的静态库了,这样就可以加载是真机还是模拟器的.a库了
Build Phases 下的Target Dependencies只是说在编译项目之前先编译哪些库