《企业级ios应用开发实战》一1.3 iOS企业应用程序的发布

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 本节书摘来自华章出版社《企业级ios应用开发实战》一 书中的第1章,第1.3节,作者:杨宏焱,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.3 iOS企业应用程序的发布

除了上述特点,iOS企业应用还有一个显著的特点,就是应用程序的发布方式。iOS企业应用具有两种发布方式:In-House和Ad-Hoc,它们并不经过苹果公司的App Store进行发布,而只是在企业内部进行发布。换句话说,不经过苹果商店的应用程序审核程序。

1.3.1 iOS应用程序发布与App Store

2008年3月6日苹果公司推出了iPhone的应用程序开发包(iPhone SDK),吸引了全世界的开发者。2008年7月11日,App Store正式上线,从而开辟了一种前所未有的应用程序销售模式。起初,只有少数的开发者(主要是大型程序开发商)掌握iPhone的开发语言,应用程序商店出现的都是一些精品程序。例如,在2008年TIOBE发布的全球编程语言排名中,iPhone等使用的Objective C一直都在40位左右徘徊,使用率为0.134%;排名第一的为Java,使用率约为19%。《连线》杂志评出的2008年最佳iPhone程序中,排名第一的是来自谷歌的地图程序Google Earth,Twitter的iPhone手机客户端排名第七。
然而,随着更多开发者尤其是个人开发者的进入,一些开发者开始从App Store中获益,并被媒体大肆报道。例如, Freeverse公司开发的《Skee-ball》游戏在一个月内就赚得18.1万美元,而Freeverse开发和部署该游戏仅花费了两个月的时间。国内开发者139.ME团队的水族箱程序第一天的下载就实现了300美元的收入。
此后,App Store中应用程序的数量呈现出爆炸性增长。2010年8月,Objective-C已经进入了TIOBE的前十大编程语言排行榜,使用率达到3.15%,并且是增长率最快的语言。App Store中应用程序的数量,也从2008年底的1万个,增加到2009年底的10万个。截至2010年10月,App Store已经增加到30万个应用程序,下载量更是突破50亿。
这些惊人的数字,只能用奇迹来形容,这也让人不难理解:为什么iPhone开发会这样火爆。
然而,如果你现在正准备成为或者已经是一个iPhone开发人员,你也许知道,要想下载iPhone SDK,必须注册成为苹果公司的iPhone Developer(iPhone 开发人员)——这并不是免费的,你需要购买苹果公司的iPhone Development Program;否则你只能下载一个功能有限的iPhone SDK。
除此之外,由于苹果公司一贯坚持的“精品应用”策略,苹果公司没有开放iPhone的操作系统。实际上,在App Store上线以前,人们甚至无法在iPhone上安装程序——苹果公司通过App Store控制着iPhone应用程序的发布。如果你想让自己开发的程序安装在iPhone上,你必须购买iPhone Developer Program。
iPhone Development Program有两个版本:标准版和企业版。
标准版程序价格为99美元/年,它提供大量开发工具、资源和技术支持,支持可以通过苹果公司App Store发布应用程序。同时也支持在iPhone/iPod Touch/iPad(不仅仅是在模拟器)上调试代码。
企业版程序价格为299美元/年,支持开发企业专用的,在内部发布的企业应用程序。它不支持在苹果公司App Store销售和发布应用程序,但它支持不经苹果公司审核的应用程序发布方式。
标准版和企业版这两者的区别很像是IT界中“做产品”和“做项目”的提法。做产品依靠销售产品拷贝盈利,卖的拷贝数越多则赚的就越多,标准版程序也是如此,依靠下载数量盈利。而做项目并不需要销售产品拷贝,它为企业提供解决方案,做的企业越多则赚的越多,即企业版程序,不管有多少用户在下载(安装)和使用,每做一个项目(企业)收取的开发费用总是相对固定的。
网络资料中,介绍标准版IDP比较多,介绍企业版IDP相对较少,而iOS企业应用是本书的主题,与企业版程序有着直接关系,因此接下来详细介绍企业版程序(企业版IDP)。

1.3.2 Ad-Hoc与In-House发布

