itms-services协议:跳转网页部署及PHP动态生成 iOS渠道包IPA一键安装之plist地址

相信很多人尝试过使用揣果测试库(http://ipa.chuaiguo.com/)的无线安装测试IPA安装包功能。有心人一定注意到其itms-services协议的一键安装地址的url=部分并不是我们常见的plist文件路径,而是一个install.php通过增加参数的形式自动生成输出了plist。之前因为笔者的项目中渠道包不多,所以懒得去写这样一个文件帮助部署,可是最近,笔者的项目的渠道包不断增多了,显然部署多个plist文件管理上似乎越来越麻烦了,于是笔者开始仿照揣果实现了并结合自己项目的需求,实现了PHP动态生成 iOS渠道包IPA一键安装之plist。这里跟大家分享一下,希望对您有所帮助。

 <!--**
* index.html
* iOS渠道包一键安装跳转页面。
* Created by pcjbird on 2015-05-28
* Copyright (c) 2015年 Zero Status. All rights reserved.
*-->
<html>
<head>
<title>iOS 一键安装</title>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" />

<script type="text/javascript">

function doLocation(url)
{
 var a = document.createElement("a");
 if(!a.click) 
 {
 window.location = url;
 return;
 }
 a.setAttribute("href", url);
 a.style.display = "none";
 document.body.appendChild(a);
 a.click();
}

function getQueryString(str)
{
 var rs=new RegExp("(^|)"+str+"=([^&]*)(&|$)","gi").exec(locString),tmp;
 if(tmp=rs)return tmp[2];
 return "";
}

</script>

</head>

<body>
下载中...
<script type="text/javascript">

var locString=String(window.document.location.href);
var cid = getQueryString('cid');
var sslServer = 'https://www.lessney.com/';
var mainChannelId = 2;
var curVersionName = '1.0.3';
if (!cid) 
{
 cid = mainChannelId;
}

doLocation('itms-services://?action=download-manifest&url=' + encodeURIComponent(sslServer + 'install.php?v=' + curVersionName + '&cid=' + cid));


</script>
</body>
</html>
 <?php
/**
* install.php
* PLIST文件生成器,用于iOS渠道包一键安装。
* Created by pcjbird on 2015-05-28
* Copyright (c) 2015年 Zero Status. All rights reserved.
*/

//判断是否为字典数组(dict)
function isDict($array)
{
 return (is_array($array) && 0 !== count(array_diff_key($array, array_keys(array_keys($array)))));

}

//向xml节点中写入字典数组(dict)
function xmlWriteDict(XMLWriter $x, &$dict) 
{
 $x->startElement('dict');
 foreach($dict as $k => &$v) 
 {
 $x->writeElement('key', $k);
 xmlWriteValue($x, $v);
 }
 $x->endElement();
}
 
 //向xml节点中写入数组(array)
function xmlWriteArray(XMLWriter $x, &$arr) 
{
 $x->startElement('array');
 foreach($arr as &$v)
 xmlWriteValue($x, $v);
 $x->endElement();
}

//根据类型向xml节点中写入值
function xmlWriteValue(XMLWriter $x, &$v) 
{
 if (is_int($v) || is_long($v))
 $x->writeElement('integer', $v);
 elseif (is_float($v) || is_real($v) || is_double($v))
 $x->writeElement('real', $v);
 elseif (is_string($v))
 $x->writeElement('string', $v);
 elseif (is_bool($v))
 $x->writeElement($v?'true':'false');
 elseif (isDict($v))
 xmlWriteDict($x, $v);
 elseif (is_array($v))
 xmlWriteArray($x, $v);
 else 
 {
 trigger_error("Unsupported data type in plist ($v)", E_USER_WARNING);
 $x->writeElement('string', $v);
 }
}

//创建plist
function createplist()
{
 $ssl_server = 'https://www.lessney.com/';
 $target_name = 'Sample';
 $bundle_identifier = 'com.lessney.' . $target_name;
 $subtitle = 'Zero Status Inc.';
 $title = '示例程序';
 $versionname = $_GET['v'];
 if (!$versionname) 
 {
 $versionname = '1.0.0';
 }
 $versioncode = str_replace('.', '', $versionname);
 $channelid = $_GET['cid'];
 if (!$channelid) 
 {
 $channelid = '0';
 }

 header('Content-Type: application/xml');
 $plist = new XmlWriter();
 $plist->openMemory();
 $plist->setIndent(TRUE);
 $plist->startDocument('1.0', 'UTF-8');
 $plist->writeDTD('plist', '-//Apple//DTD PLIST 1.0//EN', 'http://www.apple.com/DTDs/PropertyList-1.0.dtd');
 $plist->startElement('plist');
 $plist->writeAttribute('version', '1.0');

 $pkg = array();
 $pkg['kind'] = 'software-package';
 $pkg['url'] = $ssl_server . $target_name .'_v' . $versioncode . '_' .$channelid . '.ipa';

 $displayimage = array();
 $displayimage['kind'] = 'display-image';
 $displayimage['needs-shine'] = TRUE;
 $displayimage['url'] = $ssl_server . 'Icon.png';

 $fullsizeimage = array();
 $fullsizeimage['kind'] = 'full-size-image';
 $fullsizeimage['needs-shine'] = TRUE;
 $fullsizeimage['url'] = $ssl_server . 'iTunesArtwork.png';

 $assets = array();
 $assets[] = $pkg;
 $assets[] = $displayimage;
 $assets[] = $fullsizeimage;

 $metadata = array();
 $metadata['bundle-identifier'] = $bundle_identifier;
 $metadata['bundle-version'] = $versionname;
 $metadata['kind'] = 'software';
 $metadata['subtitle'] = $subtitle;
 $metadata['title'] = $title;

 $items0 = array();
 $items0['assets'] = $assets;
 $items0['metadata'] = $metadata;

 $items = array();
 $items[] = $items0;

 $root = array();
 $root['items'] = $items;

 xmlWriteValue($plist, $root);

 $plist->endElement();
 $plist->endDocument();

 return $plist->outputMemory();
}

//输出plist
echo createplist();

?>

转载请注明:Zero Status » itms-services协议:跳转网页部署及PHP动态生成 iOS渠道包IPA一键安装之plist地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值