苹果iOS app审核经验谈——IPv6

背景 最近有一个产品需要在Apple AppStore 上架,算是所谓首审(initial review)。一直听说上架过程中有很多麻烦事,也确实看到过很多国内外开发者鲜活的被拒实例,各种吐槽审核机制的严格。由于苹果app审核流程这种「宗教和神」(可能言之有过)一般的存在,同时也衍生出了很多所谓中介帮快速过审的服务(类似黄牛代拍沪牌)。 这次主要谈一下审核过程中的遇到的一个问题,以下是苹果审核团队就此问题的邮件回复原文: We discovered one or more bugs in your app when reviewed on iPad/iPhone running iOS 11.2.2 on Wi-Fi connected to an IPv6 network. 大意就是在IPv6网络下,审核的人发现会出现问题。同时还可以获取到其文中所指的问题的体现截图,从截图看,确实是当时有需要联网获取的内容无法获取(或者还未获取到)导致的无法显示。 解决方案 如果你也收到了类似问题反馈,并且通过搜索引擎找到的本文,想要快捷的答案和解决方案而并没有太多耐心看完下文的话,那么我先在这里表述这个问题的正确解决方案: 根据文后参考文档中第一1、第二2篇检查自己的app实现,确定没有使用IPv4的IP显式建立IPv4的TCP,UDP socket的情况。因为在NAT64环境下,操作系统会将你的目标IPv4地址如 114.114.114.114 转换为 64:ff9b::114.114.114.114 发送到macOS模拟的节点,你写死了他就不干,具体有空请研读文后参考文档中的思科白皮书3和RFC文档4。另外检查通讯实现或者所用的第三方通讯库确实是使用了苹果推荐的高层级API:NSURLSession和CFNetwork中的API。最后使用第二篇中提及的IPv6 NAT64搭建方法搞一套测试环境确认app可用。 需要尝试从美国访问你的服务所在网络,测试可达性和性能如何。 千万不要听信国内很多坊间破解文去搭建真的IPv6 only的互联网服务5,你可能可以花费一些时间和费用搞出让纯IPv6环境用户也可以访问的服务,但是这并不是目前苹果要审核的内容,目前(2018年1月)苹果绝不会通过纯IPv6的互联网出口去测试访问你的服务并且要求可达。 以上是你真正需要去做的内容。 苹果提及的IPv6到底是怎么回事 IPv6网络从2011年、2012年那会儿谈及IPv4地址耗尽的事时开始就一直在大肆宣传要迭代转变,但是实际商用层面的转变速度非常慢,国外的很多ISP和IDC虽然在Infrastructure层面脚步更快一些,但是路离铺到用户家门口还会有一长段时间。根据思科的白皮书,目前我们可以接触到IPv6环境的方式大概有3种类型: Dual stack这种方式下你的接入商给了你同时支持IPv4和IPv6协议栈的网络, 针对有IPv6支持的服务,可以走v6,针对大部分还只支持v4的服务依旧走v4的协议。这种类型目前的普及率还很低,在国外部分ISP接入下已经实现,国内有些大学提供的互联网接入也是这样的。注意:此模式并非苹果测试审核环境的要求 Tunneling除了以上的第一种是纯ISP接入给用户时就提供有IPv6支持外,这里的Tunneling和下面的Translation都不需要ISP支持。从图示可以简单理解为即使ISP提供给你的是v4的接入,但是只要有其他第三方tunneling服务提供商给你提供4转6(6in4)的隧道服务,那么我们可以通过在即有的v4协议栈下模拟出v6的高层级协议栈(道理和VPN一样)。由此,如果提供此服务的那一头所连接的是整个实际互联网的IPv6世界的话,相当于让只有IPv4接入的你进入了纯IPv6的互联网(虽然那边目前犹如北极南极般荒凉)。注意:此模式并非苹果测试审核的要求,但是有些国内坊间误导文就让你一步步干这事 Translation这种模式也就是苹果在其开发者文档中提及的让你用macOS系统可以自己简单搭建一套纯IPv6的内网环境。你的macOS电脑作为NAT64地址转换和路由角色,一头(通常用有线)连接IPv4可以通向整个IPv4的互联网, 一头(通常用WIFI开hotspot)所谓的纯IPv6内网连测试iOS设备。既然如此,其实苹果的审核测试项也就是让通讯数据在iOS设备到macOS电脑这段跑在IPv6协议栈上而已,通过macOS的NAT64后一直到真正的服务所在设备该还是IPv4的大环境下还就是如此。事实上苹果的官文中也就这点特意很明确的表达过了: If you have a… Continue reading 苹果iOS app审核经验谈——IPv6

