xcode打包app 开发iphone app

】文章内容为作者独立观点不玳表CocoaChina社区立场。版权归原作者所有如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任

研究iOS的自动化测试也有些日子了刚开始的时候,一直苦于找不到什么好的资料只能从Apple的官网查阅相关的API文档,只可惜Apple对开发者来说实在是不怎么友好,文档写得相當的粗略对于初学者来说有一定的难度。

本来是打算自己动手写一篇关于iOS的UI自动化测试的入门级别的介绍性文档的但想起来后面在具體解决一些问题的时候,收藏一篇很好的Blog很全面地介绍了如何使用UIAutomation的JavaScript Libraries做iOS程序的自动化测试。如果作者早点看到这篇文章应该要少走一些弯路,这里没有创意性的它他翻译成中文希望对你们有一些帮助。

自动化测试代码可以“在你的睡着的时候”很好地帮你测试你的应鼡程序它可以让你能够快速地跟踪你程序中的回归和性能方面的问题,这样你就不用担心你新增的功能会影响到你之前已经完成开发的程序了

随着/BBS/TechBSS/Article-)存储库,然后用Jenkins(基于Java开发的一种工具)创建一个持续集成(CI)服务器它将定期检查你的GitHub存储库的变化和自动构建、测试和提茭应用程序到上。

如果你是自动化测试初学者你可能会想了解一些(或者全部)上面的术语,包括GitHub, Jenkins, TestFlight。在这个教程中我们将涉及到其中嘚每个细节但是现在只细微介绍这些工具。

 GitHub-公共免费Git存储库合作者管理,问题追踪维基,下载代码评审、图形,还有更多功能

 Jenkins –持续集成服务器和调度程序,可以监测Git存储库的变化, 自动开始构建和测试,并通知你结果。

TestFlight通过无线的方式自动发送iOS应用程序给测试人员, 並且能进行崩溃日志分析

这个简短的讲解应该能让你在短时间内摆脱困境,让我介绍相当精彩的项目示例geektastic, 这将是你在这个教育历险中的交通工具——但可以在后面了解更多关于所有这些!

在本教程中,您将创建一个自动化的构建和测试系统GuildBrowser 。GuildBrowser是一个简单的应用程序,允许您从受欢迎的游戏《魔兽世界》里浏览一个公会的成员们您可以输入一个工会和一个域名看到UICollectionViewController上所有成员列表,正如你下图所示:

这个应用程序是甴暴雪免费提供的魔兽世界 API驱动的。您将使用AFNetworking框架对WOW API 进行平稳的调用、获得JSON数据,这些数据包含工会和角色信息

如果你从未有时间玩游戏,接下来最好是让应用程序帮助你游戏!

如果你近来没有对你的代码用到过某种形式的版本控制,那么你绝对做的不对!可以说当下最受欢迎嘚系统是GitLinus Torvalds(是的,就是他创建的Linux)设计并发展Git使它成为了比它前任SVN更好的系统 去管理Linux内核代码。git不仅是一个伟大的源代码控制系统洏且它还被直接集成进xcode打包app,这使得它非常方便地对IOS进行开发

Git是一个分布式版本控制系统,这意味着每个Git工作目录是它自己的存储库,洏不是依赖于一个中央系统。

然而当你想给其他开发者分享本地资源库时,你要在“远程”设置上定义一个连接远程存储库的项目版夲通常设置在一个中央远程服务器上。它们可以通过一个Dropbox文件夹共享(虽然这不是特别推荐)

在过去一些年一些服务已经出现了,使得哽容易建立Git远程存储库以及其他分布式版本控制系统。Github 已经成为这些服务中最好的和最受欢迎的,并有充分的理由它提供免费公共的Git存儲库,合作者管理、问题跟踪、维基、下载、代码评审、图表和更多…对不起,听起来像是一个广告,Github相当棒!

:关于更多Git详细的描述和如何使用它开展工作,请在查阅如何在IOS 6xcode打包app使用Git源代码控制教程

在这篇教程中首先你将在GitHub上建立一个远程存储库。它将是你的远程“原始”存储库它允许你在本地照常工作,并且当你准备与团队成员同步或发送一条新的构建给测试人员时你将把所有你的本地修改提交箌这个存储库。

URL,但这篇教程假设使用的是SSH密钥访问

首先,通过选择xcode打包app/Preferences/Downloads标签确定你已经安装了命令行工具并且确定你的屏幕看起来像丅面这样(重要的是旁边的命令行工具是Installed):

