innhyul

Between tomorrow's dream and yesterday's regret is todays opportunity.

  博客园 :: 首页 :: 联系 :: 订阅 订阅 :: 管理
  49 Posts :: 6 Stories :: 8 Comments :: 0 Trackbacks

公告

2010年12月2日 #

Three20 是一个非常有名的iPhone开发库,采用Objective-C语言。它是从Facebook iPhone app衍生而来的,所以很多Facebook app上使用的UI控件,像:TabBar,Launch view,Photo view等,都能从这个开发库中找到,且它使用的是Apache License(对商业友好),因此很多iPhone开发者都很喜欢使用它。

 

关于Three20 的介绍及使用,我打算以后再详细说明,今天要说的是最近一件关于App Store开始拒绝那些使用Three20 来开发的app,Apple的说法是:Three20 中引用了一些非public的API,违反了iPhone开发者许可。 此事详细说明可见Three20 邮件列表中的讨论:Heads up: Apple store rejection for apps using three20

 

那些非public的API如下:

firstResponder 
UITouch._locationInWindow 
UITouch._phase 
UITouch._previousLocationInWindow 
UITouch._tapCount 
UITouch._timestamp 
UITouch._touchFlags 
UITouch._view 
UITouch._window 

我想Three20 使用这些API主要是为了省事,比如firstResponder,而UITouch的这些属性也主要是在Debug的时候才用到。因此拿掉以上这些private API是比较安全的,关键就是如何找到这些API的位置。

 

因为我的app(购便宜 )也用到了Three20 ,所以在发布新版前,为了不被Apple拒掉,必需解决private API的问题,下面我就描述一下我是如何去除这些API的过程:

 

解决此问题的方法有两个:

 

方法一(适用SDK3.0以上的app)

有一个热心的开发者(uprise78 ),在爆出此问题后,根据邮件列表中的讨论以及自己的研究,在github上做了一个fork(three20-P31 ),移除了以上所有的private API,所以只需更新此fork即可。

 

方法二(适用SDK2.x,或自行修改过Three20 的app):

因为Three20 在今年7月份以后就不再兼容SDK2.x,但是我们的app还希望支持2.x的用户,所以我所用的版本就一直很低,没有向上升级。那为了解决此问题,就必须手动移除上面那些API。

 

在移除之前,我基本扫过了邮件列表中10月底到现在为止所有的文章,发现有两篇文章很重要:

1.发生问题后,作者本人做了一次修改,移除部分private API

2.作者本人并没有完全移除那些private API,uprise78 在作者的基础上又做了一次完整修改,

看起来经过这次修改后,基本解决了此问题。

也就是说只要参考作者及uprise78 的两次修改,就能完整移除所有的private API使用。于是我上github上寻找Three20 的修改历史,发现他们两的修改分别如下:

2009-10-28 作则修改:

c ommit  8183ae25528bbc575ab41a41227756f06c166240

t ree    2b2fd7b49fc71755d675eb0fd85c82098da563a5
p arent  e8ecb801ca70ba824846928b7ca75faf376aeedb

2009-10-31 uprise78 修改:

c ommit  2c03d2b98ddb287ba68ddb628c4a72588bbee79e

t ree    cc3cbfe0b23468d876166881f028a576f4ddcc7b

p arent  8183ae25528bbc575ab41a41227756f06c166240

 

c ommit  3a1f0a9bea92aed27f12a513e1e70c5412ba0f91

t ree    0da7dba956f71ca57a029dc3a7c88448e76f9942
p arent  2c03d2b98ddb287ba68ddb628c4a72588bbee79e

在github上比对以上修改后,就能完整移除private API了。

 

以上所谓移除private API,均是使用#ifdef DEBUG将之包裹,所以要注意以下两点:

1.程序中不能有#define DEBUG

2.在build时,不能在preprocessor marco设置DEBUG

 

目前方法一已经被证明是可行的,见邮件列表中的讨论:***P31 FORK FIXES REJECTIONS***

而我的app还处于送审review中,必须等审核通过后才能证明方法二有用!

 

