标签归档:ios

通过In house方式发布ipa(就是通过safari浏览器直接安装)

1.首先要将你的项目进行打包

点击查看原图

 

2.在弹出的窗口中选择Distribute..

点击查看原图

 

3.然后选择打包的方式

点击查看原图

 

4.然后系统会要求对你的应用进行签名,选择一个证书开始签名(工程大的话这个步骤要很久)

点击查看原图

 

5.最后选择保存打包后的ipa路径,手别太快,如果已经点保存的同学要从头来过了,关键就是这一步一定要选择底部的Save for Enterpirse Distribution复选框

点击查看原图

 

6.选中Save for Enterpirse Distribution复选框后会下拉出对话窗口,这里只要填写必填字段就行了

Application URL:填写你要通过web发布的ipa文件的URL下载地址

比如:http://www.wanggq.cn/test/test.ipa

Title比较无所谓,正常点的话就填你的项目名称

比如:test

点击查看原图

 

7.最后点save,打包的过程就算完成了,到你选择的保存路径下看看,应该会生成两个文件一个ipa和一个plist文件,比如项目名称叫test,那么目录下应该有test.ipa和test.pist两个文件

 

8.将ipa和plist文件一起上传到你的web服务器,放在你在上一步填写的Application URL对应的目录中,在本例中你应该放在web服务器的/test目录下.

 

9.在打算通过web发布你的应用之前先要做个网页,不然用户没有页面显示的话也不知道点哪下载(其实直接把生成的plist文件通过指定协议的url地址直接告诉客户就能下载了,不过通用的方式还是做个web页面),以下是个简单的下载页面的

[code]
<pre><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=320, height=460, user-scalable=no,
initial-scale=1.0" />
<title>Install Dev App</title>
</head>

<br/><br/><br/>
<body>
<div align="center">
<a href="itms-services://?action=download-manifest&url=http://www.wanggq.cn/test/test.plist" style="color:orange; font-size:24px">
Install the test App</a>
</div>
<p />

</body>
<br />
<br />

</html>
[/code]

注意:其中的链接地址可以自己修改成你的plist文件存放的位置,但一定是itms-services://?action=download- manifest打头再加上plist文件的url地址的格式,itms-services:这个是特殊的http协议,目前只有safari浏览器支持 (只要是支持这个协议的浏览器应该都能下载安装吧)

显示的效果如图:

点击查看原图

 

10.点击之后系统就会自动开始下载安装ipa了

iOS 开发者企业计划 – In-House证书

http://www.apple.com.cn/developer/support/ios/enterprise.html

什么人应该申请 iOS 开发者企业计划?

如开发者希望在 iPhone 或者 iPod touch 上创建专有的内用应用程序,且其公司雇员不下 500 人,则应申请 iOS 开发者企业计划。在注册企业计划时,开发者需要向苹果公司提供 D-U-N-S 号码。

没有 D-U-N-S 号码的企业能否注册 iOS 开发者企业计划?

注册 iOS 开发者企业计划需要 D-U-N-S 号码。只有先从 Dun & Bradstreet 取得 D-U-N-S 号码才能注册该计划。

注册 iOS 开发者企业计划之后,我能否在 App Store 发布应用程序?

只 有以个人或公司名义注册 iOS 开发者计划才能在 App Store 发布应用程序。如果您注册了 iOS 开发者企业计划,则只能通过 Ad Hoc 发布将应用程序发布给组织的会员或员工使用。 如果您的公司已注册企业计划而又希望通过 App Store 向客户发布应用程序,则需以个人或者公司名义注册加入 iOS 开发者计划

我是一名开发人员,希望为我的客户创建机构内部使用的应用程序。我能否加入 iOS 开发者企业计划以达成这一构想?

不行。因为 iOS Developer Enterprise 应用于开发和发布机构内部使用的私有应用程序,而且程序仅能供给您公司(注册企业计划的公司)的雇员使用。

http://blog.csdn.net/kmyhy/article/details/6418280

企业版IDP,即iOS Development Enterprise Program。注意是$299/Year那种,并不是$99/Year的那种。

这种方式的IDP其最大的好处在于:可以发布“In House”应用。

这种应用使用一种叫做“In House Distribution Provisioning Profile”的文件进行发布,不能发布到Apple Shop进行销售,也不需要经过Apple的评审。你可以把“In House”应用通过任何方式发布给你的企业员工、用户及其他你认可的任何人,尤其适合于企业应用的开发。

网上关于个人版/公司版IDP申请流程,以及将应用发布到苹果商店的介绍有很多,但关于企业版IDP以及In House应用的讨论非常之少(尤其国内)。下面,笔者将对这两方面的问题进行一个全面细致的介绍。

1、申请Apple ID

这个步骤就不说了。

2、申请邓白氏编码

邓氏编码是美国联邦政府推荐使用的企业机构编码。可以看成是美国版的“组织机构代码”,只不过已经得到了联合国、澳大利亚政府、欧盟及美国政府的承认,成为了全球企业标准。

苹果公司需要邓氏编码才能申请IDP企业版。这倒不是对国内企业的歧视,而是出于的美国商业习惯。在美国所有的采购合同和商业合同中,都会要求供应商提供一个DUNS(邓氏编码),否则对方可能不会跟你签合同。因为所有的美国企业都使用D&B公司的数据库,这样才能保证所有企业编码不会重复。

申请邓氏编码在D&B公司的网站即可:

http://www.dunsregistered.com/

中文网站“华夏邓白氏”:

http://dnbregistered.com.cn/

在网站上提交注册申请后,等待1-2天,对方人员会跟你联系(Email)。

原来以为申请会很麻烦(交流上),但实际上是由华夏邓白氏的中籍文员跟你联系的。

邓白氏注册服务有几个版本,收费情况也不一样。笔者一开始收到的邮件是“实地核实”的版本,报价15200/2年。

