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

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

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

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

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

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

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

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

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

多环境分离演示:

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

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

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

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

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

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

6、看下图

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

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

9、重命名新创建 schemes

10、如图

11、右键新建 AppIcon

12、选择新的 target 对应的 AppIcon

13、关键步骤

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

这可以通过,预编译宏来区分,比如在 runtime alphatargetBuild 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...

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

iOS APP 多服务器环境分离的方法的更多相关文章

  1. 详解如何通过H5(浏览器/WebView/其他)唤起本地app

    这篇文章主要介绍了详解如何通过H5(浏览器/WebView/其他)唤起本地app的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. H5混合开发app如何升级的方法

    本篇文章主要介绍了H5混合开发app如何升级的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. html5唤起app的方法

    这篇文章主要介绍了html5唤起app的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题

    HTML5在微信内置浏览器下,在右上角菜单的调整字体导致页面显示错乱的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

  5. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  6. ios – containerURLForSecurityApplicationGroupIdentifier:在iPhone和Watch模拟器上给出不同的结果

    我使用默认的XCode模板创建了一个WatchKit应用程序.我向iOSTarget,WatchkitAppTarget和WatchkitAppExtensionTarget添加了应用程序组权利.(这是应用程序组名称:group.com.lombax.fiveminutes)然后,我尝试使用iOSApp和WatchKitExtension访问共享文件夹URL:延期:iOS应用:但是,测试NSURL

  7. ios – Testflight无法安装应用程序

    我有几个测试人员注册了testflight并连接了他们的设备……他们有不同的ios型号……但是所有这些都有同样的问题.当他们从“safari”或“testflight”应用程序本身单击应用程序的安装按钮时……达到约90%并出现错误消息…

  8. ibm-mobilefirst – 在iOS 7.1上获取“无法安装应用程序,因为证书无效”错误

    当我的客户端将他们的设备更新到iOS7.1,然后尝试从AppCenter更新我们的应用程序时,我收到了上述错误.经过一番搜索,我找到了一个类似问题的帖子here.但是后来因为我在客户端使用AppCenter更新应用程序的环境中,我无法使用USB插件并为他们安装应用程序.在发布支持之前,是否有通过AppCenter进行下载的解决方法?

  9. ios – 视图的简单拖放?

    我正在学习iOS,但我找不到如何向UIView添加拖放行为.我试过了:它说“UIView没有可见的接口声明选择器addTarget”此外,我尝试添加平移手势识别器,但不确定这是否是我需要的它被称为,但不知道如何获得事件的坐标.在iOS中注册移动事件回调/拖放操作的标准简单方法是什么?

  10. ios – 什么控制iTunes中iPhone应用程序支持的语言列表?

    什么控制iPhone应用程序的iTunes页面中支持的语言?

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部