详解swift中xcworkspace多项目管理

给大家详细简介了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等),所以程序体积会小很多,但是苹果不让使用自己的动态库,否则审核就无法通过。

(0)

相关推荐

  • 详解swift中xcworkspace多项目管理

    给大家详细简介了xcworkspace多项目管理的设置方法,一起来学习下. 技术说明: 今天在这里分享 swift下的 xcworkspace多项目管理(架构思想),能为我们在开发中带来哪些便捷?能为我们对整个工程的维护,整理,模块解偶带来哪些优势?以及在swift与OC下的混编开发中的调用会遇到哪些问题? 带着问题探研: (1).xcworkspace工程怎么创建?工程framework如何创建?主工程项目如何创建? (2).主工程调用子工程framework如果配置? (3).framewo

  • 详解Swift中对C语言接口缓存的使用以及数组与字符串转为指针类型的方法

    详解Swift中对C语言接口缓存的使用以及数组与字符串转为指针类型的方法 由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与UnsafeMutablePointer类型,分别对应为const Type*类型与Type *类型. 而在Swift编程语言中,由于一般数组(Array)对象都无法直接用于C语言中含有指针类型的函数参数(比如:void*),所以往往需要

  • 详解Swift中enum枚举类型的用法

    一.引言 在Objective-C语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据. 二.枚举语法 Swift中enum关键字来进行枚举的创建,使用case来创建每一个枚举值,示例如下: //创建姓氏枚举,和Objective-C不同,Swift枚举不会默认分配值 enum Surname { case 张 case 王 case 李 case 赵 } //创建一个枚举类型的

  • 详解Swift中的Characters字符类型与String字符串类型

    一.引言 Swift中提供了String类型与Characters类型来处理字符串和字符数据,Swift中的String类型除了提供了许多方便开发者使用的方法外,还可以与Foundation框架的NSString类进行转换,使用起来十分方便. 二.String基础 在Swift中,使用双引号来定义字符串,开发者可以通过如下代码来创建一个字符串常量: let str = "Hello, playground" 可以通过下面两种方式来创建空字符串: let str1 = "&qu

  • 详解Swift中的数据类型类型转换

    一.类型检查与转换 在Objective-C和Java中,任何类型实例都可以通过强转使编译器认为它是另一种类型的实例,这么做其实是将所有的安全检查工作都交给了开发者自己来做.先比之下,Swift中的Optional类型转换就会比较安全与可靠. Swift中使用is关键字来进行类型的检查,其会返回一个布尔值true或者false来表明检查是否成立,示例如下: var str = "HS" if str is String { print(str) } Swift中有向上兼容与向下转换的特

  • 详解Swift中的函数及函数闭包使用

    一.引言 函数是有特定功能的代码段,函数会有一个特定的名称调用时来使用.Swift提供了十分灵活的方式来创建与调用函数.事实上在Swift,每个函数都是一种类型,这种类型由参数和返回值来决定.Swift和Objective-C的一大区别就在于Swift中的函数可以进行嵌套. 而Swift中的闭包是有一定功能的代码块,这十分类似于Objective-C中的block语法.Swift中的闭包语法风格十分简洁,其作用和函数的作用相似. 二.函数的创建与调用 函数通过函数名,参数和返回值来定义,参数和返

  • 详解Swift中的下标访问用法

    Swift中的Array,Dictionary类型可以通过下标或者键值的方式来进行数据的访问,实际上在Swift的语法中,下标可以定义在类.结构体.枚举中.开发者可以通过下标的方式来对属性进行访问而不用使用专门的存取方法.并且定义的下标不限于一维,开发者可以定义多维的下标来满足需求. 下标的语法结构 下标使用subscript来定义,其有些类似于方法,参数和返回值本别作为下标入参和通过下标所取的值.但是在subscript实现部分,又十分类似于计算属性,其需要实现一个get块和可选实现一个set

  • 详解Swift中属性的声明与作用

    一.引言 属性将值与类,结构体,枚举进行关联.Swift中的属性分为存储属性和计算属性两种,存储属性用于存储一个值,其只能用于类与结构体,计算属性用于计算一个值,其可以用于类,结构体和枚举. 二.存储属性 存储属性使用变量或者常量来存储一个值,在声明存储属性时,可以为其设置一个默认值,也可以在构造示例是进行值的设置,属性可以通过点语法来访问,结构体的存储属性示例代码如下: struct MyStruct { var property1 = 1 var property2:Int } var ob

  • 详解Swift 结构体

    Swift 结构体是构建代码所用的一种通用且灵活的构造体. 我们可以为结构体定义属性(常量.变量)和添加方法,从而扩展结构体的功能. 与 C 和 Objective C 不同的是: 结构体不需要包含实现文件和接口. 结构体允许我们创建一个单一文件,且系统会自动生成面向其它代码的外部接口. 结构体总是通过被复制的方式在代码中传递,因此它的值是不可修改的. 语法 我们通过关键字 struct 来定义结构体: struct nameStruct { Definition 1 Definition 2

  • 详解Swift的内存管理

    内存管理 和OC一样, 在Swift中也是采用基于引用计数的ARC内存管理方案(针对堆空间的内存管理) 在Swift的ARC中有三种引用 强引用(strong reference):默认情况下,代码中涉及到的引用都是强引用 弱引用(weak reference):通过weak定义弱引用 无主引用(unowned reference):通过unowned定义无主引用 weak 弱引用(weak reference):通过weak定义弱引用必须是可选类型的var,因为实例销毁后,ARC会自动将弱引用

随机推荐