后来经与北京苹果联系,只需要购买最基本的“标准版”即可,报价8600元/2年, 有网友说2000-3000元/年,现在看来是不可能了 ,在这个物价飞涨的年代:-(。

联系时一定要强调是购买标准版服务(最便宜),否则你可能会花冤枉钱。

收到邮件后,把申请表、协议打印出来,填好并加盖公章,然后加上企业营业执照副本、扫描为电子的,发给对方邮箱。

其实还有一个就是汇款水单(小票),需要发送给对方。这一步其实可以省略。笔者申请时并没有email汇款水单 ,只要对方确认汇款到帐即可。

大约5-7天后,对方发来第2封邮件,告诉你贵公司的编码。此外还可以在网站上安装一个邓白氏电子标识——在网页上嵌入指定脚本,则会在页面上显示一个D&B图标,点击图标自动链接到D&B的网站并呈现你们公司的电子注册信息。

3、申请IDP企业版

登录苹果开发者网站iOS Dev Center,申请Apple Developer Program,只不过这次选择的是iOS Enterprise Program链接(在页面底部)。

点击Apply Now,下一页Continue,下一页选择“Use an existing Apple ID”,Continue。

下一页,输入你的Apple ID、密码登录。

后面就是确认注册协议和填写你的公司资料了(英文)。内容最好同邓氏的一样,否则对方会打电话来确认,需要更改。

填写完公司资料,还要填写委托人联系资料。注意委托人应该有代表公司签字的授权(公司认可,他们会在电话里确认)。

提交资料后,可以在邮箱里收到苹果的邮件,内容大概是感谢你提交了申请,申请的编号是多少,公司名称、邮箱地址等等,如果你想看评审流程,可以登录Member Center。

接下来就是等待苹果的电话了。

这个过程大概要2-3天,对方会安排懂中文的人员来电话,如果没什么问题,接下来(电话之后几分钟)会收到苹果的第2封邮件,大意是要你点击邮件中的链接,查看一个协议(我不知道这个协议和第1个协议有什么不同,反正我直接点同意了)。

协议同意后,显示一个页面,大意是你所申请的国家不支持在线购买苹果产品(在线支付),需要你下载一个pdf的purchase form:

iOS 开发者企业计划 - 云水禅心 - 云水禅心

 

将它打印出来,根据要求填好,然后传真给苹果。

注意,国内信用卡支持美元支付的一般是Visa卡(如招行)和Master卡(如交行),一定要找那种卡上印有“Visa”或”Master”标志的信用卡。

Cvc2 code是指信用卡背面的那串数字(7位)的末3位。

信用卡地址写申请信用卡时登记的地址。

因为公司的传真机无法发送国际传真,我将purchase form扫描后发给了亚洲苹果     chinadev@asia.apple.com , 请其转交给 Billing 团队。

亚洲苹果几分钟后自动回复了一封邮件,并在信中附了一个业务流水号: Follow-Up: 149653 xxx

下次再给亚洲苹果联系时,可以附上这个业务流水号。

然后3-5 个工作日后,约早上6点多收到扣费成功短信(信用卡提供的功能)。登录邮箱后,果然收到了苹果的2封email,1封是发票,上面有你的发票号码,单位报 账的时候把这封邮件内容打印出来就可以了。另1封是激活邮件,告诉你现在你的idp帐号已经生效了,你点击那个“login now”按钮可以登录到member center,这时可以看到你的developer program overview的状态已经改变。同时,Peoples中会包含一个成员,这个成员就是你注册IDP时所绑定的开发者帐号(Apple ID),同时也是该IDP的Team Admin或Agent。

4、制作iOS 开发者证书

4.1 在本机生成证书请求CSR

打开“钥匙串”应用程序,修改偏好设置如下图所示:

iOS 开发者企业计划 - 云水禅心 - 云水禅心

选择菜单“钥匙串访问 -> 证书助理-> 从证书颁发机构求证书”.

注意,如果此时密钥中的某个私钥处于选中状态,则菜单会变为“钥匙串访问->证书助理->用<私钥>从证书颁发机构求证书”,这样制作出来的CSR是无效的。

iOS 开发者企业计划 - 云水禅心 - 云水禅心

输入你的email地址和名字。确保email地址和名字与你注册为iOS开发者时登记的相一致。

勾选Saved to Disk(保存到磁盘)及Let me specify key pair information(指定密钥对信息),然后点Continue。

iOS 开发者企业计划 - 云水禅心 - 云水禅心

当选择了Let me specify key pair之后,会要求你指定文件保存位置。接下来按下图所示指定密钥对信息:

iOS 开发者企业计划 - 云水禅心 - 云水禅心

Continue,即生成了CSR文件。一旦生成CSR,在“登录”钥匙串中会生成一对密钥对(一个私钥,一个公钥)。你可以在钥匙串的密钥栏中查看。

4.2 提交CSR文件

用企业版IDP绑定的Apple ID( 跟制作CSR时要求输的的可能不一致,这里是注册企业版时绑定的iOS开发者帐号,即Agent)登录iOS Provision Portal 。

 

点击“Certificates-> Development” 中的 “Add Certificate”按钮。

iOS 开发者企业计划 - 云水禅心 - 云水禅心

接下来点击最下面的“Choose file”按钮,选择所生成的CSR文件,然后点 “Submit”。如果密钥长度未设置未2048,Portal会拒绝CSR。提交CSR 后,Team管理员(Agent)会收到一封提醒邮件,主题为 Certificate Request Requires Your Approval,提示你需要去同意该CSR。此时Agent需要登录Portal去同意该CSR。但实际上,Agent也可能根本不需要去点“同 意”,Portal几秒钟后就自动同意了——笔者遇到的情况就是这样的。

4.3 下载并安装开发者证书

如果机器上未安装WWDR证书,请点击 “Certificate-> Distribution”中的链接“Saved Linked File to Downloads” ,以下载WWDR证书,并通过双击WWDR证书进行安装。

在“Certificate -> Development”中, 在Your Certificate下会列出当前有效的开发者证书。 点击“Download”,即可下载到本机。下载后双击,即可安装到本机。 可以在钥匙串“证书”一栏中查看到导入的开发证书。

Team 成员只能下载自己的iOS开发证书。Team管理员有权下载所有成员的公有证书。苹果不接受CSR中的私钥。私钥仅对创建者有效,并且必须存储在系统钥匙串里。

4.4   保存私钥并迁移到其他系统

如果你在多台电脑上进行开发或者重装系统,那么把私钥存储在安全的地方是件很重要的事情。如果没有私钥,你无法在Xcode中签名代码并进行真机调试。

钥匙串在生成CSR时,就会在“登录”钥匙串中创建一个私钥。该私钥和你的用户帐号绑定,如果重装OS导致该私钥遗失,则该私钥无法再次生成。如果你想在多台电脑上开发和调试,你必须将私钥导入到每一台机器上:

在钥匙串访问程序中,选择登录钥匙串的“密钥”。可以看到有许多密钥对,选择与你的开发者证书相对应的私钥(还记得创建CSR 时要你输入的邮箱地址和名字吗?那个名字会显示在私钥的名字上)。然后选择菜单“文件->导出项目…”,将私钥保存为.p12格式 (Personal Information Exchange)。当提示输入密码时,设置一个密码并记住它,它会在导入.p12文件时使用。现住,你可以把.p12文件拷贝到其他机器上并双击它进行 安装,这时会提示你输入导出私钥时设置的密码。

5、设备IDs

所谓设备ID(device ID又称UDID)是Apple 设备上的40位16进制码,每台Apple设备的device ID都是唯一的,Apple以此来识别不同的iOS设备。

我们通过在Provision Portal中录入设备的device ID,可以允许开发者在指定真实设备上进行调试。在Provision Portal中最多允许输入100个device ID。

因此,录入device ID是后续制作Provision Profile的必需步骤(而Provision Profile又是真机调试的必需步骤)。

5.1 获取device ID

两种获取device ID的方式:

把Apple 设备(iPhone,iPod)连接电脑,打开Xcode的Orgnizer:

iOS 开发者企业计划 - 云水禅心 - 云水禅心

把Apple 设备(iPhone,iPod)连接电脑,打开iTunes:

iOS 开发者企业计划 - 云水禅心 - 云水禅心

那个40位16进制的数字就是device ID。

5.2 添加单个device ID

以Team管理员登录Provision Portal,点击Devices页面中的“Add Device”按钮,在其中输入:

Device Name:设备名称,输入一个描述该设备的名字。

UDID:即device ID。

点击提交即可。

iOS 开发者企业计划 - 云水禅心 - 云水禅心

6、创建App ID

App ID是识别不同应用程序的唯一编码。如果你的程序要连接Apple Push Notification服务(一种push通知),需要用到App ID。如果应用程序之间要共享钥匙串数据,也会用到App ID。总之,App ID在iOS设备上大量被使用。在这里App ID的最大用处是制作真机调试用的Provision Profile(它需要提供一个App ID)。

一个App ID有两部分构成:一个10位字符的Bundle Seed ID前缀,这个Bundle Seed ID由Apple分配,全球唯一,保证不会重复;一个Bundle Identifier后缀,这个Bundle Identifier由Team管理员指派,Apple建议用反域名规则命名这个Bundle Identifier。例如: 8E549T7128.com.apple.AddressBook.

如果你写了一系列应用程序,它们共用相同的钥匙串(如共用密码),或者根本就不使用钥匙串访问,你可以只创建一个App ID,所有的应用程序都使用以星号结尾的App ID。这个星号就是通配符,只能用于App ID最后一个字符。例如,这个App ID可以是: R2T24EVAEE.com.domainname.* 或者 R2T24EVAEE.*

6.1 创建App ID

以Agent或Team 管理员登录Provision Portal,点击“App ID”页面中的“New App ID”按钮。

iOS 开发者企业计划 - 云水禅心 - 云水禅心

App ID Name:给这个App ID一个名字。如果存在多个App ID,每个App ID需要一个易于识别的名称。

App ID:如前面所述,Bundle Seed ID是Apple分配的,其实这里只需要你输入Bundle Identifier。可以使用统配符*。

7、制作开发者Provision Profile

拥有了开发者证书(Development Certificate),只是表明你有权利在电脑上进行开发,在模拟器上运行程序,但你还不能在iPhone上运行你开发的程序。其实如果你只是在模拟 器上调试程序的话,要不要开发者证书都无所谓,因为证书只是用来代码签名(Code Sign)的,如果在模拟器上跑的话,你可以选择不签名(don’t code sign)。

如果要在真机上调试就不一样了。它需要一个Provision Profile,没有这个Provision Profile,苹果设备无法安装运行你开发的程序。这个Provision Profile中记录了一些信息:开发者证书、开发者Apple ID、一系列设备ID(开发者可以使用哪几部设备进行调试)。

7.1 创建开发者Provision Profile

以Agent登录Provision Portal,在“Provisioning->Development”,点击“New Profile”按钮。

Profile Name:输入Profile的名字,随意。

Certificate: 选择开发者证书。

App ID:选择一个App ID。

Devices:设备ID列表。

 

点击“Submit”,即会生成Development Provisioning Profile。

iOS 开发者企业计划 - 云水禅心 - 云水禅心

7.2 安装Development Provision Profile

所有Team成员都可以下载Development Provision Profile。但只有Profile中记录了设备ID的设备以及iOS开发者证书所指定的开发者能够使用这个Profile。

在Portal 的“Provisioning->Development”,点击某个profile右边的“download”按钮。下载profile后,将下 载到的文件拖拽到桌面Dock面板的Xcode图标上(或者直接拖到Xcode的Orgnizer中)。这会将profile文件拷贝 到~/Library/MobileDevice/Provisioning Profiles目录。

iOS 开发者企业计划 - 云水禅心 - 云水禅心

7.3 签名并调试

在Xcode中打开工程,选中 Target,打开info窗口,在Build面板中找到“Code Signing Identify”,打开并点击下面的“Any iOS Device” :

 

iOS 开发者企业计划 - 云水禅心 - 云水禅心

在弹出菜单菜单中选择你的签名,该签名应当和一个灰色的Profile 对应。这个Profile就是我们前面安装的Development Provision Profile。例如,我们在7.1中创建的Profile 的Profile Name为My First Development Provisioning Profile,那么我们选择的签名就是位于“My First Development Provisioning Profile”(显示为灰色)下面的Team Leader的开发证书。也就是说“My First Development Provisioning Profile”中绑定的开发证书是Team Leader签名的。

在Properties面板(其实就是info.plist中的内容),根据你的App ID设置你的Bundle Identifier。如果你的App ID是A1B2C3D4E5.com.domainname.applicationname( 我们在前面创建的App ID),那么Bundle Identifier可以是 com.domainname.applicationname 。如果App ID使用了通配符,比如 A1B2C3D4E5.com.domainname.* ,则Bundle Identifier可以是com.domainname.<任意字符>。

iOS 开发者企业计划 - 云水禅心 - 云水禅心

点击项目窗口左上角的下拉框,选择“ Device | Debug ”,然后点击“Build and Debug”按钮,编译并在真机上运行程序。

8、发布应用程序

发布应用程序需要使用发布证书(Distribution Certificate)。发布证书的制作,跟制作开发者证书的步骤是一样的,只不过使用的是Provision Portal的“Certificates->Distribution”功能。

把制作号的发布证书下载、安装到本机。

但是发布用的Provision Profile稍有不同。 企业版IDP只有两种发布方式:In House和Ad Hoc。两种Profile制作步骤稍有区别。 用In House方式发布是企业版IDP真正区别于其他版本的IDP所在。我们重点介绍In House方式的发布。

8.1 制作In House 方式的Destribution Provision Profile

以Team Admin登录Provision Portal,打开“Provisioning Distribution”页面。

 

iOS 开发者企业计划 - 云水禅心 - 云水禅心

Distribution Method:发布方式,选择In House。

Profile Name:Profile名称,用于区别多个Profile。

Distribution Certificate:选择要在Profile中绑定的发布证书。

App ID:指定一个已有的AppID。

Devices(optional):要绑定的device ID。由于In House方式可以在任何Apple 设备上发布,所以不需要设定Devices,这一项为空。

点击“Submit”,生成Profile。将Profile下载到本地进行安装。方法:把Profile文件拖拽到Dock上的Xcode图标。

8.2 制作Ad Hoc方式的Distribution Provision Profile

 

以Admin或Agent登录Provision Portal。 打开“Provisioning Distribution”页面。

iOS 开发者企业计划 - 云水禅心 - 云水禅心

与In House方式大同小异,只不过发布方式选择Ad Hoc,同在Devices(optional)栏勾选要绑定的device ID,最多可选择100个。

点击“Submit”,生成Profile。将Profile下载到本地进行安装。

8.3 编译In House发布版本

打开你的工程。在工程的info窗口的Configuration面板,从Configuration列表中选择Release,点击 “Duplicate”按钮,将复制出来的Configuration改名为Distribution。

iOS 开发者企业计划 - 云水禅心 - 云水禅心

 

打开Target的Info窗口,在Build面板,将Configuration修改为Distribution:

 

 

iOS 开发者企业计划 - 云水禅心 - 云水禅心

 

点击“Any iOS Device”,在弹出菜单中选择对应Profile下对应的发布证书,这个Profile应该就是前面6.1中制作并安装的In House 方式制作的Distribution Provision Profile(还记得Profile Name吗?):

 

iOS 开发者企业计划 - 云水禅心 - 云水禅心

 

切换到Properties面板,在Identifier栏输入Bundle Identifier。该Bundle Identifier应根据App ID填写。

在工程窗口,选择当前配置为Distribution:

iOS 开发者企业计划 - 云水禅心 - 云水禅心

 

点击“File->New File”菜单,然后选择“Code Signing->Entitlements”:

iOS 开发者企业计划 - 云水禅心 - 云水禅心

 

打开Entitlements.plist,反选“get-task-allow”,保存。 该选项允许其他进程(比如调试器)附加到你的程序,当然,在发布阶段,这个选项应当设置为false。

注意,根据Apple的文档,iOS 4.0/Xcode3.2.3之后创建的Entitlements文件不再包括get-task-allow选项——默认情况下,如果Entitlements中没有get-task-allow选项,则不允许附加进程(即无法调试)。

在调试配置下运行时,你不需要Entitlements 文件,因此是允许附加进程的(可以进行调试)。但是有时候,你已经有了一个Entitlements文件(比如你已经运行过Distribution配 置),如果你再次运行Debug配置,则程序无法启动,因为get-task-allow默认为false(iOS 4.0及Xcode3.2.3以后)。这种情况下,请手动添加一个boolean类型的get-task-allow键,并设置为false。

iOS 开发者企业计划 - 云水禅心 - 云水禅心

 

再次打开Target的Build设置面板。在“Code Signing Entitlements”中,输入Entitlements.plist的文件名。

iOS 开发者企业计划 - 云水禅心 - 云水禅心

 

点击“Build”编译。注意:你需要准备一个57*57像素的图标,iPhone和iPod会在主屏上显示该图标。

选中工程文件夹Products下面的.app文件,然后点击Action下拉菜单中的Reveal in Finder。

8.4 制作安装包

iPhone 应用程序的安装文件主要有两种:.ipa格式和.app格式。前者是以.ipa为后缀名的文件(已经包含了ProvisionProfile文件),后者 实际是以.app为后缀的文件夹(不包含ProvisionProfile文件)。因此,前者可以直接发布给用户进行安装,而后者需要和 ProvisionProfile文件打包在一起进行发布。

8.4.1 制作ipa包

当把.app 文件安装到iTunes的资料库之后,应用程序就是以.ipa的方式存在了。在“资料库->应用程序”中选中这个应用程序图标,右键,选择“在 Finder中显示”,然后就可以在Finder中把这个.ipa文件拷贝出来了。.ipa文件即可用后面的方法进行安装。

8.4.2 制作rar/zip包

把编译后的.app 文件和ProvisionProfile文件一起压缩为rar/zip文件,即可发送给其他人进行安装,或者发布到网络上以供下载。注意,不要使用Mac 自带的归档工具。因为windows使用ANSI编码而Mac使用Unicode编码,二者互不兼容,这样使用归档工具压缩出来的rar/zip包无法在 windows下解开。你可以使用开源的压缩工具keka:

http://www.kekaosx.com/release/Keka-0.1.4.2.dmg

keka能制作在windows下兼容的压缩包。解压缩后的文件可用后面介绍的2种方法之一进行安装。如果一种方法不能安装,可换用另一种方法。

 

 

8.5 安装应用程序

Ad Hoc或In House发布的应用程序,可以将.app与Provision Profile文件打包在一起发送给用户。用户可以用两种方式安装:使用iTunes,或者使用iPhone配置使用工具。

8.5.1 使用iTunes

用户将压缩包中的.app和Provision Profile文件拖到iTunes的“资料库->应用程序”下,然后和iPhone/iPod进行同步。

8.5.2 使用iPhone配置实用工具

iPhone配置工具是完全免费的,你可以从这里下载:

http://support.apple.com/kb/DL926?viewlocale=zh_CN

安装后会在“应用程序/实用工具”中生成一个快捷方式“iPhone配置实用工具”。

同样,将iPhone/iPod 连上电脑,打开“iPhone配置实用工具”,将.app和Provision Profile文件拖放到“iPhone配置实用工具”的“资料库->应用程序”下,然后选中你的iPhone/iPod,在右边“安装或删除应用 程序列表”中,点击某个应用程序右边的“安装”按钮进行安装。

 

9、问题及错误

如果Xcode出现Code sign错误:

Code Sign Errors: profile doesn’t match any valid certificate/private key pair in the default keychain

同时在Organizer中出现下列提示:

A valid signing identity matching this profile could not be found in your keychain

则需要把钥匙串中的所有证书和密钥删除,然后重新请求证书、修复provision profile、下载并安装,一般可以得到解决。

iPhone企业版开发者申请小记

http://b.imi.im/?p=348

前面介绍过了 个人版的申请,开这里,我们继续企业版的申请 :)
请注意这个企业版并不是大家理解的大家一起开发用的公司帐号,不是Company,是Enterprise,或者叫 in-house, 此证书不需要经过App Store批准就可安装到用户手机上,或者说是个无限制版的AdHoc

