今天研究了一下在Xcode中创建多个工程,达到模块化的目的的同时,实现多个相似项目的协同开发,最主要的是可以实现多工程连编。项目的效果如下:

接下来创建一个这样的项目,以及他们之间的通信

1.建一个文件夹MyProject(这是本人采用的文件夹)

2.在MyProject文件夹下创建一个工作空间MyWorkSpace

3.在工作空间MyWorkSpace创建一个项目MyApp01添加到MyWorkSpace

4.创建静态库MyAccountSDK添加到MyWorkSpace工作空间下,实现联编。

1.创建一个工作空间MyWorkSpace

在Xcode里面,创建一个工作空间MyWorkSpace,并将其放下MyProject文件夹下(名字随便命名),具体如下:File->New->Workspace

创建完工作空间MyWorkSpace后的工程如下:

这样我们的工作空间就创建完毕了,接下来在MyWorkSpace工作空间下添加工程和静态库.a

2.在工作空间MyWorkSpace下添加工程MyApp01

在工作的空间的Xcode文件夹中,File->New->Project,然后注意要指定Workspace为你创建的MyWorkSpace工作空间下,这样MyApp01工程就添加到MyWorkSpace中了

选择Single View App,然后输入工程名字

输入工程名称,本项目使用MyApp01(名称随意),如下图

将工程添加到MyWorkSpace工作空间下,如下图:

3.使用第2步可以继续往MyWorkSpace中添加其他工程,下面不在赘述,工作空间MyWorkSpace又创建了MyApp02工程,这样实现了Xcode同时管理了两个工程,MyApp01和MyApp02,效果如下:

4.建立一个静态库.a添加到MyWorkSpace工作空间下,实现连编

项目使用多工程的目的不在于可以创建多个项目,而是在于可以实现多个工程的连编。下面我们创建一个名为MyAccountSDK的静态.a库,然后将其添加到工作空间MyWorkSpace中

选择Cocoa Touch Static Library

步骤类似第2步骤,这里不在详细赘述

创建后的项目结构如下:

接下来在MyAccountSDK中MyAccountSDK类中创了一个类方法

+ (void)sayHelloWorldFromProjectName:(NSString *)projectName;

,然后分别在MyApp01和MyApp02工程中调用该类方法。

此时在MyApp01的ViewController中导入MyAccountSDK类,并调用类方法+ (void)sayHelloWorldFromProjectName:(NSString *)projectName;编译你会发现报错,提示MyAccountSDK文件不存在

解决办法:

此时在编译,你会发现还会报错,提示没有找到sayHelloWorldFromProjectName方法

解决办法如下:

选择刚才添加到MyWorkSpace工作空间的静态库.a文件,即libMyAccountSDK.a

注意(在运行工程之前要先编译一个静态库.a)要不会报错,提示xxxx.a文件找不到,此时再次编译,你回奇迹般的运行起来了,下面是见证奇迹的时刻,运行结果如下:

小结:

上述截图中调用MyAccountSDK类中的类方法sayHelloWorldFromProjectName时,细心的你会发现忘记传参数了,笔误啊,这里就不该截图了,望见谅,大家注意啊,否则会一直报错,如果项目中使用到了Framework时,需要在工程中Build Setting->Framework Search Path中配置Framework中所在的静态库.a路径,我的项目使用一个单独的工程管理第三方库,所以要配置Framework Search Path

排版不是很美观,不喜勿喷啊!

20180115-Xcode创建多个工程协同开发的更多相关文章

  1. SDK 开发 .a .framework .bundle (xcode引用) 依赖sdk工程

    一. 静态库.a 1.创建静态库工程 Cocoa Touch Static Libray  ,然后可以创建一个测试视图 TestView 2.暴露头文件 -> Build Phases--> ...

  2. App开发流程之创建项目和工程基本配置

    我的开发环境为:Mac OS X EI Capitan(10.11.6),Xcode 7.3.1 首先说明一下这个项目的初衷,我并非要创建一个完整的上架应用,旨在创建一个可运行的,通用配置.架构,提供 ...

  3. 如何在一个工作站里创建多个工程(同一个xcode下面创建多个工程)

    第一步,理解: 怎么会有一个xcode下面创建两个工程这一说呢,一个工程代表一个项目,意思就是有两个项目了.错.其实在一个窗口下面并不是两个工程,而是一个workspace 即一个工作站.在工作站里面 ...

  4. [Xcode]使用target进行协同开发

    协同开发时候发现难免会因为某些条件宏导致上传到SVN的代码影响到其他同时,但是每一次去修很多条件编译也不是很方便,所以可以通过新建自己的target来控制product. 一.创建自己的target: ...

  5. Eclipse创建Maven多模块工程Module开发(图文教程)

    自己研究了下Eclipse用Maven多模块工程Module开发,跟大家分享一下! 功能模块来分Module,跟java的package类似,一般是按照的功能模块分module,比如:sso/cas/ ...

  6. Xcode创建Object-C程序

    一. Xcode 环境安装 与 工程创建 1. 下载环境 相关资源下载 : -- IOS 相关资料下载页面 :  https://developer.apple.com/devcenter/ios/i ...

  7. Xcode 创建静态库和动态库

    1.linux中静态库和动态库区别: 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 静态库:这类库的名字一般是libxxx.a:利用静态函数库编译成的文件 ...

  8. Xcode——创建你自己的Framework

    (注:以下内容是基于Xcode7.2.1操作的,版本不一,可能界面内容不同!) 如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件.然而,这种方法并不是很优雅.它会暴露所有的实现细节,而这 ...

  9. 【转】Android Studio中Git的配置及协同开发

    一. Android Stutio配置git   setting–>Version Control–>Git–>Path to Git executable中选择git.exe的位置 ...

随机推荐

  1. 剑指offer31----栈的压入、弹出序列

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对 ...

  2. 数据加密之RSA

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  3. echarts_02

    1. 如果数据加载时间较长,一个空的坐标轴放在画布上也会让用户觉得是不是产生 bug 了,因此需要一个 loading 的动画来提示用户数据正在加载. ECharts 默认有提供了一个简单的加载动画. ...

  4. MySQL 建表时 date 类型的默认值设置

    在执行下面 SQL 语句时发现报错 CREATE TABLE `jc_site_access_pages` ( `access_date` date NOT NULL DEFAULT '0000-00 ...

  5. 对“XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们

    托管调试助手“CallbackOnCollectedDelegate”在“D:\XXX\XXX.vshost.exe”中检测到问题. 其他信息: 对“XXX+HookProc::Invoke”类型的已 ...

  6. SQL查询的嵌套

    SQL查询过程中,可以将查询嵌套为表,嵌套时需要给每个派生出来的表一个自己的别名. 如图:

  7. Java编写时钟 Applet 程序

    简单分析: package clockApplet; import java.applet.Applet; import java.awt.Color; import java.awt.Graphic ...

  8. 阶段3 2.Spring_04.Spring的常用注解_1 今日课程内容介绍

  9. vue中html、css、js 分离

    在正常的创建和引用vue文件都是html.css.js三者在一起的,这样写起来虽然方便了,但是页面比较大或者代码比较多的情况下,即使使用组件有时代码也比较多,简单来说查找不变不利于编程,大的来说影像优 ...

  10. Java Map集合 遍历 五种方式(包含 Lambda 表达式遍历)

    示例代码如下: package com.miracle.luna.lambda; import java.util.HashMap; import java.util.Iterator; import ...