最近干了件蠢事,事情是这样的,我们App有2套图标,一套是测试版图标用于发布OTA的内部测试版,一套是正式版用于发布到AppStore,每次打包,我都会检查图标,结果上次粗心搞错了,把测试版的图标打包发布到AppStore了,发现之后想死的心都有了。马上修改了一版,申请紧急审核,结果你可能猜到了,没有通过。这是个很大的教训,像这一类的手动来改都不靠谱,毕竟有忘掉的概率存在,能不能自动处理呢? 在这篇Blog上找到了答案,我大概的翻译一下。
iOS系统区分两个App是否相同的根据是App的Bundle ID是否相同,在安装一个程序时,系统是根据Bundle ID来判断是全新安装还是升级。那想在一个系统上安装一个App的两个不同版本,其实是需要两个不同的Bundle ID。就是说正式版一个Bundle ID,OTA版本/Debug版本用一个Bundle ID,假设AppStore版的ID是com.mycompany.myapp
,OTA版的是com.mycompany.myapp-beta
。同时为了直观的区分两个App,一般也会使用两套图标, 假设AppStore版的图标名称为Icon.png, Icon@2x.png
, OTA版是Icon-beta.png, Icon-beta@2x.png
. 那如果做到自动化的配置呢?答案在Build设置(Build Setting
)里。
默认Xcode会提供2个Build配置(Build Configuration
):Debug
和Release
,我们再加一个AppStore
,这样来用:
- Debug: 用来直接连机调试
- Release:用于发布OTA的测试版
- AppStore:用户提交到AppStore
下一步我们来在项目的Build Setting
里添加两个自定义的设置,一个命名为BUNDLE_IDENTIFIER
, 另一个命名为APP_ICON_NAME
,如下图这样设置:
这两个值分别定义个Bundle ID和图标的名称,下一步需要在Info.plist(名字格式是YourAppName-Info.plist)中修改BundleId 和Icon图标名称,把bundle identifier
值设置为${BUNDLE_IDENTIFIER}
,把图标值设置为${APP_ICON_NAME}@2x.png
和 ${APP_ICON_NAME}.png
,如果提供了72px和144px等图标也类似这样。
${xxx}
语法是预处理语法,都会被替换为xxx
对应的真实值,在刚才的设置的基础上,在Debug的时候,实际的Bundle ID会替换为com.mycompany.myapp-beta
,图标对应的为Icon-beta.png
和Icon-beta@2x.png
,Cooool
实际上我自己实践的时候,新建了一个叫myApp-AppStore
的Schema
,在不同的Schema里的Archive里是用不同的Build配置,myApp-AppStore
的Schema里Archive的Build配置为”AppStore”,原来的myApp
这个Schema的Build配置为Release,这样当我想发布OTA的时候,选择myApp-AppStore
这个Schema,然后Archive,就能使用AppStore的自定义的配置来打包,用来提交AppStore;当选择myApp
这个Schema的时候,Archive得到的是使用Release的自定义配置来打包的,用来上传到OTA测试。整个过程是自动化的,包括BundleId和图标文件的名称,如果你有别的类似的需要,也可以参考着来。
总之,麻麻再也不用担心我的图标会搞错了。
这篇文章编译自:How to Have Two Versions of the Same App on Your Device) ,原作者Blog上还有其他精彩的文章等你发现。
相关推荐
ios判断App是否安装: 自已写的A,B两个程序。用该方法可以使A程序判断B程序是否在ios设备中有没有安装。 不能判断任意程序是否安装。
这两个App可以完成2台Android手机,通过BLE4.0进行通信,可以发送和接收数据。 其中一台Android手机T模拟发出广播,作为BLE设备(周边设备),这个BLE设备在生产环境中就是我们用到的气体检测传感器、智能手环、...
这两个App可以完成2台Android手机,通过BLE4.0进行通信,可以发送和接收数据。 其中一台Android手机T模拟发出广播,作为BLE设备(周边设备),这个BLE设备在生产环境中就是我们用到的气体检测传感器、智能手环、...
刷机有风险,不能保证支持所有设备,所以想使用的用户可以在安装之后进行测试,选择一个不经常使用的软件进行备份,然后删除掉,再进入recovery模式将它刷回来,这样就能确认自己的设备是否可以使用这个工具。
这个应用不需要什么权限,只要在“安全”(安卓差异多,差不多包含这两个字样的地方)找到“设备管理器”、激活(或者启用)这个app,就可以点击黑屏啦。 源代码也在资源里有下载。 1.1版本修复锁屏前界面闪现问题。...
本例程开发了一种基本的即时聊天app,本app只提供了基本实现方法,只具备两个人聊天的功能,添加多个好友、建群的功能后续会陆续开发,敬请关注。用到的基本技巧有:物联网在阿里云物联网平台设备接入、订阅、发布、...
每类的个税试算,对应于App中的一个Tab页签。 6.本款 App 简洁易用,短小精悍。 相对于某些 App 动辄 数 MB 的大块头,本款App 所需手机内存空间非常小,安装包只有区区 166 KB。是一款不可或缺的实用型、财务类...
集成好的接口会自动判断设备,自动唤醒外部浏览器,用户轻松实现微信跳转外部浏览器直接下载APP自动化,很大程度上提升了用户体验,提高了转化率,降低了推广的成本,下面为大家介绍一种实现方法另外提供代码供大家...
带有语法高亮显示的开发编辑器,支持多种编程语言,不同的存储类型,Snipper App 还包括明暗两个主题界面。Snipper以一种支持多种存储的方式设计,支持的存储类型将在下一个版本中得到扩展。目前支持本地存储,...
在Linux中,应用程序(App)和驱动程序(Driver)是两个不同的概念和角色。 应用程序是运行在操作系统上的用户级程序,通过操作系统提供的API(应用程序接口)来实现特定的功能。应用程序可以包括各种类型的软件,...
Android2个App之间跳转,内涵2个Android stutio项目。
本资源包含两个鸿蒙app源代码文件: 1、实现实时显示温湿度等数据。 2、实现对设备开关的控制。 本资源适用范围: 1、通过阿里云平台获取设备上传的实时数据,例如:温度、湿度等。 2、通过阿里云平台控制设备的...
jQuery Mobile是jQuery 在手机上和平板设备上的版本,jQuery Mobile不仅包含jQuery核心库,而且提供了一个完整统一的jQuery移动UI框架,支持全球主流的移动平台;jQuery Mobile将“写得更少、做得更多”这一理念提升...
1、流程图 2、测试周期测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间。3、测试资源测试任务开始前,检查各项测试资源。--...
作用:对于大多数基于闪存的系统,一个重要的要求是能够在最终产品中安装固件时进行更新。 STM32微控制器可以运行用户特定的固件来对微控制器中嵌入的闪存执行IAP。 接口:此功能支持的任何通信接口。 由于不...
它提供一个Web接口,Beta测试者可以使用它来安装最新的AdHoc配置文件,也可以直接在设备上通过Safari 安装最新的Beta版本。 只需在服务器上安装一次服务端,就可以处理包标识符不同的多个应用程序(有开发者强烈建议...
android下,蓝牙通讯软件,可以实现两个蓝牙设备之间的通讯。
项目预计开发周期为6个月,首个版本将在第四个月完成初步的开发和内部测试,之后两个月进行市场测试和迭代。 模块说明 前端模块 前端使用Uni-app框架开发,利用Vue.js进行构建。Uni-app的跨平台特性使得一套代码...
unregulated aggregation: 在用户不知道的情况下,可以收集一个设备上多个APP的行为或信息的恶意行为 Linkability: 如果两个APP可以传递用户行为或信息,就是linkable。 分两种形式: 首先收集设备(MAC,IMEI),...
手机连上电脑后,启动adb服务器:adb start-server,查看已连接设备的序列号:adb devices,这些序列号在程序中被拿来绑定设备,可以拿不同的脚本绑定不同的设备跑程序,比如我有两台旧手机,就拿来分别跑两个脚本。...