详解swift中xcworkspace多项目管理

 更新时间:2020年6月30日 23:37  点击:2683

给大家详细简介了xcworkspace多项目管理的设置方法,一起来学习下。

技术说明:

今天在这里分享 swift下的 xcworkspace多项目管理(架构思想),能为我们在开发中带来哪些便捷?能为我们对整个工程的维护,整理,模块解偶带来哪些优势?以及在swift与OC下的混编开发中的调用会遇到哪些问题?

带着问题探研:

(1).xcworkspace工程怎么创建?工程framework如何创建?主工程项目如何创建?

(2).主工程调用子工程framework如果配置?

(3).framework与framework之间如何调用?

(4).xcworkspace工程Pods的集成,framework的Pods第三的集成?

(5).Podfile文件的编辑,以及对应主工程,对应framework的编写方式?

--------------历史分析-----------------------

你还在搭建这样的框架吗?

缺点:

这种方式搭建的项目会随着项目功能不断的强大,从而会使模块文件越来越庞大,也会使项目维护思维近近模糊,

业务层代码与数据层代码和项目核心层代码相互交织,无法拆分,不符合一个中上等级以及长远发展公司型的构架思想!

来看下大公司项目的搭建吧:

优点很明确,个个模块可以拆分,架构思想清晰明朗,业务层独立清晰没有耦合

--------------xcworkspace项目创建--------------

File -> New -> Workspace

--------------子工程framework创建 (注意:新建主工程,不要创建成framework)

1 :File -> New -> Project -> framework (创建的是静态库)

 

2 :修改添加目标到workspace:(就是上一步创建的Workspace工程)

 

 

--------------主工程调用子工程framework相关配置--------------

第一:子工程暴露文件出来:必须顺序执行

BuildPhases -> Headers -> Public(只有放入共有栏,才能调用)->  导入项目代码文件(一般默认放在Project中)

BuildPhases -> Headers -> Public ->  中导入需要暴露给的OC 的头文件 (一般默认实现)

(注意:只有混编的时候才需要导入,也就是没有混编,framework中的.h文件可以删除)

BuildPhases -> Compile Sources ->  中导入项目代码文件

第二:把需要提供外部调用的类,属性和方法,加public修饰(swift) 

第三:  编译(⌘+B)一下工程,生成framework(重要,配置如果改动,删除对应生成的framework,重新编译生成)

——————分别—真机编译:

——————分别—模拟器编译:

Show  In  Finder ,确认生成framework

 

第四:主项目导入framework

把生成的framework拖入主项目中(这样做比较好),

———————不建议以下做法————————

//选择主项目 ->  General ->  Embedded Binaries -> 选择framework导入

(Embedded Binaries导入,会同步Linked Frameworks and Librares导入)

 第五:在需要调用framework   ipa 的文件中  import 相关framework的工程名,即头文件,完成

------------------- framework之间相互调用 ipa --------------

General —>   Linked Frameworks and Libraries —> 导入指定framework

********到这里framework与主项目之间的调用已经完成,可以实现了!

--------------------Pods的集成------------------

第一:创建的主项目,创建的多静态库(注意必须在同一级目录下)

 

第二:终端cd 项目跟目录:

 

第三:终端指令:touch Podfile   (此处为空太),创建Podfile文件

第四:Podfile文件的编辑

案列:-------

 platform :ios, ‘8.0' ———可以写在最上面,标示公用

use_frameworks!  ———用cocoapods导入OC框架到swift项目必须写

workspace 'MyWorkspace.xcworkspace' //workspace文件名

project 'MyApp2/MyApp2.xcodeproj' //主工程路径„

  target 'MyApp2' do

  project 'MyApp2/MyApp2.xcodeproj' //工程路径

  pod 'Masonry', '~> 1.0.2'

end

  target 'MyApp1' do  

   project 'MyApp1/MyApp1.xcodeproj' //framework

   pod 'SnapKit', '~> 1.0.2'

   pod 'SDWebImage', '~> 1.0.2'

end

 

第五:终端下载指令 pod install

第六:framework调用第三方框架

查看项目:未导入,项目无法调用

导入查看项目:项目同步

 

 注意:swift 版的framework调用OC写的第3方,必须在.h 里面声明头文件,才能调用

 

----------------补充 : 静态库与动态库的区别

 静态库有 .a 和 .framework

动态库有.dylib 和 .framework

后来.dylib动态库又被苹果替换成.tbd的形式