下面是企业应用的一些细节问题:

1. 需要证明您的企业有500名以上员工

2. AdHoc版本只能发给最多100个人,并且需要知道手机的UDID, 企业应用程序没有限制,也不需要手机ID

3. 可以用Private API !因为没人审核你,娃哈哈!!无法无天了

4. 用户安装非常简单,只需要从网络或者邮件里下载这个程序和想要的预置文件,通过iTunes软件打开后同步iPhone即可安装。任何人都可以安装运行,所以要确保此程序存放的位置安全。

5. 用户安装后,程序可以自己升级而不需要重新给每个用户发放新版本。(相当于企业自己有一个app store)

6. 申请此资格需要299美金

7. 企业DUNS编码 (在线填写)
注: 企业可通过D&B网站http://www.dnb.com进行申请,中国企业的话可直接至其中文网站进行邓氏编码注册,其中国公司为上海华夏邓白氏商业信息咨询有限公司(http://www.huaxiadnb.com/chinese) 为方便起见可直接向D&B中国公司联系进行申请,需要提供一些资料,并支付费用(一千到两千RMB左右)。请注意同一企业在各地的实体应该有不同 的邓氏编码,因此如果企业在各地有分公司或者不同实体厂区的话,应在申请邓氏编码时告知D&B,根据实际情况申请该编码。