企业版IDP只支持两种应用程序发布方式,Ad-Hoc和In-House发布。尤其是In-House发布,是企业版IDP所独有的。它使用一种叫做“In House Distribution Provisioning Profile”的文件进行发布,不能发布到App商店进行销售,也不需要Apple的评审。你可以把In-House应用通过任何方式发布给你的企业员工、用户及你认可的其他任何人,尤其适合于企业应用的开发。
1.申请企业版IDP
首先,你需要有一个Apple ID,如果没有则需要事先申请一个。其次,你的企业需要拥有邓白氏编码。如果没有则需要进行注册。
邓白氏编码是美国联邦政府推荐使用的企业机构编码。可以看成是美国版的“组织机构代码”,只不过已经得到了联合国、澳大利亚政府、欧盟及美国政府的承认,成为了全球企业标准。
申请邓白氏编码在D&B公司的网站(英文)或者“华夏邓白氏”网站(中文)申请,在网站上提交注册申请后,等待1~2天,对方人员会跟你联系(Email)。如果英文沟通有问题,你可以在华夏邓白氏进行申请,他们会安排中籍文员跟你联系。
邓白氏注册服务有几个版本,收费情况也不一样。笔者一开始收到的邮件是“实地核实”的版本,报价15200/2年。后来经与北京苹果公司联系,只需要购买最基本的“标准版”即可,报价8600元/2年,有网友说2000~3000元/年,现在看来是不可能的。联系时一定要强调是购买标准版服务(最便宜),否则你可能会花冤枉钱。
收到邮件后,把申请表、协议打印出来,填好并加盖公章,然后加上企业营业执照副本、扫描为电子的,发给对方邮箱。其实还有一个就是汇款水单(小票),需要发送给对方——这一步其实可以省略,笔者申请时并没有Email汇款水单 ,只要对方确认汇款到账即可。
大约5~7天后,对方发来第2封邮件,告诉你贵公司的编码。此外还可以在你的公司网站上安装一个邓白氏电子标识——在网页上嵌入指定脚本,则会在页面上显示一个D&B图标,点击图标自动链接到D&B的网站并呈现你们公司的电子注册信息。
现在,可以申请企业版IDP了。登录苹果公司开发者网站,申请Apple Developer Program,注意要选择iOS Enterprise Program链接(在页面底部)。
点击Apply Now按钮,进入下一页,点击Continue按钮,再进入下一页,选择“Use an existing Apple ID”,点击Continue。进入下一页,输入你的Apple ID、密码,登录。
后面就是确认注册协议和填写你的公司资料了(英文)。内容最好同邓白氏申请时一样,否则对方会打电话来确认,要你更改。填写完公司资料,还要填写委托人联系资料。注意委托人应该有权代表公司签字(需要贵公司认可,他们会在电话里确认)。
提交资料后,会在注册的联系邮箱里收到苹果公司的邮件,内容大概是感谢你提交了申请,申请的编号是多少,公司名称、邮箱地址等,如果你想看评审流程,可以登录Member Center。接下来就是等待苹果公司的电话了。这个过程大概要2~3天,对方会安排懂中文的人员来电话,如果没什么问题,接下来(电话之后几分钟)会收到苹果公司的第2封邮件,大意是要你点击邮件中的链接,查看一个协议。
同意协议后,显示一个页面,大意是你所申请的国家不支持在线购买苹果公司产品(在线支付),需要你下载一个PDF格式的Purchase Form(见图1-1)。
将它打印出来,根据要求填好,然后传真给苹果公司。
注意,国内信用卡支持美元支付的一般是Visa卡(如招行)和Master卡(如交行),一定要找那种卡上印有“Visa”或“Master”标志的信用卡。
Cvc2 code是指信用卡背面的那串数字(7位)的末3位。
信用卡地址写申请信用卡时登记的地址。
如果传真机发送国际传真有麻烦,可将Purchase Form扫描后用Email发给亚洲苹果公司chinadev@asia.apple.com,请其转交给 Billing 团队。亚洲苹果公司几分钟后自动回复了一封邮件,并在信中附了一个业务流水号: Follow-Up: 149653xxx。下次再给亚洲苹果公司联系时,可以附上这个业务流水号。
然后3~5个工作日后,如果信用卡办理了账户余额变动短信提醒功能,则会收到扣费成功短信(注意美国和中国有时差,很可能是在半夜发送的)。登录邮箱后,果然收到了苹果公司的2封Email,1封是发票,上面有你的发票号码,单位报账的时候把这封邮件内容打印出来就可以了。另1封是激活邮件,告诉你现在你的IDP账号已经生效了,你点击那个login now按钮可以登录到member center,这时可以看到你的developer program overview的状态已经改变。同时,Peoples中会包含一个成员,这个成员就是你注册IDP时所绑定的开发者账号(Apple ID),同时也是该IDP的Agent(超级管理员,具有发布权限)。
screenshot

