自动化发布iOS包

2016-04-29 更新:加入 unlock-keychain


我们的 Android 包一直是使用 Jenkins 发布的。这样,不必依赖开发就能得到 APK 包,打包的工作从开发交给测试,运营同学直接从内网取包上渠道。整个发布过程,开发可以不必参与,非开发可以不接触源码。

现在 iOS 版本也需要加入到这个流程中,这就需要扩展以前的脚本工具使其可以支持 iOS 自动化打包。然后才能将其集成进入 Jenkins 中。

继续阅读自动化发布iOS包

八一八 Apple Pay 、NFC 和“云闪付”

Apple Pay 在 2016-02-18 发布,朋友圈和公众号就被刷屏了。其实自从库克同学背着乔老爷子给 iPhone 装上了 NFC 之后,我们就都知道这一天迟早会到来的。

但是 Apple Pay 并不是什么 Apple 的超级武器, 甚至不是什么新东西 。Apple Pay 的最大得利者,很可能不是 Apple,而是 中国银联 。Apple Pay 是中国银联用来对抗支付宝和微信的一把剑。当然,这个合作是双赢的, 中国银联的“云支付”开始支持 Apple Pay, 至少能帮助可怜的 AppStore 服务器承担一点点支付失败绑定银行卡失败的骂名吧……至于说 Apple Pay 这把剑能不能如愿以偿地让中国银联拳打支付宝脚踢微信支付,我们就只能拭目以待了。

如果大家厌烦了这几天各大媒体、各个公众号像教傻X一样教学怎么在 Apple Pay 中绑定银行卡的话,就听我来说说后面的故事。 继续阅读八一八 Apple Pay 、NFC 和“云闪付”

过了个年,iPhone Certificates 全部失效

这诡异的事情发生在今天早上,打开 Keychain Access 一看,无论是开发者证书还是发布证书,所有的 iPhone 证书全部无效了。

重启还是 revoke 之后重新生成证书都不管用。

真实的原因是: Apple Worldwide Developer Relations Certification Authority 失效了。

所有的 Apple 证书都使用这个证书签发,它失效了,其他的证书完全不能幸免。

继续阅读过了个年,iPhone Certificates 全部失效

AIR 15.0 提交 AppStore 错误 ERROR ITMS-9000: Invalid Segment Alignment

AIR 15.0 提交 AppStore 错误 ERROR ITMS-9000: Invalid Segment
Alignment

上周提交到 AppStore 的 IPA 被拒了,其中的主要错误如下:

ITC.apps.assetvalidation.PURPLE_EXECUTABLE_OUT_OF_ALIGNMENT.error.message

我联想到有可能是因为 iOS8 支持的原因,于是在
labs.adobe.com
下载了 2014-09-24 日发布的 AIR 15.0.289 beta 版重新打包,但在提交到
AppStore 的时候收到这样的错误提示:

ERROR ITMS-9000: “Invalid Segment Alignment. This app does not have
proper segment alignment and should be rebuilt with the latest version
of Xcode. Please contact Developer Technical Support if you need
further assistance.”

这消息看起来和上次被拒的原因一致。我可以确定是 iOS8
的原因了。最可能的情况是 Apple 要求新提审的包必须加入 iOS8
的相关字段,而 Adobe AIR SDK 的编译器没有提供这些字段。

在 Google
上搜了一通,发现不少人碰到这个问题,只是没有解决方案。 继续阅读AIR 15.0 提交 AppStore 错误 ERROR ITMS-9000: Invalid Segment Alignment

在 iOS 7 中获取唯一标识符(UDID/UUID)

在 iOS 7 中获取唯一标识符(UDID/UUID)

Get unique identifer in iOS 7

在 iOS 5 中, 可以获取到系统的 UDID(Unique Device Identifier) ,后来被 Apple 禁止掉了。

于是,在 iOS 6 中,大家开始使用 MAC 地址 MAC(Medium/Media Access Control) ,后来又被 Apple 禁止掉了。

同样的,OpenUDID 也不能用了:

在 iOS 7 中,Apple 推荐使用广告标识符 advertisingIdentifier 来获取系统的唯一标识符。但是,用户如果重置了系统,广告标识符会重新生成。这就达不到 “唯一标识符” 的作用。

于是,在 iOS 7 中,程序员们发明了 “钥匙串保存” 方法,将这个唯一标识符保存在钥匙串中,安装了 App 后读取这个标识符即可。参见这里:ios 利用钥匙串保存密码和获取密码Simple iPhone Keychain Access

更详细的操作,可以参考这篇:如何使用KeyChain保存和获取UDID

下面这篇文章非常详细地介绍了 iOS 上获取唯一标识符的所有方式,以及相关知识,为了避免这么优秀的文章以后消失掉,我将其全文转载如下(已经很少全文转载了……)。 继续阅读在 iOS 7 中获取唯一标识符(UDID/UUID)

