公司的帐号是企业帐号,开发的app不需要上传到App store,而是直接打包成ipa包提供给公司内部使用。我参考了许多前辈们的方法,加上自己的总结得到如下打包ipa包的方法:如有错误请指出,谢谢!
OS有两种证书和描述文件:
证书类型使用场景
开发(Development)证书和描述文件用于开发测试,在HBuilder中打包后可在真机环境通过Safari调试
发布(Distribution)证书和描述文件用于提交Appstore,在HBuilder中打包后可使用Application Loader提交到Appstore审核发布
准备环境
必需要有苹果开发者账号,并且加入了“iOS Developer Program”
Mac OS 10.9以上系统(如果已经申请p12证书则不需要)
(打包需要:添加UDID +钥匙串申请的请求性文件 +发布证书文件+发布描述性文件)
(企业帐号不需要添加别人的UDID)
登录iOS Dev Center
打开网站https://developer.apple.com
使用苹果开发者账号登录帐号:
登录成功后在页面右侧选择“Certificates, Identifiers & Profiles”:
[一]添加调试设备(UDID)
开发描述文件必须绑定设备,所以在申请开发描述文件之前,先添加调试的设备。
(如果已经添加设备,或是企业帐号则可跳过此节,不用添加UDID)
拿到UDID的方法:
将设备连接到电脑,启动iTunes,点击次区域可切换显示设备的UDID,右键选择复制
打开“Registering a New Device or Multiple Devices”页面,输入设备名称和UDID:
就可以在这里面看到你添加进去的UDID了
[二]生成证书请求文件(钥匙串)
不管是申请开发(Development)证书还是发布(Distribution)证书,都需要使用证书请求(.certSigningRequest)文件,证书请求文件需在Mac OS上使用“Keychain Access”()工具生成。
打开钥匙串访问工具:
打开菜单钥匙串访问(一般在电脑的左上角)
打开创建请求证书页面,在页面中输入用户邮件地址(User Email Address)、证书名称(Common Name),请求类型(Request is)选择保存到磁盘(Saved to disk):
点击“Continue”后弹出保存路径:
点击“Save”后保存证书请求文件,成功提示:
生成以下文件:
保存文件名称为“CertificateSigningRequest.certSigningRequest”,后面申请开发(Development)证书和发布(Production)证书时用到。
[三]申请发布(Distribution)证书
发布(Production)证书用于正式发布环境下使用,用于提交到Appstore审核发布。
申请发布(Production)证书
在“Certificates, Identifiers & Profiles”页面“Certificates"Production",可查看到已申请的所有发布(Production)证书,点击右上角的加号可创建新证书:
打开“Add iOS Certificate”页面,在“Production”栏下选中“App Store and Ad Hoc”:
在页面底部选择“Continue”:
打开确认证书请求页面,点击“Continue”继续:
打开证书生成页面,先点击“Choose File...”选择“生成证书请求文件”章节生成的“CertificateSigningRequest.certSigningRequest”文件,再点击“Generate”生成cer证书:
生成证书成功后打开证书下载页面,选择“Download”下载保存证书(ios_production.cer):
双击保存到本地的ios_development.cer文件导入到“Keychain Access”:
导入成功后,可以在证书列表中显示:
选中导入的证书,右键选择“Export "Developer" ...”:
打开证书保存页面,输入文件名、选择路径后点击“Save”:
打开设置证书密码页面,输入密码及确认密码后点击“OK”:
打开访问“Keychain Access”密码页面,输入Mac OS管理员密码,点击“Allow”,保存开发(Development)证书(如“HBuilderCert.p12”可以提供给别人使用)。
得到文件:
[四]申请发布(Distribution)描述文件(打包的时候必用)
在“Certificates, Identifiers & Profiles”页面“Provisioning Profiles”下选择“Distribution",可查看到已申请的所有发布(Distribution)描述文件,点击右上角的加号可创建新描述文件:
打开“Add iOS Provisioning Profile”页面,在“Development”栏下选中“iOS App Development”:
点击“Continue”按钮,打开“App ID”选择页面,选择要使用的“App ID”(如之前创建的“io.dcloud.HBuildApp”),点击“Continue”:
打开“Select certificates”页面,选择前面创建的发布证书:
点击“Continue”,输入描述文件的名称(如“HBuilderProfileDistribution”):
点击“Generage”,生成描述文件成功:
点击“Download”下载保存开发描述文件(如HBuilderProfileDistribution.mobileprovision)。
双击文件自动添加到项目的工程中。
[五]设置Xcode内容,进行打包
打开Xcode:
注意这里的Bundle ID和team的使用:
在每个info.plist文件中设置Bundle ID
点击桌面窗口的Product,进行Archive
进入Archive界面
最终得到ipa包就成功了:
[六]如何给别人使用:
1.可以将ipa包直接发给别人,可利用iTunes 和手机进行同步,直接安装。
2.利用第三方网站,如:蒲公英网站,fir.im网站生成二维码扫描即可安装
备注:
若也经打过ipa包的项目,在修改项目的内容后,第二次打包时在UDID,发布证书文件,描述性文件等没有删除的情况下可直接进行Xcode里面的操作就可以了,不必再申请相应的证书。
[七]打包时遇到问题:
错误:
错误1.证书配置不对
错误2:
2.archive的时候报“no identity found"错
错误3:若Archive为灰色(不可点)
1.证书问题
要打包ipa首先需要设置code sign identity,一个应用需要打包至少需要三个要素:证书,APP ID,还有一个容易被忽略的provisioning profile。
证书的申请流程到处都可以找到,这里只简单介绍一下,首先使用钥匙串创建一个certSigningRequest文件,然后登录apple developer的ios developer申请证书,将certSigningRequest文件上传,生成一个证书,将它下载下来即可。接着是APP ID,仍然是到apple developer创建,一般是公司域名的倒写加应用名。就是通过provisioning profile,它也是通过apple developer官网创建,在创建时会让你选择类型,打包ipa测试的话就选择AD HOC,记得添加UDID,创建后下载下来生成mobileprovision文件,双击运行即添加到资源库中去,而xcode在读取你的系统里的证书时实际上是在查找资源库里面的provisioning profile。provisioning profile包含了证书,APP ID和UDID列表,archive后这些信息会被加入ipa中。
错误4."file not found"
在archive时会碰到一个蛋疼的问题,就是明明在模拟器编译运行都正常,但是打包ipa时却报一个找不到头文件的错,这是由于直接编译时使用的是你的系统的头文件目录,而archive时使用的时SDK下的头文件目录,一般情况下这两者时一致的,但是有些特殊库的头文件,如libxml,在系统下/usr/include/libxml2是包含在头文件自动搜索范围内的,而SDK中这个目录不在自动搜索范围内,所以就会报一个"file not found"。
解决方式就是在编译参数里面添加一个头文件搜索目录,工程->build setting,搜索header search paths,添加你需要手动添加的头文件目录,如/usr/include/libxml2。
3.显示archive success,但是organizer不能自动弹出,手动打开也看不到刚刚打的包,或者没有share按钮可点
遇到这种问题可能有各种不同的原因,但是我敢说90%以上都是因为同一个原因,而这个问题的解决方法也超简单,工程->build setting,搜索deployment,找到skip install项,将其改成NO,target->build setting,搜索deployment,找到skip install项,将其改成NO,
解决方法:
注意:请先确保证书设置没有问题
在Xcode中当你在更新了你得证书而再重新编译你的程序,真机调试会出现“Your build settings specify a provisioning profile with the UUID‘XXX’, however, no such provisioning profile was found. Xcode can resolve this issue by downloading a new provisioning profile from the Member Center.”。解决方案如下:
1.关闭项目,找到项目文件XXXX.xcodeproj,在文件上点击右键,选择“显示包内容”(Show Package Contents)。会新打开一个Finder。
2.在新打开的Finder中找到project.pbxproj,并且打开,找到所有包含报错的UUID‘XXX’的行(包含UUID后面的一串数字的行,可能不包含"UUID"),整行删除。
3.保存,重新启动项目,再编译,就OK了。