一、概念
-
ipa文件
ipa文件就是iOS应用的安装包文件,扩展名为.ipa -
证书
对于一个未上线App Store的应用,一般来说,开发者如果需要将应用安装到某些用户的设备上,就需要将应用导出为这些设备可以直接安装的安装包(.ipa文件),安装包能否正确导出,是决定了应用能否被正确安装到设备上的关键因素。其中,最关键的一个因素是,导出安装包时,应用所使用的证书(即:签名方式)。
开发者可以选择如下两种方式的签名方式,来导出应用安装包Ad-hoc方式 In-house方式
其中,具体使用哪种方式,取决于开发者拥有的苹果开发者账号的类型。例如,如果开发者拥有的是苹果开发者个人开发者账号(我就是),则可以使用Ad-hoc方式;如果拥有的是苹果企业开发者账号,则可以使用In-house方式。关于苹果开发者账号支持的证书类型,如下图
1853063-314367b3aaaa7b9d.png.jpeg到目前为止,苹果为iOS应用共提供了三种类型的证书签名方式,每一种都有独特的用途。这三种分别是:
Ad-hoc In-house App-Store
- UDID和Ad-hoc
如果iOS设备要安装以Ad-hoc方式打包iOS应用时,必须将该设备的UDID加入打包应用时的证书文件(.mobileprovision文件),才可以在该设备上正常安装。 - 开发者账号分类
类型 | 特点 | 费用 |
---|---|---|
个人账号 | 个人开发者用,App需要上传至App Store,只能有一个开发者,测试设备数量上限100,申请不需要邓白氏码 | $99 |
公司账号 | 公司或团队用,App需要上传至App Store,可以有多个开发者,测试设备数量上限100,申请需要邓白氏码 | $99 |
企业账号 | 企业内部应用发布,App不需要上传至App Store,可以有多个开发者,测试设备数量没有限制,申请需要邓白氏码 | $299 |
教育账号 | 教育机构专用,需要苹果审批,不可以发布到App Store | 免费 |
- 测试机个数达到上限
Q:删除已有设备重新添加可以吗?
A:没用!
Q:能找苹果申请增加名额吗?
A:非常非常难。
Q:可以重置现在的设备数,重新添加吗?
A:每年只要一次机会。
二、OTA
iOS4新加的一项技术,可以让开发者脱离AppStore,从指定的服务器下载安装应用。
以 https://itms-services://?action=download-manifest&url=https://192.168.1.xxx/manifest.plist
开头的链接,Safari会自动去读取manifest.plist中的信息,进行下载,安装等操作。
三、准备工作
- 三种开发者账号
- 个人账号:99$/appstore上架/设备上限100
- 公司账号:99$/appstore上架/设备上限100
- 企业账号:299$ /不能appstore上架/不限制设备
- 打包模式
- App Store Deployment:需要添加UUID/上架appstore
- Ad Hoc Deployment:需要添加UUID/内部测试/distribution证书
- Enterprise Deployment:不需要添加UUID/企业内部应用/企业证书
- Development Deployment:需要添加UUID/开发调试/developer证书
- ipa包
-
如果只是方便内部测试的分发,用个人/公司账号/发布到Ad Hoc Deployment/Development Deployment打出来的ipa
-
如果是企业内部应用/绕开苹果审核而发布的应用,就必须用企业账号/发布到Enterprise Deployment打出来的ipa
-
四、实现
在本机搭建https服务器的企业账号签名的应用分发
-
ipa包
- 申请企业账号
- 发布到Enterprise Deployment打包
-
搭建本机服务器
- Mac OS X自带Apache服务,其站点默认根目录是/Library/WebServer/Documents/
- 启动Apache
- sudo apachectl start
- 测试Apache
- safari输入http://127.0.0.1/,如果出现It Works!,则成功启动
-
开启https服务
- 生成ssl证书
- 进入相应文件夹: cd /etc/apache2/
- 生成私钥: sudo openssl genrsa -des3 -out app.key 1024
- 生成签署申请: sudo openssl req -new -key app.key -out app.csr
- 生成服务器私钥: sudo openssl rsa -in app.key -out server.key
- 生成给网站服务器签署的证书: sudo openssl req -new -x509 -days 3650 -key server.key -out server.crt
skylinedeMacBook-Air:apache2 skyline$ cd /etc/apache2/ skylinedeMacBook-Air:apache2 skyline$ sudo openssl genrsa -des3 -out app.key 1024 Generating RSA private key, 1024 bit long modulus ..........++++++ ...............++++++ e is 65537 (0x10001) Enter pass phrase for app.key://输入密码 Verifying - Enter pass phrase for app.key://验证密码 skylinedeMacBook-Air:apache2 skyline$ sudo openssl req -new -key app.key -out app.csr Enter pass phrase for app.key://输入密码(同上) You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) []:CN//中国简称CN State or Province Name (full name) []:GD//省 Locality Name (eg, city) []:SZ//市 Organization Name (eg, company) []:company//组织/公司 Organizational Unit Name (eg, section) []:company.ltd//组织 Common Name (eg, fully qualified host name) []:192.168.1.1xx//本机IP Email Address []:xxxxxxxx@qq.com//邮箱 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:123456 skylinedeMacBook-Air:apache2 skyline$ sudo openssl rsa -in app.key -out server.key Enter pass phrase for app.key: writing RSA key skylinedeMacBook-Air:apache2 skyline$ sudo openssl req -new -x509 -days 3650 -key server.key - out server.crt You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) []:CN//国家 State or Province Name (full name) []:GD//省 Locality Name (eg, city) []:SZ//市 Organization Name (eg, company) []:company//组织 Organizational Unit Name (eg, section) []:company.lct组织 Common Name (eg, fully qualified host name) []:192.168.1.1xx//本机IP Email Address []:xxxxxxxx@qq.com//邮箱 skylinedeMacBook-Air:apache2 skyline$ sudo apachectl configtest Syntax OK skylinedeMacBook-Air:apache2 skyline$ sudo apachectl
- 生成ssl证书
-
开启ssl功能
- 文本打开/etc/apache2/httpd.conf,去掉下面五行的#(/etc/apache2/xxx等同于/private/etc/apache2/xxx)
#LoadModule ssl_module libexec/apache2/mod_ssl.so #Include /etc/apache2/extra/httpd-ssl.conf #Include /etc/apache2/extra/httpd-vhosts.conf #LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so #ServerName www.example.com:80
- 文本打开/etc/apache2/extra/httpd-ssl.conf,去掉下面两行的#(server.crt/server.key的路径可能不在httpd-ssl.conf默认的路径/etc/apache2/ssl/下,要么修改默认路径,要么server.crt/server.key拷贝到默认路径下)
#SSLCertificateFile "/etc/apache2/server.crt" #SSLCertificateKeyFile "/etc/apache2/server.key
- 文本打开/etc/apache2/extra/httpd-vhosts.conf,在末尾添加
-
编辑manifest.plist文件
- 模版如下,直接在上边更改成应用对应参数
<?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>https://192.168.1.xxx/tlsc.ipa</string> </dict> <dict> <key>kind</key> <string>display-image</string> <key>url</key> <string>https://192.168.1.xxx/AppIcon57x57.png</string> </dict> <dict> <key>kind</key> <string>full-size-image</string> <key>url</key> <string>https://192.168.1.xxx/AppIcon512x512.png</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>com.tlsc.shacheng</string> <key>bundle-version</key> <string>1.1.1</string> <key>kind</key> <string>software</string> <key>releaseNotes</key> <string>1.1.1版本发布</string> <key>title</key> <string>应用分发测试app</string> </dict> </dict> </array> </dict> </plist>
-
站点根目录/Library/WebServer/Documents需要的文件
- ipa包
- manifest.plist
- 57x57 / 512x512的logo
- 前面生成的app.key/app.csr
- server.crt
- index.html,模版如下:
<!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" /> <title>本机https服务应用分发</title> </head> <body> <h1 style="font-size:40pt">应用分发<h1/> <h1 style="font-size:40pt"> <a title="iPhone" href="https://192.168.1.100/server.crt">ssl证书安装. </a> <h1/> <h1 style="font-size:40pt"> <a href="itms-services://?action=download-manifest&url=https://192.168.1.100/manifest.plist">安装App</a> <h1/> <h1/> </body> </html>
网友评论