2024年5月8日发(作者:)

iPhone开发日记:申请开发者认证IDP

iPhone 2010-05-06 12:33:02 阅读174 评论0 字号:大中小 订阅

URL:/archives/

要使用Apple 的SDK开发iPhone/iPod Touch软件或者游戏,需要首先注册一个开发者账号。如果需要在App Store上出售,

则需要进行开发者认证。

SDK免费,开发者认证个人版$99/Year,企业版$299/Year.

第一步:注册 Apple ID。

如果已经有Apple ID,可以略过。

第二步:申请注册iPhone开发人员。

注册地址:/iphone/

注册完成后,将会获得Enrollment ID和Person ID。通过直接输入信用卡号可以支付费用,但是如果使用的大陆银行发行的信

用卡,则无法线上支付。只能通过传真方式。

在/iphone/登陆之后,有PDF的订购表格下载。下载填完之后打印,传真到 +1 (408) 862-7602。按

照Apple邮件中的提示说24小时内会扣款并激活账号。

表格的样式可以参考:

在等待一段时间(官方说24小时内)之后,就可以收到激活邮件。将收到的激活码填到开发人员中心或者直接点击激活链接激

活即可。

到这一步就可以往App Store上传免费的应用了。

第三步:签署合同、填写银行账户信息以及税单。

只有进行完这一步才可以上传收费的App Store。

在开发人员中心,Itunes Connect,从下图中的“Contacts, Tax, & Banking Information”填写相关信息。

Contact Info中进去,在Company中新加一人,填写对应信息。

Bank Info中新建一个银行地址,账户选China Yuan Renminbi,类型为Saving,Swift code需要咨询银行得知。

Tax Info中按照实际情况填写。国内的话7、8、10空白,9选A,iii都不选,iv选认证。最下方签名和日期。

填写好之后提交,系统会生成一个PDF文件,打印。用拼音姓名签名,填写日期。扫描为PDF文件后发送给 ,一般第二天收

到确认回信。

然后就可以上传付费App了。

IDP申请直到软件上架销售流程[转]

iPhone 2010-05-06 12:20:55 阅读97 评论0 字号:大中小 订阅

第一:IDP的申请

1.先在iPhone DevCenter上注册成为iphone developer

2.加入 iPhone开发程序项目iPhone Developer Program Apply Now

3.打算收费的都建议选择99刀那个,QTY是个数的意思。1就好。

4.选择地区,发现没有china,不要紧,列表最右下方有一个 contact us , 进入新页面,填写“ i wanna join IDP ,but i cant find

my country in the purchase page”。(我当时就这么写的,也不知道英文对不对)

5.大概一到两天之后你会收到一封chinadev【a】 发来的邮件,附件是一个ip的文件

引用 [pre]感谢您与我们 Apple Developer Connection 联络,并询问有关 iPhone Developer Program 事宜。

为了您可以完成注册及购买 iPhone Developer Program 程序,请仔细填写附件中的表格—— iDP BILLING: Credit Card

Processing 表格,并通过以下号码传真至我们的 Billing 团队 :

+1 (408) 862-7602 并注明: iDP Billing[/pre]

6.填写IDP billing 表单的时候,注意,除开签名要手写(可以中文),其他的一定要全英文,不行就拼音。必须非常注意的是,

billing address是你信用卡的账单地址,一定要和当时申请信用卡时的地址一致。

7,填好后发传真到指定号码,发完后给chinadev 【a】回一封信,告诉他们你已经传真过了。

引用您好:[/pre] 我已将表格填好并传真至+1 (408) 862-7602,还请劳烦贵公司工作人员帮忙与Billing 团队确认是否收到

了我的传真。不胜感激[/pre]

8. 接下来会收到他们的回信,回信内容就是让你等待,耐心等吧。据国内多方信息确认,如果信息全部正确,大约两周左右,

你会收到信用卡扣款的信息。(当时扣了我两次,一次1刀,一次99刀),然后收到devprograms【a】邮件title

为iPhone DeveloperProgram Activation Code?,点击其中的激活码即可激活你的IDP账号。这一部分仔细看HOWTO 吧,很

详细。将你之前等待时开发的那个小程序用自己的认证放到真机上。

ps:等待的过程中,建议你先开发一个简单的小程序,IDP下来之后有用。

第二:立即填写itunesconnect的信息

info是你的收款账号,国内的大银行都支持,

account type最好选择saving(储蓄账户),

swift code去你的银行要一张电汇信息卡片。

branch id是那个支行的名称,通常写在银行那张电汇信息卡片的bank address 一栏。(我的

中国银行账户即是如此,自己把分行名称提出来就好了)。还有一个local clearing code,这个

是本地清算码,可以打电话问银行。你就问他们银行的清算码是多少就行了。不要说英文,她们

搞不明白。

在填写银行信息的时候要用的CNAPS CODE码,于

是找来找去,多谢论坛里的朋友提醒。

发出来给需要的。

Bank Country : China

CNAPS Code : 3

Bank Name : CHINA MERCHANTS BANK CO

LIMITED

Bank Address : China Merchants Bank Tower

No 7088 Shennan Blvd, Shenzhen,

Guangdong, 518040, China

ct info , 填写w8ben表单,第六项填写9个0,其他的照实填写就好。填完了保存之后,会收到标题为YouriTunes

W-8BEN TaxForms?的邮件,将其中的附件(就是你刚才填写的那个表单的PDF)下载打印出来,手写签名。然后扫描该文件,

发邮件至 itmslabeltaxforms【a】.一天之后会收到回信。

引用Hello,

Your W-8BEN form has been received, and is completed correctly. You do not need to mail us the original.

If you have any further questions, please don’t hesitate to contact us.

第三:尽快上传应用

1.发布到app store必须使用distribution证书,该证书无法直接发布到你的实机(我当时就被HOW TO骗了)

2. build完之后,登陆itunesconnect上传你的应用,至于uploader怎么使用,我还没明白,先用web方式上传吧。

sku number 随便填吧,都可以.

support url 没有条件给你的app建主页的,可以写自己的BLOG地址.

3.之前的小应用现在能用上了。选择收费吧,这样貌似他们能处理contract effect快点儿。提交完毕之后,进入inreview状态。

不出问题的话大概一周左右收到邮件通知your application status changed to Ready forsale.

4.一天之后再去看,全部的状态都好了,目前已在除开US地区都可以找到我上传的应用了。

==================================================

1 把你公司营业执照复印一份

2 把这个营业执照复印件随便找个角落写上你们公司的电话和当时给你的Enrollment ID号码

3 要注意,营业执照的地址和你申请的时候填写的地址要一致(中英文翻译无所谓),如果不一致,随传真附带一个简

单的证明,说明这个执照的地址和你办公地址的确是一家公司,盖上公章。(这个是为了省麻烦,否则他也会找你要)

4 当时填写的电话号码必须要能接到电话,苹果会派人给你打电话(一般就是香港办公室)

5 把写了enrollment id的营业执照复印件传真到+1 (408) 974-1053 (我当时申请的时候给的是一个澳大利亚的传真号)

6 打电话告诉+852 3002 1310,拨2,报上你邮件里的Follow-up号码,说你营业执照发到美国那边了,麻烦他们帮忙

处理下。(这步不是必须,电话里是会说普通话的香港 mm)

7 如果可以了,他们会通过邮件给你一个purchase form的pdf让你下载。

8 填好,信用卡号填个人的,能境外支付的卡即可,传真到他们要求的号码,等3天。传真之后也可以打电话或者发邮

件到,他也会告诉你等3天。

9 信用卡扣款如果成功,基本就差不多了。

不用信用卡搞定iTunes Store(AppStore) 注册账号

默认分类 2010-05-11 11:12:03 阅读747 评论0 字号:大中小 订阅

不用信用卡搞定iTunes Store(AppStore) 注册账号 转: /

看到很多新手下载苹果的东西(如iBook)都很为难,原因是注册账号需要信用卡信息,好吧,现将注册方法简单整理如下,信

息来自网络:

一、简要攻略

1. 首先用iTunes 上美国的iTunes Store

2. 随便选择一个免费的东东下载

3. 此时会弹出注册页面

4. 按照注册页面进行注册,在信用卡选择一项选择None即可(必须按上述方式进入注册页面,否则没有none选项)。

如果您没看明白,那么看下面的完整攻略,手把手的喔——

二、完整的步骤如下

首先在官网下载最新版本的iTunes:/itunes/download/

1. 打开iTunes,点击左侧的iTunes Store选项按钮

2. 选择美国 (United States)

3.这时会转到美国 iTunes,在右上角的搜索里输入 QQ(随便找一个免费的App软件),然后搜索

4. 点击 free 或 “Get App”

5. 在跳出来的登陆栏里,点击创建新账户

6. 点 Continue 继续

7. 在方框里打钩,再点 Continue 继续

8. 填写你的邮箱地址,密码等信息,注意填写正确的邮箱地址,注册完会发一封激活邮件到你的邮箱

9. 这里是注册的关键步骤

Credit Card-选择 none,

Code- 不用填写任何信息

Salutation-选择你的称呼, Mr 或者 Mrs

First name-你的名,注意填写拼音

Last name-你的姓,填写拼音

Address-可以Google里搜索一个美国地址(注册其他国家的时候,就搜索一个该国家的地址),比如:第一排填写888 West,

第二排填写16th Street,City填写 New York, State 选择 NY-New York

Zip Code-邮编地址,纽约的可以填写10006

Phone-电话,同样可以 Google 搜索一下,纽约212-xxxxxxx,x可以填写任意数字,7位数。

10.点Done完成注册,然后去邮箱里查看激活邮件,激活后就可以登陆 iTunes 下载免费的软件和游戏了。

(注意:此方法同样适用于其他国家的 iTunes 注册 )

怎样将应用程序发布到Apple store上去 (一) [原创 2009-10-10 11:33:13]

字号:大 中 小

网上已经有一些文档介绍 IPhone程序开发了,但是很少有文档介绍应用程

序发布流程的。从今天开始,我就开始为大家介绍怎样将开发完成的应用程序打

包发布到苹果的在线商店上去。

程序的开发过程,我在这篇文章中就不细说了,但是,我想简单提一下应用

程序上线前的发布测试。因为,程序的作者要保证所提交的程序是健壮、稳定的,

如果把程序的测试寄希望于 Apple Store的工作人员,那么将会大大浪费我们

的时间,一般而言,一个程序提交到 Apple Store后,大约有一个星期的时间

才能从 Apple那里得到明确的结论: 允许或者拒绝上线,当然,拒绝的话会给

出比较具体的解释,如果靠 Apple的反馈来修正自己的程序,那么这个周期就

太长了,毕竟我们申请的证书有效期是一年而已。我们希望在这一年里,能够充

分的利用这个证书,通过一个证书提交尽量多的程序。

好了,现在我们说说发布测试的事情。我想,多数程序员开发时是在模拟器

上进行调试的,但是模拟器毕竟是运行在 PC上的一个应用程序,即便它能模拟

真机的多数行为,但对于特定的操作(如加速计的使用,多点触摸等),内存的

模拟等情况,它还是无法和真机相比!所谓的发布测试,就是在提交之前,一定

要让自己开发的程序真正的运行在真机中进行测试,这样会发现很多你之前可能

没有注意到的潜在问题,比如:内存泄露、图片格式问题(有些图片格式在模拟

器上显示好好的,但是放在了真机上就是无法显示)等等。

那么怎样做发布测试呢?答案就在 iPhone Dev Center里面,用你自己的

Apple ID登录,然后进入到 iPhone Developer Program Portal页面后,按照

如下步骤完成相关的操作(本文假设你对开发过程已经熟悉了)

1 进入页面上的 Certificates页,一般我们在开发时,只是申请

Development开发者证书就够了,但是如果我们想要把应用程序放到真机上运行

的话,就必须在 Distribution发布页上,在此页上申请创建一个证书,用于发

布,具体过程本文不做具体描述了,可以参考该页上的帮助,写的还是很清晰的。

2 在 App IDs再申请一个 ID用于发布,这一步是可选的,如果你在开发阶

段就已经考虑到了发布的事情,那么当初申请的那个用户开发的 ID也是可以用

于发布的。此处建议,申请一个最后字段为“ *”的 ID,这样可以用同样的 ID,

提交一套应用程序,而无需为每个应用都申请单独的 ID。 例如:

type.*, 这样当你写应用程序时,第一个应用程序的 ID

就可以是 1,而第二个应用的 ID就可以是

2,依次类推。

3 进入 Provisioning页面,在 Distribution标签页下面,我们同样需要

为发布而创建新的 Profile,这个 profile在编译应用程序时是需要指定的。

具体的步骤可以参考该页的帮助,只提示一点,每个 profile对应于一个 App ID,

也就是说,刚才创建的 App ID在此处应该生成一个相对应的 Profile。

4 最后就是发布 Distribution了,在这一页中,有 Prepare app, App

Store和 Ad hoc三个主要的标签页。 上述所讲的内容,其实也都包含在了

Prepare App页中的内容了,只是我把发布测试中比较关键的几步提取了出来而

已,这里还是建议开发人员耐心的读完该页上的介绍,这样会对加深对编译创建

程序的理解。而 Ad Hoc页介绍的是分布式发布的情况,比如应用程序做好了,

不想放到 App Store上,或者需要多个设备进行测试,那么就需要用到 Ad Hoc

这种发布方式了,具体过程请参考该页的帮助。本文主要介绍 App Store页上

的内容,也就是主要介绍怎样把应用程序发布到苹果的在线商店中,毕竟如果向

通过自己的劳动挣钱的话,还是要上架销售啊:)。