通过 itms:services:在线安装ipa ,跨过app-store

1.需要一个html文件,引导下载用户在线安装ipa

 

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>一键安装掌上综调iPhone版</title>
</head>

<body>
<a href=’itms- services://?action=download-manifest&url=http://222.177.4.242/ios /d.plist’>一键安装掌上综调iPhone版</a>
</body>
</html>

 

 

2. 上文中的d.plist文件内容如下,其实它是一个XML文件,有关plist文件,请自行查阅google

 

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>http://222.177.4.242/download?attachId=022DB5EAF88A57B175D24060DCD1BA70</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>http://222.177.4.242/ios/icon.png</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>http://222.177.4.242/ios/icon.png</string>
</dict>
</array><key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.ccssoft.mopclient.chongqing</string>
<key>bundle-version</key>
<string>1.0.0</string>
<key>kind</key>
<string>software</string>
<key>subtitle</key>
<string>掌上综调</string>
<key>title</key>
<string>掌上综调</string>
</dict>
</dict>
</array>
</dict>
</plist>

 

上面2中的http://222.177.4.242/download?attachId=022DB5EAF88A57B175D24060DCD1BA70 这是ipa包所在的网络地址

 

3.自行找一个icon.png放在上面两个文件的同一个目录,此图片用作在iphone上显示程序图标。 http://222.177.4.242/ios/icon.png

 