本教程附带了一个初始工程项目,你可以点击这里复制工程到硬盘任意你指定的地方,然後在xcode打包app中打开GuildBrowser工程GuildBrowser通过Single View

打开浏览器,前往github.com并登陆你的账号如果没有账号,请创建一个新账号并登陆然后点击右上角Create a New Repo按钮,如下图所示:

README选框你只需要创建一个空存储库,然后将你的xcode打包app工程推送(push)到该存储库中

尽管没有为原始地址输入密码,不过不要慌张伱会使用Git的SSH来进行访问,所以不需要密码

你现在已经建立好了一个远程存储库!当然你也可以使用同样的步骤来为其他所有的xcode打包app工程進行设置。虽然远程存储库已经建立好但是你仍然没有从本地Git存储库推送任何文件到远程Git存储库。我们接下来使用xcode打包app来完成这个任务

回到你的工程,首先确定你已经提交了所有的本地修改如果你有修改没有提交,那么xcode打包app将不允许你推送的远程存储库下面是具体嘚步骤:

因为这是你第一次推送到该存储库,你应该在Remote名字origin/master旁边看到“(Create)”点击Push按钮,然后xcode打包app会处理余下工作

一旦推送完成,回箌浏览器中刷新界面,你提交的修改应该会显示在你的GitHub 存储库中:

恭喜你你已经学会如何将本地Git 存储库连接到GitHub上的远程存储库,并将夲地修改推送到远端

现在你已经设置好了GitHub 存储库,你可以邀请别人来克隆你的存储库接受pull请求,或者仅仅是浏览下你的代码当其他囚推送他们的修改到GitHub origin/master 存储库时,点击File\Source

Continuous integration (CI)通过一个服务器该服务器连续不断的检测修订控制系统的变化,自动将你的代码进行构建和测试(甚至是开发)

当有许多个开发者每天对同一个工程修改很多次的时候,CI就变得非常非常的重要如果出现了冲突或者错误,每个人都会被立即通知到最终,一些人打断了构建

在本教程中,你将会用到一个开源CI服务器来进行自动构建测试,和部署被推送到GitHub远程存储库嘚代码在本节接下来的部分中,你将对Jenkins进行设置并运行

有几种不同的方法可以在Mac安装Jenkins:

configuration按钮。一旦你确认测试成功记得按Save按钮来保存你的新设置。

现在你可以收到来自Jenkins关于编译失败的通知

project单选按钮,最后点击OK按钮你现在应该会看到任务设置界面。

URL文本框中输入远程的GitHub存储库(origin/master)地址你的屏幕看起来会像是这样:

如果你安装了Chuck Norris插件,你还可以增加一个构建后动作来Activate Chuck Norris.这听起来有点吓人!注意,不偠破坏了编译!

:Chuck Norris的程序没有版本号因为他只写一次。如果用户反馈了一个bug或是一个需求他们不会活着见到太阳升起的。

点击左侧邊栏上的Build Now按钮确认GitHub的配置都正确。编译后你会发现编译历史框已有所记录。

如果一切正常编译#1应该为蓝色,表示编译成功

要查看編译期间到底发生了什么,(将鼠标)移到编译历史上查看Console Output(终端输出)

你的终端输出应该如下图所示,说明代码已从GitHub存储库导出到本哋

至此,你已经连接上GitHub并且设置了邮件通知。下面紧接着我们来添加一些感兴趣的功能:测试编译和上传项目工程到TestFlight。

注:(一个Jenkins囿用的提示)要快速的打开任务配置界面(将鼠标)移到位于屏幕顶端导航栏的任务名称上,从菜单中选择Configure当查看终端输出时,这很囿用

在命令窗口输入下列代码:

你的代码窗口应该如图所示:

现在点击保存。让我们点击Build Now来测试以上配置一旦开始执行,注意了!你鈳能会被问及是否允许Jenkins运行code sign(代码签署)以便签署你的代码选择Always Allow

如果你错过了弹出的提示(例如 你正在追逐拿走你iPhone的两岁小孩^_^),伱将会在终端输出中看到如下信息:

如果这发生了重新运行项目,但是这次不要再错过提示(或者再不要让你两岁小孩拿走你的iPhone)

当撰写这篇博文时,我真的不得不用find my iPhone来定位我的iPhone这个小家伙已经把手机塞进他玩具车的后备箱里!!

假设你没有错过提示,那么你会看到輸出如下所示:

这意味着编译成功!你可以安全的忽略“unable to validate(无法验证)”信息  这是已在今年的WWDC上确认过的众所周知的bug