好了,本文的第一部分就到这里了,从第二篇开始,将具体介绍发布的具体

步骤。

怎样将应用程序发不到Apple store上去 (二) [原创 2009-10-13 13:02:38]

字号:大 中 小

从这篇开始,具体介绍发布的具体步骤。

首先在这里需要明确声明一下,本文所涉及的具体内容,都是基于苹果的官方文档

《 iTC_Dev_Guide_》,有英文好的,或者觉得我说的不够明白的地方,请自行参阅该英文文档。

现在言归正传,将应用提交到 App Store需要通过 iTunes Connect这个基于 Web的工具。 用户可以通

过自己的 Apple ID登录到 iPhone Developer Program后,通过页面右侧的连接可以进入到 iTunes

Connect界面。在这里,用户可以管理自己的银行帐号,应用的版本维护等等。下面我们会具体地加以介

绍。

在进入 iTunes Connect之前,要做好以下几点准备工作:

1 首先需要保证我们的应用程序已经为发布准备好了编译成功到 app文件。

这可以通过 XCode提供的 Build Result来检查,如下图 1所示:

图 1 Build Result

在这个窗口中,用户必须找到“ provision”和“ CodeSign”到字样,并且要确保这两

行中没有错误,尤其需要注意,这两行中所显示地目标路径是否正确,一般情况下,为编译发布的 app会

放在一个 „/Distribution-iphone/目录下。开发人员一定要注意这一点,这和 WM、 Smbian等不同,不

是用的 release目录下的文件!

此处,我还想提醒一句的就是,在编译最终 app的时候,要保证把程序的 icon图标也编译进去了,而且

此图标必须是 57*57的 png图片,其他格式的图片是不被接受的,即便编译成功了,也会在真机显示时出

问题!

2 收集应用程序相关的信息

这部分内容之所以需要提前准备,是因为在通过 iTunes Connect提交应用时,要求必须填写的信息,主

要包括以下的几方面内容:

应用程序的描述

适用的设备种类( iPhone或者 iPod touch)

应用的类别,比如游戏、旅游、教育等等

版本

版权

支持 URL

支持 Email

等等。

关于如何填写这些内容,我们会在下面的章节结合 iTunes Connect具体介绍。

3 准备一个大图标

这个图标要求 512*512的 JPG或者 TIFF格式的图片, png格式是不被接受的。它主要是用于在 App Store

里面显示你的应用程序。当然,图片的内容要和那个小图标一样,但要注意,不要简单的把小图标简单的

放大,那样的话,显示效果会很差,从而会影响到应用的销量:)。

此外,我们在看 iPhone上已经安装的那些应用时,会发现桌面的图标样子是经过渲染的(比如:图标变

成了圆角、上方有高亮显示),请注意,这个渲染的效果 iPhone手机完成的,在做图片时无需考虑这部

分内容。

4 准备一些应用的截图

这其实是很关键的内容,多数情况下,当消费者在 iTunes上搜索到某个应用时,他最感兴趣的就是这些

截图了,从截图中,他可以初步了解该程序的主要功能,从而会对其是否会购买这个商品起到很大的影响!

基于上述的原因,我们应该尽量设计漂亮、吸引人的程序界面,并且在提交前,一定要把程序最吸引人的

截图提交上去,以期获得较高的下载量。

对于截图的要求,也很简单,根据程序的风格,用户可以提供水平及垂直两种格式的图片。

对于垂直的图片,要求其大小为:

最小 320*460, 最大 320*480

这是因为在全屏幕显示的时候,高 20的状态条会被隐藏。

而对于水平的图片,其大小要求为:

最小 480*300, 最大 480*320

同样也是因为状态条的因素,有 20个高度的差异。

另外,对于图片的格式也是要求为 jpg或者 TIFF格式, png格式是不行的!

提示:在手机上截屏的方法是:

按住 Home键的同时,按下 Power键,就会将当前显示存放在 iPhone的照片库中,用户可以通过 Mac的

iPhoto工具,将手机上的截图导入到 PC上。

好了,此篇到这里,我们基本上就把需要提前准备的东西都已经准备完成了。后面的文件会开始介绍 iTunes

Connect的使用。

本文也发布在本人的CSDN博客,转载请标明出处:

/JackF/archive/2009/10/13/

怎样将应用程序发布到Apple store上去 (三) [原创 2009-10-26 15:53:13]

字号:大 中 小

上篇介绍了使用iTunes Connect上传之前所需要做的准备,这篇就开始具体介绍如何使用

iTunes Connect这个工具。

使用Apple ID登录iTunes后,会进入到其Home页面,其中包含了以下几个主要功能项:

下面我们来一项一项的介绍其具体的功能。

销售趋势报告(Sales/Trend Reports)

在这个栏目下,用户可以查看自己的应用程序每天、每周的销售报告。 当然用户可以将结

果下载,但其格式是text的。

由于此栏目中的数据具有实时性,因此不能作为财务报表使用。另外,只有团队管理员或财

务人员才能查看这项内容。

对普通开发者而言,这一项内容此时不必关心,毕竟我们的程序还没有提交呢,哪里有销售

数据呢。 而且,即便是我们的程序成功的提交了,如果没有人下载,那也是没有什么数据

可供查看的:)

合同、税费及银行信息(Contracts, Tax, & Banking Information)

这项很明确了,如果开发人员想收钱的话,那就得认认真真到填写这部分内容了,嘿嘿。

正确提交了相关信息后,该页面应该是如下显示的。

填写过程中,会需要用户提供银行相关的信息代码,这部分内容一定要认真填写,不能有错

哦,否则怎么收钱呢,呵呵。

银行的信息包含如下内容:

银行地址为开户行的地址,Branch ID为分行的名称,这都可以在银行的网站上找到。Account

Holder’s Name 这一项是用户的拼音名称,需要和开户时填的一样啊!银行帐号一般就选

Savings/FUTSU储蓄类型的就可以,这个根据自己的实际情况而定。

最后两个比较特殊,Bank Swift Code和Local Clearing Code这两个应该银行间识别用的,也

就是说Apple需要知道这两个才能向你的帐户里转账!

这可以通过银行的热线获得,或者从网上搜索。

对于交通银行,Bank Swift Code可以从如下的网址上查的:

/BankCommSite/cn/node/?id=00&type=CMS.

STD&column=00&miniset_column=00

而Local Clearing Code建议电话询问,或者自己在网上找吧。

财务报告 (Financial Reports)

在这一个功能下面,用户可以看到每月的财务报告,其中包含了本月下载的次数,日期等等。

注意: 只有管理员或者财务人员才能查看此页,并且只有当帐户中漫150美元后,苹果才

会付款!

用户管理(Manage Users)

用户管理涉及到两种用户,iTunes Connect帐户,和App Purchase Test帐户,前者很好理解

了,就是登录iTunes Connect时用的帐号;后者则是一种测试用户,这种用户可以测试程序

的程序内购买功能。也就是说,如果开发的程序具备In App Purchase功能,那么就需要这种

特殊的帐号加以测试。

那么这个In App Purchase功能什么时候使用呢?其实也很容易理解,比如开发者为了吸引消

费者下载,那么可能首先提供了一个功能有限的免费版本,当消费者下载了这个免费版本后,

试用完觉得很有意思,那么就可以在不退出程序的情况下,支持用户实时的购买付费版本,

这样方便了用户的同时,尽量的提高收费版本的下载量。一般情况下,对于相对简单的应用

程序,可以不用这个功能,开发者可以先提供一个免费的版本(功能有限),然后再提供一

个功能完整的收费版本,分别提交到Apple Store,可以在免费的版本中,适当的位置加上提

示信息,比如提示用户如果希望得到完整的功能体验,那么请下载另外的版本等,这种方式

同样能够达到相同的目的。至于选用哪种,就由开发者自己选择吧。个人建议,如果想快速

的发布,那么就简单一些,先不需要考虑这个In App Purchase功能,先把免费的版本放上去,

再放一个完整的收费版本,随后,再陆续推出相应的In App Purchase版本,这样程序自身也

有一个升级演进的过程,同时也给老用户一种不断的新鲜感。

至于之前提到的iTunes Coonect帐号类型,因为很明确,此处就不多少了。只简单的提一下,

这种用户分为几种类型:Admin, Legal, Finance, Technical。不同种类的用户有不同的

权限,这也是很好理解的。Legal这个用户用的很少,开发者不必太深究,一般而言,个人

开发者不用配置其他的角色,自己作为Admin用户就可以完成全部的操作了:)。

请求用于推销的代码(Request Promotional Codes)

当应用程序成功的提交后,开发者可以向Apple请求一个用于推销的代码。开发者可以为每

个发布的应用程序申请最多50个代码,这个代码可以用于免费下载该应用程序,以做产品

的先期推广之用。

管理自己的In App Purchases(Manage Your In App Purchase)

一般开发者先期可以不考虑此功能,此篇文章对此不做细致的介绍,有兴趣的朋友,请自行

参考《iTC_Dev_Guide_5.0》.

管理自己的应用程序(Manage Your Applications)

此节是开发者最最关心的内容,具体将要介绍怎样发布自己的应用,我将在下一篇中结合

实例给出详细的介绍!

怎样将应用程序发布到Apple store上去 (四) [原创 2009-10-26 18:28:41]

字号:大 中 小

上篇介绍了iTunes Connect中的帐号管理,财务报表,银行信息维护等几方面的功能,这篇

将重点介绍iTunes Connect的核心功能,应用程序的管理,其中涉及到新应用程序的发布、

版本的升级等。

在iTunes Connect中,应用程序的管理位于Manage Your Applications这个连接下面。用户点

击进入后,会有如下图所示的内容:(本人现在已经提交了两个用户程序i@Beijing和

i@Shanghai, 其中第二个i@Beijing是一个版本升级申请。)

开发者想要提交新的应用程序,点击左上方的Add New Application按钮。如果是第一次提交

应用程序,那么就会弹出缺省配置的设置页面,如下图所示:

重要提醒:此页的配置将会应用到此iTunes Connect帐号下的所有应用程序,其中包括两个

主要配置项:主语言和公司名称。切记:一旦这两项配置提交后,以后就不能修改了!

图中的A是主语言配置项:即用户稍后输入程序详细数据所会使用的主要语言。

图中的B是公司的名称:对于个人开发者,建议尽量起一个有趣的,容易记的名称吧,不要

懒省事的就用自己的帐号名,除非你的帐号名也很有特色:)

因为这个公司名称将会在App Store中,显示在一个非常醒目的位置,如下图所示:(图中为

iTunes搜到本人的上架程序i@Beijing的信息页,左上角的黑体显示:iSmart即为本人的公

司名称,是个很醒目的位置)

此页的两项配置完成后,选择 Continue继续下面的配置,即出口产品承诺的页相关的配置。

这是由于美国法律对加密算法等的要求,如果你的应用程序没有涉及到加密啥的,可以选择

No,就可以跳过了。(一般开发者而言,做点儿小工具、小游戏啥的,应该不会设计到加密,

因此可以直接skip跳过,继续下面的内容)。

如果的确有涉及到加密,那么请选择Yes,而后回答两到三个更加关于用的的加密算法具体

的问题,而后根据需要还要提供相关的文档,当Apple认为都OK了,那么才能继续下面的

配置,这就比较麻烦了,所以如果是个人开发者,没有特殊的要求的话,就别搞啥子加密了,

那样会自找麻烦哦。

概要数据

我们继续,下面就是提交程序时的核心数据了,即概要数据配置页面,如下图所示:

其中的必填项包括:程序名(Application Name),程序描述(Application Description), 对

设备的要求(Device Requirements),主要分类(Primary),版权(Copyright),版本信息(Version

Number),唯一标示(SKU Number),关键字(Keywords),技术支持网址(Support URL),

技术支持Email(Support Email Address)。

这是此页中必须填写的内容,有如下需要注意的地方:

1 程序名: 这一项中所填的内容,必须和你的程序安装在iPhone或者iPod中后显示的程

序名是一致的,否则是无法通过Apple的审查。

2 程序描述:虽然我们之前选择了主语言,一般为English,但是此处,我们同样可以用两

种或多种语言输入对自己程序的描述。对于此项具体的内容,那就需要开发者自己去想了,

开动大脑,尽力忽悠吧,呵呵。这是消费者了解这个应用的很重要的描述,同时对其做出购

买决定的影响也是很大的,所以尽量言简意赅、引人入胜吧。

注意:此处不要给出一些关键字的列表!为了提高搜索的可见性,开发者输入尽量多的关键

字是无可厚非的,但这里绝不是输入关键字的理想的场所,毕竟这个简单描述是用来给消费

者看的,本页的下面专门提供了供用户输入关键字的地方!

3 对设备的要求:这就要根据你的应用程序的类型来做出选择了,比如如果你的应用程序跟

电话功能结合的很紧密,那么就请不要选择iPod,否则用户下载了,却不能用,那就不好了。

还有,请切记要给出明确的说明,此应用所支持的iPhone的版本信息,目前iPhone已经到

3.x了。Apple要求,新提交的应用必须支持3.0,否则审查是通不过的了。

4 主要分类: 这个很简单,根据所开发的程序类型选择合适的分类,比如:电子书(Book)、

小工具(Utilities)、音乐(Music),旅游(Travel),游戏(Games)等等。

此页还提供了子分类的选择,这可以更加准确的描述程序类型,比如游戏的子类包括:纸牌

(Card),运动(Sports)等等。

5 版权信息: 这就是刚才起到那个公司名称的官方名称了:)

6 版本信息: 这无需多说了,一般都从1.0开始。

