苹果应用审核通过后立马原帖被删除或审核是因为什么?shu

3154人阅读
iOS开发(261)
果然是苹果打个哈欠,iOS行业内就得起一次风暴呀。自从5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,大家便开始热火朝天的研究如何支持IPV6,以及应用中哪些模块目前不支持IPV6。
一、IPV6-Only支持是啥?
首先IPV6,是对IPV4地址空间的扩充。目前当我们用iOS设备连接上Wifi、4G、3G等网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IPV6 DNS64/NAT64网络之后,设备被分配的地址会变成IPV6的地址,而这些网络就是所谓的IPV6-Only网络,并且仍然可以通过此网络去获取IPV4地址提供的内容。客户端向服务器端请求域名解析,首先通过DNS64 Server查询IPv6的地址,如果查询不到,再向DNS Server查询IPv4地址,通过DNS64 Server合成一个IPV6的地址,最终将一个IPV6的地址返回给客户端。如图所示:
NAT64-DNS64-ResolutionOfIPv4_2x.png
在Mac OS 10.11+的双网卡的Mac机器(以太网口+无线网卡),我们可以通过模拟构建这么一个local IPv6 DNS64/NAT64 的网络环境去测试应用是否支持IPV6-Only网络,大概原理如下:
local_ipv6_dns64_nat64_network_2x.png
参考资料:
二、Apple如何审核支持IPV6-Only?
首先第一点:这里说的支持IPV6-Only网络,其实就是说让应用在 IPv6 DNS64/NAT64 网络环境下仍然能够正常运行。但是考虑到我们目前的实际网络环境仍然是IPV4网络,所以应用需要能够同时保证IPV4和IPV6环境下的可用性。从这点来说,苹果不会去扫描IPV4的专有API来拒绝审核通过,因为IPV4的API和IPV6的API调用都会同时存在于代码中。
其次第二点:Apple官方声明iOS9开始向IPV6支持过渡,在iOS9.2+支持IPV4地址合成IPV6地址。其提供的Reachability库在iOS8系统下,当从IPV4切换到IPV6网络,或者从IPV6网络切换到IPV4,是无法监控到网络状态的变化。也有一些开发者针对这些Bug询问Apple的审核部门,给予的答复是只需要在苹果最新的系统上保证IPV6的兼容性即可。
最后第三点:只要应用的主流程支持IPV6,通过苹果审核即可。对于不支持IPV6的模块,考虑到我们现实IPV6网络的部署还需要一段时间,短时间内不会影响我们用户的使用。但随着4G网络IPV6的部署,这部分模块还是需要逐渐安排人力进行支持。
三、应用如何支持IPV6-Only?
对于如何支持IPV6-Only,官方给出了如下几点标准:(这里就不对其进行解释了,大家看上面的参考链接即可)
1. Use High-Level Networking F
2. Don’t Use IP Address L
3. Check Source Code for IPv6 DNS64/NAT64 I
4. Use System APIs to Synthesize IPv6 A
3.1 NSURLConnection是否支持IPV6?
官方的这句话让我们疑惑顿生:
using high-level networking APIs such as NSURLSession and the CFNetwork frameworks and you connect by name, you should not need to change anything for your app to work with IPv6 addresses
只说了NSURLSession和CFNetwork的API不需要改变,但是并没有提及到NSURLConnection。 从上文的参考资料中,我们看到NSURLSession、NSURLConnection同属于Cocoa的url loading system,可以猜测出NSURLConnection在ios9上是支持IPV6的。
应用里面的API网络请求,大家一般都会选择AFNetworking进行请求发送,由于历史原因,应用的代码基本上都深度引用了AFHTTPRequestOperation类,所以目前API网络请求均需要通过NSURLConnection发送出去,所以必须确认NSURLConnection是否支持IPV6. 经过测试,NSURLConnection在最新的iOS9系统上是支持IPV6的。
3.2 Cocoa的URL Loading System从iOS哪个版本开始支持IPV6?
目前我们的应用最低版本还需要支持iOS7,虽然苹果只要求最新版本支持IPV6-Only,但是出于对用户负责的态度,我们仍然需要搞清楚在低版本上URL Loading System的API是否支持IPV6.
(to fix me, make some experiments)待续~~~
3.3 Reachability是否需要修改支持IPV6?
我们可以查到应用中大量使用了Reachability进行网络状态判断,但是在里面却使用了IPV4的专用API。
在Pods:Reachability中
Files:Reachability.m
struct sockaddr_in
Files:Reachability.h , Reachability.m
那Reachability应该如何支持IPV6呢?
(1)目前Github的开源库Reachability的最新版本是3.2,苹果也出了一个Support IPV6 的Reachability的官方样例,我们比较了一下源码,跟Github上的Reachability没有什么差异。
(2)我们通常都是通过一个0.0.0.0 (ZeroAddress)去开启网络状态监控,经过我们测试,在iOS9以上的系统上IPV4和IPV6网络环境均能够正常使用;但是在iOS8上IPV4和IPV6相互切换的时候无法监控到网络状态的变化,可能是因为苹果在iOS8上还并没有对IPV6进行相关支持相关。(但是这仍然满足苹果要求在最新系统版本上支持IPV6的网络)。
(3)当大家都在要求Reachability添加对于IPV6的支持,其实苹果在iOS9以上对Zero Address进行了特别处理,是这样的:
reachabilityForInternetConnection: This monitors the address 0.0.0.0,
which reachability treats as a special token that causes it to actually
monitor the general routing status of the device, both IPv4 and IPv6.
+ (instancetype)reachabilityForInternetConnection {
struct sockaddr_in zeroA
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
return [self reachabilityWithAddress: (const struct sockaddr *) &zeroAddress];
综上所述,Reachability不需要做任何修改,在iOS9上就可以支持IPV6和IPV4,但是在iOS9以下会存在bug,但是苹果审核并不关心。
四、底层的socket API如何同时支持IPV4和IPV6?
由于在应用中使用了网络诊断的组件,大量使用了底层的 socket API,所以对于IPV6支持,这块是个重头戏。如果你的应用中使用了长连接,其必然会使用底层socket API,这一块也是需要支持IPV6的。 对于Socket如何同时支持IPV4和IPV6,可以参考谷歌的开源库.
下面我针对我们的开源 , 说一下是如何同时支持IPV4和IPV6的。
开源地址:
这个网络诊断组件的主要功能如下:
本地网络环境的监测(本机IP+本地网关+本地DNS+域名解析);通过TCP Connect监测到域名的连通性;通过Ping 监测到目标主机的连通耗时;通过traceRoute监测设备到目标主机中间每一个路由器节点的ICMP耗时;
4.1 IP地址从二进制到符号的转化
之前我们都是通过inet_ntoa()进行二进制到符号,这个API只能转化IPV4地址。而inet_ntop()能够兼容转化IPV4和IPV6地址。 写了一个公用的in6_addr的转化方法如下:
+(NSString *)formatIPV6Address:(struct in6_addr)ipv6Addr{
NSString *address = nil
char dstStr[INET6_ADDRSTRLEN]
char srcStr[INET6_ADDRSTRLEN]
memcpy(srcStr, &ipv6Addr, sizeof(struct in6_addr))
if(inet_ntop(AF_INET6, srcStr, dstStr, INET6_ADDRSTRLEN) != NULL){
address = [NSString stringWithUTF8String:dstStr]
return address
4.2 本机IP获取支持IPV6
相当于我们在终端中输入ifconfig命令获取字符串,然后对ifconfig结果字符串进行解析,获取其中en0(模拟器)、pdp_ip0(真机)的ip地址。
(1)在模拟器和真机上都会出现以FE80开头的IPV6单播地址影响我们判断,所以在这里进行特殊的处理(当第一次遇到不是单播地址的IP地址即为本机IP地址)。
(2)在IPV6环境下,真机测试的时候,第一个出现的是一个IPV4地址,所以在IPV4条件下第一次遇到单播地址不退出。
+ (NSString *)deviceIPAdress
while (temp_addr != NULL) {
NSLog(@&ifa_name===%@&,[NSString stringWithUTF8String:temp_addr-&ifa_name]);
if ([[NSString stringWithUTF8String:temp_addr-&ifa_name] isEqualToString:@&en0&] || [[NSString stringWithUTF8String:temp_addr-&ifa_name] isEqualToString:@&pdp_ip0&])
if (temp_addr-&ifa_addr-&sa_family == AF_INET){
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr-&ifa_addr)-&sin_addr)];
else if (temp_addr-&ifa_addr-&sa_family == AF_INET6){
address = [self formatIPV6Address:((struct sockaddr_in6 *)temp_addr-&ifa_addr)-&sin6_addr];
if (address && ![address isEqualToString:@&&] && ![address.uppercaseString hasPrefix:@&FE80&]) break;
temp_addr = temp_addr-&ifa_
4.3 设备网关地址获取获取支持IPV6
其实是在IPV4获取网关地址的源码的基础上进行了修改,初开把AF_INET-&AF_INET6, sockaddr -& sockaddr_in6之外,还需要注意如下修改,就是拷贝的地址字节数。去掉了ROUNDUP的处理。 (解析出来的地址老是少了4个字节,结果是偏移量搞错了,纠结了半天),具体参考源码库。
int mib[] = {CTL_NET, PF_ROUTE, 0, AF_INET6, NET_RT_FLAGS, RTF_GATEWAY};
if (sysctl(mib, sizeof(mib) / sizeof(int), buf, &l, 0, 0) & 0) {
address = @&192.168.0.1&;
for (i = 0; i & RTAX_MAX; i++) {
if (rt-&rtm_addrs & (1 && i)) {
sa_tab[i] =
sa = (struct sockaddr *)((char *)sa + ROUNDUP(sa-&sa_len));
sa_tab[i] = NULL;
for (i = 0; i & RTAX_MAX; i++) {
if (rt-&rtm_addrs & (1 && i)) {
sa_tab[i] =
sa = (struct sockaddr_in6 *)((char *)sa + sa-&sin6_len);
sa_tab[i] = NULL;
4.4 设备DNS地址获取支持IPV6
IPV4时只需要通过res_ninit进行初始化就可以获取,但是在IPV6环境下需要通过res_getservers()接口才能获取。
+(NSArray *)outPutDNSServers{
res_state res = malloc(sizeof(struct __res_state));
int result = res_ninit(res);
NSMutableArray *servers = [[NSMutableArray alloc] init];
if (result == 0) {
union res_9_sockaddr_union *addr_union = malloc(res-&nscount * sizeof(union res_9_sockaddr_union));
res_getservers(res, addr_union, res-&nscount);
for (int i = 0; i & res-& i++) {
if (addr_union[i].sin.sin_family == AF_INET) {
char ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(addr_union[i].sin.sin_addr), ip, INET_ADDRSTRLEN);
NSString *dnsIP = [NSString stringWithUTF8String:ip];
[servers addObject:dnsIP];
NSLog(@&IPv4 DNS IP: %@&, dnsIP);
} else if (addr_union[i].sin6.sin6_family == AF_INET6) {
char ip[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, &(addr_union[i].sin6.sin6_addr), ip, INET6_ADDRSTRLEN);
NSString *dnsIP = [NSString stringWithUTF8String:ip];
[servers addObject:dnsIP];
NSLog(@&IPv6 DNS IP: %@&, dnsIP);
NSLog(@&Undefined family.&);
res_nclose(res);
free(res);
return [NSArray arrayWithArray:servers];
4.4 域名DNS地址获取支持IPV6
在IPV4网络下我们通过gethostname获取,而在IPV6环境下,通过新的gethostbyname2函数获取。
phot = gethostbyname(hostN)
phot = gethostbyname2(hostN, AF_INET6)
4.5 ping方案支持IPV6
Apple的官方提供了最新的支持IPV6的ping方案,参考地址如下:
只是需要注意的是:
(1)返回的packet去掉了IPHeader部分,IPV6的header部分也不返回TTL(Time to Live)字段;
(2)IPV6的ICMP报文不进行checkSum的处理;
4.6 traceRoute方案支持IPV6
其实是通过创建socket套接字模拟ICMP报文的发送,以计算耗时;
两个关键的地方需要注意:
(1)IPV6中去掉IP_TTL字段,改用跳数IPV6_UNICAST_HOPS来表示;
(2)sendto方法可以兼容支持IPV4和IPV6,但是需要最后一个参数,制定目标IP地址的大小;因为前一个参数只是指明了IP地址的开始地址。千万不要用统一的sizeof(struct sockaddr), 因为sockaddr_in 和 sockaddr都是16个字节,两者可以通用,但是sockaddr_in6的数据结构是28个字节,如果不显式指定,sendto方法就会一直返回-1,erroNo报22 Invalid argument的错误。
关键代码如下:(完整代码参考开源组件)
NSString *ipAddr0 = [serverDNSs objectAtIndex:0];
NSData *addrData = nil;
BOOL isIPV6 = NO;
if ([ipAddr0 rangeOfString:@&:&].location == NSNotFound) {
isIPV6 = NO;
struct sockaddr_in nativeAddr4;
memset(&nativeAddr4, 0, sizeof(nativeAddr4));
nativeAddr4.sin_len = sizeof(nativeAddr4);
nativeAddr4.sin_family = AF_INET;
nativeAddr4.sin_port = htons(udpPort);
nativeAddr4.sin_addr.s_addr = inet_addr([ipAddr0 UTF8String]);
addrData = [NSData dataWithBytes:&nativeAddr4 length:sizeof(nativeAddr4)];
isIPV6 = YES;
struct sockaddr_in6 nativeAddr6;
memset(&nativeAddr6, 0, sizeof(nativeAddr6));
nativeAddr6.sin6_len = sizeof(nativeAddr6);
nativeAddr6.sin6_family = AF_INET6;
nativeAddr6.sin6_port = htons(udpPort);
inet_pton(AF_INET6, ipAddr0.UTF8String, &nativeAddr6.sin6_addr);
addrData = [NSData dataWithBytes:&nativeAddr6 length:sizeof(nativeAddr6)];
struct sockaddr *
destination = (struct sockaddr *)[addrData bytes];
if ((recv_sock = socket(destination-&sa_family, SOCK_DGRAM, isIPV6?IPPROTO_ICMPV6:IPPROTO_ICMP)) & 0)
if ((send_sock = socket(destination-&sa_family, SOCK_DGRAM, 0)) & 0)
if ((isIPV6?
setsockopt(send_sock,IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl, sizeof(ttl)):
setsockopt(send_sock, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl))) & 0)
ssize_t sentLen = sendto(send_sock, cmsg, sizeof(cmsg), 0,
(struct sockaddr *)destination,
isIPV6?sizeof(struct sockaddr_in6):sizeof(struct sockaddr_in));
文/philon(简书作者)
原文链接:/p/a6bab07c4062
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:94168次
积分:1486
积分:1486
排名:千里之外
转载:282篇
评论:32条
(33)(40)(42)(38)(35)(32)(48)(15)(7)苹果用什么软件阅读电子书?最好齐全一点的,非免费也行,重要的是书多_百度知道  如标题,楼主今天点开备忘录想记个账,突然发现备忘录上面全部都不是自己的内容。后来发现,和一个小伙伴的备忘录调换了。  我和这个小伙伴之间不存在知道对方用户名和密码的问题,甚至都没有用过对方的机子。  还有一舍友,从昨天开始,手机就开始莫名其妙陆续的下载软件,直到关了wlan和蜂窝数据才停止。  大家出现过这种问题吗
楼主发言:6次 发图:0张
  虽然从来不会在备忘录里存隐私的东西,也没有艳照,可是依旧感到很愤怒啊。隐私被窥探的感觉
  @寂地马德里   暂时没发现这样的问题
  云备份已经进入狂化阶段?  
  擦,好多东西一打开就闪退,我以为我手机坏了,结果发现朋友手机也这样,怪不得之前买手机的时候那个销售员让我别注册app,  
  闪退越来越严重  
  @最爱金桔柠檬
00:11:45.0  擦,好多东西一打开就闪退,我以为我手机坏了,结果发现朋友手机也这样,怪不得之前买手机的时候那个销售员让我别注册app,   —————————————  你是用过PP助手下过软件?这个软件跟app有冲突会导致软件闪退  
  wifi和蓝牙再也打不开了!4s  
  @天上硕石 8楼
01:45  wifi和蓝牙再也打不开了!4s  -----------------------------我的WIFI也坏过 花200换个零件好了  
  用了公共账号登陆icloud  
  apple id密码突然就错了=_=。  
  2年了健康的很。。4S
  为啥说最近?难道6出来了其他得苹果小伙伴想自动退役?  
  App都是在商店下载,非同步推,91,itools,快手之类软件下载。近些日子发现有些软件闪退,一直按个十几次才进的去…
  @shujianfeng-12 23:53:54  @寂地马德里   暂时没发现这样的问题  ———————————————  身边很多小伙伴都没有这样的问题,就我们宿舍集中出现了......  
  @Xeno_vii
02:43:30  用了公共账号登陆icloud  ———————————————  这个情况我们分析过了,排除了  
  我q总闪退,前几天,根本进不去,重装个q就好了  
  @青瓜兽兽
00:26:28.0  你是用过PP助手下过软件?这个软件跟app有冲突会导致软件闪退   —————————————  我之前用的同步推,pp助手是用来下铃声,然后软件开始闪退,又找朋友给我注册账号,然后把之前同步推的东西全给删了重新在app里下载,谁知现在也闪退  
  突然之间变的慢慢慢!!
  ipad 突然黑屏'  
  @天上硕石
01:45:37  wifi和蓝牙再也打不开了!4s  —————————————  我wifi坏了修了300块  
  为什么互换的那个人你认识,而不是陌生人,这是重点,这之间一定有某种关联。我也不知道。。。我iPad暂时没什么问题,手机不是苹果产品  
  @最爱金桔柠檬 4楼
00:11  擦,好多东西一打开就闪退,我以为我手机坏了,结果发现朋友手机也这样,怪不得之前买手机的时候那个销售员让我别注册app,  ----------------------------  一样症状,还有就是稍微进了点水,屏幕有黑线了,别的手机比这个难水多了。  
  @西田xixi
04:57:54.0  apple id密码突然就错了=_=。   —————————————  我也是这样,要哭了,应用没法下载  
  @青瓜兽兽 6楼
00:26:28  @最爱金桔柠檬
00:11:45.0  擦,好多东西一打开就闪退,我以为我手机坏了,结果发现朋友手机也这样,怪不得之前买手机的时候那个销售员让我别注册app,  —————————————  你是用过PP助手下过软件?这个软件跟app有冲突会导致软件闪退  -----------------------------  楼上说的对,我身边几个同事都是因为用PP助手,最近疯狂闪退。。。
  我5s会各种狂卡,app卡死,闪退,我正品行货没越狱而且没修过。不打游戏不下东西只装了苹果商店下载的工作软件、通讯工具、常见app  
  漏电。。。touch
pad 还有手机,一充电手一摸就麻。  
  4s,用了两年,偶尔有闪退,其他没问题  
18:52:08  为什么互换的那个人你认识,而不是陌生人,这是重点,这之间一定有某种关联。我也不知道。。。我iPad暂时没什么问题,手机不是苹果产品  ———————————————  互换的小伙伴还真的没有太多的接触。。。  
  @xs_tsw
19:52:38  我5s会各种狂卡,app卡死,闪退,我正品行货没越狱而且没修过。不打游戏不下东西只装了苹果商店下载的工作软件、通讯工具、常见app  ———————————————  我是pad4现在狂卡,是因为下的东西太多,内存都不到一个g的原因。你有没有及时清理缓存之类的啊  
  @寂地马德里
16:00:20  我是pad4现在狂卡,是因为下的东西太多,内存都不到一个g的原因。你有没有及时清理缓存之类的啊  —————————————  每天清N次  
  有 别人发给我妈的短信 我妈的手机里有 我的手机里也有  
  怎么这么多有问题的,用pp助手下东西的同学们是会闪退,在电脑上装pp助手后修复一下就可以解决,卡的应该是东西下太多的,电脑装pp助手后可以清理缓存之类的,我一般两三个月清一次,每次都可以清出来几百兆,我朋友的两年多没清理过,直接清出来6G多,清理后手机速度有提升。  
  我的也是刚刚发现了这个问题,备忘录里一堆别人的东西,我不知道是谁的!自己的东西也少了,但是同个苹果账号的IPAD就没有,但是自己的东西都没了,什么情况,好诡异
请遵守言论规则,不得违反国家法律法规苹果6刚不小心掉水盆里了不过立马捡起来,能用感觉一切正常,是真的没事么?该怎么办_百度知道一波传奇巨星相继退役,科比、邓肯的离去,让如今的NBA赛场少了一份当年的滋味,当另...
自 iPhone 7 和 iPhone 7 Plus 发售以来,电池续航自然是科技网站或机构不可避免要测...
可能很多锋友在使用 iMessage 的时候就已经发现 iOS 10 新增了图片标注功能,那么我们...
全新 iPhone 7 和 7 Plus 的发布增加了一项很多锋友期待已久的特性:防水。不过,对此...
考虑到这两款软件的热门程度以及用户的需要,更新应该会很快到来。
不过从价格上来看,似乎有点性价比略低,而且目前可供选择的配件少得可怜~
当然,分析师还是那个分析师,有时候和实际情况还是有不少出入的。
嗯,你觉得 iPhone 拥有双击唤醒功能好吗?
《那兔之大国梦》是《那年那兔那些事儿》改编的第二款手游,在经历第一款手游的“失败...
《小轮车冒险》(Pumped BMX)是独立游戏开发团队 Yeah Us! 手中的金字招牌,目前已经...
弹幕射击类游戏在出现之后获得了不少玩家的喜爱,这些年来也一直人气不减。
总的来说游戏的质量还是值得肯定的,内容也算是比较丰富的。
在上周四的照例更新当中,国区App Store上架了一款名为《可萌记账》的应用,而这款应...
《崩坏3》作为一款国内厂商开发的ACG手游,游戏的质量毋庸置疑。
游戏虽然采用了一般玩家不是很感兴趣的弹珠台类型,但是通过在玩法上进行创新,让这个...
不过从价格上来看,似乎有点性价比略低,而且目前可供选择的配件少得可怜~
因为 iPhone 7 只有一个 Lightning 接口,因此充电线缆和 EarPods 很难同时使用。
看过用了 W1 芯片的 Beats Solo 评测之后更加期待 AirPods 了!
苹果在新款 iPhone 7 系列手机中取消了传统的 3.5mm 耳机插孔,但是仍有不少苹果粉丝...
虽然 iPhone 本身也可以通过应用进行录音,但是很多需要录音的时刻并不会等着我们打开...
相信随着智能家居渐渐走入更多人的家庭里,肯定会有更多设备支持HomeKit。
随着苹果对Apple Watch进行更新,越来越多的配件生产商也开始带来其首款Apple Watch表...
不知道他们的履历能不能为自己带来额外的收益?
请问苹果上最好的看书软件是什么?
注册时间 最后登录
在线时间24 小时 UID
主题帖子人气
青苹果, 积分 53, 距离下一级还需 147 积分
如题 最好有都支持什么格式,大家都说说呗
<p id="rate_535" onmouseover="showTip(this)" tip="当然是stanza&人气 + 1
" class="mtn mbn">
<p id="rate_9256" onmouseover="showTip(this)" tip="iBooks,毋庸置疑,苹果官方出品的东西款款是精品!&人气 + 1
" class="mtn mbn">
当然是stanza
iBooks,毋庸置疑,苹果官方出品的东西款款是精品!
注册时间 最后登录
在线时间1340 小时 UID
主题帖子人气
iBooks,毋庸置疑,苹果官方出品的东西款款是精品!
注册时间 最后登录
在线时间2001 小时 UID
主题帖子人气
提示: 作者被禁止或删除 内容自动屏蔽
注册时间 最后登录
在线时间1672 小时 UID
主题帖子人气
注册时间 最后登录
在线时间941 小时 UID
主题帖子人气
QQ阅读, 专门看txt的,
单反穷三代, 苹果毁一生.
注册时间 最后登录
在线时间1253 小时 UID
主题帖子人气
Love your mother who who…
支持的格式最多。。。
翻页3D效果超帅。。
打开很快。。。
IBOOK很好看,但是打开大点的书超级慢!!!!
比如那个金庸合集、鬼吹灯图文版,10M左右,打开很慢。。。
“我想你了…”“我也是…”“你老婆睡了?”“恩…”“我老婆也睡了…”
注册时间 最后登录
在线时间24 小时 UID
主题帖子人气
谢谢各位 我都下来试试
注册时间 最后登录
在线时间4119 小时 UID
主题帖子人气
这家伙很懒,什么也没
没有最好,只有你习惯用哪个,偏好用哪个
注册时间 最后登录
在线时间3346 小时 UID
主题帖子人气
亚洲一区微光沼泽 id-D
ireader很强大 虽然没有上架 不过书库啥的还是比较全 至于效果只能说一般般了 不过看书也不需要太注重翻页啥的吧
注册时间 最后登录
在线时间4400 小时 UID
主题帖子人气
引用#8楼sausagemeng于 00:46发表的: ireader很强大 虽然没有上架 不过书库啥的还是比较全 至于效果只能说一般般了 不过看书也不需要太注重翻页啥的吧已经上架了!
威锋旗下产品
Hi~我是威威!
沪公网安备 29号 | 沪ICP备号-1
新三板上市公司威锋科技(836555)
增值电信业务经营许可证:
Powered by Discuz!

我要回帖

更多关于 lol被删除的4个英雄 的文章

 

随机推荐