美文网首页
iOS 多环境配置的三种方式

iOS 多环境配置的三种方式

作者: 顶级蜗牛 | 来源:发表于2022-04-15 14:45 被阅读0次

概念:
Project:包含项目所有代码、资源文件、所有信息。
Target:对指定代码和资源文件的具体构建方式。
Scheme:对指定的Target的环境配置。

一、使用多targets配置环境

这个章节请看我分享的文章:最详细 Xcode的Targets管理项目的公开版本、测试版本、预发布版本
这里不多讲解

弊端:
1.生成多个info.plist文件
2.配置繁琐且乱,容易配置遗忘其它targets
3.通过声明宏的方式,容易写错
4.真机测试需要的描述文件等比较多

二、使用多Scheme配置环境

正常情况下,选择Edit Scheme ... -> Run -> Info 只有两个Build Configuration可以选择(Debug/Release)

这个Build Configuration是对应于 PROJECT 里的 Info -> Configuration

于是乎可以自定义添加我们所需要的Configuration环境

因为当前只有一个Scheme,当我们运行的时候,每次都来回点到Edit Scheme...切换环境,这无疑会导致容易操作疏漏的情况。

于是乎可以创建另外的Scheme,来配对刚才的配置环境,那每次选择环境的时候,只需要选择对应的Scheme就可以了:

此时就可以选择对应的Scheme去到Edit Scheme...配对它对应的配置环境了

那如果要区分环境去定义不同的 主机hostUrl呢?我们通过Add User-Defined Setting,自定义一个参数我起名为HOST_URL,它自动会分配三个环境,依次填入自己的主机域名即可(下图我做举例用)。

通过定义了这个自定义参数,要如何读取出来呢?通过在Info.plist去声明

Info.plist

访问HOST_URL就是读取Info.plist

// Swift
let mainBundle = Bundle.main
let identifer = mainBundle.bundleIdentifier
let info = mainBundle.infoDictionary
let CFBundleName = mainBundle.object(forInfoDictionaryKey: "CFBundleName")
let HOST_URL = mainBundle.object(forInfoDictionaryKey: "HOST_URL")
print("[identifer]:\(identifer!)")
print("[info]:\(info!)")
print("[CFBundleName]:\(CFBundleName!)")
print("[HOST_URL]: \(HOST_URL!)")
// OC 
NSString *path = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *infoDic = [[NSDictionary alloc] initWithContentsOfFile:path];
NSLog(@"%@", infoDic[@"HOST_URL"]);

Building Settings里所有的参数都会分三个不同的环境,这就意味着可以设置不一样的Icons、图标、名称等等...

弊端:在Building Settings里可能会不断地去找对应的配置然后三个环境不断地配置,不方便。

三、使用 Scheme + Configurations 配置(推荐)

本文仅做操作教学,对.xcconfig一点都不懂的同学可以看这里:Swift进阶-工程化实践(一)

在上面demo的基础上,找到Build Settings -> User-Defined,将之前自定义个HOST_URL删掉
接下来新建三个.xcconfig文件,命名规则 目录-项目名.环境.xcconfig

Config-SchemeProject.Debug Config-SchemeProject.Office Config-SchemeProject.Release

.xcconfig生效,配置到对应的Configuration

生效后可以在Build Settings中看到这个配置了

附上demo
喜欢的老铁,点个⭐️

适配好多环境工程后仍存在一些问题的

问题一:

在我们没有配置xcconfig文件的工程,通过Cocoapods导入第三方库 $ pod install 后,我们的工程会自动配置成默认生效是使用了Pods-ProjectName.Debug.xcconfigProjectName.Debug.xcconfig这两个环境的xcconfig,那我们自定义的xcconfig就没法生效了。
解决问题一的方法:
在我们自定义的xcconfig中去导入Pods-ProjectName.Debug.xcconfig

xcconfig生效的地方设置成我们自定义的xcconfig文件即可。

问题二:

比如我们用Cocoapods导入第三方库AFNetworking,在自定义的Config-SchemeProject.Debug.xcconfig里有这样一句

OTHER_LDFLAGS = -framework "AFNetworking"

Cocoapods生成的xcconfig里也会有同一个设置值并且还有其它参数呢:

最后生效的只有我们自定义的xcconfig (解决完问题一的情况),而CocoapodsOTHER_LDFLAGS的其它参数并没有生效了

解决问题的的方法:
在自定义的xcconfig声明参数钱加上 $(inherited) 即可。 $(inherited)是继承的意思。

OTHER_LDFLAGS = $(inherited) -framework "AFNetworking"

相关文章

  • iOS 多Target环境配置

    iOS 多Target环境配置iOS 多Target环境配置

  • iOS 多环境配置的三种方式

    概念:Project:包含项目所有代码、资源文件、所有信息。Target:对指定代码和资源文件的具体构建方式。Sc...

  • 多环境配置的三种方式

    多环境配置 Project:包含了项目所有的代码,资源文件,所有信息Target:对指定代码和资源文件的具体构建方...

  • 小白学nginx之配置nginx虚拟主机

    Nginx配置虚拟主机有如下三种方式: 方式一、基于主机多IP方式 配置多网卡多IP的方式 根据配置创建目录 mk...

  • 解决xcconfig冲突

    多环境配置的三种方式[https://www.jianshu.com/p/96c86847f019] 如果自己创建...

  • 符号种类有哪些?如何区分?

    1、多环境配置的三种方式[https://www.jianshu.com/p/96c86847f019]2、解决x...

  • iOS-开发进阶01:多环境配置

    iOS 开发进阶 文章汇总 本篇文章主要介绍多环境配置 & Mach-O与链接器 & Symbol 一、多环境配置...

  • iOS多环境配置

    iOS多环境配置 背景 一个APP的生命一般有开发,测试,预发布,到上线几个阶段。在不同的阶段,至少使用的服务器地...

  • iOS多环境配置

    由于项目需要为一个APP生成不同环境下的版本,例如Debug版本、Release版本、Test版本,于是研究了一下...

  • iOS 多环境配置

    看到一篇对iOS多环境配置介绍不错的文章,翻译了一下,原文链接这里: 原文链接 下面的例子展示了如何在Xcode中...

网友评论

      本文标题:iOS 多环境配置的三种方式

      本文链接:https://www.haomeiwen.com/subject/swbasrtx.html