Macbook Pro 15 inch Early 2011 保修记

机器说明(Spec) MacBook Pro (15 英寸, 2011 年初机型) 型号标示:MacBookPro8,2 Model Numbers: MC723 官方的Spec说明 上市日期:2011年2月24日 上市苹果官方定价 $2199(未含税) 购买于2011年4月,港行 使用习惯,频率 重度用户,机器基本长期处于开机状态,不是开机也是处于睡眠状态,不关机。电池充电周期449次,习惯外接显示器或者电视机,游戏较少,高清视频较多,主要用于程序开发。 自定义硬件改动 购入后没多久内存换成8G(4Gx2),后来又换成16G(8Gx2),2012年中换了256G SSD,没有双硬盘。2014年末尝试从某宝购入特殊渠道的该机型适配蓝牙4.0模块以支持Yosemite的handoff等功能,某宝上东西太不靠谱,未遂。 故障出现,诊断 3年多来,有偶尔的几次屏幕变花现象出现,重启后都能恢复。羊年初某天在看美剧Scorpion,外接的电视机,到某精彩时刻突然黑屏,第一反应觉得可能是视频文件下载有问题,准备查看时发现机器已经毫无反应,伴随风扇狂转,任何操作都没用,只能强关。再开,开机白底画面出现横条纹,无法进入OS。想起该机型一直以来都在网上有很多显卡缺陷的负面报道,初步认定我也中招了。 类似故障集体信息 想着机器也用了近4年了,此时坏了也不是特别不爽,只是时间不对,尚处于Apple可能会不久更新mac产品线之际,遂上网看看有啥临时再拖延拖延的法子。仔细一查,网上各种故障案例在此机型特别集中,2012年和2013年无数网友中招,多是过保的机器,有些去官方花了4K左右的大洋修了,有些便宜些自己找其他奸商搞定了。虽然如前所述早有耳闻,但是这时候看到这些报道就会看得特别认真啊。#算了,说多了都是泪。Facebook有专门的Page,change.org也有专门的请愿Apple更换或者免费维修这类问题。看着这些报道,此时对Apple产生了极大的仇恨啊。 集体诉讼 逛着逛着,发现一则报道说2014年10月已经有律师行正式以几个原告名义向Apple提起集体诉讼了,一纸诉状上写明这款机型的这个问题是因为当时为了满足欧盟法规,Apple使用了无铅焊接工艺,律师认为该技术不成熟,在温度变化明显的时候就会脱焊,于是这种情况时间长了显卡就从主板上虚焊了。欧洲以外地区并没有这个规定,Apple为了节约成本就在全球一并使用该焊接工艺,于是就悲剧了。该诉讼几周前判了,Apple败了。于是这厮不得不正式严肃的面对这个产品缺陷了。 苹果公告 Apple败诉后,在2月19日外媒报道Apple对此机型有延长保修计划了,再往后一看,2015年2月20日在美加实施(心想难道美加人民又特权了?) 再往后一看,其他国家地区2月27日开始受理,一直到2016年2月有效。瞬间豁然开朗,但是对于其中细节媒体和Apple都没有详述,如何维修,换的主板是否还会有这类问题?2016年后再出问题怎么办?(祈祷吧) 维修 随即约了27号的GeniusBar,下午去的,说肯定不能当天拿机器的,具体哪天可以取机当时也不能确定,后续等电话吧。卸了SSD带回,机器就留给他们了。后来通知我3月2日取机器,到此维修结束。问题暂时解决。Apple官方的保修单子上说本次保修涉及的费用是4110人民币,如果没有这次延长保修计划,来官方维修就是这个价格。好在之前苹果公告说以前因为此问题而花钱维修了的可以退回那些冤枉的费用。 利益关系说明 本人没有在Apple极其附属公司就职,没有持有Apple相关有价证券。习惯使用Apple产品及其相关生态环境。

