iOS APP 多服务器环境分离的方法

每个 App 项目可以有多个环境, 开发环境 、 测试环境 、 预发布环境 和 生产环境 ,至少有 开发环境 和 生产环境

研发同学和测试同学经常需要在环境间切换,产品同学有时候也会心血来潮的看看各种版本,也就是说,有时候需要测试版本,有时候又需要正式版本,我之前的做法就是每次切换 url ,然后重新打包,或者重新运行,超麻烦~

那么有没有可能在一个手机直接装多个版本呐?

答案肯定是有滴(否则还码这篇文章干嘛呐~)

个人觉得最好的方案就是 ------ 环境分离 ,即不同的环境对应不同的 app

每个Target代表一个编译的产品。每个Target,可以有不同的编译源文件和资源文件。那么,实现环境分离的方案,就是分别建立测试环境和生产环境的两个Target。默认的Target作为生产环境的Target,在此基础上复制多一个Target作为测试环境的Target。

一个 app 只能有一个唯一标示, iOS 使用的是 Bundle Identifier , Android 使用的是包名,因此,在一个手机上安装多个环境的 app ,只需要每个环境的 Bundle Identifier 或者包名不同即可, 一般做法是在后面添加环境后缀 ,比如生产环境为 com.shenfengfeng.myapp ,那么测试环境就可以为 com.shenfengfeng.myapp.alpha , app 名字会更新,当然也可以手动改,当然也还可以改图标,用来在同一个手机上区分版本

但是这种做法有个不好的地方就是需要,需要针对不同的环境,申请,不同的第三方的 appKey 、 appSecret

那么是来回注释,还是申请账号,看自己取舍吧~

多环境分离演示:

概述: iOS app 可以通过创建不同环境的Target来实现环境分离,不同Target可以设置不同的 bundle id 、名称、图标等。每个 target 也对应的 plist 文件

1、复制 target ,选中后右键,选择 Duplicate

2、默认的名字为 **** copy

3、修改 target 和 bundle id ,需要注意的是,在修改 target 的名字后,需要切换到 Xcode 的其他地方(比如其他 target )后再切回来,然后 display name 会自动适配

4、项目结构里面会多一个默认 target 名字的 ***.plist 文件

5、 右键 show in finder ,将这个 plist 文件改名,并且移到项目的原本的 plist 文件的同级目录,然后重新添加到项目中,注意选择的 target

6、看下图

7、因为移动了新的 target 的 plist 文件,所需要重新关联到新的 plist 文件,关联后随意切换后会刷新

8、按着键盘 option ,点击 Xcode 运行按钮(左上方),然后点击 Manage Schemes

9、重命名新创建 schemes

10、如图

11、右键新建 AppIcon

12、选择新的 target 对应的 AppIcon

13、关键步骤

设置了不同的 target 后,代码上可以根据不同的 target 来做不同的处理,就需要知道,当前在编译的是哪个 target

这可以通过,预编译宏来区分,比如在 runtime alpha 的 target 的 Build Settings 中,在 Preprocessor Macros 中添加 FF_ALPHA

(也可以给 target runtime 设置 FF_ALPHA=0 ,给 runtime alpha 设置 FF_ALPHA=1 )

14、代码中就可以如下判断,依据实际情况

#ifdef FF_ALPHA
#define FF_URL @"****"
#elif ...
#define FF_URL @"****"
#else
#define FF_URL @"****"
#endif

15、结束,非常感谢看到这里的小伙伴,笔者感觉到很开心~

遇到的问题

切换 Scheme 时候,遇到如下图报错

笔者将模拟器格式化后正常, Xcode 9.* ---> Hardware → Erase All Content and Settings...

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

赞 (0)