2.制作开发者证书
(1)在本机生成证书请求CSR
从Dock栏的“应用程序”→“实用工具”中,打开“钥匙串”应用程序,修改偏好设置如图1-2所示。
screenshot

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

输入你的Email地址和名字,确保Email地址和名字与你注册为iOS开发者时登记的相一致。
选中Saved to Disk(保存到磁盘)单选按钮并勾选Let me specify key pair information(指定密钥对信息)复选框,然后点击Continue按钮,如图1-4所示。
screenshot

当选择了Let me specify key pair复选框之后,会要求你指定文件保存位置。接下来按图1-5所示指定密钥对信息。
点击Continue按钮,即可生成CSR文件。一旦生成CSR,在“登录”钥匙串中会生成一对密钥对(一个私钥,一个公钥)。你可以在钥匙串的密钥栏中查看。
screenshot

(2)提交CSR文件
用企业版IDP绑定的Apple ID( 跟制作CSR时要求输的可能不一致,这里是注册企业版时绑定的iOS开发者账号,即Agent)登录iOS Provision Portal 。
在Provision Portal页面中,依次点击“Certificates→Development中的Add Certificate”,进入图1-6所示的页面。
screenshot

接下来点击左下角的Choose File按钮,选择所生成的CSR文件,然后点击Submit按钮。如果密钥长度未设置为2048,Portal会拒绝CSR。
提交CSR后,Team管理员(Agent)会收到一封提醒邮件,主题为 Certificate Request Requires Your Approval,提示你需要去同意该CSR。此时Agent需要登录Portal去同意该CSR。但实际上,Agent也可能根本不需要点击“同意”按钮,Portal几秒钟后就自动同意了——笔者遇到的情况就是这样的(可能笔者是用Agent提交CSR的)。
(3)下载并安装开发者证书
用提交CSR的Apple账号登录Portal。如果机器上未安装WWDR证书,请点击“Certificate →Distribution”中的链接“Saved Linked File to Downloads”,以下载WWDR证书,并通过双击WWDR证书文件进行安装。
在“Certificate→Development”中, 在Your Certificate下会列出当前有效的开发者证书。 点击Download按钮,即可下载到本机。下载后双击,即可安装到本机。可以在钥匙串“证书”一栏中查看到导入的开发证书。
Team 成员只能下载自己的iOS开发证书。Team管理员有权下载所有成员的公有证书。苹果公司不接受CSR中的私钥。私钥仅对创建者有效,并且必须存储在系统钥匙串里。
(4)保存私钥并迁移到其他系统
如果你在多台电脑上进行开发或者重装系统,那么把私钥存储在安全的地方是件很重要的事情。如果没有私钥,你无法在Xcode中签名代码并进行真机调试。
钥匙串在生成操作系统CSR时,就会在“登录”钥匙串中创建一个私钥。该私钥和你的用户账号绑定,如果重装操作系统导致该私钥遗失,则该私钥无法再次生成。如果你想在多台电脑上开发和调试,你必须将私钥导入到每一台机器上:
在钥匙串访问程序中,选择登录钥匙串的“密钥”。可以看到有许多密钥对,选择与你的开发者证书相对应的私钥(还记得创建CSR时要你输入的邮箱地址和名字吗?那个名字会显示在私钥的名字上)。然后选择菜单“文件→导出项目…”,将私钥保存为.p12格式(Personal Information Exchange)。当提示输入密码时,设置一个密码并记住它,它会在导入.p12文件时使用。现住,你可以把.p12文件拷贝到其他机器上并双击它进行安装,这时会提示你输入导出私钥时设置的密码。
这个私钥是重要的。如果你机器重装系统了(或者你想把开发环境迁移到另一台机器上),那么很可能需要重新安装开发环境,包括导入开发者证书。每个开发者证书都是和申请证书(提交CSR)时的私钥(私钥可以保存在.p12文件中)是绑定的。如果仅仅是导入了开发者证书文件而机器上没有对应的私钥,则这个开发者证书对这台机器是无效的。
3.设备ID
所谓设备ID(device ID又称UDID)是Apple 设备上的40位十六进制码,每台Apple设备的设备ID都是唯一的,Apple以此来识别每一台iOS设备。
我们通过在Provision Portal中录入设备的设备ID,可以允许开发者在指定真实设备上进行调试。在Provision Portal中最多允许输入100个设备ID。
因此,录入设备ID是后续制作Provision Profile的必需步骤(而Provision Profile又是真机调试的必需步骤)。
(1)获取设备ID
有两种获取设备ID的方式:
把Apple 设备(iPhone或iPod)连接电脑,打开Xcode(以4.2版本为例)的Organizer,如图1-7所示。
screenshot