4.使用iphone safari浏览器,浏览http://222.177.4.242/ios/d.html文件,即可安装了。简单吧。

iOS 5的StoryBoard

StoryBoard是iOS 5的新特征,旨在代替历史悠久的NIB/XIB(其实StoryBoard还是基于NIB/XIB的,不过开发人员已经无需直接跟NIB打交道了)。目前关于StoryBoard的文档并不多,苹果的iOS 5的开发者文档里也仅有不多的介绍。所以,本文只是简单的谈谈本人对StoryBoard的一些粗浅的理解。(StoryBoard有时也叫做StoryBoarding,我不太注意这种细节,所以两个词经常会混用,如果你英语可以的话,能体会到两者的细微差别)

iOS <wbr>5的StoryBoard

StoryBoarding机制比之NIB/XIB的的优势何在呢?个人认为,StoryBoard有以下几个优点:

能够减少很多跟View相关的代码;

能够使View和Controller进一步解耦;

能够优化程序的“页面流”,使程序的结构更清楚 ;

要理解这些优点,我们先要对NIB有一个基本的认识。通常,NIB是和ViewController相关联的,很多ViewController都有对应的NIB文件。NIB文件的作用是描述用户界面以及初始化对象和界面元素对象。其实开发者在NIB里描述的界面和初始化的对象都能够在代码中实现;之所以用Interface Builder来绘制界面,是为了减少那些设置界面属性的无聊和重复的代码,让开发人员能够集中精力做程序的功能。