希望上面的信息能帮助使用Three20的iPhone开发者!

 

from:http://eleda.javaeye.com/blog/542302

http://cenphoenix.javaeye.com/blog/565314

 

 

posted @ 2010-12-02 23:05 bufferi 阅读(106) 评论(0) 编辑

2010年11月13日 #

由于开发需要,准备做一个图片浏览器,用来显示已经下载存处在本地的图片.在网上搜索时发现了一个很好的库Three20, 320的简介参见这里.320分为Network,Style,Core,UI四部分,其中UI可以实现的部分效果可以参见下面这些图片,


下载Three20需要安装git,具体配置方法参见这篇教程.

320自带了一些sample,其中TTCatalog中有TTPhotoViewController的用法示例,不过所有示例中的图片都是远程网络地址,

[[[MockPhoto alloc]

      initWithURL:@"http://farm4.static.flickr.com/3099/3164979221_6c0e583f7d.jpg?v=0"

      smallURL:@"http://farm4.static.flickr.com/3099/3164979221_6c0e583f7d_t.jpg"

      size:CGSizeMake(320, 480)] autorelease]

在 这里直接将地址替换为本地绝对路径是不行的,需要加前缀"documents://",比如本地图片保存在 "/程序Document/自定义目录/文件名",则需要将路径修改为"documents://自定义目录/文件名",这样就可以正常显示了.需要注意 的是指定的size必须是大图的真实大小,否则会出现图片重叠,显示不完整等奇怪的错误.


如果仅想使用TTPhotoViewController,而又不想把Three20的整套机制搬过来,只要在需要调用图片浏览的地方加入如下代码:

PhotoTest1Controller *viewController = [[[PhotoTest1Controller alloc] initWithNibName:NSStringFromClass([PhotoTest1Controller class]) bundle:nil] autorelease];

[self.navigationController pushViewController:viewController animated:YES];

这种用法需要注意的是每次调用后,Navigation Bar style都会被修改为Black Translucent,如果需要还原的话,可以在viewWillAppear中进行修改.

来自ZhaoZhe's Blog

原文地址:http://zhao-zhe.appspot.com/?p=60001

posted @ 2010-11-13 18:28 bufferi 阅读(331) 评论(0) 编辑

2010年11月8日 #

准备工作

向 App Store 注册自己的程序之前,需要准备以下的东西。

  • 57×57像素的ICON
  • 512×512像素的ICON (JPEG或TIFF格式)
  • 屏幕截图

制作ICON

这里的两个图标分别是设备上表示这个应用程序的图标(57×57)和在iTunes的App Store上表示的图标(512×512)。比如下面这两个图标。

iPhone icon

需要注意的是,小的图标(57x57)可以是PNG格式的,而在App Store上用的大的图标(512x512)必须是JPEG或者TIFF的格式。其中小的图标在编译程序的时候作为程序资源已经包含到程序文件中了,而大的图标需要通过别的方式登录到App Store上。

设置程序中使用的ICON

首先来设置程序中使用的小图标。这里图标文件的名称为「Icon.png」。 打开程序的Xcode项目后,拖动该图标文件到左边的「Resources」目录。

iPhone icon

在弹出的对话框中,选择上面的「拷贝到目的组文件夹(必要的情况下)」,并确认下面的「添加到目标」被选上了。点击添加。

iPhone icon

图标添加到工程中后,需要设定其为应用程序的ICON。点击Resources文件夹下的「Info.plist」,在「Icon file」表中输入图标名称「Icon.png」。

iPhone icon

这样,就完成了程序中图标的设置,编译以后就可以显示出来啦。

抓屏

屏幕截图可以通过Xcode的organizer来抓取。设备连接下的情况,从organizer选择「Screenshot」标签。

iPhone Screenshot

点击右下角的「Capture」,就会自动截取连接中设备的屏幕。所以在应用程序启动的时候点击这个按钮就可以了。抓取后可以将图片拖动到适当的地方保存。格式选择JPEG。