7 唯一标示: 这个字符串可以是任意格式的,但是建议试用Apple ID中的定义,试用URL

格式的标示串,如:。

8 关键字:开发者可以输入尽量多、准确的关键字以便提高程序被搜索的概率!但最多不能

超过100个字符。所以要选择合适的,站在消费者的角度,注意消费者很可能不是技术人员!

所以这里的关键字一定不要太技术了!

9 技术支持URL和Email: 这两项内容是必须提供的,Email相信都回有的,但是URL,如

果没有的话,最简单的办法就是到某个有名的博客站上申请一个帐号,然后把博客的地址写

进去就好了!比如:/jackf

好,到了这里,关于程序的概要数据就算填写完成了! 下面开始要收集一些其他的数据。

对程序的评级

Apple提供了好几个评级的标准,开发者需要根据所开发程序的实际情况进行相应的选择,

比如是否包含成人内容等,而后该页会根据用户的选择给出相应的程序评级,这个大家根据

实际情况填写就好了,没有什么好坏之分:),开发者自己体会吧,我就不说那么直白了,呵

呵。

上传数据

完成了上面的数据收集后,Apple就要求用户上传相应的程序文件以及截屏图了。关于这部

分内容的准备工作,我已经在前面的文章中介绍过了,此处用户只需要根据提示,上传相应

的文件即可,包括:

程序文件:是个zip包,该包中只包含编译成功的app文件。

512的图标:这是个jpg格式的大图标,用于在Apple Store中的显示。

程序截图:主截图以及最多4个其他截图。

再次强调一下,截图是重中之重!尽量给用户展示出最好的界面!

定价

想要收钱吗?想的话,就给自己的程序定个价,不想的话也很好啊,那就选择Free,供人免

费下载,呵呵。估计大多数人还是想着挣些小钱吧:),那就选一个合适的价位吧,注意:

Apple提供的这个App Store可不是免费的啊,所以它要从你的收入中提成的!Apple采用7:3

分成,即开发者得到总收入的7成,Apple得到剩余的3成。不爽吗?那没办法啊,Apple

就是这样强势!

地域选择

这个地方,可以选择另外一个输入用户应用程序数据的语言,如果你的应用程序支持多语言,

那么强烈建议此处增加相应语言的描述,否则,English这个主语言就够了:)

检查页面

当所有的上述页面都完成后,我们可以在这个最后的页面再次检查一下我们所填入的内容是

否完整、正确,毕竟这可是商品的包装啊!只有好的包装才能吸引消费者的眼前,从而才会

产生潜在的收入哦:)。

点击提交后,我们推出编辑界面,回到了此篇第一副图所示的界面,程序处于In Review的

状态!

一般而言,Apple会在一到二内通过Email通知你审查的结果,如果通过了,那么此处就变

为了Ready for Sale状态,那么你就可以在iTunes中搜索到自己的应用程序了。如果没有通

过,此处会是Rejected状态,Apple会通过邮件给出原因,开发者需要根据邮件中的描述做

出修改后,再次提交申请。

本文到了这里,就基本上把发布的流程介绍完了。希望对iPhone开发者,尤其是希望通过

自己的努力劳动获得些许报酬的开发者们有所帮助!

对于此文没有说明白的地方,读者可以到我的blog

/jackf

或者

留言,我会尽量给出解答!

这个话题到这里吧,就到这里了。。。。。。

在Windows中安装iPhone开发环境

字号:大 中 小

文章来源: /?tid=4925&extra=page%3D1

很多朋友希望在体验或学习iphone开发,但是iphone开发环境一般需要安装在mac计算机下mac os中。

这给许多朋友带来了额外成本投入。

网上已经有各种破解方法,在非苹果电脑上安装iphone开发环境,给我们带来了佳音。但是各种版本比较

杂乱,可能会费时费力而无果。

最近,苹果推出了新的开发环境版本。我将新版开发环境在Windows XP下VMWare虚拟机中安装开发环境

过程贴出来,让大家分享。

本文在Windows Xp + VMware Workstation 7.0 + MAC OS X Snow Leopard 10.6 环境下安装iPhone SDK 3.1.2成

功!

--------------------------------------

在PC机上安装MAC OS X系统有两种方法:

方法一:在硬盘上分区,专门安装MAC OS X;

方法二:在现有Windows系统中,使用VMWare等虚拟机软件安装Mac OS。

注意:一般都需要将苹果系统的DMG光盘镜像文件刻录到D9光盘上,这个步骤比较麻烦。

本文介绍一下在Windows XP中使用VMWare虚拟机,安装MAC OS X时,无需刻录D9光盘,无需转换成

ISO格式,

直接使用MAC OS X和iPhone SDK的DMG镜像文件进行安装的方法。

--------------------------------------

安装条件:

硬件:一台拥有支持虚拟技术的64位双核处理器和2GB以上内存的PC。

本人采用笔记本:DELL D630 4G内存

注意:运行MAC OS,需要电脑支持虚拟技术(VT),安装时,需要将VT启动,在BIOS中开启。

软件:

Windows XP:

VMware :VMware-workstation-7.0.0-203739 EXE安装文件

Mac OS:Mac_OS_10.6_Snow_Leopard_10.6 DMG光盘镜像文件

iPhone SDK:iphone_sdk_3.1.2_with_xcode_3.2.1 DMG光盘镜像文件

或Rebel 引导光盘ISO镜像文件

--------------------------------------

1.下载安装包

1.1.下载VMWare 7.0:

这里是VMware-workstation-7.0.0-203739标准版.exe的链接,可以用迅雷下载:

/sof ... 9cced0&ext=.exe

1.2.下载Mac OS:

这就是苹果的操作系统。本文下载的是LeoSnow即Mac OS 10.6。

这个链接可以用迅雷下载:

ftp:// ... _Retail_

1.3.下载iphone SDK:

“iphone_sdk_3.1.2_with_xcode_3.2.1__snow_leopard__”,

这个链接可以用迅雷下载:

/iphone_sdk_3.1. ... eopard__

1.4.下载iphone SDK:

或Rebel 用于引导光盘ISO镜像文件。

--------------------------------------

本部分内容设定了隐藏,需要回复后才能看到

6.启动XCODE开始开发

启动Xcode开发环境:

打开Finder,在磁盘上的“Developer”目录中“Applications”目录中,有Xcode程序,

双击Xcode图标,即启动Xcode:

点击“Create a new Xcode project”图标,则打开工程模板窗口:

选择iPhone OS项目模板中的“View-based Application”图标,并点击“Choose”按钮:

提示输入新项目名字和新项目保存的目录,

按提示输入后,点击“Save”按钮,则出现新窗口,显示向导生成的项目及该项目目录和文件:

点击图标“Build and Run”,则开始编译;

编译完成,则自动启动iphone模拟器。

iphone mac xcode 苹果 goodmao

iPhone开发指南-内存管理 [转贴 2010-03-09 14:30:16]

在内存管理的Objective-C代码里,一个Cocoa对象存在于一个生命周期,有明确的阶段。它被创建,初始

化,并使用(也就是,其它对象发送消息给它)。它还可能会被保留,拷贝,或压缩,并最终被释放和销毁。

下面的讨论以图表形式对一个典型对象的生命周期进行了描述,这里还没有涉及更多的细节。

让我们从后面开始,当垃圾收集被关掉时对象销毁的方式。在此背景下Cocoa和Objective-C 选择一个自动

的,策略驱动的过程来保持对象的存在并在不再被需要的时候销毁它们。这个过程和策略依赖于引用计数

的概念。每个Cocoa对象携带一个整数用来指示对其存在感兴趣的其它对象的数目。这个整数被称为对象

的保留数(retain count)(“retain”用来避免和术语“reference”重叠)。 当你创建一个对象时,或者通过一个

类工厂方法或者使用alloc 或allocWithZone: 类方法, Cocoa 做了一些很重要的事情:

· 它设置对象的isa 指针- NSObject 类的唯一公共成员变量-以指向这个对象的类,这样把这个对象集

成到运行时视图类层次。(参见对象创建“Object Creation”获取更多信息)

· 它设置对象的保留数(retain count)- 一种由运行时管理的隐藏的成员变量- 为1。(这里假设一个

对象的创建者对其存在感兴趣)

在对象分配后,你一般会设置它的成员变量为一个合理的初始值。 (NSObject 声明init 方法作为这个目的

的原形)。 这个对象现在已经可以使用了;你可以发送消息给它,把它传递给其他对象,等等。

注意: 因为一个初始化器可以返回一个不是显式声明的那个对象,惯例是嵌套alloc 消息表达式在init 消息

里(或者其他初始化器)- 比如:

id anObj = [[MyClass alloc] init];

当你释放一个对象- 也就是,发送一个release 消息给它 - NSObject 减少其保留数。如果这个保留数从1

变成0,这个对象会被释放。释放分成两个步骤。首先,对象的dealloc 方法被调用来释放成员变量并动态

释放分配的内存。然后操作系统销毁对象自身并回收该对象曾经占用的内存。

重要: 你永远不该直接调用一个对象的dealloc 方法。

要是你不想一个对象马上消失?如果你在从别处接收到一个对象时给它发送了一个retain 消息,这个对

象的保留数(retain count)被增加为2。现在在释放之前需要两个release 消息。图2-4 图示了这个相

对简化的场景。

Figure 2-4 一个对象的生命周期- 简化视图

当然,在这个场景中,一个对象的创建者不需要保留这个对象。它早就拥有了这个对象。但是如果这个创

建者在一个消息中传递这个对象给另外的对象,情况就发生了变化。在一个Objective-C 程序中,一个接

收一些其他对象的对象总是假设在其获得的范围内有效。这个接收对象可以发送消息给被接受的对象以及

传递给其他对象。这个假设需要发送对象运转并且不会过早的释放这个对象,当一个客户对象有一个指向

它的引用时。

如果客户对象想在接收到的对象程序访问范围之外保留它,可以retain 它- 也就是,发送一个retain 消

息给它。保留一个对象增加其保留计数,并由此表达该对象的一个所有权。这个客户对象假设稍后释放该

对象的一个职责。如果一个对象的创建者释放它,但是一个客户对象保留了这个相同的对象,这个对象保

持存在直到这个客户释放了它。图2-5 说明了这个顺序:

Figure 2-5 保留一个接收到的对象

和保留一个对象相反,你可以通过给它发送一个copy 或copyWithZone:消息来拷贝它。(很多子类,如果

不是大多数,封装了一些采用或符合这个协议的数据)。拷贝一个对象不仅复制它而且常常总是重置它的

保留计数为1(参见图2-6)。拷贝可以是浅拷贝也可以是深拷贝,这依赖于这个对象的本质以及它的预期

用途。一个深拷贝复制出一个可以承担成员变量相同作用的对象,而浅拷贝仅仅增加这些成员变量的引用。

谈到使用,区别一个copy 和retain 的是前者声称这个对象的单独使用权;新的拥有者可以改变这个拷贝

对象而无须关心它的原始对象。一般而言你拷贝一个对象而不是保留它,当它是一个数值对象- 也就是,

一个对象封装了一些基本数据(如整数)。特别是这个对象本身是可变的,比如一个NSMutableString,

对于非可变对象,copy 和retain 可以等同并且也许可以用类似方法来实现。

Figure 2-6 拷贝一个接收到的对象

你也许注意到了这个机制关于管理对象生命周期的一个潜在的问题。创建了一个对象并传递给另外的对象

的这个创建者对象并不总是知道什么时候可以安全的释放掉这个被创建出来的对象。有可能在堆栈中有这

个对象的多个引用,有一些是创建者对象所不知道的。如果这个创建者对象释放掉这个被创建的对象然后

其他对象给这个已销毁对象发送消息的话,程序将崩溃。为了消除这个问题,Cocoa 引入了一个延迟释放

的机制叫做autoreleasing。

Autoreleasing 使用自释放池(autorelease pools) (以NSAutoreleasePool 类定义)。一个自释放池

是一个明确定义了范围的对象集合,这个范围标记着最终什么时候释放。自释放池可以被嵌套。当你发送

一个 autorelease 消息, 一个该对象的引用被放进最近的自释放池中。它仍然是一个有效的对象,所以

其他在自释放池定义范围内的对象可以给它发送消息。当程序执行到范围末尾时,这个池被释放,而且,

相应的,池中的所有对象也将被释放(参见图2-7)。如果你在开发一个应用程序你可能不需要建立一个

自释放池,因为应用程序工具箱(Application Kit)会自动建立一个范围为应用程序事件周期的自释放池.

Figure 2-7 一个自释放池

iPhone OS 提示: 因为在iPhone OS 中,应用程序在一个更加内存受限的环境中运行,所以不鼓励在应用

程序创建很多对象的方法或代码段中使用自释放池(比如,循环)。相反,你应该在任何可能的时候显式

的释放对象。

到目前为止关于对象生命周期的讨论集中在贯穿周期的对象管理机制上。但是一个对象拥有者策略指导如

何使用这些机制。这个策略可以总结如下:

· 如果你通过分配并初始化来创建( create )一个对象(比如 [[MyClass alloc] init]),

你将拥有这个对象并负责释放它。这个规则同样适用于使用NSObject 简便方法(convenient method)new。

· 如果你拷贝(copy)一个对象,你将拥有这个拷贝的对象并负责释放它。

· 如果你保留( retain )一个对象,你拥有该对象部分的所有权并且当你不需要的时候释放它。

相反的,

· 如果你从其他一些对象接收一个对象,你不拥有这个对象并且不应该释放它。(这个规则有一

些少数的例外,已在参考文档中显式的标注)

和任何规则集一样,有一些例外和已知问题(“gotchas”):