而StoryBoard的出现,则是进一步加强了这方面的功能;NIB文件是没有办法描述从一个ViewController到另一个ViewController的过渡的。这种过渡只能靠手写代码来实现。相信很多人都会经常用到 -presentModalViewController:animated:以及-pushViewController:animated:这两个方法。这种代码在Storyboarding里将成为历史;取而代之的是Segue。Segue定义了从一个ViewController到另一个ViewController的过渡。在Storyboard里,我们只需要像连接界面对象和Action Method那样把ViewController之间用Segue连接起来就可以了,不再需要手写代码了。即便你像自定义Segue,你也只需写Segue的实现,而无需编写调用的代码,StoryBoard会帮你调用的。这就是上面所说的第一个优点。

iOS <wbr>5的StoryBoard

要用好Storyboarding机制,那么必须严格遵守MVC原则。要让View和Controller充分解耦;并且不同的Controller之间也要充分解耦。否则,程序的业务逻辑就会乱成一团,很难理解,维护和除虫(Debug)。

举个例子来说:在过去,特别是初学Cocoa Touch开发的时候,很多人都喜欢直接把AppDelegate当ViewController用,直接在AppDelegate和MainMenu.xib之间交互。应该说,这是一个非常不好的习惯。AppDelegate的作用很简单,就是处理UIApplication的回调,而不应该负责用户界面的处理。很多iOS教程为了省事,都直接把AppDelegate当ViewController用,甚至直接举例在UIWindow上绘制界面。虽然,作为教程这么做很简单明了,因为UIWindow也是UIView的子类,但是这却不是一种优良的实践。因为由ViewController来负责处理View才是正确的做法。

近一段时间,苹果的项目模版经常发生改变,特别是自从Xcode 4发布之后,程序模版(如,View Based Application)开始鼓励使用UIWindow的rootViewController属性来指定第一屏的ViewController,以保证AppDelegate专注于它应该做的事情。而引入StoryBoard之后,AppDelegate已经不管ViewController的事情了 ;第一屏所使用的ViewController(也就是rootViewController)可以在StoryBoard中设置。这样,程序的入口点就能从StoryBoard的“设计图”上一目了然了。这是第二个优点。

iOS <wbr>5的StoryBoard

至于第三个优点,就是StoryBoard的“设计图”了。StoryBoard能够包含一个程序所有的ViewController以及它们之间的连接。因此,StoryBoard甚至可以作为程序的“设计图”来用了。理想情况下,在程序开发接近尾声的时候,我们只需对比StoryBoard的“流程”和最初程序的设计“流程”,就知道程序有没有“走样”了。

iOS <wbr>5的StoryBoard

说完了优点,我们来看看从NIB/XIB到StoryBoard的迁移,我们需要有哪些理解和实践上的改变呢?

首先,自然是(在做程序开发的时候)ViewController不再需要NIB/XIB了(虽然在后台还是用的NIB)。以前在NIB/XIB上做的连接Outlet和Action的操作都可以在StoryBoard上完成了;

第二,孤儿View(独立于ViewController的View)是不能出现在StoryBoard里的,View必须通过ViewController来管理(StoryBoard更像是Controller对象的容器,而不是View对象的容器,NIB/XIB可以作为View对象的容器);

第三,ViewController之间的过渡代码已经是历史了,用StoryBoard可以直接可视化地连接不同的ViewController;

第四,UIWindow对象的作用被进一步淡化,甚至可以这么说:其实很多程序根本无需用到UIWindow对象。AppDelegate也不再被鼓励(也不能)用来做ViewController--你甚至无法在Interface Builder的StoryBoard图上找到AppDelegate对象--因为它本来就不应该用来处理界面(View)的。

最后,写优质的代码,严格遵守MVC设计模式,这样不仅能够让你用好StoryBoard,也能帮助你理解StoryBoard的原理。

StoryBoard是非常好的鼓励MVC和代码解耦的手段,能够让开发人员写出更加容易维护的代码。不过对于初学者来说,确实是个对理解力的小挑战。不过作为初学者也不用担心,一旦突破了理解障碍,你就会发现StoryBoard也非常好用--就像最初理解NIB/XIB时,Outlet和Action“拉线”来“拉线”去,看起来也很神奇;理解之后,发现原来“拉线”神马的也没那么神秘。

好了,絮絮叨叨的啰嗦了这么多无聊的文字,相信你也看累了。如果你依然对我写的东西不知所云的话,你可以稍稍研究一下Xcode 4.2的几个内建模版,然后和使用XIB的模版对比一下,看看苹果是怎么用StoryBoard的,能够很好的帮助你理解Storyboarding机制。当然,千万不要忘记亲自动手用一用StoryBoard!

Happy Coding!

【更新】

在看了WWDC 2011 的session video:UIViewController Containment这个视频之后,我感觉,正确的处理UIViewController之间的层级关系对于Storyboard来说非常重要,两者能够相得益彰。而window.rootViewController的使用,虽然也是鼓励用户不要把AppDelegate当ViewController用,更重要的是鼓励用户使用正确的UIViewController层级关系。

Cocoa关于对象及其保留计数器的三条规则

1.如果使用new,alloc,copy操作获得一个对象,则该对象的保留计数器的值为1

2.如果通过其他方法获得一个对象,则认为该对象的保留计数器的值为1,并且已经自动被设置为自动释放,不需要手动release

3.如果保留了某对象,则必须保持retain方法和release方法的使用次数相等。

@autoreleasepool在ARC和MRC下的区别

MRC这个词应该是我编的,ARC,Automatic Reference Counting,手工引用计数就应该是:Manual Reference Counting,那就应该是MRC喽,不过没有见人这样用过。

ARC引入了新的语句管理自动释放池语法:

@autoreleasepool {
// Code, such as a loop that creates a large number of temporary objects.
}

测试了一下,在ARC情况下和MRC情况下对象的释放有不同。

比如,有这样的代码:

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController{
NSString *myString;
}
@end

声明了一个myString成员变量。

然后编写下面的代码:

– (void)viewDidLoad

{
[super viewDidLoad];
[self performSelector:@selector(test)];
NSLog(@”myString: %@”,myString);
}

-(void)test{
@autoreleasepool {
NSString *string= [[NSString alloc] initWithFormat:@”First Name: %@”, @”tom”];
NSLog(@”string: %@”,string);
myString=string;
}
}

