同一个程序里有多个版本的App
- 在Xcode中添加多个targets进行版本控制,就是同一个app开发多个版本
- 以Xcode 9.3 为例
1. 创建
- 点击左侧工程项目文件,选择TARGETS 下的项目右击选择 Duplicate。
- 看到这个弹框:(标准iPhone程序选Duplicate Only,如果需要iPad就选Duplicate and Transition to iPad)
- 就会看到TARGETS 下会出现一个 testCode copy
2.改名字
- (1)点击xcode左上角Run、Stop右边的工程名称,下拉框中选择 Manage Schemes,在弹出框中,点击A copy那行,点击一次、再点击一次,就可以修改A copy为你想要的名字了,比如ALite;
- (2)修改xcode左下方Products下的TestCode copy.app名称
- 选择新加的项目名,选”Build Settings” 搜索 “Packaging”下的”private Headers Folder Path”,修改testCode Copy/PrivateHeaders为 “TwoTestCode.app/PrivateHeaders”;
- (3)把TARGETS 下的名字也改一改
3.修改Bundle Identifier和选择不同的证书,让app区分开来
- Xcode 9.3已经把 .plist 生成了(多人性化啊)
- 接着直接创建个新的文件夹放 TwoTestCode的资料。(建议在工程文件夹里面创建再拖拽进来,记得选的是TwoTestCode)
- 之后就是这样
4.修改程序的名字和国际化
- 看这个帖子加国际化--- app多target 国际化语言设置
- target的程序名称都会不同,复制zh-Hans.lproj和en.lproj下的InfoPlist.strings文件到先前创建的TwoTestCode文件,然后修改InfoPlist.strings的内容:"CFBundleDisplayName"="TwoTestCode";
- 注意选择类型来改:
5.设立全局的宏定义来区分
- 选择TARGETS下的testCode->Build Setting,搜索:Preprocessor Macros,设置Debug和Release里的预编译宏内容,比如:TARGET_VERSION_LITE=1
- (注意=前后不能右空格,有空格会编译不过)
- 最后:程序中对不同版本这样判断:
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {
#if TARGET_VERSION_LITE ==1
return6;
#elif TARGET_VERSION_LITE ==2
return5;
#endif
return5;
}
同一个程序里有多个版本的App的更多相关文章
- JSP页面的隐含对象和Servlet程序里的对象之间的关联和区别
首先,有两个概念: 1.JSP页面的域对象:pageContext,request,session,application对象(四个) void setAttribute(String name,Ob ...
- 微信小程序里解决app.js onLaunch事件与小程序页面的onLoad加载前后异常问题
使用 Promise 解决小程序页面因为需要app.js onLaunch 参数导致的请求失败 app.js onLaunch 的代码 "use strict"; Object.d ...
- 在c或c+程序里打印调用栈。转
在C/C++程序里打印调用栈信息 我们知道,GDB的backtrace命令可以查看堆栈信息.但很多时候,GDB根本用不上.比如说,在线上环境中可能没有GDB,即使有,也不太可能让我们直接在上面调试.如 ...
- 帮同事写了几行代码,在 安装/卸载 程序里 注册/卸载 OCX控件
写了个小控制台程序,这个程序用来注册 / 卸载OCX控件,用在Inno Setup做的安装卸载程序里. #include "stdafx.h" #include <windo ...
- [转载]C#控制台应用程序里调用自己写的函数的方法
(2011-08-15 15:52:13) 转载▼ 标签: 转载 分类: 技术类 原文地址:C#控制台应用程序里调用自己写的函数的方法作者:萧儿 最近写程序,遇到了一个很白痴的问题,记录下来,免得下次 ...
- Log4.Net 在Winfrom、MVC、ashx程序里的使用,ashx程序里使用异步
最近做一个双11活动的,是一套相关的H5页面.本来以为难度不大,但是做下来几天还是遇到些问题.就总结一下吧,还是有收获的. 1.在H5页面中,有一个遮罩层,还是挺有意思的.直接用div+css控制遮罩 ...
- IIS中报错弹出调试,系统日志-错误应用程序名称: w3wp.exe,版本: 8.5.9600.16384,时间戳: 0x5215df96(360主机卫士)
偶遇一次特殊情况,在使用Web系统导入数据模版(excel)时,服务端IIS会报错并弹出调试框,然后整个网站都处于卡死的debug状态,如果点否不进行调试,则IIS会中断调试,Web系统继续执行,运行 ...
- Python程序里的注释和#号
Python程序里的注释是很重要的.它们可以用自然语言告诉你某段代码的功能是什么.在你想要临时移除一段代码时,你还可以用注解的方式将这段代码临时禁用.接下来的练习将让你学会注释 : # A comme ...
- 微信小程序里如何用阿里云上传视频,图片。。
纯手写,踩了半天多的坑干出来了... 网上也有对于阿里云如何在微信小程序里使用,但是很不全,包括阿里云文档的最佳实践里. 话不多说上代码了. upvideo(){ var aliOssParams = ...
随机推荐
- git版本控制-详细操作
- git,软件帮助使用者进行版本的管理 阶段一git 命令: git init 初始化 git config --global user.email "you@example.com&qu ...
- C# 异常内存信息导出Dump文件
背景:很多情况下程序崩溃我们只能看到程序抛出来的异常信息,但是有时候异常信息不清不楚我们处理异常还是一头雾水,这种情况下我们就很希望能有种办法获取程序运行时的内存进行调试,查看其中的变量.参数.方法执 ...
- c#6.0特性
(1)可以直接对自动属性初始化,而且允许非标准属性使用 例如: public string Gender{get;}="男";//非标准属性 public DateTime Bir ...
- localtime 的性能问题及其替代者
在系统从redhat5升到redhat6的过程中,服务的性能差了很多.经过定位发现是程序中频繁调用localtime/localtime_r所致. 而调用localtime_r 的实现中,对时区进行了 ...
- 01 asp.net编程笔记
1.asp.net 获取当前网址url 参考地址:http://www.cnblogs.com/190196539/archive/2011/12/13/2286072.html 设当前页完整地址是: ...
- 更新solrcloud+zookeeper的配置文件,要reload collection
1.用的lib下的solr-core-4.3.1jar中的ZkCLI工具,命令在solr(web发布的)同级目录下运行. (1)upconfig 更新配置文件命令 java -classpath ./ ...
- PHP 商城无限极分类
无限极分类,用的是递归,在外部调用fen()方法即可 index是刚开始寻找的顶级分类,suo是为了在前端展示的时候缩进 ,$suo=){ 一个数组用来返回的 $t=[]; 这是查询数据库的所有内容 ...
- bootstrap中的data-dismiss属性
<button type="button" class="btn default" data-dismiss="modal">关 ...
- 今天写shader流光效果,shader代码少了个括号,unity shader compiler卡死且不提示原因
今天写shader流光效果,shader代码少了个括号,unity shader compiler卡死且不提示原因 好在找到了原因,shader 代码如下,原理是提高经过的颜色亮度 void surf ...
- 一个jquery在不同浏览器下的兼容性问题。
<div id ='pdiv' style='visibility:hidden;'> <div id='cdiv'>子元素</div> </div> ...