xml地图|网站地图|网站标签 [设为首页] [加入收藏]

Swift下的组件化(多工程联编State of Qatar

前言

摘要:本文介绍如何使用workspace管理多个项目,如何进行依赖管理和依赖编译。

1 多工程引用

最近公司新开了个项目,需要从零开始搭建,之前做过一些组件化的工作,但是之前的开发语言是OC,新项目切换到了Swift,虽然差异不大,但是还是写了本文作为记录


1.1 引入其他工程步骤

tips: 这篇文章写得不错 iOS swift的xcworkspace多项目管理

一般情况下一个应用只需要新建一个project,所有代码文件都放在project里面进行组织管理即可,但是某些情况下项目可能需要引入其他的项目文件,或者引入其他的静态库文件,比如某大型项目需要分组合作,将不同的功能分解成为不同的项目模块,这时候就可以使用 workspace 管理。workspace 可以单独的管理多个项目,可以通过配置,让各个项目相互依赖。(如果不使用 workspace ,对于需要用到的项目文件得手动将用到的文件复制到项目中)

1.1.1 将project引入workSpace

一,如何将两个项目整合到一个项目下(图1)

     可能你试过直接在一个项目里面直接把另一个项目拖进来,也试过add File..这些东西,但是最终可能还是没能完成,那么,到底要怎么做呢?

     首先,在进入到你当前项目的路径下,把需要添加的工程/framework手动拷贝到这个目录。

     第二步,在Xcode上面打开当前项目,在侧边栏点击最左下角的“+”按钮,选择Add Files to “”命令,弹出框,选择要加进来的工程/framework的工程文件添加,如图2

图片 1

        完成!这时,已经能够看到要添加的东西已经在我们的项目目录下了(图1)。

        添加完成之后,我们试着改动一下新加入的项目的内容,比如把它代码改出点问题,比如下图

图片 2

        本来正常情况下,第12行会报错,可是现在没有,说明新加入的项目还没有和当前项目产生关联。

正如文章中所说,多工程需要面临的几个问题

建立WorkSpace

1.新建 Xcode workspace
打开Xcode,选择 xcode -> file -> new -> workspace,将Workspace命名为ObjectDev,并选则合适的目录。

图片 3

workspace.png

2.新建 Xcode project
选择 xcode -> file -> new -> project -> single view application,将项目命名为QYObject,并添加到ObjectDev workspace中管理。

图片 4

project.png

3.新建 Static Library 项目
选择 xcode -> file -> new -> project -> cocoa touch static library,将 static library 项目命名为 QYFoundationExtension,并添加到 ObjectDev worksapce 中。

图片 5

Static Library.png

Xcode 会自动在项目中生成一对 .h .m 文件,给文件添加任意测试代码,配置公开接口文件:选择 Static Library 项目 -> Target -> Build Phases -> Copy Files 添加需要公开的 .h 接口文件。

4.使用静态库项目

主项目要使用 static library 项目,就必须将静态库项目编译到主项目中,否则
会提示类似如下编译错误:
Undefined symbols for architecture arm64:
"OBJC_CLASS$_xxxx", referenced from:
objc-class-ref in xxxx.o

选择 Project 项目(QYObject) -> Target -> Build Phases -> Link Binary With Libraries 点击 + 号添加需要链接编译的静态库 .a 文件。

图片 6

add staticLibrary.a.png

5.设置主项目头文件查找路径
自动配置:使用xcode 的 .xconfig文件
手动配置:选择 QYObjecC -> PROJECT -> Build Settings -> Search Paths - > Header Search Paths 添加静态库头文件的查找路径:$(SRCROOT)/../QYFoundationExtension,并且设置为 recursive

$(SRCROOT)代表当前项目的根目录,$(SRCROOT)/../代表当前项目根目录的上一级目录

图片 7

Header Paths.png

然后可以在项目中调用静态库的测试代码来编译运行。到此为止我们的主项目以及使用到的静态库项目都是在同一个仓库中管理,那么怎么样使用多个仓库管理多个静态库项目呢?下节更新!

1.1.2 在目标工程中添加framework引用

二,如何让新加入的项目和当然项目产生关联呢?

     如图4打开当前项目的Build Phases,再打开该界面下的Link Binary With Libraries,把新添加的项目的Products文件夹下的“.a”或者”.app”文件拖到Link Binary With Libraries当中,然后编译。

图片 8

        这时,之前我们在图3所示位置添加的非法的代码就会报错了,这时,就说明我们新加入的项目已经和当前项目产生了关联。

图片 9

  • 各个工程如何创建,如何维护第三方的依赖(这里使用Cocopods进行依赖管理)
  • 主工程如何调用Library工程
  • Library之前的依赖和调用

1.1.3 添加framework头文件引用路径

        当我们和新加入的项目产生了关联之后,我们可能想去调用或者使用里面的累或者方法,首先我们把新加入项目的一个头文件“TestFrameworks.h”引入当前项目的AppDelegate当中,这时我们又看到了报错!编译器说他没有发现这个头文件在哪里!?

图片 10

        可是我们不是已经产生关联了吗?原来,还不仅仅如此,我们还需要添加引入头文件的路径(path);

三,如何让当前项目在引用加入项目的头文件是不报错?

     我们需要这样做:

    打开当前项目的Build Settings,修改它的Header Seach Path ,如图7

图片 11

        Header Seach Path 里面的路径应该为新加入项目的Products文件夹下,“.a”或者“.app”文件的路径下的,include文件夹里面的文件夹的路径下,如图8

图片 12

        添加完成后,再编译,发现之前的报错已经默默的消失了。

        到这里,我要说的东西已经完成了90%,所以,我还有一些东西要说。

本文由永利澳门平台发布于计算机资讯,转载请注明出处:Swift下的组件化(多工程联编State of Qatar

您可能还会对下面的文章感兴趣: