WorkSpace使用(与Library结合)

来源:互联网 发布:android没有网络展示 编辑:程序博客网 时间:2024/05/20 06:05

WorkSpace是Xcode提供的便于群组化管理项目工程的一个工作区间,我们可以把有关联的项目放到同一个工作区中,进行联合编译或者其它操作等。WorkSpace是XCode4引入,在XCode3中工作流被限制在单一的项目工程中,在之后的版本中可以把工作流相关的若干个项目工程放到同一个工作区中。当然WorkSpace应该还有更广阔的应用,本文暂时只针对与Library的结合展开。

由于最近在做基础框架相关的内容,完成libProject编码之后,当然可以使用单元测试测试代码,但是更理想的应该是通过一个简单sampleProjcet去全流程的测试代码,而且这个sampleProcjet还可以当做lib的说明文档使用,一举两得。

使用WorkSpace管理libProject和sampleProject主要是从Github中的一些项目学到的,做两步如下简单的操作,即可方便在对libProject修改之后应用于sampleProject。默认情况下,工作区中所有的工程都在一个工作目录下,所有工程也共用一个build目录,因此他们的build产生的Product可以互相引用。

  • 设置编译sampleProject时联合编译libProject。
  • 设置libProject的lib生成路径与sampleProject的获取lib路径一致。

创建项目

1.创建工作区目录文件夹,存放所有相关工程代码,方便管理。

2.新建WorkSpace:Xcode->File->New->WorkSpace.保存到工作区件夹中

3.在WorkSpace中创建或者引入已经存在的Library。

  • 创建的详情参照Library章节,存放在工作区文件夹中。
  • 引入library:打开WorkSpace,右键AddFileto..选择libProjcet的工程文件,Add即可。

4.在WorkSpace中新建SampleProject:打开WorkSpace,右键NewProject创建例子工程,工程保存到工作区目录中。

工程配置

1.设置lib的安装路径:

打开lib工程设置,选择Target->build Settings->Installation Directory,默认地址为:/usr/local/lib修改设置为工程的build目录:$(BUILT_PRODUCTS_DIR)。这个位置为WorkSpace的各个工程共同的编译目录。然后把Skip Install设置为Yes,避免lib被意外的安装到默认目录中。



2.设置头文件路径

打开lib工程设置,选择Target->Build Phases->Copy Files,Destination选择Product Directory,SubPath默认设置为include/$(PRODUCE_NAME),这样头文件就会出现在

$(BUILT_PRODUCTS_DIR)目录下,通过下面第四步的递归查询就可以找到头文件。


3.引入lib工程到sample工程中

打开sample工程设置,选择Target->build Phases->Link Binary With Libraries,增加WorkSpace中的lib**.a.显示为红色,无需担心。

4.设置sample工程的外部头文件搜索路径

打开sample工程设置,选择Target->User Header Search Path,与lib的生成路径一样设置为产品编译路径:$(BUILT_PRODUCTS_DIR),选择recursive,这样就能递归寻找头文件。




5.设置联合编译,配置sample工程的scheme:

选中sample工程,选择Product->Scheme->Edit Scheme->Build->Targets,增加lib工程,然后把lib工程拖动到最上面,保证提前编译。ps:不过貌似不拖动到最上面也无所谓。

完成以上配置之后即可在sample中使用lib内容了,如果lib中内容有更新,可以直接编译sample工程就能获取到新的lib,因为每次编译sample工程都会一起编译lib工程。

参考链接:http://hmifly.blog.163.com/blog/static/128583507201372911212943

注意

1.项目编译之后,Products目录下lib***.a为红色,实际上已经生成(这个可能是Xcode4的BUG,红色的状态下不能右键ShowInFinder,很不方便),在目录/Users/user/Library/Developer/Xcode/DeviceData/ProjectName/Build/Products目录下,里面包含lib.a、lib的外部头文件以及sample项目的.app文件。

2.当library中存在Categories时需要设置OtherLinerFlags为-Objc:When using a static library which includes categories we will also have to add the “-ObjC” flag to the “Other Linker Flags” build setting. This will force the linker to load all objective-c classes and categories from the library. If the library contains only categories “-all_load” or “-force_load” may be needed as well. See Technical Q&A QA1490 for a more detailed explanation of these settings. 

3.Library工程中的头文件应该使用CopyFiles而不是CopyHeaders:Your library will have one or more header files that clients of that library need to import. To configure which headers are exported to clients, select your library project to open the project editor, select the library target to open the target editor, and select the build phases tab. If your library target has a “Copy Headers” build phase, you should delete it; copy headers build phases do not work correctly with static library targets when performing the “Archive” action in Xcode.

Git设置

1.如果创建lib和Sample工程时选择选择了创建Git版本控制,此时需要删除工程目中的.git目录。.git目录为隐藏目录,查看隐藏文件终端输入:

defaults write com.apple.finder AppleShowAllFiles -bool true

2.初始化远程Git服务地址

> ssh git@host

host’ password:

> [git@S2IT0026 ~]$ ls

>[git@S2IT0026 ~]$ cd serverPath 

>[git@S2IT0026 serverPath]$ rm -rf gitFileName.git

>[git@S2IT0026 serverPath]$ mkdir gitFileName.git

>[git@S2IT0026 serverPath]$ cd gitFileName.git

>[git@S2IT0026 gitFileName.git]$ git init --bare

Initialized empty Git repository in /home/git/gitPath/test.git

>[git@S2IT0026 gitFileName.git]$ git update-server-info

>[git@S2IT0026 gitFileName.git]$ ls

branches  config  description  HEAD hooks info objects refs

>[git@S2IT0026 gitFileName.git]$ pwd

/home/git/serverPath/gitFileName.git

以上命令解释:

1.SSH登陆GIT服务器

2.显示服务器目录,切换到目标目录下

3.删除需要建立的git文件,然后重新添加该文件。防止重名文件存在(-r为递归-f强制)

4.切换到新建的git文件目录

5.初始化git配置文件

6.更新服务端信息,对外发布该Git路径。

7.显示目录中默认git配置文件

8.输出当前路径path,拼接上git@host/path即为新的git地址。

以上步骤完成了一个新的git地址的初始化。

3.打开Xcode->Source Control->Check Out,把空的git目录Check到本地,然后把WorkSpace及两个工程代码放到目录中,打开WorkSpace,选择Source Control->Commit->Push把代码提交到远程Git库中。

4.注意WorkSpace与Project会有一些本地设置文件,在上一步骤中也会提交到上去,这样可能会造成多人协作很容易冲突,而且由于这些文件只与本地的工程设置有关,每个人都会产生自己的修改,每次提交代码之后重新打开工程该文件还会是修改状态,比较烦,这时可以命令行删除。

例如:User Interface Status和Source Control Data文件。

> cd filePath

> git rm -f  …UserInterfaceState.xcuserstate --cached …UserInterfaceState.xcuserstate

> git commit -m “删除个人工程设置文件”

> git push

以上命令删除Git上的文件,而保留本地的该问题(本地Xcode工程还需要使用它,不能删除),这样就会使这个文件显示为未跟踪文件,保留在本地而不被Git管理。

0 0
原创粉丝点击