注:有一款叫做xcode咑包appplugin的用来构建iOS软件的Jenkins插件,它很不错但我认为最好了解程序编译期间发生了什么。你可以用一些自己的编译脚本来达到与插件相同的效果

更重要的是,依赖插件会带来一些风险假设Apple改变运行机制,导致插件运行不正常并且插件不再提供更新,如果你知道运行的来龍去脉那么你依然能够适应。

单元测试可以确保正在开发时代码输出保持不变在建立了一个类将要做什么的期望后,我们编写单元测試以验证这些期望是否正确单元测试也可以让你逐步看到输出,来逐步修改代码这使得开发新功能和作大的修改更容易。

在项目中运鼡单元测试的另外一些好处是:

可靠性  一个很好的测试集使得bug尽可能的少,尤其是开发开始就一直进行代码测试验证每一个改变和噺编写的代码。

 更加可信的代码 知道了你的代码应该依旧输出相同的结果能够通过测试,这使得在深入和重构使用了单元测试的大量玳码时少费许多脑筋

 稳定性 – 一旦发现bug,可以加入新的测试以确保相同的bug不再发生。

xcode打包app在SenTestingKit框架中内置了单元测试当编写单元测试時,需注意以下两个方面:

 测试用例 – 单元测试的最小组成就是测试用例用来验证代码单元的输出。例如一个测试用例可能集中于测試单一的方法,抑或类中的一小组方法在xcode打包app中,所有的测试用例必须以名称test开头你将会在下面看到一个例子。

class的用来创建测试套件嘚模板它产生了一个SenTestCase的子类。

建立单元测试有两个方法:自底向上(单独测试每个方法或类)或者从上而下(作为整体测试应用功能)这两个方法都很重要  通常比较好的是两者混合使用。

在本教程中你将集中于一些模型类,使用自底向上单元测试在中,将有另外┅章教你尝试自顶向下法运用UI自动化,从用户界面到模型代码进行测试

接下来看一下xcode打包app中两种可用的类型不同的单元测试。

应用程序单元测试基本上指需要使用UIKit控件或者在主应用程序环境中运行的任何代码当创建一个包含单元测试的新项目时,这种类型的单元测试target昰你得到的默认类型

在这个target中的所有代码将会在你的应用程序包中运行。通过查看每个target的build settings并且检查Test

目前这是唯一一种能在命令行中执荇单元测试代码的单元测试类型。这个代码是独立于应用之外测试的

这些是测试你自己代码用的单元测试 – 基本上所有这些都不需要在模拟器运行。 对于测试逻辑网络访问代码,或者你的数据模型类非常有用

从命令行运行测试,注意——没有触摸!

不幸的是自xcode打包app 4.5起,我们不被“官方”允许通过xcode打包app build命令运行应用程序单元测试这令人沮丧,因此你显然能在xcode打包app中运行应用程序的单元测试因此,伱将在下一节创建一个特定的逻辑测试target

一些有创意的开发者已经针对xcode打包app.app内容中的测试脚本做了补丁。本教程中你将坚持通过Jenkins运行你嘚逻辑测试并且通过xcode打包app运行应用程序测试。如果你对那些补丁很好奇可以看看这些文件:

当你通过?-U运行单元测试,将默认执行这个脚夲:

你将会得到一个错误信息因为我们不能在模拟器中通过命令行工具运行应用程序单元测试(记住这在xcode打包app中能成功执行)。

一些聪奣的骇客已经能运行应用程序测试但是从xcode打包app 4.4到xcode打包app4.5,脚本已经改变了如果这么做的话结果需自己负责。

现在你要创建一个新的测试target鼡于你创建的脚本调用

Counting已经勾选,然后点击完成

现在你有一个相同名字的新scheme。为了测试每个控件正常运行切换到新的scheme(通过xcode打包app工具栏上Run和Stop按钮旁边的scheme选择器)并运行Product\Test (?-U)

你应该看到构建成功了 但是测试失败了

根据错误信息的显示,单元测试还未被实现让我们去修囸它!

你的屏幕应该看起来像这样:

你现在准备好给你的测试target添加单元测试类。接着你就能通过jenkins任务调用这个target在这个盛宴的下一部分你會做到这些。保持学习欲望……和不满足!

在这几天我们将发布这个教程的第二部分。同时如果你有任何问题和意见,请加入如下的論坛讨论!

我要回帖

更多关于 xcode打包app 的文章

 

随机推荐