静态库和动态库是相对编译期和运行期的:

1.静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库

2.动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在

总结:

同一个静态库在不同程序中使用时,每一个程序中都得导入一次,打包时也被打包进去,形成一个程序。

而动态库在不同程序中,打包时并没有被打包进去,只在程序运行使用时,才链接载入(如系统的框架如UIKit、Foundation等),所以程序体积会小很多,但是苹果不让使用自己的动态库,否则审核就无法通过。

[!--infotagslink--]

相关文章

  • swift中利用runtime交换方法的实现示例

    这篇文章主要给大家介绍了关于swift中利用runtime交换方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。...2020-06-30
  • Swift设置UILabel内边距的实例代码

    有时候,我们需要一个显示文字,又想这些文字与边界之间有自定义的边距,所以下面这篇文章主要给大家介绍了关于Swift设置UILabel内边距的相关资料,需要的朋友可以参考下...2021-10-14
  • swift中的@UIApplicationMain示例详解

    这篇文章主要给大家介绍了关于swift中@UIApplicationMain的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。...2020-06-30
  • 详解swift中xcworkspace多项目管理

    给大家详细讲解了IOS开发中swift语言xcworkspace多项目管理的方法和介绍,一起参考一下。...2020-06-30
  • Swift 中如何使用 Option Pattern 改善可选项的 API 设计

    这篇文章主要介绍了Swift 中如何使用 Option Pattern 改善可选项的 API 设计,帮助大家更好的进行ios开发,感兴趣的朋友可以了解下...2020-10-23
  • 如何使用Swift来实现一个命令行工具的方法

    这篇文章主要介绍了如何使用Swift来实现一个命令行工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-30
  • Swift实现多个TableView侧滑与切换效果

    这篇文章主要为大家详细介绍了Swift实现多个TableView侧滑与切换效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-30
  • Swift中的命名空间详解

    这篇文章主要给大家介绍了关于Swift中命名空间的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-30
  • 浅析Swift中struct与class的区别(汇编角度底层分析)

    这篇文章主要介绍了Swift中struct与class的区别 ,本文从汇编角度分析struct与class的区别,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-30
  • Swift缩放并填充图片功能的实现

    最近有一个需求,就是将图片先等比例缩放到指定大小,然后将空余出来空间填充为黑色,返回指定大小的图片。本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2021-11-02
  • Swift中优雅处理闭包导致的循环引用详解

    这篇文章主要给大家介绍了关于Swift中优雅的处理闭包导致的循环引用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Swift具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-30
  • Swift实现倒计时5秒功能

    这篇文章主要为大家详细介绍了Swift实现倒计时5秒功能,在“登录”和“注册”页面也有相似功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-30
  • Swift 使用 Observe 监测页面滚动的实现方法

    这篇文章主要介绍了Swift 使用 Observe 监测页面滚动的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-30
  • Swift在控件中添加点击手势的方法

    这篇文章主要介绍了Swift在控件中添加点击手势的方法,本文讲解如何在tableview的headerview中添加点击手势的方法,需要的朋友可以参考下...2020-06-30
  • Swift如何使用类型擦除及自定义详解

    有很多地方会用到类型擦除,并且它们的作用的各不相同。下面这篇文章主要给大家介绍了关于Swift如何使用类型擦除及自定义的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下...2020-06-30
  • Swift利用CoreData如何存储多种数据类的通讯录

    这篇文章主要给大家介绍了关于Swift利用CoreData如何存储多种数据类的通讯录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。...2020-06-30
  • SwiftUI 中创建反弹动画的实现

    这篇文章主要介绍了SwiftUI 中创建反弹动画的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-30
  • Swift中动态调用实例方法介绍

    这篇文章主要介绍了Swift中动态调用实例方法介绍,在Swift中有一类很有意思的写法,可以让我们不直接使用实例来调用这个实例上的方法,而是通过类型取出这个类型的某个实例方法的签名,然后再通过传递实例来拿到实际需要调用的方法,需要的朋友可以参考下...2020-06-30
  • iOS Swift UICollectionView横向分页滚动,cell左右排版问题详解

    UICollectionView是iOS中比较常见的一个控件,这篇文章主要给大家介绍了关于iOS Swift UICollectionView横向分页滚动,cell左右排版问题的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随小编来一起学习学习吧。...2020-06-30
  • Swift中如何避免循环引用的方法

    本篇文章主要介绍了Swift中如何避免循环引用的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-30