Articles in the iOS category

  1. Appium的使用

    1. Intro

    本周业余时间,主要在研究如何使用Appium,内容包括Appium是什么,架构,安装,使用以及测试用例的写法。

    2. Appium简介

    Appium的Introduction页面介绍了Appium,采用经典的CS架构,利用 WebDriver 封装调用各平台的测试框架(现在支持iOS,Android,FirefoxOS),因此在使用的时候需要先启动服务器再在客户端进行测试。
    对技术细节及背后的实现感兴趣的,可以深入看源码。现在,我们的目标是运行Appium并成功进行测试。

    3. Tutorial

    为了上手,可以看GetStarted或者iOS Tutorial。因为我只侧重iOS,因此下面把tutorial中涉及到的内容摘录出来。

    3.1 Environment(环境配置)

    Install the latest stable release of Ruby.

    \curl -sSL https://get ...
    Tagged as : 测试 appium
  2. Compare of Testflight&&Enterprise Distribution

    前言

    应要求整理的分发方式比较。可惜了有enterprise的我们,还是没有充分利用enterprise的特点。
    下面从是否需要review,UDID以及下载方式进行比较,最后简单介绍利用dropbox进行wireless下载in-house app的过程。

    1 Compare

    First of all, a simple comparing of Tesftflight and Enterprise distribution is listed below.

    Type TestFlight Enterprise
    Review by Apple Required NO
    Device UDID Required NO
    Download TestFlight iOS App(iOS8) Custom Server

    2 Testflight distribution

    2.1 Review

    It ...

    Tagged as : iOS distribution
  3. 个人App发布前的测试

    前言

    假期里原本想好好的放松,多看几本书,多运动,不曾想一半的时间花费在修改bug上了。算上假期前提交的版本,整个春节期间发布了3个小版本的更新,申请了2次紧急提交审核。其中经历不可谓不惊心动魄,虽然未必对下载量有所帮助,但至少也让用户感觉到:这大过年的也在更新,也是蛮拼的了:-)。

    测试流程

    言归正传,春节期间提交的紧急修复起因都是程序出了严重的bug,而且都是在修复某个bug的过程中引入的bug。这说明即使是个人开发者,对于提交前的测试流程必须要重视。不管是养成一个好习惯,或者是开发出较高质量的程序,完备的测试是不可或缺的。下面结合自身的情况,把相应的测试守则完备下,督促自己执行。

    功能设计和实现阶段

    在分解App的功能的设计阶段,或者在实现功能的阶段,根据功能点,撰写相应的测试内容。具体来说就是针对每一个功能点,设计测试步骤;功能复杂的时候测试步骤也要细化。这里尤其要注意的是务必覆盖所有的功能点。此外,针对边界情况的测试,基本也包含在此阶段。

    模块化集成阶段

    当完成几个模块后,可以着手集成测试,这个阶段主要侧重运行时模块之间的运行情况。有时候单独的功能使用没有任何问题,但是当和其他模块功能一起使用的过程中,会发生问题。

    测试环境

    发布前的App必须完整经历Ad hoc版本的测试,因为developer模式下有些bug不会产生。这一点,相信很多人都深有体会 ...

    Tagged as : iOS 测试
  4. 过去一周的思考

    简介

    过去的一周可以算是波澜起伏,主要关于两方面:一个是app的下载,另一个是app的发布。

    app的下载

    ASO是一个至今不得窥其入门的东西,某个收费的app自上线至今约3个月的时间保持平均每天3个的下载节奏。期间在app中集成的分享平台中发过带app的tag的链接(主要是国外的分享平台),这种方式可以引起用户的注意,可以算是营销的一种方式。只是一个人势单力薄,无法做到每天的更新。这种方式和app的下载互为因果,因为很难单纯的通过这种方式提高下载量,相反这种推广的效果还取决于app的下载基数。因此,我认为这属于“锦上添花”增加用户基数型的营销模式。
    虽然推广没有花费大力气,但是本周还是发生了下载量突变的情形。5-10日之间下载量分别是个位数,2位数,3位数,3位数,2位数,个位数。至此,恢复以往的平静。在此期间,做到分类付费和畅销排名前三。虽然之前也油锅这样的经历,但这次的app是收费的,意义不同寻常。此外,这样的一个过山车的表现也很让我诧异。是什么导致下载量突然的上升呢?我搜索了一下相关的分享平台,没有大量的使用app的痕迹。通过Appannie的变化追踪来看,我倾向于Apple调整了app的排名算法(如果这些下载量不是黑卡造成的话)。线索就在于5日以及之前的排名已经落后到不知什么地步,而后突然就排名上升。考虑到下载量在相应的category中中规中矩,评价几乎没有的情况,才做出算法调整的判断。
    这个 ...

    Tagged as : iOS
  5. 限制文本输入长度

    需求

    限制字符输入长度是个常见的需求,比如注册的账号或者密码。通常,从用户体验的角度,iOS App中当输入超过制定长度的字符时不需要显式的弹出提示,而只需要让超过的字符不显示即可。这个功能看似简单,但是考虑到一些输入系统例如中文输入法的联想功能,就不那么简单。

    一般的实现

    以UITextField为例,通常的做法是在delegate中做文章。这样的解决方案很多,stackflow上一个比较全面的解答:Set the maximum character length of a UITextField,大致的思路就是在输入即将要替换的时候,计算最终要显示的字符串。这个方法对于英文输入是没有问题的,但是对于其他语言如中文输入就会存在问题。举例来说中文拼音输入“的”时,用户需要输入de,在未选中“的”时,de以选中的状态在输入框中显示,并作为输入框的内容,如下图:

    input1input2

    按照中文的输入法,de两个字符并不是最终显示在UITextField控件中,所以背景有选中区域,但此时UITextFiled的属性text的内容包含de。然后,右图显示的是输入“的”后产生的联想,注意此时点击“确 ...

    Tagged as : objc
  6. 新年开篇

    转眼间,又进入了新的一年。虽然农历新年尚有不到两个月,但年的氛围已经起来了。此时,尤其适合回顾过去,展望未来。

    过去的2014年

    过去的一年,收获还是颇多的。借鉴前几次计划的不足,2014年初制订计划的时候,没有那么“严格”。比如,要求看书的数量为两本,这样年尾的时候,不至于完不成目标还给自己太大的心里负担。

    iOS

    iOS的开发是主打,iOS8新特性的extension总算搞明白并使用在自己的app里。 个人app今年终于上线,总共3个,分别对应不同的类型。原先打算通过挂广告赚点零花钱,却不曾想这条路对于我是那么艰难。反倒是一个付费的app,有不俗的表现,起码明年的续费不用担心了。这给我很大的感触,就是创造的东西要解决用户的实际需求,说的好看点就是时下流行的“抓住用户的痛点”。这个怎么抓,只能各自去体会。自己的经验而言,首要的是行动,想那么多不如先做一点点;在实际航行的时候,再一点点的调整方向。等有了经验以后,有些东西就会水到渠成了。

    SAE

    sae上搭建了一些小服务,主要是用于app中的版本检查之类。服务端的开发没有深入,这一块可能会在今年加快实施的步伐,不过现在还没有得到明确的消息。之前搭建的wordpress偷偷的浪费了不少云豆,索性停了 ...

    Tagged as : 总结 计划
  7. NSZombierEnable

    今天在cocoachina上看到一篇关于实现NSZombier的翻译贴,原文来自Mike Ash。此人是(Friday Q&A)的作者,更为神奇的是他白天是飞行员,晚上是程序员,这在天朝不可想像。本文主要是基于他以下两篇文章的笔记。
    Friday Q&A 2011-05-20: The Inner Life of Zombies
    Friday Q&A 2014-11-07: Let's Build NSZombie

    启用NSZombier对象

    有经验的开发者在遇到诸如EXC_BAD_ACCESS的错误时往往会设置NSZombieEnabledYES,这样类似的错误发生后,就可以定位到出错的位置,从而便于诊断问题所在。
    诸如此类的内存错误不管是MRC还是ARC下,都是会发生的。发生的原因在于:一个已经release的指针对象,又收到了某个消息,这时就会发生古怪。在MRC下,alloc一个对象A,然后release后,该对象所指向的内存被系统回收 ...

    Tagged as : objc
  8. Find All Unlocalized Strings

    Requirements

    We have a project which uses NSLocalizedString macro but some strings are not localized in the Localizable.strings file. What we do is to find all these strings and implement the Localizable.strings file.

    Apple's Tool

    As I refered here, Apple has a built-in tool but is for ...

    Tagged as : Localized
  9. 懂得止损

    缘起

    止损一词似乎在股市中运用的颇多,大概是直接和金钱有联系的缘故。可是大家不要忘记,在当下,每个人的实践也是笔巨大的财富。想想首富们一分钟能赚的钱,就知道此言不虚。虽然你我离首富尚有些距离,但时间的宝贵会随着年龄的增长与日俱增。
    最近在做app的分享功能,使用的是Umeng的组件,之所以使用Umeng是因为:

    1. 之前在技术群中,经常见到有人对shareSDK的诟病
    2. 使用umeng的统计组件,对其印象不错 可是,偏偏这个分享,花费了整整一周的时间。
      虽然我在这里直接列出了umeng和sharesdk,但是绝无软广的意思,想表达的是在浪费了一定宝贵时间的时候,个人应该如何选择分析并做出决策的重要性。

    事件过程

    分享的问题主要是facebook分享失败。在facebook的开发页面注册好app,申请并通过了pulic_action(是post wall的必须)的权限。由于疏忽,使用了Test User进行share的测试,没有任何问题。可是,使用了一个普通账号——既不是admin,也不是developer或tester的账号进行测试时,就会发现分享失败。经过排查,发现在第一次授权的时候,facebook授权页面上显示该app不能post wall。我的第一直觉先是排查app的设置,未果后联系umeng的客服(这里需要点名一下 ...

  10. App Extension Study 4

    Author: Charles Zhu
    Summary: ios8 app extension

    1 开始

    本篇介绍剩下的Custom Keyboard,之前的3篇:

    • 第一篇: 介绍了Extension的基本概念/运行周期/数据共享等通用技术细节
    • 第二篇介绍并实践:widget,share,action和Photo Editing
    • 第三篇介绍并实践了Sync和File Procvider

    2 Custom Keyboard

    iOS8终于对第三方输入法开放,引起一片毋需越狱的呼声,这就是通过extension实现的。在以前,app可以单独实现适合自己的文本输入法;而iOS8上,如果用户在设置中添加第三方的键盘,就会对所有app可见(如果app没有禁止使用第三方输入法的话)。对于重视用户隐私的苹果公司而言,虽然开放了输入法的扩展,但是对于用户数据和隐私的保护是非常重视,因此在开发的时候要时刻关注。

    2.1 第三方输入法要具备的特征

    输入法的核心是要对用户的点击等手势及时的响应,提供可选的文本和插入文本等。除此之外,重要的就是要能够切换到下一个输入法。苹果文档中列出了一些特征 ...

    Tagged as : ios8 AppExtension

Page 2 / 4