iPhone Screenshot

给程序起名

给程序起个好名字是很重要的。改名字会被显示在主画面的程序图标下面。名字不要太长,否则会被省略掉。语言是英语还是汉语没有关系。

iPhone Screenshot

更改名字

缺省状态下程序的名称与项目的名称一致。需要更改的时候,编辑刚才设置图标时的Info.plist,其中的「Bundle displayname」就是应用程序的名称。

iPhone Screenshot

其他的设定

再来看看Info.plist中还能设置什么信息。

  • 根据程序的界面语言选择那种语言的App Store,使用「Localization native development region」。这里选择「Japan」。
  • 为了区分不同组织,作者开发的应用程序,使用「Bundle identifier」中的「com.yourcompany」,选取不同的KeyWord。尽量选择与自己独特的内容。
  • 「Bundle version」中设置程序的版本信息,比如最初发表的时候是「1.0」。

iPhone Screenshot

创建 distribution build

发布在App Store的程序与之前开发中在 iPhone 或者模拟器中测试的程序是不同的。需要用叫做 distribution build 的方式来编译。与之前的编译方式相同的是也需要创建Provisioning。

创建 Provisioning

上一回创建Provisioning的方式一样,由iPhone Dev Center跳到Program Portal页面,按下面的顺序来设置。

注册证明书

选择左边的「Certificates」,双击「Distribution」。

iPhone Screenshot

上一回注册设备的证明书一样的顺序,选择文件后注册。结束之后下载证明书。

创建 Provisioning Profile

上一回介绍的一样,选择左边的「Provisioning」后,双击「Distribution」。「Distribution Method」设置为「App Store」,然后输入上一回设置的内容,点击Submit,下载安装创建好的Provisioning Profile。

iPhone Screenshot

项目设定

为了创建 distribution build,需要向工程中添加新的编译目标。由 Xcode 的菜单点击「项目」→「项目设定」中的「构成」标签。

iPhone Screenshot

选择表中的「Release」,并点击在下的「複製」,生成「Release的拷贝」后,将其名称改为「Distribution」。结束后点击「编译」标签,选择「Distribution」。

iPhone Screenshot

最后,需要在「Any iPhone OS Device」项目上选择刚才安装的Provisioning Profile。

编译

返回 Xcode 的主窗口,Active的SDK选择「Device」,Active的构成选择「Distribution」。因为用distribution build编译的文件不能直接在设备上使用,所以我们不能选择「编译并执行」,而是只是点击Xcode的「编译」菜单下的「编译」按钮。

iPhone Screenshot

编译介绍以后,在项目目录下的「build」文件夹下会生成「Distribution-iphoneos」目录。后缀名为app的文件就是编译好的程序文件。在文件上点击右键,选择「压缩为"(项目名).app"」。

iPhone Screenshot

之后,就会在相同目录下生成后缀名为zip的压缩文件。

发布程序到 App Store

为了将应用程序发布到 App Store 上,需要使用 iTunes Connect。

连接 iTunes Connect

选择 Program Portal 中的「Distribution」→「App Store」标签。点击 App Store 项目中的「Learn More」,然后点击其中的「Go to iTunes Connect」连接。

iTunes Connect

发布程序

iTunes Connect

在下右边的「Manage Your Application」。在接下来的画面上点击「Add New Application」。

如果是第一次发布自己的程序,需要设置程序的语言和开发者的名称。开发者的名称是指用iTunes Connect连接App Store的时候,在右上角表示的名字,这个名字可以是公司的名称,卡发团队的名称,或者是你所开发程序的独一无二的品牌。这两个设置以后不能更改的,所以需要慎重。接下来的画面确认你的程序是否需要加密,一般选择「No」。在接下来的画面「Overview」中输入程序的其他信息,加粗的字体是必须的项目。

  • Application Name - 程序名称
  • Application Description - 程序说明
  • Device - 对应设备。选择对应的设备
  • Primary Category - 程序的分类
  • Copyright - 著作权,开发者的名字等信息
  • Version Number - 在App Store上表示的程序版本。一般与程序中设置的版本一致
  • SKU Number - 产品号码。如果你开发了多个程序,不要与其他程序重复
  • Support URL - 在App Store上表示的技术支持的地址链接
  • Support Email Address - 邮箱地址