· 如果你通过类工厂方法创建了一个对象(比如NSMutableArray arrayWithCapacity: 方法),

假设你接收的这个对象是自动释放的。你不应该自己释放这个对象而且如果你想保持其存在的话应该

retain它。

· 为了避免循环引用,一个子对象永远不该retain它的父对象。(一个父对象是这个子对象的

创建者或者一个以成员变量包含该这个子对象的对象。)

注意: 上面指南中的“Release”意味着发送一个release 消息或者一个autorelease 消息给一个对象。

如果你不遵循这个所有权策略,在你的应用程序中很可能会发生两件糟糕的事情。因为你没有释放创建,

拷贝,或者保留的对象,你的应用程序将存在内存泄漏。或者当你给一个已从其他地方释放的对象发送消

息时导致你的程序崩溃。这里还有一个警告:调试这些问题费时费力。

一个另外的可能发生在一个对象生命周期里的基本事件是归档(archiving)。归档把组成一个面向对象的

程序的互相关联的对象网络-对象图-转换成一个持久格式(通常是一个文件),保存了标识和每个图中对

象的关系。当程序被解归档时,它的对象图从归档中重新构建。为了参与归档(和解归档),一个对象必

须能够编码(和解码)。它的成员变量使用NSCoder 类方法。 NSObject 采用NSCoding 协议来完成这个

目的。更多关于对象归档的内容,请参见对象归档(“Object Archives”)。

IPhone开发初步认识 [转贴 2010-03-09 14:20:34]

想开发IPhone程序,首先得弄个MacOSX系统,版本要求10.5.3以上。虽然网络上也有一些Linux下甚至

XP下搭建开发环境的文章,但是那些只限于开发工具链,没有开发工具,对于新手来说,不使用开发工具

直接写代码来开发IPhone程序,那是根本没可能成功的事。不管是买台Mac也好,在PC上装个Mac也好,

用虚拟机也好,准备好操作系统。

然后是上Apple的开发者中心注册个用户名,下载IPhone 2.2.1的SDK,很大,1.75G。下载完成后安装很

容易。然后就可以进/Develop目录下启动xcode程序了。File菜单下面新建项目,提供了几个模板,选个

View Based项目,下一步,改个名字,就生成了一套新项目的框架,直接点顶上的Build and Go就可以编译

完成并自动启动IPhone模拟器然后自动启动这个程序。

IPhone程序的结构还是比较容易理解的,Object C的语法虽然是比较奇怪,(从来没有在别的语言里面见过

这种用法),但是只要稍微理解一下跟别的语言的语法上的不同,要上手其实是很容易的。对于Object C方

面,要了解的无非就是头文件里面的类定义,属性定义,方法定义,实现文件里的属性声明,方法声明。

类的实例化以及内存释放,类方法和属性的调用方式,就足够了。

IPhone的程序架构方面是完完全全的MVC架构,视图和逻辑完全分开。在窗口编辑器(Interface Builder)

里面设计的窗口跟代码没有任何关系,要想使用窗体上的控件需要在Controller层定义相关变量和动作方法,

然后把变量和方法通过拖拉的方法跟控件关联起来,然后程序就会知道这两者之间的关系了。同一个方法

可以方便的关联到任何按钮上,同一个变量也可以指向任何一个类型相符的控件。你所要了解的,就是在

Controller中应该使用哪几个方法来显示和保存数据。

Apple提供的IPhone可用的控件种类不多,但是每个都很强大,大部分控件都可以互相嵌入,因为大家都

是从同一个基类UIView继承下来的,所以,视图里可以嵌入视图,表格里也可以嵌入其它视图,比如表格

的每一行里都可以放入标签或者图片,或者另一个表格。充分利用这种特点,就可以用很少的控件类型写

出非常丰富的界面。

IPhone程序处理数据直接使用sqlite3数据库,读写也都还算方便,当然要是能够提供一个官方的ORM类

那就更好了,目前还是得自己去实现一个。不过sqlite本身没有加密功能,所以你的程序如果是以数据为

核心竞争力的,还得自己想想办法加密数据库里的数据,没有办法像其它数据库那样直接定义一个复杂的

数据库读写密码来解决问题。IPhone的数据库读取性能很强,在数据库里读取5000多条数据生成一个

TableView,只需要六七秒的样子就可以显示出这个表格,并且上下滑动表格也很平滑,并不存在什么内存

问题。

编译出来的软件只能在模拟器里运行,放到IPhone上是不能运行的,因为没有授权。需要花99美元去买

个Apple的授权,才能让程序运行在IPhone上,当然,这一步有办法跳过去,用MacOS自带的签名工具自

己做一个签名,就可以让程序跑在IPhone上,但是这样的程序还是没有办法放到AppStore里面去卖钱的,

想赚钱,这个投资是必须的。Apple真是个稳赚不赔的生意人啊。

调查发现iPhone令人上瘾 被视为身体一部分

美国斯坦福大学研究人员针对iPhone(手机上网)使用者的调查发现,苹果公司旗下这款智能手机可致瘾。

令人上瘾

调查对象是200名使用iPhone手机的学生,其中70%拥有iPhone不满一年时间。

研究人员发现,iPhone迅速成为调查对象生活中不可或缺之物,多人坦承,如果没有iPhone就会感到

迷失。

调查结果显示,约85%的调查对象把手机当作手表,89%当作闹钟。75%的调查对象睡觉时把iPhone

放在床头;69%的人说,早晨出门时,更容易落下钱包而非iPhone手机。

研究人员要求调查对象评估自己对iPhone手机的依赖度,用1至5打分,1分代表毫不上瘾,5分则表示

彻底上瘾。结果,一成学生承认彻底上瘾,34%给自己打4分,只有6%认为自己对iPhone毫不上瘾。在那

些得分为1至4分的调查对象中,34%表示有一天自己可能成为iPhone“瘾君子”。

此外,15%的调查对象说,iPhone令他们对媒体上瘾;三成人认为,iPhone是“通往世界之门”;四分

之一觉得iPhone具有“危险诱惑”;41%说,如果弄丢iPhone将是“一个悲剧”。

身体延伸

负责监督这项调查的斯坦福大学人类学教授塔尼娅·吕尔曼告诉《圣何塞信使新闻》记者:“我们在调

查中所发现最引人注目的一件事情是,人们如何看待自己的iPhone手机。它不仅仅是一个物件,由于存储

许多个人信息,它已经成为使用者大脑的延伸和社会生活的手段之一

iPhone 开发过程中的一些小技术的总结 [转贴 2010-03-15 14:28:26]

1 随机数的使用

头文件的引用

#import

#import

srandom()的使用

srandom((unsigned)(mach_absolute_time() & 0xFFFFFFFF));

直接使用 random() 来调用随机数

2 在UIImageView 中旋转图像

float rotateAngle = M_PI;

CGAffineTransform transform =CGAffineTransformMakeRotation(rotateAngle);

orm = transform;

以上代码旋转imageView, 角度为rotateAngle, 方向可以自己测试哦!

3 在Quartz中如何设置旋转点

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage

imageNamed:@""]];

Point = CGPointMake(0.5, 1.0);

这个是把旋转点设置为底部中间。记住是在ork中才得到支持。

4 创建.plist文件并存储

NSString *errorDesc; //用来存放错误信息

NSMutableDictionary *rootObj = [NSMutableDictionary dictionaryWithCapacity:4];

//NSDictionary, NSData等文件可以直接转化为plist文件

NSDictionary *innerDict;

NSString *name;

Player *player;

NSInteger saveIndex;

for(int i = 0; i < [playerArray count]; i++) {

player = nil;

player = [playerArray objectAtIndex:i];

if(player == nil)

break;

name = Name;// This "Player1" denotes the player name could also be

the computer name

innerDict = [self getAllNodeInfoToDictionary:player];

[rootObj setObject:innerDict forKey:name]; // This "Player1" denotes the person

who start this game

}

player = nil;

NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:(id)rootObj

format:NSPropertyListXMLFormat_v1_0 errorDescription:&errorDesc];

红色部分可以忽略,只是给rootObj添加一点内容。这个plistData为创建好的plist文件,用

其writeToFile方法就可以写成文件。下面是代码:

/*得到移动设备上的文件存放位置*/

NSString *documentsPath = [self getDocumentsDirectory];

NSString *savePath = [documentsPath stringByAppendingPathComponent:@""];

/*存文件*/

if (plistData) {

[plistData writeToFile:savePath atomically:YES];

}

else {

NSLog(errorDesc);

[errorDesc release];

}

- (NSString *)getDocumentsDirectory {

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,

NSUserDomainMask, YES);

return [paths objectAtIndex:0];

}

4 读取plist文件并转化为NSDictionary

NSString *documentsPath = [self getDocumentsDirectory];

NSString *fullPath = [documentsPath stringByAppendingPathComponent:@""];

NSMutableDictionary* plistDict = [[NSMutableDictionary alloc]

initWithContentsOfFile:fullPath];

5 读取一般性文档文件

NSString *tmp;

NSArray *lines; /*将文件转化为一行一行的*/

lines = [[NSString stringWithContentsOfFile:@""]

componentsSeparatedByString:@"n"];

NSEnumerator *nse = [lines objectEnumerator];

// 读取<>里的内容

while(tmp = [nse nextObject]) {

NSString *stringBetweenBrackets = nil;

NSScanner *scanner = [NSScanner scannerWithString:tmp];

[scanner scanUpToString:@"<" intoString:nil];

[scanner scanString:@"<" intoString:nil];

[scanner scanUpToString:@">" intoString:&stringBetweenBrackets];

NSLog([stringBetweenBrackets description]);

}

对于读写文件,还有补充,暂时到此。随机数和文件读写在游戏开发中经常用到。所以把部分内容放在这,

以便和大家分享,也当记录,便于查找。

6 隐藏NavigationBar

[tionController setNavigationBarHidden:YES animated:YES];

在想隐藏的ViewController中使用就可以了。

比较官方iPhone SDK和开源工具链 [转贴 2010-03-15 14:39:20]

当Jobs宣称“iPhone SDK提供的是和苹果内部开发人员使用的相同的工具”时,他显然忘了在iPhone SDK

发布之前几个月,就有人开始使用开源的Open Tool Chain工具进行iPhone软件的开发了。

官方发布的iPhone SDK显然并非他们内部开发人员使用的工具,因为官方发布的SDK附加了相当多的限制:开发者必须付99

美金获取代码签名、程序无法在后台运行(著名的经常被人骂的One App at a Time)以及无法使用很多低级的API等等。虽然

苹果宣称这种做法是为了提高安全性以及让开发者开发过程更简便快捷,但是无疑这也同样是被开发者诟病的问题所在。

本文比较了官方iPhone SDK和开源工具链的区别以及与iPhone相关的一些数据分析,以便国内开发者更好地进行iPhone软

件的开发。

如果你想为国内的用户开发一些基于iPhone的有用的应用软件,本文帮你分析了官方iPhone SDK和开源的工具链的区别,还

帮你简单地分析了一下iPhone的市场及预测,以做为你进行iPhone开发前选择项目以及选择开发环境的参考,推荐阅读。

比较官方iPhone SDK和开源工具链

时间: 2009-06-11 19:35 点击: 7440 次

当Jobs宣称iPhone SDK提供的是和苹果内部开发人员使用的相同的工具时,他显然忘了在iPhone SDK发布之前几个月,就有人

开始使用开源的Open Tool Chain工具进行iPhone软件的开发了。 官方发布的

2 关于iPhone的市场数据:

大概2007年年底之前,破解的iPhone数量大概是100万部,其中30万部在中国。(中国的iPhone几乎100%是破解的,即

可以运行工具链开发的软件)

目前iPhone在美国销售出大约700万部,全球大约销售出1400万部。如果按这个数字估计,全球大概有350万部iPhone被

破解,而其中的大约100万部iPhone在中国。(此数据为估计的数据)

有人预测如果09年iPhone进入中国,则09年全球iPhone销售数量将达到4500万部。而在中国iPhone 09年将销售3700

万台。(07年中国手机销售量大概为1.5亿部)

3 关于iPhone的用户数据:

大约一半iPhone用户是30岁以下,大约15%是学生。

75%以上用户会在iPhone上听歌。

其他一些关于iPhone用户数据可以很容易地搜索到,这里不写了,读者如果有兴趣可以自己做点功课。

4 其他未确认的消息:

iTunes AppStore在未来可能无法在破解的iPhone用户或者解锁的用户中使用。

如果你想推荐给更多人阅读这篇文章,请将本页的地址复制给你的朋友,不要仅仅复制粘贴文章内容。这篇文章在2008年4

月22日凌晨首发于。

以上这些信息参考了很多不同的来源,有些数据可能不是很准确,仅仅在此做为Cocoachina的读者的参考。那么如果你想为国

内的iPhone用户开发一些有价值的应用软件,希望以上信息会对你有足够的用处。

Update:一些App Store的截图:

App Store:很像Installer /photogallery/iphoneappstore/1000883917 gizmo

/photogallery/iphoneappstore/1000883909 iTunes中的App Store:很像Music Store giz

/photogallery/iphoneappstore/1000883901

iPhone入门开发推荐阅读的一点资料

时间: 2009-06-11 19:36 点击: 1239 次

无论您希望使用官方SDK或是Toolchain进行iPhone开发,都需要阅读一些相关的知识以便入门,这里介绍一些推荐您阅读的资

料。 首先推荐的是 Lucas Newman 的三宝,他最近已经被苹果招安了:

无论您希望使用官方SDK或是Toolchain进行iPhone开发,都需要阅读一些相关的知识以便入门,这里介

绍一些推荐您阅读的资料。