iMessage垃圾消息报告

如果你是一个苹果产品的使用者,无论是Mac电脑,iPhone或者是iPad,你会感觉到苹果自带的iMessage服务是很不错的,尤其是在更新到iOS8以及Yosemite后,iMessage增加了发送音频视频以及地理位置的功能。但是和国内手机号码绑定的iMessage服务我之前是不敢打开的,其原因是因为每天5-10条甚至更多的垃圾短信。最近换了iPhone 6 plus后又捉摸着想打开iMessage服务试试,刚开2天,各种赌场,发票等信息又蜂拥进来。心想苹果到底有没有好好管管这样的服务滥用情况呀。于是Google了一把苹果对于iMessage spam的整治策略。 苹果出招 根据苹果官方网站的介绍:http://support.apple.com/en-us/HT202747 ,目前苹果对于iMessage的滥用情况只能通过用户投诉的形式协助解决。用户需要将以下内容一并发送到苹果官方的投诉专用邮箱:imessage.spam@icloud.com 垃圾短信截图(按住Power + Home键可以截图) 发送者的邮箱地址或者手机号码(苹果懒,其实这个信息截图中应该有,还要我们用文本发送) 你接收到信息的日期和时间(建议加上时区 CST, 如果你在大陆的话) 其中,注意:给苹果报告的垃圾短信必须要是经由iMessage服务发来的(一般iMessage服务器的垃圾短信都是以邮箱地址作为发送者ID,当然以上官网链接中也有很明确的截图示意如何判别垃圾短信来源),如果是经由运营商发来的垃圾短信还请向当地运营商投诉。 另外,虽然苹果官方没有说明会如何处理遭到投诉的iMessage ID,但是从其他渠道了解到苹果对于核实为滥用iMessage服务的Apple ID封杀还是比较给力的,因为其不光会封锁这个Apple ID,连同对应的iOS设备也会一并封杀(不知道针对从Mac电脑上发出的情况怎么处理),也就是说那台iPod Touch或者iPad就无法在发送iMessage了(应该不会有人壕到用iPhone来发垃圾短信吧?),贩子要再继续就要买额外的二手设备。 众包反垃圾 所以让我们一起努力来让iMessage变得更加干净吧,只需要每次接收到垃圾的iMessage信息时,截个图,人肉识别出图中的ID和接收到的时间,给 imessage.spam@icloud.com 去个邮件,相信至少这个ID以及其背后的设备几天后就没法再骚扰任何人了,如果举报的人越多,贩子的损失也就越大,其发送垃圾短信的成本就会越来越高,最后发现得不偿失自然就没人干了。  

WiFi定位原理