在接下来的画面「Upload」中上传事先准备好的文件。

  • Application - 编译好的应用程序文件(压缩文件,后缀名为zip的那个)
  • Large 512x512 Icon - 512×512像素的图标文件
  • Primary Screenshot - 屏幕截图文件

选择好后,点击下一步。

在接下来的「Pricing」画面,设置程序的发布日期,以及发布的国家。

  • Availability Date - 应用程序的发布日期。如果不知道,缺省为上传的日期
  • Price Tier - 应用程序的价格。如果是免费的选择「Free」

这里,设定发布日期的时候需要留意一件事情。因为上传的程序实体不能立刻发布到 App Store 上,需要内部检测人员的评审,只有通过的才能真正地上传到 App Store 上。这个评审的时间大概是2个星期左右。而上传的信息等会根据你设定的发布日期来显示。所以,如果你设置发布日期为上传的日期,那么广告打出去了(App Store上的首页中显示),而实际的程序却不能下载。到了真正能下载的时候,你的广告已经落的老后了,减少了被点击的几率。所以一般设置发布的日期都比上传的日期晚上2/3周为宜。

接下来,在「Localization」页面中可以设置一些缺省语言意外的程序说明。

所有都设置完毕后,最后在「Review」页面中确认,如果没问题就上传吧。之后,会返回到「Manage Your Application」页面,你可以确认程序是否被添加到列表中。如果Status是「In Review」代表你的程序正在被审查,审查结束后等待发卖的时候状态会变为「Ready for Sale」,到了前面设定的发布日期,会自动地发布出去。

如果 Status 是「Pending Contract」表示申请 iPhone Developer Program 中的帐号手续时存在问题,如果该状态一直持续着,你可以联系ADC,询问具体原因。

posted @ 2010-11-08 09:31 bufferi 阅读(324) 评论(0) 编辑

2010年8月7日 #

如果你的机器上出现了这个问题,请你将你安装的 Ubuntu 10.04 虚拟机删除(Delete form Disk),
然后按以下的步骤重新安装 Ubtuntu 10.04。

在VMware Workstation中

1.点击File菜单,选择New子菜单,点击Virtual Machine子菜单.
2.在对话框中选择Typical(recommanded), 点击Next按钮.
3.在对话框中选择I will install the operating system later, 点击Next按钮.
4.在对话框中选择Guest operating system为Linux, 选择Version为Ubuntu, 点击Next按钮.
5.分别输入你虚拟机名称及虚拟机文件的存放目录.
6.选择虚拟机所用的硬盘的最大容量后,点击Next按钮.
7.点击Finish按钮.
8.在sidebar(左侧的侧边栏)中右击你新建的虚拟机,点击settings菜单
9.在对话框中选择Hardware选项卡,点击CD/DVD(IDE),在右侧选择Use ISO image file,
  点击Browse将Ubuntu 10.04的镜像文件找到后,点击OK按钮.
10.在sidebar中右击你新建的虚拟机,点击Power on菜单.
11.系统将启动Ubuntu10.04的安装过程。
  这其中有7个步骤
  a.选择本地化版本和安装类型,可选 中文(简体),安装Ubtuntu 10.04 TLS
  b.选择时区
  c.选择键盘布局,这里有一个让你测试键盘的输入框,
  你可测试一下键盘的输入,如果键盘输入正常,
  完成安装后键盘即可正常使用了。
  d.准备磁盘空间,可不做改动。
  e.输入用户名密码,计算机名,登录方式等。
  f.点击安装
  g.系统安装Ubtuntu 10.04
12.安装完成后,可以在虚拟机的settings中将安装所用的Ubtuntu 10.04的ISO镜像文件卸载。
posted @ 2010-08-07 13:31 bufferi 阅读(195) 评论(0) 编辑