首先推荐的是Lucas Newman的三宝,他最近已经被苹果招安了:

18页PDF教学:简明扼要地说清楚了在iPhone上怎么开发。

XCode模板:目前不推荐使用这个了。推荐阅读:在Leopard中编译搭建非官方iPhone toolchain开发环境

并整合到XCode

三个例子:分别是 翻硬币、三轴重力感应例子以及如何使用网络。

然后就是苹果官方的开发网站:/iphone/

带有超多的文档和例子,包括:入门指南、入门文档、iPhone开发相关文档以及一批官方SDK的例子。

Erica Sadun的网站有关于iPhone toolchain框架的类名及方法名列表。

iPhone破解领路人Jonathan Zdziarski的网站,可以看些新消息:/

国外的iPhone开发论坛:iPhoneDevDocs应该属于比较热的iPhone开发论坛之一。

另外,关于中文方面的文档:

dr_watson的《学习怎样在iPhone/iPod Touch上开发自制游戏全记录》几乎是目前能找到的最好的中文iP

hone开发教学。

但是很遗憾的,中文方面的开发相关网站除了CocoaChina、Weiphone以及台灣iPhone俱樂部之外,再很

少见到关于iPhone开发方面的资料,其他一些号称关于iPhone开发的论坛或网站也仅仅是复制一些资料,

既无人气也无原创内容,这无疑是比较令人难受的事情。

如果您最近有兴趣开发一些关于iPhone的软件,推荐您阅读上面的资料,如果您最近写了一些关于iPhone

开发的文章,也欢迎您发表到CocoaChina分享给大家。

Objective-C语法快速参考

时间: 2009-06-11 19:23 点击: 17320 次

大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到Interface Builder之后,第一感想是跃跃欲试,

而看到Objective-C的语法,第一感想就变成就望而却步了。好吧,

大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到Interface Builder之后,第一感想是跃跃欲试,

而看到Objective-C的语法,第一感想就变成就望而却步了。好吧,我是在说我自己。

如果你和我一样,对苹果相关的开发:Mac OS X或是iPhone有兴趣,但是第一时间看到Objective-C就会头疼并伴有发烧症状

的话,疗效比较好的快速治疗方法是阅读本文。大概花二十分钟左右,而且绝不无聊的时间,你就会对Objective-C有那么一点

点了解,至少读读例子不会那么头疼了。

不过假定你要有那么一点点c++、c#或是java的基础,至少能看到c++、c#或是java的源码,能够大致明白说得是什么。

这篇文章不是一篇科技文章,希望你也不要把它当做科技文章来读。文章非常不严谨,但是我相信你能看得懂。

一、XCode、Objective-C、Cocoa说的是几样东西?

答案:三样东西。

XCode:你可以把它看成是一个开发环境,就好像Visual Studio或者Netbeans或者SharpDevelop一样的玩意。你可以将Interfa

ce Builder认为是Visual Studio中用来画界面的那部分功能单独提出来的程序。

Objective-C:这是一种语言,就好像c++是一种语言,Java是一种语言,c#是一种语言,莺歌历史也是一种语言一样。

Cocoa:是一大堆函数库,就好像MFC、.NET、Swing这类玩意,人家已经写好了一堆现成的东西,你只要知道怎么用就可以

了。

有些人会比较容易混淆Objective-C和Cocoa,就好像有些人会混淆c#和.NET一样。这两个东西真的是两个不一样的东西。

二、Objective-C是什么?

你可以把它认为是语法稍稍有点不一样的c语言。虽然第一眼望上去你可能会认为它是火星语,和你所认知的任何一种语言都

不一样。

先简单列出一点差别:

问题一:我在程序中看到大量的减号、中括号和NS****这种东西,他们是什么玩意儿?

1 减号(或者加号)

减号表示一个函数、或者方法、或者消息的开始,怎么说都行。

比如c#中,一个方法的写法可能是:

private void hello(bool ishello)

{

//OOXX

}

用Objective-C写出来就是

-(void) hello:(BOOL)ishello

{

//OOXX

}

挺好懂的吧?

不过在Objective-C里面没有public和private的概念,你可以认为全是public。

而用加号的意思就是其他函数可以直接调用这个类中的这个函数,而不用创建这个类的实例。

2 中括号

中括号可以认为是如何调用你刚才写的这个方法,通常在Objective-C里说“消息”。

比如C#里你可以这么写:

(true);

在Objective-C里,就要写成:

[self hello:YES];

3 NS****

老乔当年被人挤兑出苹果,自立门户的时候做了个公司叫做NextStep,里面这一整套开发包很是让一些科学家们喜欢,而现在

Mac OS用的就是NextStep这一套函数库。

这些开发NextStep的人们比较自恋地把函数库里面所有的类都用NextStep的缩写打头命名,也就是NS****了。比较常见的比

如:

NSLog

NSString

NSInteger

NSURL

NSImage

你会经常看到一些教学里面会用到:

NSLog (@"%d",myInt);

这句话主要是在console里面跟踪使用,你会在console里面看到myInt的值(在XCode里面运行的时候打开dbg窗口即可看

到)。而我们在其他开发环境里面可能会比较习惯使用MessageBox这种方式进行调试。

你还可以看到其他名字打头的一些类,比如CF、CA、CG、UI等等,比如

CFStringTokenizer 这是个分词的东东

CALayer 这表示Core Animation的层

CGPoint 这表示一个点

UIImage 这表示iPhone里面的图片

CF说的是Core Foundation,CA说的是Core Animation,CG说的是Core Graphics,UI说的是iPhone的User Interface……

还有很多别的,等你自己去发掘了。

问题二、#import、@interface这类玩意说的是什么?

1、#import

你可以把它认为是#include,一样的。但是最好用#import,记住这个就行了。

2、@interface等等

比如你在c#中写一个抓孩子类的定义:

public class Kids : System

{

}

当然,上面的写法不一定对,就是个用于看语法的举例。

private string kidName=”mykid”;

private string kidAge=“15”;

private bool isCaughtKid()

{

}

return true;

在Objective-C里就得这么写:

先写一个kids.h文件定义这个类:

@interface Kids: NSObject {

}

-(BOOL) isCaughtKid:;

@end

再写一个kids.m文件实现:

#import “kids.h”

@implementation Kids

-(void) init {

}

-(BOOL) isCaughtKid:{

}

@end

这个写法也不一定对,主要是看看语法就行了。-_-b

return YES;

kidName=@”mykid”;

kidAge=@”15”;

NSString *kidName;

NSString *kidAge;

问题三、一个方法如何传递多个参数?

一个方法可以包含多个参数,不过后面的参数都要写名字。

多个参数的写法

(方法的数据类型) 函数名: (参数1数据类型) 参数1的数值的名字 参数2的名字: (参数2数据类型

) 参数2值的名字 „. ;

举个例子,一个方法的定义:

-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *)

myThirdOldestKidName;

实现这个函数的时候:

-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *)

myThirdOldestKidName{

}

调用的时候:

而如果你用c#写这个方法,大致的写法可能是

public void setKids( string myOldestKidName, string mySecondOldestKidName, string myThirdOldestKidName)

{

}

调用的时候大概的写法可能是:

Kids myKids = new Kids();

s (“张大力”, “张二力”, “张小力”);

明白了吧?其实不怎么难看懂。

基本上,如果你能了解下面这段代码的转换关系,你Objective-C的语法也就懂了八成了:

[[[MyClass alloc] init:[foo bar]] autorelease];

转换成C#或者Java的语法也就是:

Kids *myKids = [[Kids alloc] init];

[myKids setKids: @”张大力” secondKid: @”张二力” thirdKid: @”张小力”];

大儿子 = myOldestKidName;

二儿子 = mySecondOldestKidName;

三儿子 = myThirdOldestKidName;

().init(()).autorelease();

三、其他的一些东西

其实这些本站之前的文章有所提及,这里再详细解释一下。

1、 id:

Objective-C有一种比较特殊的数据类型是id。你可以把它理解为“随便”。

在Objective-C里,一切东西都是指针形式保存,你获取到的就是这个对象在内存的位置。那么id就是你知道这个位置,但是

不知道里面是啥的时候的写法。

2、 同一个数组可以保存不同的对象:

比如一个数组NSArray,这种数组里面可以保存各种不同的对象,比如这个数组里:

myArray <—-|

0: (float) 234.33f

1: @”我是个好人”

2: (NSImage *)

3: @”我真的是好人”

(俺的美图)

这是一个由4个东西组成的数组,这个数组包括一个浮点数,两个字符串和一个图片。

3、BOOL,YES,NO:

你可以认为YES表示C#或者Java里的true,NO表示false。而实际上YES是1

,NO是0,BOOL本身就是个char。

4、IBOutlet、IBAction是啥玩意,总能看到。

这两个东西其实在语法中没有太大的作用。如果你希望在Interface Builder中能看到这个控件对象,那么在定义的时候前面加

上IBOutlet,在IB里就能看到这个对象的outlet,如果你希望在Interface Builder里控制某个对象执行某些动作,就在方法前

面加上(IBAction)。

而这两个东西实际上和void是一样的。

5、nil。

Objective-C里的NULL(空)就这么写,表示空指针。

6、为什么是@”字符串”而不是”字符串”

前面加上@符号,编译器在编译的时候会在程序中给你留出位置,这样才能保证这个字符串不会丢失。反正记住,如果你要想

把某些字符串写死在程序里,就要用@”字符串”,如果忘了用@,程序应该会出错。

superzhou大侠指正:

6、为什么是@”字符串”而不是”字符串”

”字符串”是C的字符串,@”"是把C的字符串转成NSString的一个简写.

在需要NSString的地方才需要这个转化,例如NSLog里面.

在需要C string的地方,还是用”字符串”的.

另外,@”"这个转换是不支持中文的.例如NSLog(@”字符串”); 是一定输出不了中文的.

四、Objective-C 2.0

Objective-C 2.0是Leopard新增加的一门语言,其实和原来的Objective-C是一样的。主要是增加了属性。详细的内容这里不

写了,可以参阅Allen Dang的这篇文章,写的很明白。

/?p=81

五、总结

现在来总结一下怎么看Objective-C的代码和怎么开始学Objective-C吧。

1、记住Objective-C就是C,不是火星语,这个很关键。

2、记住你自己看不懂不表示脑子迟钝,大部分人第一次看Objective-C的代码可能比你还要迟钝。

3、把加入收藏夹,看不明白代码就来再看一遍这篇开宗明义的好文。

4、文档很关键,当你看不懂某些东西说的是什么的时候,先查Cocoachina,再看英文文档里面的API说明,尤其这个类是以

NS开头的时候。再不行就去google搜,直接把你要查的方法贴进google,通常能找到不少人也在问同样的问题,自然也有热

心人活雷锋帮助回答。

5、可以看hello world例子,但是不能总看,看多了真的会晕。另外,千万要放弃苹果官方的Currency Converter货币转换的

例子,那个例子是毒药,刚学的时候越看越蒙。

6、学习一门语言最好的方法是先用,和学外语一样,当你会说的时候自然会读。给自己设立一个简单的目标,比如做一个简单

的程序,然后一点点解决问题。这样学习起来比只看例子快得多。

这是一篇初学者写的文章,希望对同样是初学者的你有一点点帮助:)虽然只是很肤浅的一点点内容,但是应该对你迈入Obje

ctive-C的大门有一点帮助。看懂了这篇文章,回过头看Cocoachina的其他文章,你就会觉得很顺眼了。记得天天来哦。

另外,这篇Objective-C的参考资料也比较好,如果你有兴趣可以一读。

/5

为 iPhone 应用搭建 php 版 push 服务器的流程

时间: 2010-08-26 13:50 点击: 1013 次

在应用里加入 Push 功能对于用户及时获取信息是非常有帮助的,以前介绍过 iPhone 的 Push (推送通知)功能原理浅析,里面

提到要为自己的 App 添加推送功能,开发者先要搭建一个推送服务

在应用里加入 Push 功能对于用户及时获取信息是非常有帮助的,以前介绍过 iPhone 的 Push (推送通

知)功能原理浅析,里面提到要为自己的 App 添加推送功能,开发者先要搭建一个推送服务器。下面就介

绍一个为 iPhone 应用搭建 php 版 push 服务器的流程。

0.在Mac OS X机器上安装好XCode, 连接一台正常的iPhone, 保持平和的心态

APP 开发基础设置

1.在iPhone Provisioning Portal中建立好APP ID和Device.

2. 在Keychain 中生成证书请求gningRequest(菜单 > Keychain Ac

cess > Certificate Assistant > Request a Certificate From a ).

3.在iPhone Provisioning Portal > Certificates中请求一个证书(点击Request Certificate,上传CertificateSignin

gningRequest).

4.请求完成后,将证书文件(developer_)下载,双击导入到Key Chain中.

5.在iPhone Provisioning Portal > Provisioning 中,新建一个Profile, 选择指定的APP ID和 Devices后生成.

6.将刚刚生成的Profile下载为*_provision, 双击该文件, 将profile加载到iPhone中.

Push Notification service设置

7.在iPhone Provisioning Portal > App IDs,选择需要Push服务的App ID, 进入Configure.

8.确认 Enable for Apple Push Notification service ,配置 Development Push SSL Certificate, 上传第2步生

成的证书请求.

9.下载生成的aps_developer_, 完成Push服务配置.

10.双击aps_developer_,保存到Key Chain.

生成php Push Notification sender需要的证书文件

11.在Keychain 里选定这个新证书(Apple Development Push Services*),导出到桌面,保存为Certif

icates.p12.

12.运行如下命令:

1. openssl pkcs12 -clcerts -nokeys -out -in Certificates.p12

2. openssl pkcs12 -nocerts -out -in Certificates.p12

3. openssl rsa -in -out

4. cat >

获得php Push Notification sender所需的设备令牌:

13.新建一个View-based Application项目,在$PROJECT_NAMEAppDelegate.m中:

a.粘贴如下代码:

1. - (void)applicationDidFinishLaunching:(UIApplication *)app {

2. // other setup tasks here….

3. [window addSubview:];

4. [self alertNotice:@"" withMSG:@"Initiating Remote Noticationss Are Active" cancleButtonTitle:@"Ok

" otherButtonTitle:@""];

5. [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert

| UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound)];

6. }

7. - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)d

eviceToken {

8. //NSLog(@"devToken=%@",deviceToken);

9. [self alertNotice:@"" withMSG:[NSString stringWithFormat:@"devToken=%@",deviceToken] cancleButt

onTitle:@"Ok" otherButtonTitle:@""];

10. }

11. - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)er

r {

12. NSLog(@"Error in registration. Error: %@", err);

13. [self alertNotice:@"" withMSG:[NSString stringWithFormat:@"Error in registration. Error: %@", err]

cancleButtonTitle:@"Ok" otherButtonTitle:@""];

14. }

15. -(void)alertNotice:(NSString *)title withMSG:(NSString *)msg cancleButtonTitle:(NSString *)cancleTitle

otherButtonTitle:(NSString *)otherTitle{

16. UIAlertView *alert;

17. if([otherTitle isEqualToString:@""])

18. alert = [[UIAlertView alloc] initWithTitle:title message:msg delegate:self cancelButtonTitle:cancleT

itle otherButtonTitles:nil,nil];

19. else

20. alert = [[UIAlertView alloc] initWithTitle:title message:msg delegate:self cancelButtonTitle:cancleT

itle otherButtonTitles:otherTitle,nil];

21. [alert show];

22. [alert release];

23. }

b.在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launch