或者,把Apple 设备(iPhone或iPod)连接电脑,打开iTunes,如图1-8所示。
screenshot

那个40位16进制的数字就是设备ID。
(2)添加设备ID
以Team管理员登录Provision Portal,点击Devices页面中的“Add Device”按钮,如图1-9所示,在其中进行以下设置:
Device Name:设备名称,输入一个描述该设备的名字。
UD ID:即设备ID。
点击Submit按钮即可。
screenshot

4.创建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。其中,8E549T7128是Bundle Seed ID,com.apple.AddressBook是Bundle Identifier。
如果你写了一系列应用程序,它们共用相同的钥匙串(如共用密码),或者根本就不使用钥匙串访问,你可以只创建一个App ID,所有的应用程序都使用以星号结尾的App ID。这个星号就是通配符,只能用于App ID最后一个字符。例如,这个App ID可以是:R2T24EVAEE.com. domainname. 或者 R2T24EVAEE.
以Agent或Team 管理员登录Provision Portal,点击“App ID”页面中的“New App ID”按钮。如图1-10所示,在其中修改如下信息:
Description:给这个App ID一个名字。如果存在多个App ID,每个App ID需要一个易于识别的名称。
Bundle ldentifier:如前面所述,Bundle Seed ID是Apple分配的,其实这里只需要你输入Bundle Identifier。可以使用统配符*。
screenshot

5.制作开发者Provisioning Profile
拥有了开发者证书(Development Certificate),只是表明你有权利在电脑上进行开发,在模拟器上运行程序,但你还不能在iPhone上运行你开发的程序。其实如果你只是在模拟器上调试程序的话,要不要开发者证书都无所谓,因为证书只是用来代码签名(Code Sign)的,如果在模拟器上运行的话,你可以选择不签名(don’t code sign)。
如果要在真机上调试就不一样了,没有这个Provision Profile,苹果设备无法安装、运行你开发的程序(这个Provision Profile也将随程序一同安装到iPhone上)。这个Provision Profile中记录了一些信息:开发者证书、开发者Apple ID、一系列设备ID(开发者可以使用哪几部设备进行调试——这些设备的设备ID要登录到Portal上)。
(1)创建开发者Provision Profile
登录Provision Portal,点击“Provisioning→Development”,点击New Profile按钮,修改以下信息:
Profile Name:输入Profile的名字,随意。
Certificate:选择开发者证书。
App ID:选择一个App ID。
Devices:设备ID列表。
点击Submit按钮,即会生成Development Provisioning Profile,如图1-11所示。
screenshot