相关推荐

  • iOS App使用GCD导致的卡顿现象及解决方法

    最近在调研 iOS app 中存在的各种卡顿现象以及解决方法. iOS App 出现卡顿(stall)的概率可能超出大部分人的想象,尤其是对于大公司旗舰型 App.一方面是由于业务功能不停累积,各个产品团队之间缺乏协调,大家都忙着增加功能,系统资源出现瓶颈.另一方面的原因是老设备更新换代太慢,iOS 设备的耐用度极好,现在还有不少 iPhone 4S 在服役,iPhone 6 作为问题设备持有量很高,据估计,现在 iPhone 6s 以前的设备占有比高达 40%. 所以,如果尝试在线上 App

  • ios App加载本地HTML网页,点击网页链接跳转到app页面的方法

    一.如何在APP里加载本地html文件内容: 首先准备一个html文件,比如内容如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <tit

  • 用iOS模拟器安装App的方法

    背景介绍: Mac机器A上面有工程P的源码,Mac机器B上没有源码,想在B的模拟器上运行应用P. 步骤: 1,在机器A上,build模拟器版本,得到模拟器下的app文件: /Users/work/Library/Developer/Xcode/DerivedData/*-daajgszwtouixcfnoaiawbxybpvd/Build/Products/DebugTest-iphonesimulator/*.app 注意: (1),需要将work修改为自己的用户名. (2),两个*是prod

  • iOS app中无网络页面的添加方法详解

    前言 大家应该都会遇到这样一个需求,在开发app的过程中,为了能有更好的用户体验,往往会加入没有网络时的页面展示,告诉用户当前的网络状态不可用,那么具体如何来实现实时监测网络状态的呢,就是我们接下来要讨论的问题了.话不多说了,来一起看看详细的介绍吧. 实现思路 我的实现思路大致如下:采用第三方库RealReachability监听网络状态的变化,然后在基类中添加监听,然后在基类中提供对外的方法,用来判断当前的网络状态,以便子类可以在不同的网络状态时做出对应的操作.最后自定义一个无网络界面,在没有

  • iOS APP中保存图片到相册时崩溃的解决方法

    环境: iPhone Version 11.0.3 ,  Xcode Version 9.0 问题: 昨天维护APP时,发现拍照后保存图片时应用崩溃,输出如下: This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app's Info.plist must contain an NSPhotoLibraryAddUsageDescr

  • iOS实现app间跳转功能

    本文为大家分享了iOS实现app间跳转功能的具体代码,供大家参考,具体内容如下 我们通过系统的openURL方法,可以从当前的app跳转到其他任意app去,包括系统自带的.以及我们开发的app. 本文模拟A app跳转到 B app A app代码: // A app // ViewController.m // 程序跳转 // // Created by hhg on 15/10/23. // Copyright (c) 2015年 hhg. All rights reserved. // #

  • iOS App连续闪退时上报crash日志的方法详解

    前言 当一个iOS应用程序崩溃时,系统会创建一份crash日志保存在设备上.这份crash日志记录着应用程序崩溃时的信息,通常包含着每个执行线程的栈调用信息(低内存闪退日志例外),对于开发人员定位问题很有帮助. 为保障线上 App 的用户体验,我们一般都会对线上 App 的 crash 率做实时监控,一旦检测到 spike,可以即刻调查原因,但这一切的前提是 crash 日志能够准确上报. crash 日志上报有两个难点: crash handler 安装之前的代码要绝对稳定 如果日志采集器还没

  • iOS WKWebView无法处理URL Scheme和App Store链接的问题解决

    WKWebView简介 UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView.通过简单的测试即可发现UIWebView占用过多内存,且内存峰值更是夸张.WKWebView网页加载速度也有提升,但是并不像内存那样提升那么多. 下面列举一些其它的优势: 1.更多的支持HTML5的特性 2.官方宣称的高达60fps的滚动刷新率以及内置手势 3.Safari相同的JavaScript引擎,且允许JavaScript的Nitro库

  • iOS APP 多服务器环境分离的方法

    每个 App 项目可以有多个环境, 开发环境 . 测试环境 . 预发布环境 和 生产环境 ,至少有 开发环境 和 生产环境 研发同学和测试同学经常需要在环境间切换,产品同学有时候也会心血来潮的看看各种版本,也就是说,有时候需要测试版本,有时候又需要正式版本,我之前的做法就是每次切换 url ,然后重新打包,或者重新运行,超麻烦~ 那么有没有可能在一个手机直接装多个版本呐? 答案肯定是有滴(否则还码这篇文章干嘛呐~) 个人觉得最好的方案就是 ------ 环境分离 ,即不同的环境对应不同的 app

  • iOS获取当前网络环境的实现方法(推荐)

    实例如下: // 获取网络环境的方法 + (NSString *)networktype{ NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"]subviews]; NSNumber *dataNetworkItemView = nil; for (id subview in subviews)

  • 详解iOS App开发中Cookie的管理方法

    一.何为Cookie Cookie是网站为了便是终端身份,保存在终端本地的用户凭证信息.Cookie中的字段与意义由服务端进行定义.例如,当用户在某个网站进行了登录操作后,服务端会将Cookie信息返回给终端,终端会将这些信息进行保存,在下一次再次访问这个网站时,终端会将保存的Cookie信息一并发送到服务端,服务端根据Cookie信息是否有效来判断此用户是否可以自动登录. 二.iOS中进行Cookie管理的两个类 iOS中进行HTTP网络请求Cookie管理主要由两个类负责,一个类是NSHTT

  • React-Native Android 与 IOS App使用一份代码实现方法

    React-Native  Android 与 IOS 共用代码 React-Native 开发的App, 所有组件iOS & Android 共用, 共享一份代码 包括一些自定义的组件, 如NavigationBar, TabBar, SegmentedControl, 使用字体图标, 具有一定的参考意义 主要专注于布局, 共享组件/代码, 以及一些React自带的组件, 如: ScrollView, TouchableOpacity, View, Text, ListView, Image,

  • 详解iOS App开发中UIViewController的loadView方法使用

    当你访问一个ViewController的view属性时,如果此时view的值是nil,那么,ViewController就会自动调用loadView这个方法.这个方法就会加载或者创建一个view对象,赋值给view属性. loadView默认做的事情是:如果此ViewController存在一个对应的nib文件,那么就加载这个nib.否则,就创建一个UIView对象. 如果你用Interface Builder来创建界面,那么不应该重载这个方法. 控制器的loadView方法以及view属性

  • React-Native  Android 与 IOS App使用一份代码实现方法

    React-Native  Android 与 IOS 共用代码 React-Native 开发的App, 所有组件iOS & Android 共用, 共享一份代码 包括一些自定义的组件, 如NavigationBar, TabBar, SegmentedControl, 使用字体图标, 具有一定的参考意义 主要专注于布局, 共享组件/代码, 以及一些React自带的组件, 如: ScrollView, TouchableOpacity, View, Text, ListView, Image,

  • Android实现APP环境分离(利用Gradle)

    一.环境分离简介 每个App项目,至少都会有两个环境:测试环境和生产环境.多的甚至有四个环境:开发环境.测试环境.预生产环境和生产环境.开发人员经常需要在环境之间切换,测试人员也同样.经常出现测试人员今天需要测试环境的最新版本,叫App开发人员打包一个给她,明天需要切换到生产版本,再叫App开发人员打包一个生产环境的给她.我们知道,一个App,在一台手机上要么只能是测试环境的,要么只能是生产环境的.测试人员要测试两个环境,只能不断替换不同环境的同个App,这实在太麻烦了.为了解决此问题,最好的方

  • CentOS服务器平台搭建mysql主从复制与读写分离的方法

    本文实例讲述了CentOS服务器搭建mysql主从复制与读写分离的方法.分享给大家供大家参考,具体如下: mysql 主从复制的优点: ① 如果主服务器出现问题, 可以快速切换到从服务器提供的服务,保证高可用性 ② 可以在从服务器上执行查询操作, 降低主服务器的访问压力 ③ 可以在从服务器上执行备份, 以避免备份期间影响主服务器的服务 注意事项: ① server-id必须唯一,一般使用ip的后三位 ② 从库Slave_IO_Running:NO 可能原因:帐号无权限操作 ③ Can't exe

随机推荐