设为首页 加入收藏

TOP

iOS应用发布中的一些细节(二)
2017-10-11 16:31:51 】 浏览:8433
Tags:iOS 应用 发布 一些 细节
(p12格式)

第三步根证书的私钥这里是一个坑!因为一个App的推送证书的创建可以和根证书创建的电脑不同,也就是keyChain产生的certSigningRequest不一样,所以私钥也是不一样的,在这里生成Pem时,注意要使用推送证书的私钥!

操作过程:

    1. 把推送证书(.cer)转换为.pem文件,执行命令:

      openssl x509 -in 推送证书.cer -inform der -out 推送证书.pem
      
    2. 把推送证书导出的私钥(.p12)文件转化为.pem文件:

      openssl pkcs12 -nocerts -out 推送证书私钥.pem -in 推送证书私钥.p12	
      
    3. 对生成的这两个pem文件再生成一个pem文件,来把证书和私钥整合到一个文件里:

      cat 推送证书.pem 推送证书私钥.pem >PHPPush.pem
      

然后把这个PHPPush.pem给后台基友们,就可以下班啦。

当然测试推送也比较麻烦,需要模拟真实的推送环境,一般需要后台提供帮助,但是遇到一些后台同事,他们有强烈地信仰着鄙视链的话,很鄙视iOS,心里早就称呼你“死前段”多年了,还那么多事……

所以关于调试推送,博主教你自己推自己!不麻烦别人。

只要拷贝这段代码

<?php
// devicetoken
 $deviceToken = '你的deviceToken';
// 私钥密码,生成pem的时候输入的
$passphrase = '123456';
// 定制推送内容,有一点的格式要求,详情Apple文档
$message = array(
	'body'=>'你收到一个新订单'
);
$body['aps'] = array(
	'alert' => $message,
	'sound' => 'default',
	'badge' => 100,
	);
$body['type']=3;
$body['msg_type']=4;
$body['title']='新订单提醒';
$body['msg']='你收到一个新消息';

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'push.pem');//记得把生成的push.pem放在和这个php文件同一个目录
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$fp = stream_socket_client(
	//这里需要特别注意,一个是开发推送的沙箱环境,一个是发布推送的正式环境,deviceToken是不通用的
	'ssl://gateway.sandbox.push.apple.com:2195', $err,
	//'ssl://gateway.push.apple.com:2195', $err,
	$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
	exit("Failed to connect: $err $errstr" . PHP_EOL);
echo 'Connected to APNS' . PHP_EOL;
$payload = json_encode($body);
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
	echo 'Message not delivered' . PHP_EOL;
else
	echo 'Message successfully delivered' . PHP_EOL;
fclose($fp);
?>

将上面的代码复制,保存成push.php

然后根据上面“生成PHP需要的Pem证书”的步骤生成push.pem

两个文件放在同一目录

执行下面的命令

DavidDay$ php push.php 

结果为

Connected to APNS
Message successfully delivered

是不是就推送成功了呢?呵呵哒

打包、分发及内测

关于打包是有很多姿势的,每个人都有各自的喜好,大部分规矩的做法都是使用Xcode的一条龙服务的:

    • 选择相应地描述文件、证书

    • 选择ARM架构机型(模拟器是Intel架构的,真机是ARM架构的,不能通用)

    • product -> archive

    • 然后就可以选择导出ipa在第三方平台分发测试或者上传App Stroe审核了

      ?

这样的做法比较保险,因为archive 只会编译出真机的二进制码,所以不用担心导出的ipa真机装不起。

另一种姿势是使用xcodebuild 工具,纯Shell编译,比较不好处理错误,但是逼格满满啊,想详细了解这种姿势的可以看看官方文档 ,或者参考这位同学的分享

当然嘛,博主作为拖拖派的忠实拥趸,博主打包ipa的时候是这样的:

图6

随时build随时转ipa。

分发内测一般都会使用第三方的平台,fir蒲公英 都很好呀~

关于提交审核这里,一般archive过去了,证书正确都没问题的,当然还是要检查项目是否调用了私有API,之前用reveal ,提交应用的时候忘了移除,千不该万不该的还是用了Xcode的upload工具,也不报错,在iTunesConnect中构建版本也出现了,只是状态“正在处理”,一般这个状态持续10分钟~2个小时就会通过了,然后博主自信关机下班,想不到第二天构建版本还是“正在处理”,然后猜想是不是iTunes出问题了又怒传了N个包,依然是“正在处理”,后来准备发邮件,打开邮箱,尼玛!

图7

原来调用了私有接口,忘记移除reveal了~,回顾起来这里有三个大坑,

    1. Xcode的上传工具很辣鸡!!很多错误都无法扫描出来,所以切记 使用 Application Loader ,速度快,错误报告也精准。
    2. iTunesConnect的错误状态几乎没有,一般只有两个状态 “正在处理”、“成功”,所以如果超过两个小时仍然是“正在处理”,那么极有可能包出问题了!
    3. 记住关注邮件!

打包项目证书选择必须正确 (Xcode7以下 选择项目编译target为Iphone Device 不要连接手机 否则会 ,Xcode7中不需要拔出真机,因为多了一个build only device 的选项)

 编译target选错了 报错

 ITMS-90530 "Invalid MinimumOSVersion. Apps that only support 64-bit devices must specify a deplyment target of 8.0 or later"

IMTS-90208 "Invalid Bundle. The bundle xxx.app does not support the minimum OS
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇GPUImage API文档之GPUImageFrame.. 下一篇OC - 26.CAAnimationGroup

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目