(2)安装Development Provision Profile
所有Team成员都可以下载Development Provision Profile。但只有Profile中记录了设备ID的设备以及iOS开发者证书所指定的开发者能够使用这个Profile。
在Portal的“Provisioning→Development”中,点击某个profile右边的“download”按钮。下载profile后,将下载到的文件拖曳到桌面Dock面板的Xcode图标上(或者直接拖到Xcode的Organizer中)。这会将profile文件拷贝到~/Library/MobileDevice/Provisioning Profiles目录。
(3)签名并调试
这需要用到两个文件:证书用于给代码签名,Provisioning Profile用于真机调试。
在Xcode (以4.2版本为例)中打开项目,选中 Target,打开info窗口,在Build Settings面板中找到“Code Signing Identify”,打开并点击“Debug”下面的“Any iOS Device”将弹出一个签名文档(即Provisioning Profile)选择列表,如图1-12所示。
screenshot

提示:除了可以对“Debug”进行签名,我们还可以对“Release”、“Distribution”等进行签名。这里“Debug”、“Release”、“Distribution”指的是不同的编译版本,在Xcode里也叫做Schema。一个Schema是一种编译方案,代表了一个项目在编译时所采用的编译选项,包括编译器选项参数、环境变量、签名文档和编译脚本等。默认情况下,一个Xcode项目只有“Debug”和“Release”两种Schema,分别代表了调试时和发布时的不同编译选项。在Xcode里,这两种Schema是不一样的。因为程序员在开发调试过程中,对代码进行编译是非常频繁的,这种情况下,应该对编译速度进行一些优化,以节省编译时间,但同时运行效率就会较差一些。但对于发布版本就相反了,这时的编译器应当优先考虑在运行速度上进行优化,而编译速度就会有所下降。此外,你也可以自己加入一些定制的Schema,比如“Distribution”,从而对编译选项进行一些调优。
在弹出菜单中选择你要用于签名的Provision Profile(即先前在Portal中制作的Provision Profile),该签名应当和一个开发者证书对应。这个Profile就是前面安装的Development Provision Profile。
注意,有时候Xcode会自动根据当前连接的设备的设备ID选择一个有该设备调试权限的签名,比如一般是位于Automatic Profile Selector(灰色)条目下面的iPhone Developer项。这在大部分时候是适用的,但有时候Xcode的选择并不符合你的意愿。此时就需要手动修改签名。
例如,在图1-12中,Xcode自动选择了“Automatic Profile Selector”下面的“iPhone Developer(current matches 'iPhone Developer:Hongyan Yang...')”进行签名。这表明将用iPhone Developer“Hongyan Yang”的数字证书进行签名。一个证书可以绑定多个Provision Profile。在图1-12的例子中,“Hongyan Yang”的证书就会存在于许多Provision Profile中:My Development Profile、iOS Team Provisioning Profile 。在图1-12中,有的证书是灰色的,表明不能用于当前签名(可能是Provision Profile的IDs列表中没有包含调试设备,或者App ID不匹配,或者证书和私钥不匹配等原因)。
在Target的info面板(其实就是info.plist中的内容)中,还需要设置的Bundle Identifier。如果你的 App ID 是 A1B2C3D4E5.com.domainname. applicationname(我们在前面创建的App ID),那么Bundle Identifier可以是 com.domainname.applicationname(不需要填写Bundle Seed ID)。如果App ID使用了通配符,比如A1B2C3D4E5.com.domainname.*,则Bundle Identifier可以是com.domainname.<任意字符>。如图1-13所示(以Xcode 4.2为例)。
签名完成,你就可以在真机上运行程序了。点击Xcode工具栏左上角Scheme下拉按钮,从中选择Device→Debug,然后点击Build and Debug按钮,编译并在真机上运行程序。
(4)发布应用程序
发布应用程序需要使用发布证书(Distribution Certificate)。发布证书的制作,跟制作开发者证书的步骤是一样的,只不过使用的是Provision Portal的“Certificates→Distribution”功能。
把制作好的发布证书下载、安装到本机。
screenshot

发布应用程序时使用的是“发布证书”,就如同开发时要使用“开发证书”一样。同理,发布时用的签名文档(即Provision Profile)也与开发时使用的不太一样。
企业版IDP有两种发布方式:In-House和Ad-Hoc。两种Profile制作步骤稍有区别。而前者(In-House方式发布)正是企业版IDP真正区别于其他版本的IDP所在。我们重点介绍In-House方式的发布。
6.制作In-House发布的签名文档
以Team Admin(Agent)登录Provision Portal,打开“Provisioning Distribution”页面,如图1-14所示。
screenshot

