ios开发小结之app发布升级
在近两个月的开发中,遇到了挺多问题的,几天加班加点,最后还是在年前发布并更新了一个版本,欢迎下载无觅下载。
最头疼的问题是提交app审核,之前的工程不太规范,导致一些文件icon没有设置好,直接validate就失败了几次。validate通过后 便upload,但upload过程中又出错了,原因是java版本不对(xcode使用java类库进行上传),解决方法在见stackoverflow上的回答。 一切搞定后,还得对付国内的龟速网络,一个15M不到的ipa竟然上传了快半个小时,算下来速度连10Kb/s都不到(带宽可是20M的呀!),聊着天把 ipa上传给app store都快晚上2点了,坑爹呀。再说说关于app审核发布的问题,“无觅阅读”因为metadata被rejected一次,原因在于我们的描述里出 现了安卓这个词,话说apple这个政策也真是小家子气,这么封闭可别最后落个固步自封的境地呀。新app审核的时间大概在2周左右,主要是排队的时间 长,花费了一周多的时间,真正审核的时间也就2-3天,更新app的审核周期更短些,我们两个版本都刚好花费1周的时间。另外需要注意的在创建版本时要选 择“Hold for Developer Release ”,避免由于时差,app半夜就发布出去了,而导致运营和推广安排滞后。
无觅是小团队,测试方面人力不足,做得不是很好,app推出后没有少挨用户骂。不断迭代,提高app质量是发布后开发人员的重要工作,而收集 crash log是则是fix bug的第一步。我们在app中同时使用了umeng和GA两种统计工具,同时umeng还兼有收集crash log的用处。但umeng sdkv2.13之前的版本都存在Crash Log中dSYM UUID生成的bug,导致能看到错误日志,也无法将错误对应到具体代码。使用了umeng的分析工具,错误分析变得简单,但分析的基本原理还是要懂些 (全是编译原理的东东),可以看看下面这些资料:
- 连接crash log的符号表
- mac下反汇编工具
- 连接符号表的原理(这个刚好是umeng sdkv2.1.3之前版本的bug)
上面这点资料很少,但比较有用。从umeng分析工具和资料3知道,每次发布新版本后,都需要将archive和当前版本的代码保存下来以便日后分析crash log。
对于国内开发者而言,除了提交app给app store,还可以提交给很多的越狱市场(目前国内知道的有5、6个),但一个个手动打包很麻烦,所以写了个脚本来做这件事情。
1 #!/bin/sh
2 on_fail() {
3 echo "$*" >&2
4 exit 1
5 }
6
7 build() {
8 echo "using configuration ${CONFIG}"
9 echo "version suffix:${VERSION}"
10 echo "cleaning build folder:${BUILD_FOLDER}"
11 rm -rf "${BUILD_FOLDER}" || die "error when cleaning build folder"
12 echo "cleaning build done"
13 xcodebuild -configuration "${CONFIG}" build DISPATCHER_CHANNEL=${DISPATCHER_CHANNEL} BUNDLE_VERSION=${VERSION} || on_fail "build failed"
14 }
15
16
17 package() {
18 echo "making ipa…"
19 IPA_NAME="${APPLICATION_NAME}_${VERSION}_${DISPATCHER_CHANNEL}.ipa"
20 xcrun -sdk iphoneos PackageApplication -v "${BUILD_FOLDER}/${CONFIG}-iphoneos/${APPLICATION_NAME}.app" -o "${RELEASE_FOLDER}/${IPA_NAME}" --sign "${DEVELOPER_NAME}" --embed "${PROVISONING_PROFILE}" || on_fail "package failed!"
21 echo "finished making ${IPA_NAME}"
22 }
23
24 usage() {
25 echo "Usage: $0 version"
26 exit 1
27 }
28
29 #setup
30 if [ $# -ne 1 ]; then
31 usage
32 fi
33 PROJ_FOLDER="$(pwd)"
34 RELEASE_FOLDER="${PROJ_FOLDER}/ipa"
35 BUILD_FOLDER="${PROJ_FOLDER}/build"
36 APPLICATION_NAME='MyApp'
37 CONFIG='Release'
38 DEVELOPER_NAME="MyComp"
39 PROVISONING_PROFILE="config/production.mobileprovision"
40 VERSION=$1
41
42 if [ ! -d "$RELEASE_FOLDER" ]; then
43 mkdir "$RELEASE_FOLDER"
44 fi
45 for line in $(cat config/stores.dat)
46 do
47 DISPATCHER_CHANNEL="${line#*:}"
48 build
49 package
50 done
51 echo "build successfully!"
52 exit 0
执行上述脚本必须安装xcode的command line tools,商店渠道保存在config/stores.dat文件中,而开发者证书则为config/production.mobileprovision。
ios开发小结之app发布升级的更多相关文章
- iOS开发UI篇—APP主流UI框架结构
iOS开发UI篇—APP主流UI框架结构 一.简单示例 说明:使用APP主流UI框架结构完成简单的界面搭建 搭建页面效果: 二.搭建过程和 ...
- iOS开发之提交App中断出现:Cannot proceed with delivery: an existing transporter instance is currently uploading this package
iOS开发之提交App中断出现:Cannot proceed with delivery: an existing transporter instance is currently uploadin ...
- 读ios开发有感——建立APP开发体系
前言:ios开发和现在的大前端.跨端开发在底层上的道理是相通的,因此通过学习ios开发,可以形成对APP开发体系的理解. 一.app开发的知识体系 基础 应用开发 原理 原生与前端 二.基础模块 按照 ...
- IOS开发之上传APP
IOS开发最终都会上传APP,但是当我们做好一个项目后.在上传AppStore上的时候往往会被各种原因打回来.让人蛋疼无比. 于是总结了比较容易出现项目被打回容易出现的原因 1.程序崩溃会被打回 这个 ...
- iOS开发-UIApplication和App启动状态
UIApplication简单从字面上了解就是应用程序,开发的时候有的时候会根据需要调用其中的方法,看起来不起眼,实际在iOS开发UIApplication提供了iOS程序运行期间的控制和协作工作.每 ...
- IOS开发帐号与发布问题综合
一.iOS开发:AD-HOC版应用测试方法:http://hi.baidu.com/kangle1208/item/163f39530abb4d3195eb05a7 二.plist的方式发布: 1.y ...
- iOS开发系列之app的一天
本文主要讲述我对 iOS 开发的一些理解,希望能通过 app 从启动到退出,将一些的知识整合起来,形成一条知识链,目前涉及到的知识点有 runloop.runtime.文件存储.界面布局.离线推送.内 ...
- iOS开发 判断当前APP版本和升级
从iOS8系统开始,用户可以在设置里面设置在WiFi环境下,自动更新安装的App.此功能大大方便了用户,但是一些用户没有开启此项功能,因此还是需要在程序里面提示用户的 方法一:在服务器接口约定对应的数 ...
- iOS开发小结 - 让你的APP后台运行
最近项目有个需求需要让app在后台一直运行计时着,找了一些资料,只能用比较无耻的做法了,播放一段没有声音的音频文件,这样你的APP就不会被系统杀掉~~ 我们只需要用到<AVFoundation/ ...
随机推荐
- Java之基于Apache jar包的FTPClient上传
首先,准备工作: http://pan.baidu.com/s/1dD1Utwt 从以上链接下载Apache的jar包,并将其复制到工程的WEB-INF下的lib包里,在此,准备工作就已经完成了. 具 ...
- IOS开发---菜鸟学习之路--(四)-登陆界面
本篇的内容其实大家 参照橘子的那本开发的书的话 上面讲解的是更详细的 一些实现. 我这边唯一的区别就是 做了网络数据的获取 以及 验证成功后 进行界面的跳转.. 第四篇了 本篇主讲登陆模块 首先先放 ...
- 初学Linux 命令
查看ip:ifconfig 切换用户:us root(root为用户名) 显示当前目录:pwd 列出当前目录下所有文件:ls 进入某个目录 :cd 创建一个文件夹:mkdir 创建多个目录(当没有该父 ...
- REDIS基础笔记
Redis基础笔记 资源链接 简介 简介 安装 五种数据类型及相应命令 1. 字符串类型 2. 散列类型 3. 列表类型 4. 集合类型 5. 有序集合 其他 事务 SORT 生存时间 任务队列 发布 ...
- react-router的原理
1.hash的方式 以 hash 形式(也可以使用 History API 来处理)为例,当 url 的 hash 发生变化时,触发 hashchange 注册的回调,回调中去进行不同的操作,进行不同 ...
- 【Luogu】P3750分手是祝愿(期望DP)
题目链接 这题好喵啊…… 设f[i]是最少用i次才能全关上转移到最少用i-1次才能全关上灯的期望值,那么n个灯里有i个是正确的,剩下的都是不正确的 因此期望是$f[i]=frac{n}{i}+frac ...
- Gym 100971C 水&愚&三角形
Description standard input/output Announcement Statements There is a set of n segments with the le ...
- SQLalchemy 使用记录
1.models.py中添加该方法,可通过该方法转dict #驼峰 def to_hump_dict(self): return {commonUtils.str2Hump(c.name): geta ...
- FOR XML PATH 语句的应用【所有列值显示在一行中】
原文发布时间为:2010-10-20 -- 来源于本人的百度文章 [由搬家工具导入] 大家都知道在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一 ...
- FusionCharts参数说明补充
原文发布时间为:2010-09-14 -- 来源于本人的百度文章 [由搬家工具导入] 功能特性animation 是否动画显示数据,默认为1(True)showN ...