该项目在ARC情况下日志结果:

而在MRC情况下日志结果:

哦,这里说一下怎么切换Xcode项目从ARC到MRC,先选中项目根结点:

然后,在右侧:

因为条目很多,可以在搜索框中输入arc,这样就可以看到下面标识的条目了。

开始我以为@autoreleasepool等同于之前的NSAutoreleasePool类的api,只是起到语法糖的作用,节省了编写代码时间。上面的例子说明,只见还是有区别的。

为此,我查询了clang的文档,找到目前能说服我的解释。

这里简要介绍一下llvm和clang:

  • llvm,low level virtual machine,是底层编译库
  • clang,使用llvm底层库,编译器

可以参考这篇中文文章了解:LLVM与Clang介绍

下面解释一下在ARC和MRC中的不同处理:

  • ARC,将释放所有在@autorelesepool块中的对象,这就是为什么本文示例使用了默认修饰符(strong),相当于做了retain,也一样被释放的原因
  • MRC,在这种情况下@autorelesepool块等同于调用NSAutoreleasePool类的api

具体请参见:Clang的Automatic Reference Counting文档@autoreleasepool节

移动应用设计入门

随着智能手机、平板电脑的快速普及,越来越多的企业意识到建立自己的APP应用和移动网站,也有越来越多设计师开始转战移动平台。本篇主要介绍移动平台的一些入门知识和各平台的设计要求。

 

一、移动产品的实现方式

移动产品的实现方式主要有三种:①Native App;② Web App;③ Hybrid App

 

① Native App指的是本地化应用,就是我们从应用商店下载安装的独立应用,类似于PC平台上的客户端,Native App的主要优势有:
最佳的用户体验,最华丽的交互,操作流畅
可节省带宽成本
能够轻松调用图片相机,各类传感器,麦克风,电话….
可以使用PUSH推送
Native App有着非常明显的优势,也是用户接受程度最高的呈现方式,但开发原生应用的成本比较高,而且维护更新滞后,访问路径封闭;如果不是用户常用的应用,很难长时间存活在用户手机里。

② Web App 通常是指触屏站,就是我们通过手机浏览器访问的Html5网站,Html5支持一些新标签和脚本,可以做出类原生应用的效果和动画,Web App的主要优势有:

实时更新
不需要针对各平台开发不同的版本,开发成本低
输入网址即可访问,不需要下载安装更新。

但Web App的缺点也比较明显:
部分浏览器无法调用相册, 硬件资源和传感器
无法使用推送功能
性能较差
浏览器适配容易出问题
缓存小,以iPhone为标准,所有的图片和脚本都要小于25KB
目前只兼容webkit内核的手机浏览器, WP,Symbian等平台的浏览器无法正常访问。Web App主要服务于产品的轻度用户,或作为Native App宣传下载的中转站。

 

③ Hybrid App 是指混合模式应用,同时使用网页语言与程序语言编写,包含原生视图和Web视图两种方式,使用方式和Native App一致,而又继承了Web App实时更新开发成本低等优点。

Hybrid App通常分为三种类型:多View混合型,单View混合型,Web主体型。

 

我们先来认识一下什么是多View混合型:

天猫App的产品详情页使用的就是多View混合型,基本信息用的Native view, 而数据格式较为混乱的商品详情页就直接用的Web view视图。这种移动应用主体通常是Native App,Web技术只是起到补充作用。
再来了解一下什么是单View混合型:

即在同一个View内,同时包括Native View和Web View。互相之间是覆盖(层叠)的关系。这种方式的体验要优于多View混合型,一般用于Native View中部分数据接口不方便实现的页面,普通用户基本上看不出与原生视图的区别。
而Web主体型可以理解为一个Native的外壳内嵌入了纯Html网页,这种方式的app想通过商店审核非常困难,而且用户体验也非常的糟糕,目前的技术不是太成熟,缺钱缺人缺时间的情况下可以考虑使用这种方式。

二、移动产品的需求特性

一般企业级的App都是根据Web主站的需求做移动化定制,规划需求时主要考虑用户的使用环境。
根据移动平台的用户使用环境,需求主要考虑:
App作为主站的快捷工具,只需实现核心需求,考虑添加场景需求,而不是所有需求的复制;
信息处理方式多样化:视觉、听觉和运动触觉;手机是各个终端的组合体:电话、互联网、电脑、信用卡、电视、媒体播放器、收音机、录音笔、摄像头…需要充分利用;
要利用好手机随身携带的优势,比如推送通知,LBS定位;
手机的输入效率有限,需要避免复杂的编辑操作和危险操作需求;
网络环境不稳定,避免单页面呈现内容过多;
手机平台无资源管理器,屏幕小,硬件能力有限,只适用于微任务,代替不了PC端;
移动平台本身具有短路径的缺陷(无法在众多APP间自由跳转)。

 

三、移动产品的交互特性

① 操作行为的革新
PC端的输入设备是键盘+鼠标,而移动端主要靠手势

② 传感器的利用
移动设备除了各种手势操作,各种传感器也应该是交互设计可以利用的利器,下面简单介绍几种常用的传感器类型:
重力感应器,最常应用与横竖屏切换,平衡球游戏等.

速度感应器,应用最成功的是微信的摇一摇,然后市面出现了大批的摇晃类操作的应用都是利用的加速度传感器;

方位感应器,主要应用于指南针,地图等。

光线感应器主要应用与屏幕亮度自动调节,自动切换白天夜间模式;
图中的新闻客户端之所以没有设计成自动切换,可能是考虑到绝大都数用户都不习惯夜间模式,或者不喜欢应用的强制切换。
除了上述的几个常用传感器,还有方向传感器(赛车类游戏)、距离传感器(接电话时屏幕自动熄灭)、压力传感器(部分机型有,可以检测楼层、海拔)等。

③小屏幕,单窗口

在设计Web网页时,我们会有全局导航,页签,栅格,面包屑等方法处理复杂信息的呈现,而在移动端,会有小屏幕单窗口的特性,而且手指的精准度远差与鼠标,所以移动应用的设计相比网页有更多的要求:

