Tag: iphone
iPhone Application Post Build Script
by Robin Lu on Feb.13, 2009, under Uncategorized
很多平台软件开发发布前, 有个很重要的事情就是保留好符号表(symbol)文件. 因为发布的软件一般来说都去除了符号表, 而符号表对于维护是很重要的信息, 没有它, 在拿到call stack后会很难对应到代码中. iPhone开发也是一样, 每次做完Build, 都会有一个.dSYM的目录, 就是符号表. 有了它, 在用户提交crash log后会很容易定位问题.
手工保存这些符号表文件很容易产生疏漏, 恢复起来又麻烦. 我做了一个脚本, 添加到Target的Run Script Build Phase中, 可以在Build类型是Distribution时, 将build出的binary和符号表分别打包为:
- [application].app.[version].zip
- [application].app.dSYM.[version].[git hash].zip
如果你用的版本管理系统不是git,需要对脚本做相应改动.
以下是脚本代码
#!/usr/bin/env ruby if ENV["BUILD_STYLE"] == "Distribution" && ENV["ARCHS"] == 'armv6' common_git_paths = %w[/usr/local/bin/git /usr/local/git/bin/git /opt/local/bin/git] git_path = "" common_git_paths.each do |p| if File.exist?(p) git_path = p break end end if git_path == "" puts "Path to git not found" exit end command_line = git_path + " rev-parse --short HEAD" sha = `#{command_line}`.chomp info_file = ENV['INFOPLIST_FILE'] f = File.open(info_file, "r").read re = /([\t ]+<key>CFBundleVersion<\/key>\n[\t ]+<string>)(.*?)(<\/string>)/ f =~ re puts $1 # Get the version info from the source Info.plist file # If the script has already been run we need to remove the git sha # from the bundle’s Info.plist. version = $2.sub(/ \([\w]+\)/, "") cmdline = "cd #{ENV['BUILT_PRODUCTS_DIR']};zip -r #{ENV['CONTENTS_FOLDER_PATH']}.#{version}.zip #{ENV['CONTENTS_FOLDER_PATH']};zip -r #{ENV['CONTENTS_FOLDER_PATH']}.dSYM.#{version}.#{sha}.zip #{ENV['CONTENTS_FOLDER_PATH']}.dSYM" `#{cmdline}` end
添加方法为:
- 在XCode左边栏选中相应的Target
- 在菜单中选择Project -> New Build Phase -> New Run Script Build Phase .
- 弹出的对话框中,Shell里填写/usr/bin/ruby, Script中填写上面的脚本代码.
iPhone / iPod Touch 文件传输解决方案 - Cocoa Web Resource Project
by Robin Lu on Dec.01, 2008, under Uncategorized
到目前为止,也就是iPhone SDK 2.2 ,苹果仍然没有为开发者提供一个文件传输的解决方案。如果一个应用需要为用户提供往iPhone上传文件的功能,大抵会采用下面几种方法之一:
- 通过一个链接从网上下载。
- 提供一个客户端,通过自己的协议上传。
- 支持FTP传输协议。
- 在iPhone上启动一个http服务,通过浏览器上传。
- 比上一个更进一步,在http上支持WebDAV,通过改协议上传。
上面这些方法各有利弊。前两种方式虽然开发比较简单,但用户操作不方便,采用的比较少了。使用FTP在一些系统上还是需要额外的客户端软件,也不算方便。WebDAV的方式现在比较流行,Air Sharing和Discover都采用了这种方式。
在做iPhone版iChm时,也需要提供文件上传的功能。我选择了第四个方案,即提供一个http service,通过浏览器上传。这个方案虽然不能象WebDAV那样在一些系统上直接mount到文件系统中,但对于几乎所有带浏览器的系统,它都不需要再安装额外的客户端,实现起来也比WebDAV简单很多。
在http server的选择上,可以porting现有的成熟产品,但是对于这样的应用,apache或者lighttpd等方案都过于庞杂了,实际上只是需要一个很简单的服务。最后找到cocoahttpserver,是由Deusty Designs开源的一个项目,支持异步socket,IPv4和IPv6,HTTP Authentication和TLS加密,小巧玲珑。除了只支持GET方法这一点以外,其他可以说该有的都有,该没有的都没有了。
我对cocoahttpserver做了扩展,首先实现了Multipart POST的支持。在增加文件传输功能的设计上,我将文件当作一个资源(resources),采用了REST的方式:
| 方法 | 功能 |
|---|---|
| GET | 文件列表,文件下载 |
| POST | 上传新文件 |
| DELETE | 文件删除 |
这样的设计,无论从接口的角度,还是从实现的角度,都比较清晰明了。
在iChm 1.0发布后做了些修正,iChm 1.0.1后相对稳定了。现在我将文件传输这部分代码open source出来:
Cocoa Web Resource Project
主要功能如下:
- 支持通过浏览器向iPhone/iPod Touch上传文件,支持文件下载和删除。
- 内存优化,支持大文件上传。
- 可定制的web界面。
- web界面支持IE, Safari, Firefox等主流浏览器。
- RESTful API。
希望可以对iPhone开发者有所帮助。
iChm 1.1 for iPhone beta test invitation
by Robin Lu on Nov.26, 2008, under Uncategorized
The invitation has been closed. Thank all the testers!
两个iChm同时发布
by Robin Lu on Nov.12, 2008, under Uncategorized
首先是iChm version 1.4 for Mac OS X,加入了几个呼声比较高的功能:
- 以pdf格式导出整个chm文档。
- 使用翻页键连续浏览文档。当到达页面底部时,会自动翻到下一页。在页首page up 会翻到上一页。
- 打开文件时自动跳转到上次浏览的页面。
- 自动记录上次查询某个文件时,是全文搜索还是在索引中搜索。
然后,就是iChm 1.0 for iPhone/iPod Touch ,经过苦苦等待,终于上了App Store。苹果花了三天审批我的软件,却花了四周审批contracts。11月4号就通过的软件不得不到今天才亮相。第一版功能包括:
- 使用浏览器上传和管理文件。
- 查看chm文档。
- 支持目录和索引。
- 支持在索引中搜索。
详细内容参看App Store中iChm的页面。定价$4.99。
cd to the latest iPhone Simulator app
by Robin Lu on Oct.14, 2008, under Uncategorized
To ‘cd’ to the latest app installed in iPhone Simulator directory is such annoying. Set you free by putting the following line into your shell profile and use ‘cdapp’ for the magic:
alias cdapp='prefix=~/Library/Application\ Support/iPhone\ Simulator/User/Applications/;auuid=`ls -t "$prefix"|head -n 1`;cd "$prefix$auuid"'