2010年5月27日 #

LivePipe

LivePipe UI 基于 Prototype Javascript 框架,包含了一整套经严格测试并高度可扩展的 UI 控件,拥有很好的文档,在不支持 JavaScript 的环境中,可以无缝降级使用。包括 Tab, 窗体,文本框,多选框,评分控件,进度条,滚动条,右键菜单等多种控件。

LivePipe 首页与下载
LivePipe 演示与示例

 

UKI

UKI 是一套简单的 JavaScript UI 工具集,用于快速创建桌面风格的 Web 应用。包含的控件从滑动条,到分栏视图,不一而足。熟悉 jQuery 的开发者会发现这个工具很容易上手,非常简洁,无需安装框架,不依赖 CSS 引用。

UKI 主页与下载
UKI 控件,演示,示例

 

MochaUI

MochaUI 是 MooTools Javascript 框架 与 ExplorerCanvas 的一个备受欢迎的扩展,可以用来快速创建 Web 应用,Web 桌面,网站,饰件,独立 Windows,Modal 对话框等等。

MochaUI 主页与下载
MochaUI 控件,演示,示例

中文编译来源:锐商企业CMS 网站内容管理系统 官方网站

Sigma Ajax UI Builder

SigmaVisual 是一套基于 Web 的,所见即所得的 AJAX UI 创建工具,包含超过40个不见,如 Tab,对话框,树形图,时间线等,基于 JavaScript 和 PHP。

Sigma Ajax UI Builder 主页和下载
Sigma Ajax UI Builder 控件,演示和示例

 

JxLib based MooTools

JxLib 是一个基于 MooTools 的 JavaScript UI 框架,包含多数 Web 程序都需要的基本空间,如按钮,Tab,菜单,树形结构,对话框等等。JxLib 还支持换肤功能。

JxLib 主页与下载
JxLib 控件,演示与示例

 

Dijit – The Dojo Toolkit

Dijit 基于 Dojo,也是学习 Dojo 扩展的一个好起点。可以用来创建非常漂亮的 Web 2.0 GUI。支持多语种,甚至支持不同语种的文字书写方向以及本地化数字,日期等等。

Dijit 主页,下载
Dijit 控件,演示,示例

 

jQuery TOOLS

jQuery Tools 是一个非常轻量(2.5kb)的常用 UI 库,支持以下 jQuery 对象,Tabs, 工具提示,滚动条,层,表单以及 Flash 嵌套。

jQuery TOOLS 主页与下载
jQuery TOOLS 控件,演示,示例

 

jQuery UI

jQuery UI 基于 jQuery,包含 3 个大类,饰件,一些内置的 UI 对象;效果,对各种网页对象施加动画效果(如爆炸效果);鼠标交互,如拖放操作。

jQuery UI 首页与下载
jQuery UI 控件,演示与示例

 

Prototype UI

Prototype UI 基于 Prototype 与 Script.aculo.us,包括多个模块(旋转木马,Modal 窗口,阴影,右键菜单等),每个模块可以单独安装使用。

Prototype UI 主页与下载
Prototype UI 控件,演示与示例

 

Jitsu

Jitsu 功能包括 XML 标记,页面编译,动画引擎,Ajax 以及运行时检测等等,它的 Ajax 功能使消费级 Web 应用的创建变得非常简单,支持客户端数据绑定,还可以将页面编译成 JavaScript,Jitsu 在 Firefox 和 IE 中运行最佳。

Jitsu 主页与下载
Jitsu 控件,演示与示例

 

Qutensil

Qutensil 仍在开发中,但其路线图已经显示出某些引人注目的东西,基于 Prototype 与 Scriptaculous ,包含消息,调色板,滑动条,工具提示,可拖放窗口以及警告,确认,提示等窗口。

Qutensil 主页,下载
Qutensil 控件,演示,示例

 

Script.aculo.us

script.aculo.us 是一个备受欢迎的 UI 工具集,基于 Prototype 框架,提供了诸如视觉效果,UI 控件以及面向 DOM 的工具。

