我正在寻找为我们的iphone应用程序设置一个自动夜间构建服务器,并寻找关于哪些有效哪些无效的建议.

基本上,它至少每晚运行所有单元测试,并在我们的内部网站上发布一个新的临时构建.

所有的开发者都使用笔记本电脑(它将在一夜之间关闭),所以我正在考虑用一台专用的MacMini来实现这一点.

我不确定我应该买标准的Mac OS X还是服务器版.

至少在第一次try 中,我考虑只使用一个从crontab运行的简单shell脚本来完成实际工作.在future ,一个完整的持续集成服务器(hudson等)会很好.

通过搜索,我已经找到了一些文章,尽管它们很简短:

http://nachbaur.com/blog/how-to-automate-your-iphone-app-builds-with-hudson

http://blog.jeffreyfredrick.com/2008/11/27/continuous-integration-for-iphonexcode-projects/

此外,这个stackoverflow问题还有一些有用的软件信息(尽管现在已经两年了):

Continuous Integration for Xcode projects?

任何关于如何设置构建服务器和任何潜在问题的指导都将不胜感激.

谢谢

约瑟夫

推荐答案

Hudson(或它的fork Jenkins)真的不难安装;这是我们内部使用的.我们不只是从它运行iphone版本——事实上,只有一个单独的mac mini为iphone版本设置,这是一个相对较新的添加.一段时间以来,我们已经有六个其他平台的奴隶.

你可以通过Meet Hudson页上的"试驾"链接来体验它的设置有多容易.(这是让我对它产生兴趣的原因之一;它很容易入门,但仍然是可配置的、可扩展的,而且功能强大,足以让我们在过go 几年里不断扩展.它取代了一堆乱七八糟的手写脚本和程序,尽管我是这些脚本和程序的作者,但我很高兴看到它们被搁置起来.)

我们的hudson后端运行在一台强大的MacOSX服务器上,但没有理由不能在任何地方(linux、windows、Mac)运行它.

至于为构建而配置它——在项目配置中大约有6行shell脚本,主要调用xcodebuild并传递-project-configuration个参数.

例子:

cd ${WORKSPACE}/Engineering/

set -e
set -v

xcodebuild -project foo.xcodeproj -alltargets -configuration Distribution clean
xcodebuild -project foo.xcodeproj -alltargets -configuration Release clean
xcodebuild -project foo.xcodeproj -alltargets -configuration Debug clean

xcodebuild -project foo.xcodeproj -alltargets -configuration Distribution
xcodebuild -project foo.xcodeproj -alltargets -configuration Release
xcodebuild -project foo.xcodeproj -alltargets -configuration Debug

我们还没有将从属服务器设置为作为服务运行——这在待办事项列表中.现在,只要重新启动mini,我们就通过JNLP启动它.

存储库是SVN,hudson master负责为我们记住https身份验证信息.

我们积极使用Email-ext插件,并且有一个构建超时插件和一个审计跟踪插件,因为有很多其他人使用该系统,并且一些构建行为不好.我们已经对Warnings插件和Static Code Analysis plugins插件进行了简单的实验,需要在更多的项目中使用它们(我们通常会在构建中出现错误警告,但我们确实在一些项目中使用了PC Lint和其他工具;在这里聚合和跟踪输出非常好).最后是最重要的Chuck NorrisEmotional Hudson插件.

我们目前没有运行单元测试(可惜!)在任何iphone版本上,我们都只使用hudson内置的普通"归档工件"功能来存储版本.这些可以通过授权用户通过哈德逊网络界面访问.我毫不怀疑,在框架内运行单元测试对您来说并不难.

</粉丝>;

我们唯一真正的问题与mac mini上的AFP和SMB有关——与哈德逊一点关系都没有,而只是我们的内部网络基础设施.迷你车对我的口味来说有点慢——我们通常会运行非常健壮的构建奴隶,理论上快速的自动构建周转是件好事.出于这个原因,mini可能会在某个时候获得SSD.

Objective-c相关问答推荐

为何在Objective-C中,使用self.propName赋值会导致崩溃而使用_ivarName则不会?

覆盖@property setter 和无限循环

将 NSInteger 转换为 NSIndexpath

xcode 未知类型名称

在 ARC 中清零弱引用

iOS 中 textField 上的Electron邮件验证

Container View 好像有 UINavigationBar 一样被下推?

Select 时如何更改 UITableViewCell 的 colored颜色 ?

设置数据后调整 UICollectionView 单元格的大小

无法在 Interface Builder (Xcode 5) 中创建与子视图的出口连接

首次提交应用内购买以供审核

动画 UIButton 状态变化

从 UITabBarController 在当前上下文中呈现模态视图控制器后出现黑屏

如何在 Objective-C 中将 NSString 解析为 BOOL?

IOHIDFamily 的神秘控制台错误

可变集合有文字语法吗?

Objective-C 异常

如何修复UIPopoverController 已弃用警告?

在 UITableView 中更改复选标记的 colored颜色

iOS中的活动生命周期相当于什么?