转自 blogspot 第一 : iPad wifi 版本没有GPS晶片,这是一个事实,根据Apple自己的规格说明有讲到,确实无法透过GPS定位。 第二:仅有Wifi的设备开启Maps等具有Location Services的软体在部份情况下还是可以得到定位资讯,他靠的就是大家提到的Wifi定位. 第三:分辨有没用到GPS定位,应可以从有没有看到一个波纹从蓝点间歇且规律的散出而判断。Wifi定位就看不到那个波纹。 所谓Wifi定位就是有某个单位把很多的Wifi基地台的资讯与经纬度坐标做了连结,当你站在有被纪录到的Wifi基地台附近时,经查询资料库后获得相对的经纬度资讯来即可完成定位。而Wifi基地台有效范围通常也就那么一点点距离,因此大家会觉得定位蛮准确的。另外一点比较有趣的是Wifi定位不会乱跑,而GPS定位在收讯不佳的情况下多多少少会看到小蓝点在漂移。 那么是谁那么好心帮忙收集这些资料呢,早期是股沟的街车,四处逛大街时”顺便”帮你我家里的Wifi资讯“不经意的”给纪录下来。从最早的iOS 1 到了iOS 3.1 我们的iDevice都是依靠股沟老大及Skyhook的资料库提供我们做Wifi定位。 但如果你家住在高楼大厦或巷弄里,你就是确定股沟的扫街车不可能扫到你的wifi基地台,那还怎么定位呢。 Apple表示到了iOS3.2之后已不在依靠他人来做Wifi定位,在2010年四月后已改由自家的资料库来提供Wifi定位服务。怪了Apple又没扫街,哪来的资料,其实就是在你我”不经意”的协助下帮Apple完成了庞大的资料库建置。这几年有无数台的 iPhone 与 iPad 3G 无时无刻的在各地流串,都是具有GPS晶片的机器,当你第一次开启地图时,都会看到一个讯息,OOXX想使用你的Location资讯XXOO#%…您是否同意。我想绝大部份人都是按同意的。这时候我们都变成了无名英雄,简单的说当你我在逛大街时iDevice即将GPS定位获得的经纬度坐标以及所在位置的Wifi基地台资料适时的回报上去。日积月累下庞大的资料库就建立完成了。我想应该有部份长期使用iPhone的人会有印象,从一代到现在,不知从什么时候开始在室内定位就变得准却多了….就是这样来的。 PS. Apple表示这部份资料是匿名上传,且透过Wifi上传,所以大可不必担心资料安全或3G网路传输的问题。 因此,回到原先的问题点,如果你同时拥有两种iDevice,一个有GPS晶片,一个没有( 如iPodTouch/ iPad wifi ),那么应该你在家里两种设备都很容易可以完成定位,因为你一定会不经意的站在窗边使用iPhone/iPad 3G 而接收到GPS坐标并回报Wifi基地台资料,接着你的 Touch / iPad wifi 也就很轻易的可以透过查询Wifi资料而定位。但如果不幸你仅有Touch或iPad wifi,那其实也不是就定不到了,只要你有朋友或任何情况下路人甲拿着iPhone经过你家并收的到你的Wifi基地台资料,那么很快的你也可以定位了。

苹果关于员工使用社交网络等行为的内部文档

员工可以拥有自己的个人网站,但不能在上面讨论和苹果相关的内容 苹果员工不能在和苹果相关的网站上发表任何评论 所有员工都拥有 @apple.com 的邮箱地址,但是只能使用 @me.com 邮箱做私人邮箱 不能有任何关于苹果公司及其产品的猜测或传闻 苹果公司有一个名为 HRCCC 的商业政策,即:诚实(Honesty)、尊重(Respect)、保密(Confidentially)、社区(Community)、服从(Compliance) 苹果的商业行为政策及原则适用于普通员工、独立承包商、顾问以及其他与苹果公司有业务往来的人 一切为了保密。这方面苹果是出了名的。

Memory Management in Objective-C

基本法则: You own any object you create You create an object using a method whose name begins with “alloc”, “new”, “copy”, or “mutableCopy” (for example, alloc, newObject, or mutableCopy). 你用alloc, new, copy或者mutableCopy消息创建出来的对象,所有权归你。 You can take ownership of an object using retain A received object is normally guaranteed to remain valid within the method it was received in, and… Continue reading Memory Management in Objective-C

iOS下英文界面中文联系人名排序方法

Contacts: /System/Library/Frameworks/AddressBook.framework/zh_CN.lproj/ABContactSections.plist 复制到 /System/Library/Frameworks/AddressBook.framework/English.lproj/ABContactSections.plist iPod: /System/Library/PrivateFrameworks/MusicLibrary.framework/zh_CN.lproj/MLSections.plist /System/Library/PrivateFrameworks/MusicLibrary.framework/zh_CN.lproj/SortingDetails.plist 把它们直接复制到对应的English.lproj目录即可。 通常还需要到Setting中切换一次语言环境才会生效,重启并不会生效。

MacOSX Font 优化

