打几个不同的iOS包

打几个不同的iOS包

引言

公司项目重构以后,有了相对比较完善的开发体系,首先git分支分为平常、预发、生产三个主要分支,开发阶段都在平常(daily)分支下开相应功能的feature分支,开发完再合并。html

个人iOS工程须要知足这个开发体系,那么我必须能实现如下诉求:

  1. 构建不一样的宏来方便切换相应的配置;ios

  2. 配置三种数据环境根据宏的切换进行切换;git

  3. 三种图标/应用名称根据宏的切换进行切换显示;github

  4. 至少两个类型的包能同时安装在手机上;api

  5. 最好能使用脚本实现自动化打包放入bugly或者蒲公英等平台供内部测试人员下载;app

网上已经有不少相似的讲解,可是我发现这其中仍是会遇到一些意想不到的问题,好比pods工程的相应配置、应用名与'.strings'文件的冲突、使用命令行打包 等等问题,下面我将整个配置方法以及其过程当中遇到的问题及解决方案分享出来,这也是本文的主要用意,以供你们参考和我本身温故。
Demo切换Configuration能同时安装在一个手机上三种版本:
图片描述工具

Demo在这里=>>CreateIpaDemo学习

勘误

由于日前iPhone 7的发布,题主提早下载了Xcode 8 beta版,将公司项目在iOS 10上面跑了一下,发现了不少的变更(例如:基本上全部的系统权限都须要在info.plist中声明、导航栏透明度动态设置问题),其中与本文相关的一个问题在此说明一下:测试

正文中的的5、配置不一样的Bundle ID在使用User-Defined方式在Xcode 8 beta中设置无效,其实跟图标同样,在Target的Build Setting下的Packaging中一样有默认的设置项,咱们能够根据本身的须要设置各类scheme下的配置不一样的Bundle ID,以下图:ui

图片描述

正文

首先,咱们都知道iOS设备上的App是根据AppID也就是工程中的Bundle ID来识别App的。默认Xcode为每一个target提供2个Build配置项(Build Configuration):Debug和Release。

1、建立多个Configuration

以下图,有两种方法能够用来建立咱们须要新增的Build Configuration,这里新建一个名为Preform的配置项,是为了知足App的开发环境(Debug)、预发环境(Preform)、线上环境(Release)三套数据环境的切换。

图片描述

图片描述

2、数据环境的配置

上面新增了Preform配置项以后,能够在当前Target的Build Setting下搜索macros找到Preprocessor Macros,能够看到咱们刚刚Duplicate 'Release'生成的Preform的Multiple Value与Release的如出一辙,这里咱们须要新增PREFORM=1,来定义标示预发环境的宏变量PREFORM,主要是为了方便咱们根据这里生成的宏在.pch文件中利用#ifdef来配置好相应的数据环境,这里一样能够将一些须要区分环境的第三方配置放进来,示意图及环境配置代码以下:

图片描述

#ifdef DEBUG //开发环境

#define EMKEY   @"emdevkey" //环信key
#define EMAPNS   @"emdevapns" //环信secret
#define SERVER_HOST @"http://api.dev.zhujiamin5@yeah.net/"
#define WEB_HOST @"http://h5.dev.zhujiamin5@yeah.net/"

#elif PREFORM //预发环境

#define EMKEY   @"emdiskey"
#define EMAPNS   @"emapns"
#define SERVER_HOST @"http://api.dis.zhujiamin5@yeah.net/"
#define WEB_HOST @"http://h5.dis.zhujiamin5@yeah.net/"

#else //正式环境

#define EMKEY   @"emdiskey"
#define EMAPNS   @"emapns"
#define SERVER_HOST @"http://api.dis.zhujiamin5@yeah.net/"
#define WEB_HOST @"http://h5.dis.zhujiamin5@yeah.net/"

#endif

图片描述

须要注意的问题:

正常状况下,以上步骤完成以后,如上图选择Edit Scheme切换Build Configuration就能编译出相应环境下的App,可是若是你的App使用pods来管理第三方库,使用新建的配置项就会报错找不到第三方的库文件,错误信息相似以下:
图片描述

缘由是pods工程并未自动帮咱们建立相应的pod配置项,发现这一点以后我手动建立了一个一样名为Preform的pod配置项,因而编译经过了,可是打ipa包的时候始终通不过,继续查找缘由,原来xcconfig文件须要终端执行pod install进行全面配置,因此你们在新建完了以后记得要pod install一下,才能放心使用。

3、配置不一样的AppIcon

配置AppIcon有两种必比较方便的方法。

第一种:

首先咱们须要找UI设计师要三套不同的图标,以下图这样取好对应的名称放入Assets.xcassets中:
图片描述

而后再当前Target的Build Setting下搜索icon找到Asset Catalog App Icon Set Name,而后进行以下配置:

图片描述

而后Edit Scheme选择相应的Configuration进行编译或者打包就能打出不一样的图标了。

第二种

使用User-Defined配置三种Configuration下的变量,在info.plist中进行配置,配置方法与下面的应用名称配置相似,这里不作过多描述。

4、配置不一样的AppName

配置不一样的应用名称,这里须要使用到User-Defined加上info.plist来进行配置;
首先,咱们须要新增一个User-Defined,以下图:
图片描述

将三种Configuration下的应用名分别设置成:Demo开发版、Demo预发版、Demo。
而后在info.plist中加入Bundle display name,将其设置成咱们刚刚新建的User-Defined:
图片描述

须要注意的问题:

若是你的不当心引入了别的工程的InfoPlist.strings文件,它里面配置的bundle display name设置会覆盖掉你的User-Defined,使你的设置没有做用。

5、配置不一样的Bundle ID

为了使打出来的三种包可以共同存在同一台手机上,咱们须要像配置应用名称同样,新建一个User-Defined来根据不一样的Configuration使用不一样的Bundle ID打包。
配置方法与配置应用名称一致这里也过多描述。
图片描述

配置完成以后,同一个App就可以在一台手机上面安装多个不一样的包啦!

6、脚本打包

在这里推荐大伙儿一个工具,CLI for Building & Distributing iOS Apps (.ipa Files),相似的自动打包工具备不少,这个目前能知足个人需求,上手很快,安装以后一行代码便可打出想要的ipa包,后面再抽时间详细总结一下jenkins+这个工具的使用方法。
图片描述

最后

分享就先到这里喽,欢迎各位看官的指正~

最近项目刚刚重构完成,后续我会陆续把重构过程当中遇到的问题及解决方案分享出来,和你们互相交流学习。

本人坐标杭州,QQ:815187811,欢迎结交[笑脸].

参考连接:
http://blog.sina.com.cn/s/blo...
http://www.devzeng.com/blog/i...

相关文章
相关标签/搜索