进行如下配置:
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图标。
7.制作Ad-Hoc发布的签名文档
以Admin或Agent登录Provision Portal。打开“Provisioning Distribution”页面,如图1-15所示。
screenshot

与In-House方式大同小异,只不过发布方式选择Ad-Hoc,同时在Devices(optional)栏勾选要绑定的device ID,最多可选择100个。
点击Submit按钮,生成Profile,将Profile下载到本地进行安装。
8.编译发布版本
打开你的项目。在Target的Builder Settings面板中,找到Code Signing Identity下面的Release项。将Any iOS SDK指定为你的发布证书(Distribution Certificate),如图1-16所示。
screenshot

切换到Info面板,在Identifier栏输入Bundle Identifier。该Bundle Identifier应根据App ID填写。
选择菜单“Project→Edit Scheme”,在Profile的Info窗口中,将Build Configuration选择为Release,如图1-17所示。
在菜单栏选择“Product→Archive”。
如果Archive是灰色的,请连接设备,在Scheme按钮中选择所连接的iPhone,如图1-18所示。
screenshot

这时再次选择“Product→Archive”,Archive就变成可用的了。
点击“Product→Archive”,编译成功后,会弹出Organizer窗口,如图1-19所示。
screenshot

点击Share按钮,又会弹出另一个窗口,如图1-20所示。
screenshot

然后,点击Next按钮,会弹出新窗口选择Archive保存路径,如图1-21所示。注意,不要勾选“Save for Enterprise Distribution”选项。
screenshot

填入文件名,选择保存路径,点击Save按钮,文件会保存在指定地方。打开Finder,你可以在指定目录下看到生成的.ipa文件。
9.安装应用程序
以Ad-Hoc或In-House方式发布的应用程序,可以将.ipa文件直接发送给用户。用户可以用两种方式安装:使用iTunes,或者使用iPhone配置实用工具。
(1)使用iTunes
用户将压缩包中的.ipa文件拖到iTunes的“资料库→应用程序”下,然后和iPhone/iPod进行同步。
(2)使用iPhone配置实用工具
iPhone配置工具是完全免费的,你可以从这里下载:
http://support.apple.com/kb/DL926?viewlocale=zh_CN
安装后会在“应用程序/实用工具”中生成一个快捷方式“iPhone配置实用工具”。
同样,将iPhone/iPod连上电脑,打开“iPhone配置实用工具”,将.ipa文件拖放到“iPhone配置实用工具”的“资料库→应用程序”下,然后选中你的iPhone/iPod,在右边“安装或删除应用程序列表”中,点击某个应用程序右边的“安装”按钮进行安装。
10.问题及错误
如果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、下载并安装,一般可以得到解决。

1.3.3 OTA无线部署

所谓OTA(Over The Air),是苹果公司在iOS 4.0中加入的一种新的企业部署方式,即iOS 4的无线部署。无线部署是完全脱离iTunes的发布程序的一种方式。 苹果公司扩展了iOS的Safari的功能,使得iOS企业应用可以通过Safari浏览器进行部署。Safari对URL地址中的特殊协议itms-services进行识别并自动下载ipa安装包,并在下载完成后调用iOS操作系统的应用程序安装界面(iTunes)进行安装。
“无线部署”专用于企业部署,包括Ad-Hoc和In-House部署,所以这里你必须使用这两种provision profile 文件。下面介绍如何在Xcode(以4.2版本为例)中进行OTA部署。
OTA部署仍然使用“Product→Archive”菜单的功能(正如1.3.2节下面的“8. 编译发布版本”节所描述)。但在选择保存路径这一步(如图1-21所示步骤),注意勾选“Save for Enterprise Distribution”选项。这样将出现OTA部署选项,如图1-22所示。
screenshot

