iOS多工程中子工程依赖pod通过xcconfig文件配置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS多工程中子工程依赖pod通过xcconfig文件配置相关的知识,希望对你有一定的参考价值。
参考技术A 在业务复杂的APP系统中, 通过多工程实现模块化是一种主流的实现方式.尝试0~1搭建一个多工程Demo.1.workspace这个概念大家应该都很清楚了。它可以包含多个Project和其他文档文件。
2.project就是一个个的仓库,里面会包含属于这个项目的所有文件,资源,以及生成一个或者多个软件产品的信息。每一个project会包含一个或者多个targets,而每一个target告诉我们如何生产products。project会为所有targets定义了默认的build settings,每一个target也能自定义自己的build settings,且target的build settings会重写project的build settings。
3.Xcode Project文件会包含以下信息,对资源文件的引用(源码.h和.m文件,frame,资源文件plist,bundle文件等,图片文件image.xcassets还有Interface Builder(nib),storyboard文件)、文件结构导航中用来组织源文件的组、Project-level build configurations(Debug\Release)、Targets、可执行环境,该环境用于调试或者测试程序。
4.target会有且唯一生成一个product,它将构建该product所需的文件和处理这些文件所需的指令集整合进build system中。Projects会包含一个或者多个targets,每一个target将会产出一个product。
这里值得说明的是,每个target中的build setting参数继承自project的build settings,一旦你在target中修改任意settings来重写project settings,那么最终生效的settings参数以在target中设置的为准. Project可以包含多个target,但是在同一时刻,只会有一个target生效,可用Xcode的scheme来指定是哪一个target生效。
build setting中包含了product生成过程中所需的参数信息。project的build settings会对于整个project中的所有targets生效,而target的build settings是重写了Project的build settings,重写的配置以target为准。
一个build configaration指定了一套build settings用于生成某一target的product,例如Debug和Release就属于build configaration。
一个Scheme就包含了一套targets(这些targets之间可能有依赖关系),一个configuration,一套待执行的tests。
可以通过配置一个configaration 文件来对应一个target的build setting. 从而来配置对应依赖关系.
我们计划来创建一个多工程Demo.
需求: 里面包含主工程, pods工程, 以及主工程下面的子工程. 并指定子工程对pods下面库的依赖.
1. 创建xcconfig文件
2. xcconfig文件格式文档
Demo
附言: 手把手教你给一个ios app配置多个环境变量
预告: 下篇-xcconfig具体参数配置详解.
多工程联编的Pods如何设置
如今,CocoaPods使用越来越多,几乎每个项目都会使用到。有时候我们的项目可能是有几个模块组成的,每个模块都可以作为一个单独的工程,然后所有的工程都供主工程使用,这就是多工程联编,如何利用pods的Podfile来实现这个功能,下面就为大家提供这种情况下Podfile的写法:
workspace ‘Myworkspace‘
xcodeproj ‘MyApp/MyApp.xcodeproj‘
xcodeproj ‘MySDK1/MySDK1.xcodeproj‘
xcodeproj ‘MySDK2/MySDK2.xcodeproj‘
target :MyApp do
platform :ios, ‘6.0‘
pod ‘AFNetworking‘, ‘~> 2.1.0‘
pod ‘SDWebImage‘, ‘~> 3.4‘
pod ‘FlurrySDK‘, ‘~> 5.0.0‘
xcodeproj ‘MyApp/MyApp.xcodeproj‘
end
target :MySDK1 do
platform :ios, ‘6.0‘
pod ‘AFNetworking‘, ‘~> 2.1.0‘
pod ‘SDWebImage‘, ‘~> 3.4‘
pod ‘FlurrySDK‘, ‘~> 5.0.0‘
xcodeproj ‘MySDK1/MySDK1.xcodeproj‘
end
target :MySDK2 do
platform :ios, ‘6.0‘
pod ‘AFNetworking‘, ‘~> 2.1.0‘
pod ‘SDWebImage‘, ‘~> 3.4‘
xcodeproj ‘MySDK2/MySDK2.xcodeproj‘
end
1. 指定工作区文件名字
2. 声明需要包含进来的所有工程的工程文件相对路径
3. 指明该工程内哪个target需要使用pods功能。一个工程可能有多个target,并不是所有的target都需要pods的第三方库,所以根据需要选择。
4. 指定iOS的版本,需要导入的第三方库(此处又有多种写法,在此不作详述,大家可以到此处去看,比较详细:http://guides.cocoapods.org/syntax/podfile.html#xcodeproj)
这样做的前提是,在一个目录下,把需要的工程都建好,然后在各个工程同级目录建Podfile,最后进入Podfile的目录,执行pod install, pods便会帮我们生成Myworkspace文件,用xcode打开Myworkspace文件,所有的工程都已经被导入,设置好项目间的引用关系,就可以开始开发了。
目录结构:
MyApp
Myworkspace.xcworkspace
MyApp
MySDK1
MySDK2
Pods
Podfile
Podfile.lock
workspace ‘Myworkspace‘
xcodeproj ‘MyApp/MyApp.xcodeproj‘
xcodeproj ‘MySDK1/MySDK1.xcodeproj‘
xcodeproj ‘MySDK2/MySDK2.xcodeproj‘
target :MyApp do
platform :ios, ‘6.0‘
pod ‘AFNetworking‘, ‘~> 2.1.0‘
pod ‘SDWebImage‘, ‘~> 3.4‘
pod ‘FlurrySDK‘, ‘~> 5.0.0‘
xcodeproj ‘MyApp/MyApp.xcodeproj‘
end
target :MySDK1 do
platform :ios, ‘6.0‘
pod ‘AFNetworking‘, ‘~> 2.1.0‘
pod ‘SDWebImage‘, ‘~> 3.4‘
pod ‘FlurrySDK‘, ‘~> 5.0.0‘
xcodeproj ‘MySDK1/MySDK1.xcodeproj‘
end
target :MySDK2 do
platform :ios, ‘6.0‘
pod ‘AFNetworking‘, ‘~> 2.1.0‘
pod ‘SDWebImage‘, ‘~> 3.4‘
xcodeproj ‘MySDK2/MySDK2.xcodeproj‘
end
1. 指定工作区文件名字
2. 声明需要包含进来的所有工程的工程文件相对路径
3. 指明该工程内哪个target需要使用pods功能。一个工程可能有多个target,并不是所有的target都需要pods的第三方库,所以根据需要选择。
4. 指定iOS的版本,需要导入的第三方库(此处又有多种写法,在此不作详述,大家可以到此处去看,比较详细:http://guides.cocoapods.org/syntax/podfile.html#xcodeproj)
这样做的前提是,在一个目录下,把需要的工程都建好,然后在各个工程同级目录建Podfile,最后进入Podfile的目录,执行pod install, pods便会帮我们生成Myworkspace文件,用xcode打开Myworkspace文件,所有的工程都已经被导入,设置好项目间的引用关系,就可以开始开发了。
目录结构:
MyApp
Myworkspace.xcworkspace
MyApp
MySDK1
MySDK2
Pods
Podfile
Podfile.lock
以上是关于iOS多工程中子工程依赖pod通过xcconfig文件配置的主要内容,如果未能解决你的问题,请参考以下文章
iOS-Pods-XX.debug.xcconfig: unable to open file
目标完整性 - 无法打开文件“Pods-ios.xcconfig”,因为无法解析其路径。它可能会丢失”
【潮汐】iOS给多工程的workspace添加CocoaPods