Script.aculo.us 首页与下载

Alloy UI

AlloyUI 是一套功能丰富的 UI 框架,基于 YUI 3,部分基于 YUI 2,包含一套丰富的(超过60)UI 部件,如图片库,对话框,树形结构,面板,自动完成,按钮,日历控件,工具条等。

Alloy UI 首页和下载
Alloy UI 控件,演示与示例

 

iUI: iPhone UI 框架

IUI 包含一套 JavaScript 库,CSS 式样表及图片,是一个轻量级 iPhone UI 库,包含 iPhone 风格导航菜单,设备方向,iPhone 风格切换等功能,可以为你的 Web 程序带来 iPhone 般的体验。

iUI 主页与下载

XUI

XUI 是一个用于移动 Web 应用的轻量,极简,高度模块化的框架。它之所以非常轻量的原因是,它只支持移动浏览器,所有跨浏览器支持的代码都被剥离。它面向一线移动 Web 浏览器,如 Webkit,Fennec 以及 Opera,并有意将来对移动 IE 和黑莓提供支持。

XUI 首页,下载

Yahoo! YUI Library

Yahoo! YUI Library 可谓所有 Web UI 之父,可靠,功能丰富,目前已经发展到第 3 版。它拥有一个很庞大的开发团队,推出了非常丰富的功能,就功能而言,无可匹敌。

YUI Library 主页与下载
YUI2 入门
YUI3 入门
YUI3 控件,演示与示例

本文国际来源:Specky Boy 15 Javascript Web UI Libraries, Frameworks and Toolkits

中文编译来源:锐商企业CMS 网站内容管理系统 官方网站

posted @ 2010-05-27 20:04 bufferi 阅读(30) 评论(0) 编辑

2010年5月25日 #

摘要: 以前写过这样一篇文章(ASP.NET文件下载函数(好用的东东)),发现很多朋友询问,并且有时候会发生错误,今天我再重新更新一下,利用IHttpHandler来实现多扩展名文件下载,思路是这样:1. 首先新建一个用于进行下载处理的page页,如download.aspx,里面什么东西也没有。2. 添加一个DownloadHandler类,它继承于IHttpHandler接口,可以用来自定义HTTP ...阅读全文
posted @ 2010-05-25 00:28 bufferi 阅读(37) 评论(0) 编辑

2010年5月13日 #

摘要: // 除去所有在html元素中标记using System.Text.RegularExpressions; public static string striphtml(string strhtml) { string stroutput = strhtml; Regex regex = new Regex(@"<[^>]+>|</[^>]+>"); stro...阅读全文
posted @ 2010-05-13 22:18 bufferi 阅读(38) 评论(0) 编辑

摘要: 摘自:http://hi.baidu.com/ldy201001/blog/item/22e15edef479ae5295ee37c9.html在上传文件时经常要判断文件夹是否存在,如果存在就上传文件,否则新建文件夹再上传文件判断语句为if (System.IO.Directory.Exists(Server.MapPath("file")) == false)//如果不存在就创建file文件夹 ...阅读全文
posted @ 2010-05-13 22:07 bufferi 阅读(399) 评论(0) 编辑

2010年5月12日 #

摘要: 当文本框的模式设定为多行时,maxlength属性就无效了,这时可以使用RegularExpressionValidator控件,代码如下:代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><asp:TextBoxID="txtIntrodu...阅读全文
posted @ 2010-05-12 00:02 bufferi 阅读(216) 评论(0) 编辑

2010年5月10日 #

摘要: TextBoxWatermarkExtender扩展器与RequiredFieldValidator控件相冲突的解决方案作者 朱先忠问题描述在使用AJAX CONTROL TOOLKIT扩展器TextBoxWatermarkExtender扩展器时,我们常常需要联合使用ASP.NET校验器控件RequiredFieldValidator。但这样以来,当用户没有在文本框中输入文字时,TextBoxW...阅读全文
posted @ 2010-05-10 22:30 bufferi 阅读(140) 评论(0) 编辑