需要填写的各项设置意义如下:
Application URL:你的.ipa文件将部署到服务器的哪个位置。当用户通过Safari安装你的企业应用时,这个URL应指向.ipa文件所在的地址,必填。
Title:企业应用名称,必填。
Subtitle:子标题,可选。
Large Image URL:大图标(512512)所在的URL。大图标用于在iPad上安装时显示应用程序图标,可选。
Small Image URL:小图标(5757)所在的URL。大图标用于在iPhone上安装时显示应用程序图标,可选。
Add Shine Effect to Image:会在大/小图标上加上一个光照效果,可选。
填写完后,点击Save按钮。Xcode会在硬盘上产生一个.ipa文件和一个.plist文件。这两个文件都OTA部署所必需的。其中.plist文件是一个XML文件,保存了你刚才填入的那些配置选项。
将上述两个文件和图标文件(如果有的话),放到Web服务器上。注意,.ipa文件和图标文件所放的位置应该和你在图1-22界面中配置的内容一致。至于.plist文件,你可以让它和.ipa文件放在一起,也可以单独放在另外一个地方。
另外制作一个html文件,如install.html,内容如下:

<html>
<head><title>TextGlowDemo</title></head>
<body>
<ul>
    <li>
<a href="http://10.180.120.235:8080/AnyMail/InHouseProvisionProfile. 
         mobileprovision"> Provisioning File</a>
</li>
    <li>
<a href="itms-services://?action=download-manifest&url=http://10.180.120.235:8080/ 
         AnyMail/GlowDemo.plist">
                install GlowDemo</a>
</li>
</ul>
</body>
</html>

主要是两个标签。第一个标签是Provision Profile文件的超级链接,因为在iPhone上安装应用程序之前,必须先安装Provision Profile文件,所以这个链接是有必要的。第二个是.plist的超级链接。
注意:在第2个
标签中,href属性的“itms-services://?action=download-manifest&url=”是固定的(后面的跟着.plist文件的真实URL地址)。“itms-services://?action=download- manifest&url=”不能改成其他内容,否则Safari不会调用安装程序。
把这个HTML文件放在Web服务器上,然后在iPhone上用Safari访问这个HTML文件地址,你将看到如图1-23所示的页面。
screenshot

首先点击Provisioning File链接,iOS提示你要安装该预置描述文件,根据提示安装就可。
然后点击install GlowDemo链接,Safari会开始下载.ipa包,当下载完成会立即启动系统安装程序进行安装。
注意:如果iPhone上已经安装有该应用程序,则会进行覆盖安装。
这样,通过OTA部署,不再需要用户将iPhone和 PC同步的繁琐步骤(利用iTunes)。OTA部署直接利用iPhone的无线通信功能(WiFi网络或移动网络)进行应用程序部署(或者在线更新),显得更加灵活和方便。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
19天前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
85 4
|
2月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
2月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
69 1
|
21天前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
24 2
|
28天前
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!
|
1月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
55 1
|
2月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
55 5
|
2月前
|
移动开发 前端开发 Swift
iOS 最好的应用程序开发编程语言竟然是这7种
iOS 最好的应用程序开发编程语言竟然是这7种
105 8
|
2月前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性对比:哪个更适合企业环境?
在数字化时代,移动设备已成为企业日常运营不可或缺的一部分。选择合适的操作系统对于保障企业数据安全至关重要。本文深入分析了Android和iOS两大主流操作系统的安全性,从系统架构、安全功能、应用生态及更新频率四个维度进行全面比较,旨在为企业提供一个清晰的决策依据,帮助企业在Android的开放性与iOS的封闭性之间找到最适合自身需求的平衡点。
64 6
|
3月前
|
存储 IDE 开发工具
移动应用开发之旅:打造你的首个iOS应用
【9月更文挑战第23天】在数字化浪潮中,移动应用已成为连接用户与数字世界的关键桥梁。本文将带领读者踏上开发属于自己的第一个iOS移动应用的旅程,从理解移动操作系统的核心概念出发,逐步深入到实际的应用构建过程中。通过简洁明了的语言和具体的代码示例,我们将一起探索如何在苹果的iOS平台上实现一个简单的“待办事项列表”应用,让读者不仅能够学习到编程知识,还能体会到将想法转化为现实产品的成就感。无论你是编程新手还是希望扩展技能的开发者,这篇文章都将为你提供一个实用的指南,帮助你迈出成为移动应用开发者的第一步。