我们是否还应该支持 iOS 5?

我们是否还应该支持 iOS 5?

Must we support iOS 5 now?

游戏准备上线,纠结于一个API的支持问题。这个 API 从 iOS 6 开始支持。

那么,我们的游戏是否还要支持 iOS 5?

寻找了一些资料:

从腾讯的报告中可以看到,在2013年7月,iOS 6的占有率已经高达77%。

从今天 apple 的官方数据来看,iOS 7 的占用率已经达到91%,iOS 6 是8%,剩下的版本只有可怜的 1%。

iOS 占有率

As measured by the App Store during a 7‑day period ending August 24, 2014.

看来答案已经很清晰了。


2015-10-12 更新:

顺便把 Android 版本占有率也贴上吧:The relative number of devices running a given version of the Android platform

iOS 7.1在线安装IPA失败以及数字证书

2014-06-20更新:增加对七牛云存储的HTTPS服务说明和又拍云的介绍。

iOS 7.1在线安装IPA失败以及数字证书

Enterprise app deployment doesn’t work on iOS 7.1 and CA

错误现象

在 iOS 升级到 7.1 之后,使用 Safari 在线安装企业版或者 AD-HOC 版本的IPA时,iOS会提示:

无法安装应用程序,因为“xx.xx.xx” 的证书无效。

这是一个蛋疼的提示,它的真正人类能懂的含义是:

在 iOS 7.1 版本以后,请使用 HTTPS 部署此类安装。

解决方案

1. 部署自己的HTTPS服务器

这种方案需要使用一个可信的证书颁发机构办法的证书,将其部署在自己的服务器上。配置自己的服务器软件(例如 Apache、Nginx等) 使其支持它。

这是一劳永逸的解决方案,如果需要大量部署,那么此种方案是首选。

注意,自己给自己颁发的证书是不行的。必须使用可信的证书颁发机构颁发的证书。这就意味着,你很可能需要付费。

后面会讲到数字证书的部分,会稍稍展开一点。 继续阅读iOS 7.1在线安装IPA失败以及数字证书

AIR中不使用ANE实现iOS消息推送

今天整理以前的源码时,发现一个用ANE实现iOS消息推送的半成品。隐约中记得AIR的某个更新版本在运行时中实现了iOS消息推送,于是找了一下资料。

原来,AIR 3.4已经把消息推送功能整合到AIR运行时中了。下面的内容摘自 发行说明 | Flash Player® 11.4、AIR® 3.4

iOS 推送通知
此功能将使用 APNS(苹果推送通知服务)和提供程序(将与 APN
进行通信的第三方服务器)生成通知。已引进新的软件包
flash.notifications。 推送通知的发送完全依赖 Apple
的推送通知服务,APNS 不保证推送通知的发送。 Apple
也建议每次启动应用程序时订阅推送通知。每次客户端应用程序订阅推送通知时,APNS
会向客户端应用程序提供代号 id,并且此代号 id
将发送给将发送远程通知的第三方服务器或提供程序。

下面有一些文章介绍,从实现到范例一应俱全:

AIR在iOS7上的Microphone权限问题解决

近期提交到AppStore上的应用被拒,原因如下:

2.3
In addition, during review we were prompted to provide consent to use the microphone, however, we were not able to find any features or functionality that use the microphone for audio recording.
Please see the attached screenshot’s for more information.
The microphone consent request is generated by the use of either AVAudioSessionCategoryRecord or AVAudioSessionCategoryPlayAndRecord audio categories.
If you do not intend to record audio with your application, it would be appropriate to choose the AVAudioSession session category that fits your application’s needs or modify your app to include audio-recording features.
……

大概的意思是说我的应用有请求Microphone权限,但没有使用这个权限。Apple同时发来一张截图:

microphonenedded

但是我清楚的知道,我的应用绝对是没有使用麦克风的。只有某卫士某地图才会无耻地跑去请求发短信权限麦克风权限银行帐号权限…… 继续阅读AIR在iOS7上的Microphone权限问题解决

Non-PIE Binary in Adobe AIR

今天从韩国合作伙伴那里得知,几天前提审到AppStore的游戏得到了Apple的警告:

Dear developer,

We have discovered one or more issues with your recent delivery for “ì?€?£?ì ?ê?°”. Your delivery was successful, but you may wish to correct the following issues in your next delivery: Non-PIE Binary – The executable ‘AVOCIOS.app’ is not a Position Independent Executable. Please ensure that your build settings are configured to create PIE executables. If you would like to update your binary for this app, you can reject this binary from the Binary Details page in iTunes Connect. Note that rejecting your binary will remove your app from the review queue and the review process will start over from the beginning when you resubmit your binary.

Regards,
The App Store team

提审AppStore都N次了,这个Non-PIE Binary问题我从未碰到过。从Google搜到的消息,也都是从5月开始的。看来是Apple修改了政策。 继续阅读Non-PIE Binary in Adobe AIR