最小点击热区不小于44*44
不超过4个次级关系的页面层级
明确的操作反馈和提示
使用不同平台的标准控件
页面跳转的意向化过渡
具备趣味性

 

④平台操作的差异化

虽然很多Android的应用和iOS应用无差异,但各平台的操作习惯和实体按键并不相同,iOS应用的所有操作都是通过手势完成,而Android和WindowsPhone却有使用率非常高的实体键,而且高级手势在android和WP端并不能实现。

 

那么各平台的设计规范又有哪些区别和优势,这个..还是等下一个章节再讲吧。

HTML与原生应用合体或成开发者第三选择

今天似乎人人都已陷入HTML5与原生手机应用非此即彼的论战中,并极力鼓吹其中一方的发展潜力。虽然苹果和谷歌已经各自偏向一方,但有些公司却已经做出第三种选择——将这两者结为一体的“混合应用”。

混合应用开发过程采纳了原生应用功能,同时也融合了更具前瞻性的HTML5技术。

混合应用是一种需要下载,但有部分或者所有用户面植入了浏览器元素的应用程序。对用户来说,混合应用与原生应用并无二致——它们都需要通过应用商店 渠道下载,都可以保存的在手机,运行方式与原生应用并无差别。但对开发者来说,这其中的差异却不容忽视,因为这意味着他们无需针对各个手机操作系统重新编 写应用,而是可以选择用HTML、CSS和JavaScript编写其中一部分代码,并在多个平台上运行应用程序。

hybrid apps(from venturebeat)

hybrid apps(from venturebeat)

“混合”这一词实际上道出了这种应用的多种可能性。例如美国银行、Facebook和Yelp的iPhone应用程序,就有部分内容是直接将公司网 站的部分页面转移过来。而像《Tower Madness》游戏等其他应用,则嵌入了一些以HTML5编写的页面。但还有一些应用,例如Harmounius(一款绘图画板)或Logitec’s Squeezebox Controller的UI则完全采用HTML技术。

从商业角度来看,尽早采用HTML5技术是最明智的做法。有些行业巨头已经将HTML当作唯一可行的跨平台开发技术。传说中的Facebook项目 “Project Spartan”(游戏邦注:有人称它是一个基于HTML5的网页应用商店),以及微软宣布开发者将可使用HTML5和JavaScript为 Windows 8编写应用程序等消息,更增加了HTML5获胜的筹码。甚至有人认为现在的开发商面临的并非“是否”,而是“何时”采纳HTML技术的问题。

有些公司并不急于追赶HTML5潮流的一个主要原因是,他们对HTML5应用无法接入移动设备原始相关功能的这一情况颇有顾虑。纯粹的移动网页应用 (游戏邦注:这里指那些运行于浏览器的应用,而非混合应用)目前还不能访问摄像头、麦克风、通讯录等手机功能。虽然W3C已经启动支持网页应用访问这类移 动设备功能的项目,但移动浏览器现在还不具备这些功能已是不争的事实,而这一点却是许多创新型手机应用的必备条件。

但在混合应用领域,PhoneGap库等开源框架却可以让JavaScript代码访问手机的罗盘、照相等功能成为可能,甚至可以搜索或创建联系人列表、约会安排等其他多种网页应用无法接入的手机功能。

接入移动设备功能并非混合应用与移动网页应用的唯一区别。这两者之间的另一大差异表现在,混合应用多数需通过应用商店渠道下载,而不是在浏览器运行,用户需要下载安装才行。

另外,混合应用的HTML页面可通过网络服务器传送,但这一点并非必备条件。如果要提高运行性能,混合应用还可以植入一个包含其所需的网页资源(例如HTML、JavaScript、CSS和图像)的副本,以便用户快速访问内容,而不必等待网络服务器将内容传送过来。

除此之外,混合应用的另一个特点在于,它与网页应用又有共通之处。混合应用并不像原生应用那样,直接使用手机操作系统所支持的图像API和UI,其 多数页面采用的是浏览器的渲染引擎,这与网页应用一致。这就意味着从当前来看,只有原始编写页面才可以实现像游戏一般高质量的图像效果,不过这一点与商务 型应用的关系倒不大。现在我们还无法在手机平台看到以HTML编写的《真人快打3》。

庆幸的是,目前主流智能手机和平板电脑都有强大的HTML渲染引擎,它们已经可以支持多数即将到来的HTML5和CSS3技术标准。

Sencha Touch、jQuery Mobile和dojox.mobile等JavaScript工具包完全可与混合应用开发模型兼容,使这类应用从外观和感觉与原生应用不分彼此。由此可 见,在现代手机硬件设备上运行的混合应用,可以使用HTML5、CSS3和JavaScript实现高度的交互性,创建出色的用户界面。

如果你无法使用HTML满足特定图像或交互性需求,不妨选择结合网页和原生应用功能的混合应用。混合应用中的有趣典型之一就是韩国信用卡Lotte,其应用程序有100个页面以HTML编写而成,仅用一小部分采用了增强现实感功能的原始页面。

还有不少公司在打算转向HTML5网页应用的同时,也正在开发混合应用。从战略性角度来看,开发公司需认真考虑是否尽早采用HTML开发手机应用。 混合应用模式虽然并不适用于所有的应用开发,但至少为大量的可下载应用提供了一个划算的解决方案,也可以算是开发者逐渐向HTML5领域演变的一种铺垫。 (本文为游戏邦/gamerboom.com编译,如需转载请联系:游戏邦)

大神:iPhone 4(iOS 5.1)完美越狱已完

 今天早上,越狱大神Pod2g对外表示称,运行iOS 5.1系统的iPhone 4手机已经可以实现完美越狱。

  其实iPhone 4(iOS 5.1)早就可以越狱了,只不过那些都是不完美的(不能正常开关机)。遗憾的是,Pod2g并没有透露何时会放出该工具。

  此外,大神还主动透露了下一步的工作重点,那就是继续专研配备了A5的iPhone 4S和iPad 2(iOS 5.1)的完美越狱工作。

  有意思的是,之前Pod2g曾发起了一个投票,即询问用户是否等到iOS 6发布以后,再推出iOS 5.1完美越狱工作,不过目前多数投票者都建议他应该尽快推出。