Options { 方法中增加

1. [self alertNotice:@"" withMSG:@"Initiating Remote Noticationss Are Active" cancleButtonTitle:@"Ok

" otherButtonTitle:@""];

2. [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert

| UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound)];

14.项目设置

s > $APP_NAME > context menu > Properties > Identifier

修改 identifier 为App ID

s > $APP_NAME > context menu > Build > Code Signing > Code Signing Identifier > Any iPhone

OS Device

指定 iPhone Developer 为开发用机

15.编译并运行后会在iPhone上显示设备令牌

Push Notification sender代码如下:

1.

2. $deviceToken = "设备令牌";

3.

4. $body = array("aps" => array("alert" => 'message', "badge" => 1, "sound" => ''));

5.

6. $ctx = stream_context_create();

7. stream_context_set_option($ctx, "ssl", "local_cert", "");

8.

9. $fp = stream_socket_client("ssl://:2195", $err, $errstr, 60, STREAM_CL

IENT_CONNECT, $ctx);

10. if (!$fp) {

11. print "Failed to connect $err $errstrn";

12. return;

13. }

14. print "Connection OKn";

15. $payload = json_encode($body);

16. $msg = chr(0) . pack("n",32) . pack("H*", $deviceToken) . pack("n",strlen($payload)) . $payload;

17. print "sending message :" . $payload . "n";

18. fwrite($fp, $msg);

19. fclose($fp);

20. ?>

原贴地址 /bbs/?,欢迎参与讨论

iPhone 程序运行周期示意图

时间: 2010-08-31 15:01 点击: 448 次

本流程图由 CocoaChina 会员xiaoyaoa绘制,十分简洁易懂,希望能帮助您了解 iPhone 应用的运行原理。原帖

/bbs/?,欢迎参与讨论。

本流程图由 CocoaChina 会员“xiaoyaoa”绘制,十分简洁易懂,希望能帮助您了解 iPhone 应用的运行原理。

原帖 /bbs/?,欢迎参与讨论。

注册apple id方法 100%成功 新手必看

"

好像好多人都没有成功注册apple id,卡在了none那里,找不到这个选项,现在我给大家介绍一个新方

法,100%可以注册成功,我自己琢磨的哦!不知道有没有和别人的重复。

点击图片可以放大!

1.进入itunes store,点击右上角的see all,查看所有软件。

2.在软件列表内,随便点击购买一个免费软件。

3.登录界面会自动弹出来,玄机就在这儿哦,呵呵,这里点击创建帐户。

4.弹出到欢迎光临界面,点击继续。

5.勾选接受协议,继续。

6.输入邮箱、密码,保密问题及答案,继续。

7.嘿嘿,看到none了吧!选择它。。。填写你的个人信息,红色箭头指示的是必填选项哈!继续。

8.注册的差不多了,点击done,它会发邮件到你的注册邮箱。

9.登录你的注册邮箱,会看到多了一封itunes的邮件,进入,点击激活连接。

10.点击连接后,会自动弹到itunes里,输入你的密码,确定就可以啦!

[

本帖最后由

黑山小妖

2008-10-10 18:02

编辑

]

iphone 事件处理

iPhone 2010-09-01 12:40:04 阅读8 评论0 字号:大中小 订阅

事件处理本章描述了iPhone操作系统里的事件类型,并解释了如何处理它们。还讨论了怎么在一个应用程序里以及应用程序之

间利用UIPasteboard类提供的机制来拷贝和粘贴数据,这是在iPhone OS 3.0中引入的。

事件和事件类型

一个event 是一个代表用户事件的对象-也就是,iPhone OS探测到的用户动作,比如手指触摸或者设备抖动。在Cocoa Touch

中,事件是UIEvent 类的实例。当一个用户事件发生时-比如,手指触摸屏幕或滑过表面-系统将不断发送事件对象给应用程序

来处理。

iPhone OS 目前支持两种类型的事件:触摸事件和运动事件。UIEvent 类在iPhone OS 3.0中得到扩展,不仅可以支持这两种

事件类型而且还可以容纳将来更多的事件种类。列表3-1中列举了已声明的枚举常量。

列表 3-1 事件类型和事件子类型常量

typedef enum {

UIEventTypeTouches,

UIEventTypeMotion,

} UIEventType;

typedef enum {

UIEventSubtypeNone = 0,

UIEventSubtypeMotionShake = 1,

} UIEventSubtype;

每个事件具备如上其中之一的事件类型和与之相关联的子类型,你可以通过UIEvent的type和subtype 属性来访问。事件类型

包含触摸和运动事件。在iPhone OS 3.0里,只有一个振动-运动子类型(UIEventSubtypeMotionShake);而触摸事件总包含一

个UIEventSubtypeNone子类型。

你不该在代码中retain一个UIEvent对象。如果你需要维持一个事件对象的当前状态以备后面使用,你应该用一个合适的方式

来拷贝并保存这些状态位(比如,使用一个实例变量或一个字典对象)。

递交事件

事件的递交遵循一个特定的路径。如“Core Application Architecture,” 所描述。当用户触摸设备屏幕时,iPhone OS识别这个触

摸事件序列并打包进一个UIEvent对象放置在当前激活应用程序的事件队列中。如果这个系统解释设备的振动为一个运动事件,

那么代表相应事件的对象也会放到应用程序的事件队列中。

管理应用程序的单件UIApplication 对象从队列顶端获取一个事件并派发。通常,它发送这个事件给这个应用程序的关键窗口-

拥有接受用户事件焦点的窗口-然后代表这个窗口的UIWindow 对象发送事件给一个初始对象来进行处理。这个对象对触摸事件

和运动事件是不同的。

§ 触摸事件。 窗口对象使用点击检测(hit-testing)以及响应链(responder chain) 来查找接收该触摸事件的视图。

在点击检测中,一个窗口在视图层次的最上面的视图中调用hitTest:withEvent:; 如果这个方法返回YES,则在该视图层次的

每个视图上递归调用pointInside:withEvent:,这样进行下去直到发现这个在触摸事件发生范围内的子视图。这个视图就成为

hit-test 视图。

如果这个hit-test 视图不能处理这个事件,这个事件将按照响应链进行回溯,如“Responder Objects and the Responder Chain”

所描述,直到系统找到一个视图可以处理它。一个触摸对象(在“Touch Events”中描述)在其生命周期中和它的hit-test视图相

关联,即便这个对象代表的触摸接下来移到视图之外。“Hit-Testing” 讨论了点击检测的编程含义。

§ 运动事件。 这个窗口对象发送运动事件给第一响应者来处理。(第一响应者在“Responder Objects and the

Responder Chain.”中描述)。

尽管hit-test视图和第一响应者通常是相同的视图对象,但并非必须如此。

UIApplication 对象和每个UIWindow 对象在“Touch Events”方法中分发事件。 (这些类用同样的签名声明了一个方法)。因为这

些方法是事件进入一个应用程序的漏斗点,你可以子类化UIApplication 或UIWindow 并重写(override)sendEvent: 方法来

监控事件(很少有程序需要这样做)。如果你重写这些方法,请确认调用超类的实现(也就是,[super sendEvent:theEvent]);

永远不要去玩弄事件分发。

响应对象和响应链

前面的讨论提到了响应者的概念。那么什么是一个响应者对象以及它在事件递交的架构中如何工作的呢?

一个响应者对象(responder object)是一个能响应事件并处理它们的对象。UIResponder 是所有响应者对象的基类。它不仅仅

为事件处理也为公共的响应者行为定义了编程接口。UIApplication, UIView, 和所有的自UIView以下直接或间接继承于

UIResponder的UIKit类 (包括UIWindow),那么它们的实例就是响应者对象。

第一响应者(first responder) 是处于一个应用程序中的响应者对象(通常是一个UIView对象),该对象被指定为非触摸事件

的第一个接收者。一个UIWindow 在消息中给第一响应者发送这些事件,给它处理过程中的第一镜头。要接收这些消息,响应

者对象必须实现canBecomeFirstResponder并返回YES;它还必须接收一个becomeFirstResponder消息(可以自我触发)。

第一响应者是一个窗口的第一个视图来接收下面这些类型的事件和消息:

§ 运动事件-通过调用 UIResponder 运动处理方法,在“Motion Events”中有详细描述

§ 动作消息-当用户操作一个控件(比如一个按钮或滑动条)时发送并且没有为这个动作消息指定目标

§ 菜单编辑消息-当用户点击编辑菜单的命令时发送 (在 “Copy, Cut, and Paste Operations” 有详细描述)

第一响应者在文本编辑中也起作用。一个处于编辑焦点中的文本视图或者文本框被作为第一响应者,这将导致虚拟键盘被呈现

出来。

注意: 应用程序必须显式的设置一个第一响应者来处理运动事件,动作消息和菜单编辑消息;UIKit会自动把用户点击的文本框

和文本视图设置为第一响应者。

如果第一响应者或者点击检测(hit-test)视图没有处理一个事件,它可能会传递事件(通过消息)给响应链中的下一个响应者,

看看它是否能处理。

响应链是一个响应者对象的连接序列,事件或动作消息(或菜单编辑消息)依次传递。它允许响应者对象把事件处理的职责转

交给其它更高层的对象。应用程序通过向上传递一个事件来查找合适的处理对象。因为点击检测视图也是一个响应者对象,应

用程序在处理触摸事件时也可以利用响应链。响应链由一系列的下一个响应者组成,如图3-1所示:

Figure 3-1 iPhone OS中的响应链

当系统递交一个事件时,它首先发给一个特定视图。对于触摸事件,这个特定视图就是hitTest:withEvent:返回的那个;对于运

动事件和动作消息,这个视图就是第一响应者。如果这个初始视图不处理这个事件,它将按一个特定路径回溯响应链:

1. 点击检测视图或者第一响应者传递事件或动作消息给它的视图控制器如果它有的话;如果没有一个视图控制器,就

传递给它的父视图(superview)。

2. 如果一个视图或者它的视图控制器不能处理这个事件或动作消息,它将传递给该视图的父视图。

3. 在这个视图层次中的每个后续的父视图遵循上述的模式,如果它不能处理这个事件或动作消息的话。

4. 最顶层的视图如果不能处理这个事件或动作消息,就传递给UIWindow对象来处理。

5. 如果UIWindow 对象不能处理,就传给单件应用程序对象UIApplication。

如果应用程序对象也不能处理这个事件或动作消息,将抛弃它。

如果你实现了一个自定义视图来处理事件或动作消息,你不应该直接转发这个事件或消息给nextResponder 来回溯响应链。相

反应该调用当前事件处理方法的超类实现-而让Uikit来处理响应链的遍历。

调整事件递交

UIKit 为应用程序提供了编程手段来简化事件处理或者完全关闭事件流。下面的列表总结了这些方法:

§ 关闭触摸事件的递交。 缺省情况下,视图接收触摸事件,但是你可以设置它的userInteractionEnabled 属性为NO

来关闭事件提交。视图在隐藏或透明时也不会接收事件。

§ 在一段时间内关闭触摸事件的递交。 应用程序可以调用UIApplication 方法beginIgnoringInteractionEvents 并稍

后调用endIgnoringInteractionEvents 方法。第一个方法使应用程序完全停止接收触摸事件消息;第二个方法恢复接收消息。有

些时候你想关掉事件接收比如正在执行动画。

§ 开启多点触摸的递交。 缺省情况下,视图忽略多点触摸事件序列中除了第一次触摸以外的其它所有事件。如果你

想这个视图处理多点触摸,你必须为这个视图开启这个能力。通过编程设置你的视图的multipleTouchEnabled 属性为YES, 或

者在Interface Builder这个视图的inspector里设置相关属性。

§ 限制事件递交给单个视图。 缺省情况下,一个视图的exclusiveTouch 属性被设置为NO, 这意味着这个视图不

会阻塞该窗口中的其它视图接收触摸事件。如果你把这个属性设置为YES,你标记这个视图以便,当它跟踪触摸时,它是当前

窗口中唯一可以跟踪触摸的视图。窗口中的其它视图将不能接收触摸事件。不过,被标记为“exclusive touch”的视图不能接收相

同窗口中其它视图相关的触摸事件。如果一个手指接触了一个exclusive-touch 视图, 那么这个触摸事件仅在该视图是当前窗

口中唯一跟踪这个手指的视图时才会被递交出去。如果一个手指触摸了一个non-exclusive 视图, 那么这个触摸事件仅在没有

其它手指被一个exclusive-touch 视图跟踪时才会被递交出去。

§ 限制事件递交给子视图。一个自定义UIView 类可以重写hitTest:withEvent: 来限制多点触摸事件递交给它的子视

图。请查看关于这个技术的讨论“Hit-Testing”。

iPad软件提交注意事项

时间: 2010-03-26 11:09 点击: 2796 次

这是CocoaChina会员 stlau根据自己的iPad软件提交经验总结的注意事项,希望大家留意一下,避免软件被苹果审核人员拒绝

放行。 帖子地址 /bbs/? 肯定会被

这是CocoaChina会员 "stlau"根据自己的iPad软件提交经验总结的注意事项,希望大家留意

一下,避免软件被苹果审核人员拒绝放行。

帖子地址 /bbs/?

肯定会被拒的情况:

1. app命名:不要用类似*** pad的名字,但可以用*** for iPad,*** iPad version之类的

名字;

2. popover相关:

a. 除非处于任务编辑状态,popover应该随时可以通过点他范围之外的地方来dismiss掉,

换句话说,不要用modal方式;

b. 不要太大,宽度不要超过600;

c. pickerview啥的一定要放在popover里面,宽度不要拉长

d. alertview也要用popover的方式出来

3. 尽量不要使用全屏切换效果(我用了flip导致被拒,不知道curl行不行),好像一定要用

全屏的话,可以用modal的方式,这一点我也理解的不是很明 白;

不会导致被拒但是建议改进的:

1. 尽量支持4个方向

2. 少用alertview和全屏视图切换

3.尽量多用ipad相关的UI element,popover,splitview啥的

总的感觉,苹果审核比较注重要体现出他和iPhone App的不同之处,以及保证用户体验的

流畅性。

iPad软件界面设计基本规范

时间: 2010-01-28 14:50 点击: 1714 次

作者 gagaga 原帖地址 /bbs/? iPad平台特点 1 大屏幕,分辨率 1024x768 2 再

次强调没有固定的方向,必须四个方向都支持。 3 可以外接键盘 4 可以放置设备,

作者 gagaga

原帖地址 /bbs/?

iPad平台特点

1 大屏幕,分辨率 1024x768

2 再次强调没有固定的方向,必须四个方向都支持。

3 可以外接键盘

4 可以放置设备,与台式机同步

iPhone与iPad的共同特点

- 内存有限

- 同时运行单个程序

- 在设置功能里放置程序选项

- 设备方向可以改变

- 最小化的帮助,让用户直接就能看懂

- 程序响应手势而不是鼠标

- 运行源生程序、Web程序或者二者兼备

- 图片深度24位(RGB各8位),另带8位alpha通道,建议使用PNG格式图片

界面简单建议

- 支持所有方向

注意要为每个方向都提供一个启动图片

- 增强交互而非只增加功能

- 使用split view, 导航和弹出窗口来平整信息层级

- 减少全屏切换,仅仅改变需要改变的部分

- 支持协作和互联

- 如果可能,增加真实感以及物理维度到应用程序里,尽可能像真实世界的物品以便用户易

于上手

- 界面漂亮 用户喜爱

- 尽量让用户更关注内容而不是界面

- 尽可能减少强制用户模式化操作

- 减少使用列表,改变为其他形式

- 尽量支持多手指手势

- 让用户模式化操作的地方可以用弹出窗口

- 限制复杂的模式化操作

- 减小文件操作尤其尽量让用户感觉不到文件系统的存在

- 仅仅在必须的情况才提示用户保存

- 将工具条整合在界面上部

- 尽可能快速启动程序

尽量使用截图作为启动画面

不要在启动时显示关于或者splash screen

恢复上次运行状态

尽量不要让用户提供设置信息

- 程序可能随时停止

- 为每个方向都准备启动画面

- 建立漂亮的图标

尺寸:72x72

和iPhone程序类似,iPad程序的图标会自动增加:圆角、阴影和高光。

图标标准:

> 90度直角边

> 没有高光

> 不带alpha通道透明

- 遵循已有规范

一位苹果开发者的 iPad app 开发全过程

时间: 2010-07-07 15:47 点击: 1788 次

iPad 应用iNotes的开发者Anxonli 近日在博客上介绍了自己开发这款 iPad App 的全过程心得,包括软件开发周期规划、各阶段

注意事项等实用经验,值得大家阅读。原文 /

iPad 应用“iNotes”的开发者“Anxonli” 近日在博客上介绍了自己开发这款 iPad App 的全过程心得,包括软

件开发周期规划、各阶段注意事项等实用经验,值得大家阅读。原文 /blog/7072

82

根据我自己的经验,一个iPad或iPhone app的开发周期大概是这样的:

1. App的idea形成

2. App的主要功能设计

3. App的大概界面构思和设计(使用流程设计)

4. 大功能模块代码编写

5. 大概的界面模块编写

6. 把大概的界面和功能连接后,app的大致demo就出来了

7. demo自己试用和体验几遍后,根据情况修改

8. app的0.8左右版本完成后可以加入production的图标和部分UI图片

9. 没有大错误后,0.9版本可以尝试寻找beta用户

10. 根据测试用户的反馈,重复 7 - 9的步骤

11. app完成后,加入app icon, iTunesArtwork等等UI元素。反复测试无错误后上传iTunes

上述步骤是我个人的做法,因为我没有界面设计师,大部分icons是买回来的,图片是自己photoshop做的。

如果你有界面设计师,流程可能不一样。例如,在第三步,界面设计上,可以编写功能模块和设计师同步

进行。这样app的demo出来后,基本上可以有界面可以用了。Anyway, 另外要指出的是,在我的第五个

步之前,我还是没有碰过iPad, 所以只能在模拟器做大的功能开发。模拟器不够用吗?对于iNotes开发来

说,当然不够用,simulator的多触点(multi-touch)支持是非常弱的,很多touch的测试是无法在simulat

or做的。

在我的第四和第五步的开发过程中,基本上是weekdays每天晚上开发3-4个小时,两天出一个功能,周末

集中精力开发一到两个个大功能,例如 image cropping. 很多人可能做过image cropping, 例如网页上的j

avascript上实现,或者flash上的实现。但iPhone OS上实现是不一样的,至少对我来说,因为第一点,你

要注意内存的使用(iOS开发上最最重要的思维),在网页上,你可以不用考虑你使用了多少个图片的 cop

y,但iOS上是不可以的,每次用完原图(大图片)后要立即释放内存。第二,cocoa的图片缩放/旋转基本

上是利用UIView的 transform来完成,transform的时候还要考虑用户的手指touch的位置。总之比web上

实现要复杂,虽然OS 3.2已经有了gesture recognition api,相对比以前轻松。

版本做到0.8以后,我就开始在twitter招募了5-6个测试用户,所以非常感谢 robbinfan、tinyfool 等同学

对我的app的批评和意见。很多在我看来不是那么大问题的设计,但对部分用户来说非常反感,让我在后

来对这些点进行较大幅度的修改。能够在产品设计和开发过程中,找一部分测试用户参与是非常有必要的。

对他们的回馈的方法,可以在app发布后对这些用户发放免费产品。这个做法即可以提高你的产品质量,

又可令到你的测试用户拿到免费的软件产品。

最后,app提交 iTunes 以后,大概要花7-14天来等候审批。这个时期到底要干嘛呢?对我来说,这个时

期就是买域名,架网站,设计网站,配置邮件服务器,反复修改app description,还有twitter推广等等。

对没有做web design很久的我来说,刚是iNotes网站的设计和实现就已经花了我两整天了,还没有完成呢,

继续努力!

昨天 twitter 上有人问,他也想跳出来专门做iphone开发,但就是怕单干太寂寞。我的回应是,如果你要

决心创业的话,首要条件就是要奈得住寂寞,特别是利润没有来到之前,特别是你雇不起专业人员的时候。

老大说过,只有当工作当成是兴趣的时候,你的兴趣就是工作的时候,你才不会寂寞。

iPad用户体验准则

时间: 2010-04-20 13:25 点击: 1415 次

转自 译言。 原文地址 /view/395/100577 iPad用户体验最主要体现在内容和交互: 淡化程序UI,以便

用户关注所需的 内容。 美观的内容形式,富有真实感。 充分利用设备的

转自 译言。 原文地址 /view/395/100577

iPad用户体验最主要体现在内容和交互:

淡化程序UI,以便用户关注所需的 内容。

美观的内容形式,富有真实感。

充分利用设备的性能来增强内容的交互性。

支持所有方位

优秀iPad程序的其中一个重要因素是可以在所有方位上运行。竖向的大屏幕可以满足用户浏览内容的需求

(当竖屏幕较小时,用户就会将屏幕旋转为横屏幕,这样一行就可以显示较多的文 字)。用户不太会注意

最小设备结构(minimaldevice frame;使用iPhone时,用户单手握住手机时,屏幕多为竖向显示;而双手

使用iPad,屏幕的显示方位并不能确定)或者home按键的位置,他们不认为设备有默认方位。这就导致

用户期望程序可以在当前方位上运行。所以程序尽量满足iPad各方位的运行要求。

保证以首要内容为重点。当旋转iPad的方位时,如重点显示的内容发生变化,用户会感觉对程序失去控制。

旋转时如何显示辅助信息或者功能。尽管能保证上一条,还要考虑如何显示较为次要的信息。例如邮箱功

能中,首要 内容时发邮件,次要内容是联系人和收件箱的列表。

横屏的次要内容显示在左边的分视图中

竖屏的次要内容显示在气泡框中。

再如,横屏时,一款游戏以长方形显示,当旋转 到竖屏时,需要调整屏幕上的显示区域,游戏显示边框的

上面或者下面增加显示空间,用于显示辅助信息,而不是垂直拉伸显示区域来撑满整个屏幕。

避 免布局变化过大或者无缘由地改变。所有方位中都显示相似的UI布局旋转时尽可能保留信息和文本的

原有格式。尤其阅读文本时,重要的是避 免旋转之后用户找不到读到哪儿了。如果非要对页面重新布局,

可以使用动画帮助用户理解当前页面的变化。例如,当旋转时要必须增加或者移除文本框时,可以选 择隐

藏动作并在新布局中简单地淡出。为了有助于合理地设计旋转动作,可考虑在真实的生活中是如何和它们

交互的。

避免使用 UI元素或者定义一个旋转的手势来完成旋转动作。应该是内容随着iPad的旋转而旋转。

为每个显示方 位各提供一个启动图片。比如提供1004×768和748×1024的图片来满足两个方位的显示要

求。

仔 细考虑程序是否可以在所有方位上运行。有些程序只能在横屏或者竖屏下显示,此时:

显 示程序为正常显示方式,无论当前iPad是什么方位。避免使用UI元素来告知用户旋转设备。支持

180度旋转。

可以特殊处理输入式旋 转动作。有些游戏把旋转设备当成操作方式,这时候横竖屏切换时,可不改变

游戏的显示方位。

增 强交互

最好的iPad程序在用户执行明确的任务时提供新颖的交互方式。不要为了填满整个大屏幕而增加一些和主

要任务没有直接关联的功 能,而是提升程序的用户体验。

例如读书程序中容许用户阅读时如能保留路径会提升阅读体验,不需要跳转到另外一个页面而是使用气泡

框来变更 路径。程序可以让用户在文本中增加书签和注释,帮助用户交换书目或者对比阅读进度。

信息扁平化

iPad的大屏幕和新 UI元素可以显示更多的信息,使用的得当可以避免寻找信息时跳转的次数过多,因此也

改变iPhone的单屏显示结构。

使用分栏。两级的内容 同时显示使得信息扁平化。

使用气泡框。顶部的气 泡框可以显示控件或者工具,不必切换屏幕即可完成操作。

工具栏中显示分段控件。分 段控件可以显示并列的信息。

使用标签栏。标签栏显 示不同种类信息或者是不同的程序模块。

减少全屏切换

相似的视觉元素,而在某一区域变更内容。普遍的规则是宁愿转换单 独的视图或者组件,也不全屏切换,

保证视觉稳定性,帮助用户理解自己所处的位置。

增强协作和联系

用户将iPad视为私人设备,但是它合宜的尺寸可以加强真实的协作和分享。

真实感

程序显示和现实生活越为相似,用户就越容易理解程序如何操 作并喜欢使用。但也不必过于精确,通常夸

张的事物看起来更为真实并能传递更多的意义,当做是和用户交流并表述程序本质的一次机会。使用动画

进一步地增强程 序的真实感。通常,动作的真实感比程序的外观更为重要,不符合物理规律的动作会让用

户感觉到迷惑。

令人惊叹的图形

高分辨率的iPad屏幕所支持丰富、美观和动人的图形 对用户富有吸引力,因此可以尝试增加程序中图形

的深度和细节。

弱化界面控件

通过设计程序中的UI来组织信息框架,减 少控件的数量和淡化显示效果,创建和程序风格相符的控件,

这样既不突出,但又易于发现。

最少的模态对话框

模态对话框打断用户的工作流,需用在合适的情况下:

有 必要吸引用户注意力的时候。

避免用户因误操作而导致的数据丢失。

重新思考列表

列表(也就是表视图)在iPhone中常用 于显示大量的数据信息,在iPad也是非常有用。但是还可以使用

一个更丰富的方式来显示同样的信息。例如:iPhone中的联系方式是一个很有效率的列 表。而在iPad中

的联系方式看起来是一个美观的通讯录,iPad的列表可以显示更多的信息。

多点触摸

大屏幕支持自 定义的多点触摸,即使是多人同时使用iPad,牢记不用响应不标准的触摸手势,如果有的话,

也只用一种方式来执行命令。

气泡框

气泡框和模态视图有些相似,当气泡框显示时,不能操作主视图。但模态视图是模态的。然

而气泡框可以用在两种途 径:

模态。气泡框出现时,周围的界面淡化, 需要一个明确的操作取消。

非模态。点击气泡框周围的界面也可以取消气泡框。

如果在iPhone中使用了模态视图,可以考虑可以气泡框替代它。以下问题可以帮助你决定

气泡 框的使用是否合理:

是否需要不同类型的输入?如果是,使用气泡框。气泡框更适合 显示一个选择器或者列表选项。

是否需要用户穿过多级视图。如果是,使用气泡框。气泡框的结果适合显示多级页面,因为对主视图

的改变较 小。

可能在主视图操作才可以完成任务吗?如果是,使用非模态气泡框。因为用户点击主视图即可取消气

泡框,容许用户中止操作气泡框并返 回主视图。

任务需要用户深度投入并且是程序的一个主要功能?如果是,可能需要使用模态视图。模态视图的语

境转换帮助用户在任务上集中 注意力,较大模态视图便于用户输入大量的字符段。

从另一方面而言,这个任务代表程序功能的重要一部分,但要 是不需要用户深度投入注意力的话,气泡框

是更好的选择,轻量级的视觉对于频繁执行的任务而言更为亲切。

是否任务执行只有一次或者很少,就 像安装任务。如果是,考虑使用模态视图。用户不会介意为了完成此

类任务而停留在当前界面。

限制模态任务的复杂度

用户 乐于在一个模态视图中完成一个子任务,因为语境的转换清晰和短暂的。但是如果子任务太复杂,用

户会忽视主任务,当模态视图全屏显示并包含多个子视图时,这 种危险会增加。如果模态任务非要包含子

视图,确保给予用户一个单独和层次清晰的路径,避免迂回。提供一个明显和安全的方式退出模态任务,

用户能预见此操作 的后果。

淡化文件管理

尽管iPad程序容许用户创建和操作文件,这并不意味着用户应该对于文件系统有意识。iPad 没有像Mac

OS一样的文件搜索,用户也不必想在电脑上一样和文件进行交互。用户不应该考虑文件类型和位置,比如:

打开和保 存对话框中出现文件层级关系。

文件的访问权限信息。

一个文件处理程序鼓励用户预览内容。如果iPad 程序容许用户创建和编辑文档,最好提供文档种类选择器

便于用户打开一个现有文档或者创建新文档。理想情况下的文档选择器为:

高 度图形化。用户看到文档的视觉形式时能很容易识别出需要的文档。

用户使用最少的触摸手势找到需要 的内容。例如打开一个文 档只需平移水平滚动条和轻击文档。

创建新文档的功能。当用户没有找到想要的文档 时,选择器提供一个创建文档的功能而不是到其他界

面寻找此功能。

只有需要的时候才要求用户保存

用户应 该确信他们的工作是实时地被保存,除非他们明确取消或者删除。如果程序帮助用户创建和编辑文

档,保证用户不需要明确地执行保存命令。如果程序的主要功能不 是创建内容,但要容许用户切换浏览和

编辑模式,这时可以明确要求用户保存修改内容。在这种情况下,信息显示的视图中提供“编辑”按钮,轻

击之后,该按钮变 为“保存”按钮和“取消”按钮。“编辑”按钮的转换提醒用户当前界面为编辑模式,“删除”按

钮让用户不保存修改内容的情况下退出程序。

工 具栏移至顶部

与iPhone程序不同,iPad的工具栏在顶 部,iPad宽大屏幕可以显示工具栏中的所有功能。

立即启动

iPad程序启动时用户无须等待即可开始操作。当启动 时,iPad程序:

显示程序在当前方位上的启动图片,减轻用户的等待感,让用户知道程序仍在运行。

避免程 序启动变慢。启动图片(launch image)中 显示品牌信息是容许的,但是铭记用户启动程序时

每次都会看到这个内容。如果非要使用启动画面(splash screen),明确显示时候不是过 长并且无需

任何用户交互。

恢复程序上一次运行状况。

避免要求用户提供启动信息。取而代之的是:

o

关 注80%的用户需求。

o

从系统中获取更多的信息。从系统中调取信息可以避免输入。

o

用户在输入前受益。如果输入不可 避免,那也要在用户先让获取有效信息。

随时准备停止

和iPhone一 样,iPad程序在用户按“Home”键之后,因此:

尽快和合理地保存数据。

退出时保存界面的每一个细节。

看看苹果为iPad开发者制定的保密措施

时间: 2010-03-22 13:23 点击: 665 次

据国外媒体报道,四名知情人士透露,苹果针对iPad平板电脑的开发者制定了长达10页的保密协议,以避免这款产品的信息被

提前泄露。 严格规定 iPad平板电脑即将于今年4月3日在美国上

据国外媒体报道,四名知情人士透露,苹果针对iPad平板电脑的开发者制定了长达10页的保密协议,以

避免这款产品的信息被提前泄露。

严格规定

iPad平板电脑即将于今年4月3日在美国上市。消息人士表示,参与iPad测试的软件开发商必须保证在一

个独立的房间里进行相关工作,而且窗户必 须遮盖起来。除此之外,为了避免iPad被移动,所有进行测

试的iPad都必须被绑在一个固定的物体上。苹果表示,只有当合作方提供了照片,证明他们已经 遵守了

相关规定后,苹果才会向其发送iPad样机。

苹果希望通过这种方法来营造一种神秘氛围,同时避免竞争对手过早了解该产品。而被选定的合作伙伴则

可以为iPad开发游戏和电子书阅读工具等应用软 件,从而增强该产品的吸引力。美国投资银行Piper Jaff

ray分析师基尼·蒙斯特(Gene Munster)预计,iPad明年的销售额将达到46亿美元。

美国投资银行Needham & Co分析师查理·沃尔夫(Charlie Wolf)说:“iPad被大量内容包围。苹果希望尽快为

iPad吸引尽可能多的内容。”

由于iPad有望成为热销产品,因此对于软件开发者而言,遵守苹果的规定可能只是一个很小的代价。蒙斯

特预计,iPad上市第一年的销量将达到 300万至400万台。但苹果发言人史蒂夫·多灵(Steve Dowling)拒绝

对此置评。

打击泄密

对于在产品发布前预先为开发者提供的样机,苹果一向都采取严密监控的政策。该公司会对这些设备进行

一定的更改,以便追踪到泄密渠道。曾于2001年 至2005年担任苹果高级系统工程师的爱德华·埃格曼(Ed

ward Eigerman)说:“他们非常看重保密协议。”埃格曼曾于2005年将尚未发布的软件提供给用户,并因此被

苹果解雇。

埃格曼目前在纽约经营着一家IT咨询公司Eigerman Consulting。他表示,过去几年间,苹果对保密措施的

要求越来越严格。他说:“他们正在面临越来越大的安全挑战。”随着潜在合作伙伴和合作领域的 增多,保密

协议被破坏的风险也逐渐增大。

苹果的保密政策所涵盖的范围甚至已经拓展每条信息长度只有140个字符的Twitter上。在今年2月与苹果

代表举行现场会议时,《华尔街日报》副 总编阿兰·默里(Alan Murray)发布了一条Twitter信息,表示他正在

使用iPad。但这条信息很快就被删除了。

很多开发商虽然非常希望与苹果合作,但却没有获准对iPad进行测试。电影社交网站Flixster创始人乔·格

林斯坦(Joe Greenstein)表示,该公司的代表就被苹果拒之门外。他说:“我们多次恳求过苹果。”应用开发商D

igital Chocolate也遭遇了同样的情况,该公司创始人特里普·霍金斯(Trip Hawkins)说:“我们曾经多次请求与

iPad合作,但都没有回音。”霍金斯曾负责苹果的营销工作,后来加盟EA,并最终创建了Digital Chocolate。

模拟软件

Evernote公司推出的软件可以帮助用户组织并存储文档,虽然该公司同样遭到了苹果的拒绝,但他们依旧

在为iPad开发应用。该公司CEO菲 尔·力宾(Phil Libin)说:“其实我们从未接触过真正的iPad。”Evernote此前

推出过iPhone应用,而且早在苹果CEO史蒂夫·乔布斯(Steve Jobs)今年1月27日正式发布iPad之前,该公

司便开始为这款产品开发应用。

苹果提供了一个收费模拟器软件,使得开发者可以通过电脑为iPad开发应用。但iPhone开发商可以免费使

用这款模拟器。不过力宾还是表示,无法 拿到样机的开发商仍然会有一些劣势。为了进一步对iPad的情

况进行合理推测,比如用户的拇指通常都会放在什么地方,Evernote的团队制作了一个纸 板模型,模拟i

Pad的使用状况。但该公司仍然决定暂时将手写等几个功能去掉,直到拿到iPad后再将这些功能添加进去。

Needham & Co的沃尔夫认为,苹果有可能会因为这种“二元体系”而疏远与部分开发者的关系。

Mashery是一家专门帮助企业维护与第三方开发者关系的公司,该公司CEO奥伦·迈克尔斯(O

ren Michels)认为,苹果也有可能是希望借助与顶级开发者的合作来吸引其他软件开发者。

他说:“开发任何一个新东西都需要一些参考的样本。”他认为,苹 果可以首先选择几个优秀

的开发商,然后借此吸引其他开发者,这种方法也会有很好的效果。但这些被选中的开发者

同样需要对多数内容保密。

iPad平板电脑程序开发基础规则

时间: 2010-01-28 14:07 点击: 3326 次

作者 gagaga 原帖地址 /bbs/? 苹果在今天凌晨发布了10寸平板电脑:iPad。

iPad也使用iPhone一样的操作系统,并且也能通过App Store购买软件。开发者们,是不

苹果在今天凌晨发布了10寸平板电脑:iPad。iPad也使用iPhone一样的操作系统,并且也

能通过App Store购买软件。开发者们,是不是看到新的市场了?如果您想专门为iPad开发

软件,请看看下面的iPad开发规则。

系统级别

- 同时只能运行一个程序,窗口占满全屏

- 程序需要快速进入和退出

- 为了安全考虑,程序在沙盒内执行。可以保存程序相关的文件和设置。只能通过系统提供

的接口与其他程序通信。

- 每个程序在自己的虚拟内存空间内运行,但是可用虚拟内存只受限于物理内存的大小。就

是说没有磁盘虚拟内存。

- 不支持自定插件和框架。

程序级别

- (新增) 程序界面需要支持任意方向。不象iPhone并不要求同时支持横竖屏。

- 程序主要使用ObjectiveC但是其他程序语言也可以使用

- 所有在iPhone中支持的类,同样在iPad中支持

- 内存使用retain/release模型管理

- 在需要的情况下,程序可以启动额外的线程。不过,基于视图的操作和大量图形操作必须

在程序主线程内执行。

视图控制器

在iPad里,虽然仍旧支持导航条和Tab条,但是他们的作用逐渐减弱。因为你可以建立一

个新的视图控制器,叫做分割视图控制器(Split view controller)。对于更复杂的数据内容,

导航条和Tab条主要用来给低层次导航提供支持。

图形和多媒体

iPad支持和iPhone一样的图形与多媒体库。视频可以在任意视图内播放,无需始终全屏播

放。

事件处理

更简单地侦测手势事件。

设备集成支持

iPhone很多特性都在iPad内被支持。如:

- 加速计

- 位置

- 地图

- 设置

- 地址簿

- 外设

- p2p蓝牙连接

iPad内没有摄像头,但是可以使用像册。

iPad设备特性

屏幕尺寸与iPhone不同,iPad是1024x768。

新增类和接口:

- Split views 分隔的视图。

- 弹出窗口

- 覆盖屏幕的内容可以订制显示风格,设置是否完全覆盖屏幕,还是覆盖窗口的某一部分

- 工具条可以放在视图的上方或下方

- 可以自定义虚拟键盘输入视图,与从前iPhone只能在输入框内弹出键盘不同,现在可以

在任意获得first responder的对象内设置自定义的输入视图。

- 虚拟键盘上方还可以放置订制的输入工具

文字与显示支持

- 增加Core Text框架

- 自定义视图可接收键盘消息

- 增加语法检查类UITextChecker

- 支持自定编辑菜单类 UIMenuController (注:从前只能通过私有API实现)

- Core Animation增加CATextLayer类用于显示文字

支持外部显示器和投影

iPad可以外接显示器,可输出最大分辨率为720p(1280x720)。

文档处理支持

- 应用程序可以注册打开特定类型文件

- UIKit提供UIDocumentInteractionController类,用于与未知类型文件交互

- 在中带有UIFileSharingEnabled键值的程序可以与用户桌面计算机共享文件。

但是注意,iPhone OS中并没有提供打开关闭文件的标准对话框,还是不鼓励进行这种系统

级别的文件操作。

PDF生成

程序可以生成PDF文档。