最近装上了Lion来玩,发现装好后字体问题依旧和Snow leopard一样,还是需要自己搞一下,于是又上网找到了当初的这篇文章,这次转载在此以便以后查询方便。 以下内容转自coolcode.org,有删节。 下载这个 simsun.ttc. 然后放到雪豹的字体文件夹中: /Library/Fonts 如果安装到个人目录下的字体目录中的话,后面会在某些root界面中不显示汉字,只出现方块。 之后修改 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreText.framework/Versions/A/Resources /DefaultFontFallbacks.plist, 将其中的简体和繁体中文字体统统替换为 SimSun。 可以使用vim中的查找替换 :%s/STHeitiSC-Light/SimSun/g %s/STKaiti/SimSun/g 等命令。 然后再执行 defaults -currentHost write -globalDomain AppleFontSmoothing -int 2 用于修改字体粗细程度。 就可以看到圆润饱满清晰的汉字了。 如果你想我一样更喜欢看点阵字,而不是平滑的抗锯齿的肥胖字,可以执行 defaults -currentHost write -globalDomain AppleAntiAliasingThreshold 12 这句,这样小字体就都是按照点阵显示了,而没有大于12pt的字体还是按照平滑字处理,效果相当好。不过不是所有的程序都支持,比如 Firefox 下面仍然是平滑的抗锯齿的肥胖字,而 Safari 和 Chrome 下面就按照点阵字显示了。这样也有一个好处,有些站点是专为苹果系统设计的,所以其中的汉字字体他们会指定苹果下的一中叫做Hiragino Sans GB字体,这个字体在抗锯齿效果下对汉字支持还算比较好,不过它不包含清晰点阵字,所以在取消抗锯齿的效果下,显示就相当差了。浏览这样的网站,用 Firefox 就好了。而浏览器其它网站时,用 Safari 或 Chrome。就会有类似 XP 下的清晰效果了,其实比 XP 下效果还要好,因为当你遇到小字体时(8pt-10pt),你会看到清晰小点阵字,遇到大字体时(18pt以上),你会看到清晰的抗锯齿字,这些效果要比 XP 下好得多。 其实我之前用Hiragino Sans GB其实也不错。这个simsun可以有微软雅黑的效果。… Continue reading MacOSX Font 优化

2011款MBP无法安装Lion Develop Preivew 4解决方案

WWDC2011后去下载了Mac OS X Lion Develop Preview 4. Mount上DMG文件直接安装后发现不行。于是上网发现很多2011款的用户都不能正常的来安装这个版本,其原因主要是由于WIFI驱动的问题。知道原因的所在,下面就有了方法可以来walk-around这个问题了。 1.使用Disk Utility割一个小分区出来,用于作为安装盘。再割一个分区出来用于安装Lion DP4. 2.首先在现有系统中打开Lion DP4的安装盘,然后打开Finder选中刚才加载的镜像。 3.将安装盘根目录下的BaseSystem.dmg(隐藏文件)复制到桌面。可以用chflags nohidden 修改文件属性。 4.在Disk Utility中,将桌面上的BaseSystem.dmg恢复到步骤1中的安装盘分区。 5.再将安装盘根目录下的所有文件 复制到 步骤一创建的安装盘分区的根目录下。 6.将安装盘中的Packages目录复制到安装盘分区的/System/Installation下。 7.删除安装盘分区中的System/Library/Extentions/IO80211Family.kext 到这里,我们从这个新建的安装盘分区重启电脑就可以正常开始安装了。这样子装完之后是没有wifi的。要使wifi可以使用,需要下载2个东西: kext helper b7和10.6.7的IO80211Family.kext(这个如果你原本是10.6.7系统可以从自己/System/Library/Extensions下复制)。建议可以在安装前就将这些文件准备好。 The procedure to fix the failure when installing Mac OSX Lion Develop Preview 4 on the latest 2011 MBP: 1. Create two additional partitions, one for the lion… Continue reading 2011款MBP无法安装Lion Develop Preivew 4解决方案

Objective-C Overview

在网上找到一篇文章,大致介绍了一下Objective-C的语法。用于复习很不错。简短,适合初学Objective-C的同学复习。 整篇文章谈到了以下内容: 方法调用(发消息) 访问函数(Accessor) 创建对象 基本内存管理 设计类 实现类 更多内存管理方面讨论 日志 属性 nil上消息发送 类别 其中的内存管理和日志都是针对cocoa的NSObject和NSLog。 这里面没有讲到Protocol,另外一些2.0的内容也没有。不过依旧是很不错的复习资料。