为什么特殊阿拉伯特殊符号复制字符串能造成iOS系统和OS X下应用崩溃

========更新===========&br&&a data-title=&@祝博韬& data-editable=&true& class=&member_mention& data-hash=&e00febb73bb1f09dbcd4d6& href=&///people/e00febb73bb1f09dbcd4d6& data-hovercard=&p$b$e00febb73bb1f09dbcd4d6&&@祝博韬&/a& 大神亲自在Mac上编译了WebKit,然后发现了问题的触发点,就是WebCore里面的对于自然语言排版的判断存在问题,相关代码我引用一下:&br&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&c1&&//
if (!m_mayUseNaturalWritingDirection || m_run.directionalOverride()) {&/span&
&span class=&c1&&//
static const void* optionKeys[] = { kCTTypesetterOptionForcedEmbeddingLevel };&/span&
&span class=&c1&&//
const short ltrForcedEmbeddingLevelValue = 0;&/span&
&span class=&c1&&//
const short rtlForcedEmbeddingLevelValue = 1;&/span&
&span class=&c1&&//
static const void* ltrOptionValues[] = { CFNumberCreate(kCFAllocatorDefault, kCFNumberShortType, &ltrForcedEmbeddingLevelValue) };&/span&
&span class=&c1&&//
static const void* rtlOptionValues[] = { CFNumberCreate(kCFAllocatorDefault, kCFNumberShortType, &rtlForcedEmbeddingLevelValue) };&/span&
&span class=&c1&&//
static CFDictionaryRef ltrTypesetterOptions = CFDictionaryCreate(kCFAllocatorDefault, optionKeys, ltrOptionValues, WTF_ARRAY_LENGTH(optionKeys), &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);&/span&
&span class=&c1&&//
static CFDictionaryRef rtlTypesetterOptions = CFDictionaryCreate(kCFAllocatorDefault, optionKeys, rtlOptionValues, WTF_ARRAY_LENGTH(optionKeys), &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);&/span&
&span class=&c1&&//&/span&
&span class=&c1&&//#if PLATFORM(IOS) || __MAC_OS_X_VERSION_MIN_REQUIRED &= 1070&/span&
&span class=&c1&&//
ProviderInfo info = { cp, length, stringAttributes.get() };&/span&
&span class=&c1&&//
RetainPtr&CTTypesetterRef& typesetter = adoptCF(wkCreateCTTypesetterWithUniCharProviderAndOptions(&provideStringAndAttributes, 0, &info, m_run.ltr() ? ltrTypesetterOptions : rtlTypesetterOptions));&/span&
&span class=&c1&&//#else&/span&
&span class=&c1&&//
RetainPtr&CFStringRef& string = adoptCF(CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault, cp, length, kCFAllocatorNull));&/span&
&span class=&c1&&//
RetainPtr&CFAttributedStringRef& attributedString = adoptCF(CFAttributedStringCreate(kCFAllocatorDefault, string.get(), stringAttributes.get()));&/span&
&span class=&c1&&//
RetainPtr&CTTypesetterRef& typesetter = adoptCF(CTTypesetterCreateWithAttributedStringAndOptions(attributedString.get(), m_run.ltr() ? ltrTypesetterOptions : rtlTypesetterOptions));&/span&
&span class=&c1&&//#endif&/span&
&span class=&c1&&//&/span&
&span class=&c1&&//
line = adoptCF(CTTypesetterCreateLine(typesetter.get(), CFRangeMake(0, 0)));&/span&
&span class=&c1&&//
} else {&/span&
&span class=&n&&ProviderInfo&/span& &span class=&n&&info&/span& &span class=&o&&=&/span& &span class=&p&&{&/span& &span class=&n&&cp&/span&&span class=&p&&,&/span& &span class=&n&&length&/span&&span class=&p&&,&/span& &span class=&n&&stringAttributes&/span&&span class=&p&&.&/span&&span class=&n&&get&/span&&span class=&p&&()&/span& &span class=&p&&};&/span&
&span class=&n&&line&/span& &span class=&o&&=&/span& &span class=&n&&adoptCF&/span&&span class=&p&&(&/span&&span class=&n&&wkCreateCTLineWithUniCharProvider&/span&&span class=&p&&(&/span&&span class=&o&&&&/span&&span class=&n&&provideStringAndAttributes&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&o&&&&/span&&span class=&n&&info&/span&&span class=&p&&));&/span&
&span class=&c1&&//
&/code&&/pre&&/div&注释掉的代码应该就是问题所在&br&报错的位置就在&br&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&n&&line&/span& &span class=&o&&=&/span& &span class=&n&&adoptCF&/span&&span class=&p&&(&/span&&span class=&n&&CTTypesetterCreateLine&/span&&span class=&p&&(&/span&&span class=&n&&typesetter&/span&&span class=&p&&.&/span&&span class=&n&&get&/span&&span class=&p&&(),&/span& &span class=&n&&CFRangeMake&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&)));&/span&
&/code&&/pre&&/div&这一行&br&对于这个终极解答,我个人认为这个表明,WebCore处理自然语言的时候存在问题,CoreText也存在问题&br&不过就WebCore是在处理完了之后丢给CoreText的时候出的问题,我觉得CoreText应该要负主要责任。&br&至于CoreText,这货只要苹果不开源,我们永远不知道他到底是怎么『杀人』的……&br&&br&=========顶部注明==========&br&感觉有些乱了,和&a data-title=&@孙竟& data-editable=&true& class=&member_mention& data-hash=&ac7739eff381dc16e6ff7& href=&///people/ac7739eff381dc16e6ff7& data-hovercard=&p$b$ac7739eff381dc16e6ff7&&@孙竟&/a& 还有&a data-title=&@祝博韬& data-editable=&true& class=&member_mention& data-hash=&e00febb73bb1f09dbcd4d6& href=&///people/e00febb73bb1f09dbcd4d6& data-hovercard=&p$b$e00febb73bb1f09dbcd4d6&&@祝博韬&/a& 两位知乎iOS大神交流也不太通畅,似乎是因为周六他们都在泡妹子的原因……(穷苦Loser蹲家里)&br&这个注明主要是为了指出一个区别,那就是Mac OSX上面我说的CoreText,和iOS上我说的CoreText,指的都是系统对于文字的绘制和排版底层库,而不是传说中iOS上的CoreText.framework。&br&我个人认为,iOS和Mac OSX上,CoreText和WebKit都是具有绝对的排版功能的,但是在层级上,CoreText应该是作为WebKit的底层存在的,如果说CoreText有问题,那么WebKit和其中的WebCore也会出现问题。&br&然后iOS上面的CoreText.framework和Mac OSX上面的实现应该是完全不一样的。&br&iOS上面CoreText.framework可能为了更加方便的使用和复用库,将AttributeString部分交给了UIWebDocumentView,也就是Webkit中的WebCore去处理。而Mac OSX上,整个处理过程可能是完全依赖于底层CoreText库的。&br&说白了,就是iOS上面的CoreText.framework只是我们看到的一个苹果玩的Trick,他并没有连接到底层的CoreText实现,只是一个建立在WebKit上面的封装。&br&然后,由于WebKit和CoreText都具有排版能力,在完全交给WebCore来排版的时候不会出问题『@祝博韬 的回答』,但是一旦涉及到了底层CoreText来进行排版,那就会出错。&br&==========注明完毕===========&br&&br&首先,我个人觉得,这个问题的真正原因在于:[1]&br&&blockquote&&div class=&highlight&&&pre&&code class=&language-text&&Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
libvDSP.dylib
0x00007fff9080ead6 0x7fff907f2000 + 117462
com.apple.CoreText
0x00007fff8892cd5c TRun::TRun(TRun const&, CFRange, TRun::SubrangingStyle) + 850
com.apple.CoreText
0x00007fff8892c9ee CTGlyphRun::CloneRange(CTRun const*, CFRange, TRun::SubrangingStyle) + 142
com.apple.CoreText
0x00007fff TLine::SetLevelRange(CFRange, unsigned char, bool) + 162
com.googlecode.iterm2
0xce63 -[PTYTextView(Private) drawRun:ctx:initialPoint:] + 99
com.googlecode.iterm2
0xd498 -[PTYTextView(Private) _drawRuns:runs:] + 344
com.googlecode.iterm2
0x1bd4 start + 52
&/code&&/pre&&/div&&/blockquote&&b&CoreText!&/b&&br&CoreText是用来干什么的呢?基本上你在iOS和Mac OSX上面看到的所有字符,都是通过CoreText来进行渲染的。所以CoreText的这个Bug,会导致所有显示字符的地方都会因为这串字符而崩溃。&br&&br&当然,由于iOS的特殊性,这个崩溃看上去更像是由WebCore导致的[2]&br&&blockquote&&div class=&highlight&&&pre&&code class=&language-text&&Thread 2 name:
Thread 2 Crashed:
0x382fe95a WebCore::ComplexTextController::adjustGlyphsAndAdvances() + 522
0x382fb94e WebCore::ComplexTextController::ComplexTextController(WebCore::Font const*, WebCore::TextRun const&, bool, WTF::HashSet&WebCore::SimpleFontData const*, WTF::PtrHash&WebCore::SimpleFontData const*&, WTF::HashTraits&WebCore::SimpleFontData const*& &*, bool) + 318
0x382fb806 WebCore::ComplexTextController::ComplexTextController(WebCore::Font const*, WebCore::TextRun const&, bool, WTF::HashSet&WebCore::SimpleFontData const*, WTF::PtrHash&WebCore::SimpleFontData const*&, WTF::HashTraits&WebCore::SimpleFontData const*& &*, bool) + 18
0x382ff990 WebCore::Font::getGlyphsAndAdvancesForComplexText(WebCore::TextRun const&, int, int, WebCore::GlyphBuffer&, WebCore::Font::ForTextEmphasisOrNot) const + 56
0x382ff862 WebCore::Font::drawComplexText(WebCore::GraphicsContext*, WebCore::TextRun const&, WebCore::FloatPoint const&, int, int) const + 150
&/code&&/pre&&/div&&/blockquote&(WTF这个……Apple的开发人员啊……)&br&这里由于我粘贴复制的原因,Gist和引用的可能有些不同,这里提供一个另外的Gist,来自于我自己测试的结果[5](178行报错)。至于引用部分,来自[1]中的讨论串,Gist部分来自讨论串下面的链接。为了引用的完整性,我就不另作处理了,详细问题大家可以去[1]中找到作者链接询问作者。&br&&br&这里会有同学问道为什么iOS的特性会导致看上去像是WebCore的错误,这里我贴上一张图片[3]:&br&&img data-rawheight=&179& data-rawwidth=&493& src=&/dbddb0b2316cdef16ce33c6d2d0a25d8_b.jpg& class=&origin_image zh-lightbox-thumb& width=&493& data-original=&/dbddb0b2316cdef16ce33c6d2d0a25d8_r.jpg&&这张图片的进程显示出iOS在处理Text的一个Trick,那就是富文本内容实际上会被NSHTMLWriter处理。当然非富文本作为富文本的子集自然也是通过这条路的(可能),HTML相关嘛,当然会被WebCore拿走咯,结果就是在WebCore的时候死掉了……当然这个只是推测,详细的估计还是得把整个Bug发生流程拆了才知道。&br&&br&今天有很多同学都在质疑iOS 上 CoreText是否是决定性元凶,各种代码和Error Log都展现出WebCore的嫌疑(名侦探柯南既视感……),看到这么多同学的质疑,说实在我有点吃不消……亚历山大……&br&但是刚才我看到一个Chromium在Mac OSX上面的Error Log [6],从这个Error Log上,我们可以发现这货:&br&&blockquote&&div class=&highlight&&&pre&&code class=&language-text&& 1 Google Chrome Framew0.894.0.0
0x012f8451 WebCore::ComplexTextController::adjustGlyphsAndAdvances + 0x7 (ComplexTextController.cpp:479)
&/code&&/pre&&/div&&/blockquote&adjustGlyphsAndAdvance这货看上去是不是很熟悉,和iOS上面WebCore报错的那玩意一模一样吧&br&根据&a class=&member_mention& data-editable=&true& data-title=&@孙竟& data-hash=&ac7739eff381dc16e6ff7& href=&///people/ac7739eff381dc16e6ff7& data-hovercard=&p$b$ac7739eff381dc16e6ff7&&@孙竟&/a&大神提供的Mac OSX上Safari的Error Log:&br&&blockquote&&div class=&highlight&&&pre&&code class=&language-text&&Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
libvDSP.dylib
0x00007fff8efdbadb 0x7fff8efbf000 + 117467
com.apple.CoreText
0x00007fff8e6c1d5c TRun::TRun(TRun const&, CFRange, TRun::SubrangingStyle) + 850
com.apple.CoreText
0x00007fff8e6c19ee CTGlyphRun::CloneRange(CTRun const*, CFRange, TRun::SubrangingStyle) + 142
com.apple.CoreText
0x00007fff8e6d0764 TLine::SetLevelRange(CFRange, unsigned char, bool) + 162
com.apple.CoreText
0x00007fff8e6d1e2c TLine::SetTrailingWhitespaceLevel(unsigned char) + 70
com.apple.CoreText
0x00007fff8e6d1d58 TRunReorder::ReorderRuns(TBidiLevelsProvider const&, TLine&) + 122
com.apple.CoreText
0x00007fff8e6d1bfe TTypesetter::FinishLineFill(TLine&, double, double) const + 142
com.apple.CoreText
0x00007fff8e6c1775 CTTypesetterCreateLine + 131
com.apple.WebCore
0x00007fff8f7f1f1a WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText(unsigned short const*, unsigned int, unsigned int, WebCore::SimpleFontData const*) + 1562
com.apple.WebCore
0x00007fff8f7f176a WebCore::ComplexTextController::collectComplexTextRuns() + 522
&/code&&/pre&&/div&&/blockquote&WebCore报错的根本还是在于CoreText&br&一样的WebCore Function,我觉得苹果然两个WebKit实现机制一致实在是可能性太高了&br&但是限于沙盒机制(待验证),CoreText的报错被隐藏了,就像Chromium的报错一样,你看不到CoreText,但实际上CoreText就站在那里,拿着带血的小匕首。&br&当然,鉴于iOS和Mac OSX的处理机制存在一定差异,最终解释还要看苹果内部有没有人愿意站出来说明一下了。&br&&br&再补充一个新的证据,根据&a class=&member_mention& data-editable=&true& data-title=&@周琪& data-hash=&8d31c45c314f70a56e3acca& href=&///people/8d31c45c314f70a56e3acca& data-hovercard=&p$b$8d31c45c314f70a56e3acca&&@周琪&/a& 和我本人的实验,在UILabel长度不足以显示完整整个字符串的时候,这个Bug是不会被触发的,根据WebKit相关代码[7],我个人认为WebKit的排版不会负责对于显示空间的判断,所以CoreText在绘制部分出错的可能性更高。&br&&br&就和所有文字排版导致的问题一样,这次出现的这串字符也有一个很有趣的效应,详细大家可以去看看我这个项目:&a href=&///?target=https%3A///so898/TestCoreTextWebCoreCrash& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&so898/TestCoreTextWebCoreCrash 路 GitHub&i class=&icon-external&&&/i&&/a&&br&这小玩意挺好玩的,而且我相信这个项目对于帮助大家理解这次Bug和UILabel处理文字排版的机制也是很有帮助的。&br&&br&[注明:以上所有分析都存在一个绝对假设:Bug只存在一处。如果Bug存在WebCore和CoreText等多处,或者说Bug来自于苹果开发人员对于整个字段理解错误,那么上面的所有分析几乎都不成立。]&br&&br&那么关于发生Bug的根本原因呢?&br&通过上面的所有Log,我们至少可以得出一个结论,那就是万恶的Range检测失败了。&br&在苹果的系统中,一般来说对于文字内容的检测都是分成一个个Range来细化处理的,这次的字符串很有可能是一个需要被联合到一起处理的内容,但是由于种种原因,对于处理区域的检测判定失败了(或者重叠了),所以产生了不可避免的错误。如果大家有幸在Mac OSX 10.8上面看到这串字符而且没有使得闪退的话,应该会发现在某些时候这段字符自动换行了,也许就是这个被强加的换行处理和换行字符的连续处理两个渲染重叠产生了问题。&br&如果说要详细研究的话,就得去研究这串阿拉伯文的语义和相关语法了……&br&&br&之后呢?&br&由于WP和Android用户,还有广大人民群众对于iOS和Mac OSX用户深深的恶意,还有诸如&a data-title=&@Fenng& data-editable=&true& class=&member_mention& data-hash=&19fabe7c& href=&///people/19fabe7c& data-hovercard=&p$b$19fabe7c&&@Fenng&/a& 等大V无心的传播,导致从早上到下午,无数的iOS和Mac OSX用户中枪。&br&上午我在公司的时候,QQ开着,基本上每个QQ群都在刷,浏览了一下各种科技网站,满目这串字符,微信朋友圈一阵哀嚎,还有无数转发微博在那里求证、攻击……&br&最后的结果就是,无数的人短信打不开了,微信打不开了,QQ打不开了……&br&好在大部分电脑小白都给Macbook Pro装了Windows,不然杀伤人数会增加更多。&br&至于iOS用户,那真是只能自求多福。&br&当然除了自求多福之外,还有些事情是可以做的。&br&&ol&&li&升级iOS7。iOS7正在进行最后一个Beta,现在升级并不需要去淘宝或者找其他开发者要开发者权限,直接在威锋或者其他网站上下一个就好了,然后按照教程升级即可。(说得巧,今天下午威锋刚好论坛升级,直接导致某些淘宝卖家赚了不少黑心钱)&/li&&li&越狱用户可以安装&a data-title=&@麦子龙& data-editable=&true& class=&member_mention& data-hash=&fe1e88ba71c318ab8c16eb& href=&///people/fe1e88ba71c318ab8c16eb& data-hovercard=&p$b$fe1e88ba71c318ab8c16eb&&@麦子龙&/a& 提到的那个补丁&/li&&li&对于微信,可以在接收到这个字符之后,通过Windows上的诸如iTools等软件的微信查看功能来删除对应聊天记录;短信可以通过某些苹果助手内置的短信编辑功能来删除对应字符(需要关闭iCloud之后才可操作)&/li&&li&Mac用户可以修改系统字体,字体修改之后似乎可以绕过这个Bug[4]&br&&/li&&/ol&&p&当然,之后也许你应该把给你发这段字符的人给拉黑,或者直接起诉他或者苹果公司(如果有重大利益损失并且你可以证明的话)&/p&&br&再之后呢?&br&在之后我们似乎应该想想,为什么会发生下午这个状况。&br&略带恶意的玩笑?无心的调侃?亦或者宣泄不满的攻击?还是说是苹果为了让iOS 6用户尽快升级留下的黑手?&br&想象空间太大了。&br&虽然我的设备都升级到了iOS 7 Beta,Macbook Pro也做了响应的保护性处理(关闭所有推送,转发所有收到的信息到Windows电脑或者iOS 7设备),但是想着我母上大人手中的iPhone可能因此而没法看短信,没法看微信,说真的我恨愤怒。我不在她身边,也没有办法远程解决这个不太好解决的问题,如果她中招,那么接下来,她可能得被迫放弃iPhone和里面的所有资料。想到她可能的焦虑,我很无力,很愤怒。&br&我懒得再去猜测那么还在疯狂转发那段纯攻击性的阿拉伯字符的人的想法了。&br&人的恶意,真的是无法揣测的。&br&&br&[1]&a class=& wrap external& href=&///?target=https%3A///item%3Fid%3D6293824& target=&_blank& rel=&nofollow noreferrer&&DoS exploit crashes iOS/OSX devices using WebKit&i class=&icon-external&&&/i&&/a&&br&[2]&a class=& external& href=&///?target=https%3A///steakknife/6374524& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/steakkn&/span&&span class=&invisible&&ife/6374524&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&[3]&a class=& wrap external& href=&///?target=http%3A///2012/12/uitextview-caught-with-trousers-down/& target=&_blank& rel=&nofollow noreferrer&&UITextView Caught With Trousers Down&i class=&icon-external&&&/i&&/a&&br&[4]&a class=& external& href=&///?target=http%3A///translate%3Fhl%3Den%26sl%3Dru%26tl%3Den%26u%3Dhttp%253A%252F%252Fhabrahabr.ru%252Fpost%252FF& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/tr&/span&&span class=&invisible&&anslate?hl=en&sl=ru&tl=en&u=http%3A%2F%2Fhabrahabr.ru%2Fpost%2FF&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&[5]&a href=&///?target=https%3A///so898/6396011& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/so898/6&/span&&span class=&invisible&&396011&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&[6]&a href=&///?target=http%3A///p/chromium/issues/detail%3Fid%3D98711& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Issue 98711 -
chromium -
chrome_mac crash: WebCore::FontPlatformData::roundsGlyphAdvances&i class=&icon-external&&&/i&&/a&&br&[7]&a href=&///?target=https%3A///WebKit/webkit/blob/master/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&webkit/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp at master 路 WebKit/webkit 路 GitHub&i class=&icon-external&&&/i&&/a&
========更新===========
大神亲自在Mac上编译了WebKit,然后发现了问题的触发点,就是WebCore里面的对于自然语言排版的判断存在问题,相关代码我引用一下: // if (!m_mayUseNaturalWritingDirection || m_run.directionalOverride()) {
// static…
谢邀。&br&&br&iOS 6 Beta 版说明了一件事情,就是苹果现在最大的短板就是 UI 设计。&br&&br&1. &b&完全不统一的体验&/b&。&br&音乐App里,外边是惨白的配色,开始播放之后变成了全黑的。&br&自带的照片程序 Tab 栏是 Glossy 的,AppStore 是亚光的。&br&上面的状态栏也是忽黑忽蓝。&br&我最一开始看到蓝色的状态栏,还以为是开了什么背景服务,把各种东西杀了一遍,甚至怀疑是Skype VOIP 的提示,差点把 Skype 给卸了。最后才发现是它本来就那样。&br&&br&2. &b&落后时代的仿真界面。&/b&&br&各种大阴影,夸张的渐变和材质,&br&Reminder,Notes, Find My Friends, Game Center, 还有谁看到这种界面不作呕吗&br&再去看看通知中心那个抹布的背景还在&br&设置界面背景本来的细竖线条纹变成了下面屎一样模糊的竖线。&br&iPad 设置界面中间那下水道一样的分隔线。&br&分享界面那些过火的图标&br&&br&&b&3. UI 设计毫无进取甚至倒退&/b&&br&只拿 AppStore 这一个界面的改版来说,无论是在 iPhone 还是在 iPad 上,同样的一个界面,无论是信息密度还是操作的顺畅程度,新的界面都不及老界面。App 详情弹出的翻转卡片式设计更是闪瞎狗眼。&br&&br&如果勉强说苹果这次改进好的地方,我觉得只有几个细节还算不错:&br&&ul&&li&iPad 的时钟应用(仅限于大时钟界面)&/li&&li&通知栏直接发推&/li&&li&其实我还挺喜欢那个默认的 pull to refresh 的效果的…&/li&&/ul&&br&这些年以来,苹果在 UI 设计上做对的事情越来越少,比起业界 Flipboard, Twitter, Paper 开创的各种新风格,新方式来说,苹果不仅已经不再是潮流先锋,甚至已经赶不上业界水平。iOS 刚出来的时候,弹性窗口,慣性滚动,双指缩放,这些都是苹果“教”会别人的,但现在苹果似乎还沉迷在仿真界面之类错误的方向不能自拔。设计也没有 Android 4.0 和 Windows Phone 那样的现代感。&br&&br&现在,苹果制造着世界上最好的硬件,有世界上最先进的 OS,iOS 比其它系统都要成熟得多,有最好的开发者群体,每天都有开发者做出让人瞠目的创新。我们觉得苹果做得更差,或许只是连自己也没有意识到这个行业发展得这么快。从此之后,可以期待苹果的硬件,可以期待苹果的OS和开发工具,就不要期待他们自己做的 App 和新的 UI 设计了。
谢邀。 iOS 6 Beta 版说明了一件事情,就是苹果现在最大的短板就是 UI 设计。 1. 完全不统一的体验。 音乐App里,外边是惨白的配色,开始播放之后变成了全黑的。 自带的照片程序 Tab 栏是 Glossy 的,AppStore 是亚光的。 上面的状态栏也是忽黑忽蓝。 我最…
亲自安装了 Mountain Lion DP4(WWDC 2012 上发布的版本),以下是目前观察到的主要字体变化(2012 年 7 月 28 日更新:DP4 之后又新增了行楷-简的细体):&br&&br&&b&一、新增了超级齐全的 Avenir 系列字体:&/b&&br&&b&&br&&/b&Avenir、Avenir Next、Avenir Next Condensed 三个字体族各 12 个字重,一共 36 个 style [1]。太震撼了。Avenir 是非常著名的专业字体系列。苹果会因此而影响业余平面设计者的作品风格。&img src=&/e76c1daa5295fcdc407ba_b.jpg& data-rawwidth=&1110& data-rawheight=&726& class=&origin_image zh-lightbox-thumb& width=&1110& data-original=&/e76c1daa5295fcdc407ba_r.jpg&&&br&&b&二、最幸福的是韩语圈:&/b&&br&&br&我们知道,iOS 从 5 开始已经自带了由韩国 Sandoll 设计的 Apple SD Gothic Neo(一款韩文黑体)的两个字重(Medium 和 Bold)。iOS 6 截至 WWDC 2012 上发布的 6.0 (10A5316k) 在这个字体族上没有变化。&br&&br&但,在 OS X Mountain Lion 上,现在自带了 Apple SD Gothic Neo 的 9 个字重:Thin、UltraLight、Light、Regular、Medium、SemiBold、Bold、ExtraBold、Heavy。这个,我也只能说——太震撼了。&br&虽然只是黑体,但如此齐全的字重,加上从 Lion 就开始自带的 Nanum 系列字体,确实让韩语圈的 OS X 自带字体储备水平和日语圈的 Hiragino 系列一样美好了。&img src=&/3a2d9e071f5b2ae1166fa1e_b.jpg& data-rawwidth=&1364& data-rawheight=&707& class=&origin_image zh-lightbox-thumb& width=&1364& data-original=&/3a2d9e071f5b2ae1166fa1e_r.jpg&&&br&Apple SD Gothic Neo 的 Regular 和 Bold 位于 /System/Library/Fonts/,用作系统介面字体。把原来那个丑陋的韩文默认字体 Apple Gothic 挤到 /Library/Fonts/ 去了。&img src=&/ffeed7cf4e1_b.jpg& data-rawwidth=&1440& data-rawheight=&900& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&/ffeed7cf4e1_r.jpg&&&br&&b&三、新增的中文字体其实不只 8 款:&/b&&br&&br&&b&有 3 个默认安装的新字体族&/b&(位于 /Library/Fonts/):&ul&&li&&u&楷体-简&/u&:来自华文。这是对 OS X 一直都自带的&u&华文楷体&/u&的扩展。现在以原来的华文楷体为常规体(Regular),新增粗体(Bold)和黑体(Black),一共 3 个字重。原来华文楷体独立的文件移除了(但仍是独立的字体),并入楷体-简,成为 楷体.ttc。&/li&&li&&u&宋体-简&/u&:来自华文。这是对&u&华文宋体&/u&的扩展。以原来的华文宋体为细体(Light),新增常规体(Regular)、粗体(Bold,就是 Windows/Office 用户很熟悉的华文中宋)和黑体(Black),一共 4 个字重。原来华文宋体独立的文件移除了(但仍是独立的字体),并入宋体-简,成为 宋体.ttc。&/li&&li&&u&雅痞-简&/u&、&u&雅痞-繁&/u&:来自蒙纳。实际上就是蒙纳提供的免费字体 MYuppy。Linux 社区可能对这款字体会比较熟悉。&/li&&/ul&示例(省去了雅痞-繁):&img src=&/dd739e180bcd_b.jpg& data-rawwidth=&766& data-rawheight=&765& class=&origin_image zh-lightbox-thumb& width=&766& data-original=&/dd739e180bcd_r.jpg&&&br&&b&另外有 7 个新字体族不默认安装&/b&(位于 /Applications/Font Book.app/Contents/Resources/StubFonts)&b&。&/b&&br&这些字体族在系统初始时是停用状态,自身的字体文件也不完整,只是存在 字体册.app 里的 stub,需要手动启用来下载安装:&img src=&/ea345f794fc12fa623d6_b.jpg& data-rawwidth=&1440& data-rawheight=&900& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&/ea345f794fc12fa623d6_r.jpg&&&br&这样不默认安装的字体族包括:&ul&&li&报隶-简:来自华文。&/li&&li&兰亭黑-简、兰亭黑-繁:来自方正。简繁各有三个字重:纤黑(Extralight)、中黑(Demibold)、特黑(Heavy)。和商业版方正兰亭黑的字重关系参见: &a href=&/question/& class=&internal&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/question/1979&/span&&span class=&invisible&&0202&/span&&span class=&ellipsis&&&/span&&/a&&/li&&li&隶变-简:来自华文。&/li&&li&娃娃体-简:来自华康。&/li&&li&魏碑-简、魏碑-繁:来自文鼎。&/li&&li&行楷-简:来自华文。有两个字重:细体(Light)、粗体(Bold)。&/li&&li&圆体-简:来自华文。有三个字重:细体(Light)、常规体(Regular)、粗体(Bold)。&/li&&/ul&示例(省去了繁体版本,没有包含 DP4 之后新增的行楷-简细体):&img src=&/dc64053fad4d9ea_b.jpg& data-rawwidth=&802& data-rawheight=&843& class=&origin_image zh-lightbox-thumb& width=&802& data-original=&/dc64053fad4d9ea_r.jpg&&&br&&b&四、其他一些问题:&/b&&ul&&li&&b&Web 设计师与前端工程师注意:&/b&Safari 6.0 里(经 @杨奇超 确认,从 Safari 5.2 开始就这样了)没有默认字体设置了。于是网页如果没有制定具体的字体 font-family,就直接根据 lang 属性和 generic-family 去 fallback 至系统默认字体。所以中文维基百科这样的站点会很难看(因为用了 font-family: sans- 而黑体-简的西文是灾难)。&/li&&li&&b&DefaultFontFallbacks.plist&/b& 的结构和内容稍有变化(包括上文介绍的韩文默认字体变化)。对比: &a href=&///?target=https%3A///2924025& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/2924025&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&/li&&li&冬青黑体简体中文(Hiragino Sans GB)还是没能成为简体中文默认字体。Snow Leopard 发布之前就夭折的 Hiragino Sans CNS 也还是没有踪影。&/li&&/ul&&br&* * *&br&&br&我也在第三代 iPad 上安装了 WWDC 2012 上发布的 &b&iOS 6.0 (10A5316k)&/b&:&ul&&li&同样包含 Avenir、Avenir Next、Avenir Next Condensed 三个字体族各 12 个字重。&br&&/li&&li&简体和繁体中文字体(&u&黑体-简&/u&和&u&黑体-繁&/u&)没什么明显变化,OS X 里新增的那些字体都没出现。但之前和它们一起提供的 Heiti J(日文字形)和 Heit K(韩文字形)移除了。毕竟日文有 Hiragino Kaku Gothic,而韩文有 Apple SD Gothic Neo。&/li&&/ul&&br&* * *&br&&br&[1] 附赠一张 Mountain Lion 里 Avenir (Next) 三个家族的华丽合影:&img src=&/b3becf88f47c002dec427b109b1b31f9_b.jpg& data-rawwidth=&840& data-rawheight=&3127& class=&origin_image zh-lightbox-thumb& width=&840& data-original=&/b3becf88f47c002dec427b109b1b31f9_r.jpg&&
亲自安装了 Mountain Lion DP4(WWDC 2012 上发布的版本),以下是目前观察到的主要字体变化(2012 年 7 月 28 日更新:DP4 之后又新增了行楷-简的细体): 一、新增了超级齐全的 Avenir 系列字体:
Avenir、Avenir Next、Avenir Next Condensed 三个字体…
先说结论吧:&br&&a class=&member_mention& data-editable=&true& data-title=&@Bill Cheng& data-hash=&f5ee79e5a1fb& href=&///people/f5ee79e5a1fb& data-hovercard=&p$b$f5ee79e5a1fb&&@Bill Cheng&/a&、&a class=&member_mention& data-editable=&true& data-title=&@麦子龙& data-hash=&fe1e88ba71c318ab8c16eb& href=&///people/fe1e88ba71c318ab8c16eb& data-hovercard=&p$b$fe1e88ba71c318ab8c16eb&&@麦子龙&/a& 和 &a class=&member_mention& data-editable=&true& data-title=&@李铁柱& data-hash=&99be1cd4d9daf95d5d3dc6e14956b36b& href=&///people/99be1cd4d9daf95d5d3dc6e14956b36b& data-hovercard=&p$b$99be1cd4d9daf95d5d3dc6e14956b36b&&@李铁柱&/a& 的答案都是片面的。&br&&b&导致这个 bug 的元凶,在 iOS 6 上是 WebCore,在 OS X 10.8 上是 CoreText。&/b&&br&&br&========&br&&br&以下是反驳 &a class=&member_mention& data-editable=&true& data-title=&@Bill Cheng& data-hash=&f5ee79e5a1fb& href=&///people/f5ee79e5a1fb& data-hovercard=&p$b$f5ee79e5a1fb&&@Bill Cheng&/a& 的观点:&br&这是那个越狱补丁的源码:&a href=&///?target=https%3A///FilippoBiga/GlyphPatch/blob/master/Tweak.mm& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/FilippoBiga/&/span&&span class=&invisible&&GlyphPatch/blob/master/Tweak.mm&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&很明显是给 WebCore 打的补丁。&br&&br&代码的注释里提到了 WebCore 的 characterRangeCodePath() 函数会在处理 U+0600 ~ U+109F 的字符(其中 U+0600 ~ U+06FF、U+0750 ~ U+077F 是阿拉伯字母)时当成复杂类型,而它调用的 ComplexTextController::adjustGlyphsAndAdvances() 方法在处理这种类型的文字时却出错了。&br&以下代码来自 WebKit 源码(&a href=&///?target=https%3A///WebKit/webkit/blob/6d656cf12b0b12cfbd908d6d2793ff/Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp%23L59& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/WebKit/webki&/span&&span class=&invisible&&t/blob/6d656cf12b0b12cfbd908d6d2793ff/Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp#L59&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&):&br&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&kt&&float&/span& &span class=&n&&Font&/span&&span class=&o&&::&/span&&span class=&n&&getGlyphsAndAdvancesForComplexText&/span&&span class=&p&&(&/span&&span class=&k&&const&/span& &span class=&n&&TextRun&/span&&span class=&o&&&&/span& &span class=&n&&run&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span& &span class=&n&&from&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span& &span class=&n&&to&/span&&span class=&p&&,&/span& &span class=&n&&GlyphBuffer&/span&&span class=&o&&&&/span& &span class=&n&&glyphBuffer&/span&&span class=&p&&,&/span& &span class=&n&&ForTextEmphasisOrNot&/span& &span class=&n&&forTextEmphasis&/span&&span class=&p&&)&/span& &span class=&k&&const&/span&
&span class=&p&&{&/span&
&span class=&kt&&float&/span& &span class=&n&&initialAdvance&/span&&span class=&p&&;&/span&
&span class=&n&&ComplexTextController&/span& &span class=&nf&&controller&/span&&span class=&p&&(&/span&&span class=&k&&this&/span&&span class=&p&&,&/span& &span class=&n&&run&/span&&span class=&p&&,&/span& &span class=&nb&&false&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&n&&forTextEmphasis&/span&&span class=&p&&);&/span&
&span class=&n&&controller&/span&&span class=&p&&.&/span&&span class=&n&&advance&/span&&span class=&p&&(&/span&&span class=&n&&from&/span&&span class=&p&&);&/span&
&span class=&kt&&float&/span& &span class=&n&&beforeWidth&/span& &span class=&o&&=&/span& &span class=&n&&controller&/span&&span class=&p&&.&/span&&span class=&n&&runWidthSoFar&/span&&span class=&p&&();&/span&
&span class=&n&&controller&/span&&span class=&p&&.&/span&&span class=&n&&advance&/span&&span class=&p&&(&/span&&span class=&n&&to&/span&&span class=&p&&,&/span& &span class=&o&&&&/span&&span class=&n&&glyphBuffer&/span&&span class=&p&&);&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&glyphBuffer&/span&&span class=&p&&.&/span&&span class=&n&&isEmpty&/span&&span class=&p&&())&/span&
&span class=&k&&return&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&kt&&float&/span& &span class=&n&&afterWidth&/span& &span class=&o&&=&/span& &span class=&n&&controller&/span&&span class=&p&&.&/span&&span class=&n&&runWidthSoFar&/span&&span class=&p&&();&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&run&/span&&span class=&p&&.&/span&&span class=&n&&rtl&/span&&span class=&p&&())&/span& &span class=&p&&{&/span&
&span class=&n&&initialAdvance&/span& &span class=&o&&=&/span& &span class=&n&&controller&/span&&span class=&p&&.&/span&&span class=&n&&totalWidth&/span&&span class=&p&&()&/span& &span class=&o&&+&/span& &span class=&n&&controller&/span&&span class=&p&&.&/span&&span class=&n&&finalRoundingWidth&/span&&span class=&p&&()&/span& &span class=&o&&-&/span& &span class=&n&&afterWidth&/span&&span class=&p&&;&/span&
&span class=&n&&glyphBuffer&/span&&span class=&p&&.&/span&&span class=&n&&reverse&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&n&&glyphBuffer&/span&&span class=&p&&.&/span&&span class=&n&&size&/span&&span class=&p&&());&/span&
&span class=&p&&}&/span& &span class=&k&&else&/span&
&span class=&n&&initialAdvance&/span& &span class=&o&&=&/span& &span class=&n&&beforeWidth&/span&&span class=&p&&;&/span&
&span class=&k&&return&/span& &span class=&n&&initialAdvance&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&它构造了一个 ComplexTextController 类型的对象,这个对象在初始化时崩溃了。&br&这个类是 WebCore 框架的,根据 &a class=&member_mention& data-editable=&true& data-title=&@麦子龙& data-hash=&fe1e88ba71c318ab8c16eb& href=&///people/fe1e88ba71c318ab8c16eb& data-hovercard=&p$b$fe1e88ba71c318ab8c16eb&&@麦子龙&/a& 和匿名用户的回答(&a href=&/question//answer/& class=&internal&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/question/2156&/span&&span class=&invisible&&8134/answer/&/span&&span class=&ellipsis&&&/span&&/a&),这里并没有更深的调用栈(也不排除调用了内联函数),基本可以认定是 WebCore 的 bug。我并不同意 &a class=&member_mention& data-editable=&true& data-title=&@麦子龙& data-hash=&fe1e88ba71c318ab8c16eb& href=&///people/fe1e88ba71c318ab8c16eb& data-hovercard=&p$b$fe1e88ba71c318ab8c16eb&&@麦子龙&/a& 说异常栈可能不完整的问题,因为汇编代码都显示出来了,在哪崩溃是很显而易见的。&br&补丁给出的解决办法是将类型设为自动,也就不会调用上述方法了。但这种解决办法也许会引来其他的 bug(主要是显示方面,对不用阿拉伯语的人应该没影响);只是我对阿拉伯语不了解,也就不妄做判断了。&br&&br&更直接的依据是 &a class=&member_mention& data-editable=&true& data-title=&@祝博韬& data-hash=&e00febb73bb1f09dbcd4d6& href=&///people/e00febb73bb1f09dbcd4d6& data-hovercard=&p$b$e00febb73bb1f09dbcd4d6&&@祝博韬&/a& 的回答:&b&iOS 6 的 CoreText 是能正常显示这段文字的。&/b&&br&&br&========&br&&br&但上述结论也并不代表 CoreText 就没问题,我今天在测试时发现某些字符组合甚至可以让 OS X 10.8 的 Terminal 崩溃,而它是不太可能使用 WebCore 的。&br&此外,这个 bug 并不是在 iOS 7 和 OS X 10.9 上就不存在了,在某些情况下仍能造成 crash。例如用那串文字做文件名,那么 Finder 在显示这个文件时就会崩溃。这也让我觉得 CoreText 很可疑。&br&&br&以 Mac Safari 的崩溃异常栈为例,它是在 CoreText 里崩溃的;虽然也用到了 WebCore,但崩溃的位置和 iOS 下不一样:&br&&div class=&highlight&&&pre&&code class=&language-text&&Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
libvDSP.dylib
0x00007fff8efdbadb 0x7fff8efbf000 + 117467
com.apple.CoreText
0x00007fff8e6c1d5c TRun::TRun(TRun const&, CFRange, TRun::SubrangingStyle) + 850
com.apple.CoreText
0x00007fff8e6c19ee CTGlyphRun::CloneRange(CTRun const*, CFRange, TRun::SubrangingStyle) + 142
com.apple.CoreText
0x00007fff8e6d0764 TLine::SetLevelRange(CFRange, unsigned char, bool) + 162
com.apple.CoreText
0x00007fff8e6d1e2c TLine::SetTrailingWhitespaceLevel(unsigned char) + 70
com.apple.CoreText
0x00007fff8e6d1d58 TRunReorder::ReorderRuns(TBidiLevelsProvider const&, TLine&) + 122
com.apple.CoreText
0x00007fff8e6d1bfe TTypesetter::FinishLineFill(TLine&, double, double) const + 142
com.apple.CoreText
0x00007fff8e6c1775 CTTypesetterCreateLine + 131
com.apple.WebCore
0x00007fff8f7f1f1a WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText(unsigned short const*, unsigned int, unsigned int, WebCore::SimpleFontData const*) + 1562
com.apple.WebCore
0x00007fff8f7f176a WebCore::ComplexTextController::collectComplexTextRuns() + 522
&/code&&/pre&&/div&&br&&br&这是 Mac QQ 崩溃的异常栈,受伤的也是 CoreText:&br&&div class=&highlight&&&pre&&code class=&language-text&&Exception Type:
EXC_CRASH (SIGSEGV)
Exception Codes: 0x0
Application Specific Information:
Performing @selector(paste:) from sender NSMenuItem 0x6b85170
Thread 0:: Dispatch queue: com.apple.main-thread
com.apple.CoreText
0x9568e48f TStorageRange::SetStorageSubRange(CFRange) + 307
com.apple.CoreText
0x9568cdf7 TRun::TRun(TRun const&, CFRange, TRun::SubrangingStyle) + 853
com.apple.CoreText
0x9568ca8e CTGlyphRun::CloneRange(CTRun const*, CFRange, TRun::SubrangingStyle) + 166
com.apple.CoreText
0x TLine::SetLevelRange(CFRange, unsigned char, bool) + 157
com.apple.CoreText
0x TLine::SetTrailingWhitespaceLevel(unsigned char) + 86
com.apple.CoreText
0x9569aee7 TRunReorder::ReorderRuns(TBidiLevelsProvider const&, TLine&) + 107
com.apple.CoreText
0x9569ad8c TTypesetter::FinishLineFill(TLine&, double, double) const + 122
com.apple.CoreText
0x TTypesetter::FillLine(TLine&, CFRange, double, double) const + 90
com.apple.CoreText
0x9568c7ff CTTypesetterCreateLine + 185
com.apple.AppKit
0x98085a9a -[NSATSLineFragment layoutForStartingGlyphAtIndex:characterIndex:minPosition:maxPosition:lineFragmentRect:] + 802
com.apple.AppKit
0x9808452c -[NSATSTypesetter _layoutLineFragmentStartingWithGlyphAtIndex:characterIndex:atPoint:renderingContext:] + 2254
com.apple.AppKit
0x980a91cb -[NSATSTypesetter layoutParagraphAtPoint:] + 147
com.apple.AppKit
0x98645f21 -[NSTypesetter _layoutGlyphsInLayoutManager:startingAtGlyphIndex:maxNumberOfLineFragments:maxCharacterIndex:nextGlyphIndex:nextCharacterIndex:] + 3403
com.apple.AppKit
0x980a813a -[NSTypesetter layoutCharactersInRange:forLayoutManager:maximumNumberOfLineFragments:] + 215
com.apple.AppKit
0x980a8011 -[NSATSTypesetter layoutCharactersInRange:forLayoutManager:maximumNumberOfLineFragments:] + 1185
com.apple.AppKit
0x980a69c5 -[NSLayoutManager(NSPrivate) _fillLayoutHoleForCharacterRange:desiredNumberOfLines:isSoft:] + 738
com.apple.AppKit
0x980d9f1e _NSFastFillAllLayoutHolesForGlyphRange + 227
com.apple.AppKit
0x980a4f95 -[NSLayoutManager textContainerForGlyphAtIndex:effectiveRange:] + 198
com.apple.AppKit
0x97ee4a80 -[NSTextView(NSPrivate) _ensureLayoutCompleteToEndOfCharacterRange:] + 125
com.apple.AppKit
0x97ee442b -[NSTextView(NSSharing) didChangeText] + 159
com.apple.AppKit
0x97ee1f71 -[NSTextView insertText:replacementRange:] + 2261
com.tencent.qq
0x003ed850 -[TXTypingTextView insertText:replacementRange:] + 163
com.apple.AppKit
0x985b57f0 -[NSTextView insertText:] + 319
com.tencent.qq
0x003cfd6c -[TXBaseTextView AddAttributedString:] + 69
com.tencent.qq
0x003d2a0c -[TXBaseTextView ReadFromPasteborad:] + 392
com.tencent.qq
0x003ee97f -[TXTypingTextView paste:] + 98
libobjc.A.dylib
0x96dbc5d3 -[NSObject performSelector:withObject:] + 70
com.apple.AppKit
0x98110ad2 -[NSApplication sendAction:to:from:] + 436
com.apple.AppKit
0x9824d2fc -[NSMenuItem _corePerformAction] + 529
com.apple.AppKit
0x9824cf8b -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] + 163
com.apple.AppKit
0x -[NSMenu _performActionWithHighlightingForItemAtIndex:sendAccessibilityNotification:] + 79
com.apple.AppKit
0x -[NSMenu _performActionWithHighlightingForItemAtIndex:] + 48
com.apple.AppKit
0x9824bac5 -[NSMenu performKeyEquivalent:] + 306
com.tencent.qq
0x0053233e -[TXMenu performKeyEquivalent:] + 503
com.apple.AppKit
0x9824ae7c -[NSApplication _handleKeyEquivalent:] + 915
com.apple.AppKit
0x98100de1 -[NSApplication sendEvent:] + 5512
com.apple.AppKit
0x9801a62c -[NSApplication run] + 951
com.apple.AppKit
0x97fbd5f6 NSApplicationMain + 1053
com.tencent.qq
0x start + 53
&/code&&/pre&&/div&&br&这就说明在 OS X 10.8 上,CoreText 才是真凶。&br&&br&因此 iOS 和 OS X 上各有不同的 bug,而不能想当然地认为凶手只有一个。
先说结论吧: 、 和
的答案都是片面的。 导致这个 bug 的元凶,在 iOS 6 上是 WebCore,在 OS X 10.8 上是 CoreText。 ======== 以下是反驳
的观点: 这是那个越狱补丁的源码: 很明显是给 WebC…
在 iOS 6 Beta 里 Siri 对中文的支持有:普通话、台湾国语、粤语。&br&因为我的普通话太普通,感觉 Siri 识别率不高(七成左右),所以我选择了粤语,识别率有九成以上。&br&&br&&b&基础功能&/b&&br&添加日程、写便签、看天气、设闹钟、发短信、打电话等都很流畅。但是没办法使用 WWDC 上展示的一些新功能,因为暂时还没有专门的中文内容提供方,少有内容可查,也还无法导航(苹果 Maps 的中国合作方是高德),中文 Siri 使用的仍是 Yelp 的数据,不过至少可以查找地点了:&img src=&/ec191d0dfabcd_b.jpg& class=&content_image&&&br&&b&中文识别&/b&&br&识别粤语没什么压力,速度很快也很流畅(下图左)。但是中文 Siri 对英文识别不好,比如它就不太能听懂自己的名字「Siri」(下图中),中英文夹杂的情况能识别比较简单的句子(下图右):&img src=&/0abc7ddaf54_b.jpg& data-rawwidth=&1970& data-rawheight=&960& class=&origin_image zh-lightbox-thumb& width=&1970& data-original=&/0abc7ddaf54_r.jpg&&&br&目前中文 Siri 没有英文版丰富,随便调戏几下:港女版(左)、台妹版(中)、大陆版(右,大陆版是完成度最差的):&img src=&/bcd9cf30c988fefc2d6397_b.jpg& class=&content_image&&&br&另外,Siri 终于有打开应用程序的权限了,可以让它打开一些藏得太深自己都找不到了的 App,不过对于英文名称的应用经常会出错。&br&&br&iOS 6 集成了 Twitter、Facebook 和新浪微博,并可以直接通过 Siri 发布至 Facebook(如图)。翻译:&br&左:你想说些什么?&br&右:对不起啊,我无法发表,我也不知道为什么(嗯,你当然不知道为什么了):&img src=&/ef2e6c6bebcf358db1441fd66fedec41_b.jpg& class=&content_image&&
在 iOS 6 Beta 里 Siri 对中文的支持有:普通话、台湾国语、粤语。 因为我的普通话太普通,感觉 Siri 识别率不高(七成左右),所以我选择了粤语,识别率有九成以上。 基础功能 添加日程、写便签、看天气、设闹钟、发短信、打电话等都很流畅。但是没办法使…
现在iOS6用的人太少了,不然这么伟大的发现肯定有好多人赞才对啊&br&----------------------------------------------------------------------------------------------&br&官方途径下载兼容旧版iOS的应用,我这几天才发现的方法:&br&1、找到你想要下载的应用,在电脑端itunes的应用商店(或其他已经升级到iOS7、8的apple设备)下载。【目的就是让这个应用进入你的已购应用列表】&br&2、在iOS6(或更老的,我没试过,只试过iOS6)设备上打开app store,然后点更新-已购项目-找到你要下载的软件,点击下载,就会发现弹出可下载最新的兼容版本的提示,然后下载之
现在iOS6用的人太少了,不然这么伟大的发现肯定有好多人赞才对啊 ---------------------------------------------------------------------------------------------- 官方途径下载兼容旧版iOS的应用,我这几天才发现的方法: 1、找到你想要下载的应用,在…
Beta 版的设计风格确实分裂了点,之后应该会改进的,不必担心。Apple 设计师的品味从来都差不到哪里去。&br&&br&iOS 的仿真/拟真设计思想在 iOS 6 里更加凸显了,甚至细节达到了变态的地步。&br&&br&&img src=&/3c185f1b1d57b951cf04_b.jpg& class=&content_image&&&br&上图是 iOS 6 改版后的音乐播放界面,注意到上下两个滑杆了吗?滑竿上的金属圆形按钮原来不仅仅只是模仿了金属纹理,在你左右稍微倾斜手机的时候,它居然会像真的金属一样改变光泽的角度!!!(你可以拿起你的 Wireless Keyboard G6 或者 Magic Trackpad 看看侧面来了解这个效果)虽然能明白它是用重力感应实现的,但是不是谁都能做出这么细致的设计。&br&&br&也许 Apple 还会变态到在以后的 Mac 上,利用摄像头或者距离感应器什么的检测用户头部的位置,让 Dock 图标里 Apple 官方的那些也采用这个金属光泽背景的 App 的图标也会自动改变光泽,谁知道呢?
Beta 版的设计风格确实分裂了点,之后应该会改进的,不必担心。Apple 设计师的品味从来都差不到哪里去。 iOS 的仿真/拟真设计思想在 iOS 6 里更加凸显了,甚至细节达到了变态的地步。 上图是 iOS 6 改版后的音乐播放界面,注意到上下两个滑杆了吗?滑竿上…
是我不会用还是咋的?我怎么觉得爆烂啊。&br&&br&卫星模式只能看到中国部分(含钓鱼岛),其他国家只支持标准模式,是我的网络问题还是设置问题?&br&&br&3D鸟瞰功能也只支持很少的几个城市吧?那对大多数人有何用处?&br&&br&最糟糕的,是它的搜索功能。以前用谷歌地图从来不会出现理解问题,它会自动把最常见的结果列出来让你选择,现在这个地图总是直接把你带到一个莫名其妙的地方,似乎是根据离你地理位置最近来判断的。但任何一个人,若是输入New York,肯定是要去美国的纽约市,决不是什么牛约客铁板烧。
是我不会用还是咋的?我怎么觉得爆烂啊。 卫星模式只能看到中国部分(含钓鱼岛),其他国家只支持标准模式,是我的网络问题还是设置问题? 3D鸟瞰功能也只支持很少的几个城市吧?那对大多数人有何用处? 最糟糕的,是它的搜索功能。以前用谷歌地图从来不会…
理由很多:&br&&ul&&li&iOS social 只能提供发微博的分享功能,无法拿到更多信息。&br&只从这一点来说,iOS 的微博 API 只是一个分享(发微博)功能,比自己调用 API 弱多了。&/li&&li&很多应用是需要微博绑定。绑定是什么?&br&通过绑定,程序可以知道你的微博 ID、姓名、头像、性别、地区、以及发过的微博等各种信息。&br&iOS 内嵌的 framework 做不到。&/li&&li&更重要的是,当用户在自己的产品上有新动静时,只需选中「同步到微博」这样的复选框即可。&br&如果使用内嵌,需要先点「分享」,然后选择「新浪微博」,然后出现一个弹出框,还要自己亲自检查一下要发的内容,才能 post。&/li&&li&通过自己调用 API 发出的微博,来源会显示「来自你的应用名」。&br&使用内嵌发送,会显示「来自 iOS」,不能对自己的产品起到营销作用。&/li&&li&内嵌分享需要调用 iOS 6 SDK 的 social framework 框架(&a href=&///?target=http%3A///library/ios/%23documentation/Social/Reference/Social_Framework/_index.html%23//apple_ref/doc/uid/TP& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/lib&/span&&span class=&invisible&&rary/ios/#documentation/Social/Reference/Social_Framework/_index.html#//apple_ref/doc/uid/TP&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)代码,这意味着只能兼容 iOS 6。&br&作为产品开发商,在 iOS 7 普及之前,应该不会轻易放弃掉 iOS 5 的用户吧。&/li&&li&一般做移动产品,不太可能只做 iOS 版的。&br&在其他平台上使用微博,开发者肯定需要申请微博接口,以及花时间研究过相关 API SDK。&br&既然这样,为了让各个平台的产品表现一致,自然不会为了一点点偷懒而使用 iOS social framework。&/li&&/ul&
理由很多: iOS social 只能提供发微博的分享功能,无法拿到更多信息。 只从这一点来说,iOS 的微博 API 只是一个分享(发微博)功能,比自己调用 API 弱多了。很多应用是需要微博绑定。绑定是什么? 通过绑定,程序可以知道你的微博 ID、姓名、头像、性别…
因为苹果的基因是比较封闭的,不是那么开放,所以不会把竞争产品融进来。&br&简单的说,整合百度搜索/新浪微博/优酷和土豆视频是:&br&1:苹果自己没有搜索/微博/视频分享网站产品&br&2:搜索/微博/视频分享网站是互联网必须品&br&3:虽然有更好的选择,比如谷歌/twitter/youtube,但这几个产品被咱们墙了&br&不整合QQ的原因是:&br&1:苹果有自己的IM,并且推出不久,正在力推&br&2:IM是互联网必须品,且门槛较低,所以苹果自己做了,但因为原因1...&br&3:对苹果来说,选择IM,更好的选择就是自己的产品。可以参考的案例是苹果ios6摒弃了谷歌地图,做了自己的地图,要知道摒弃谷歌地图就意味着迫使许多基于谷歌地图的app也要更新,看见苹果在这方面的决心&br&我觉得很荒谬的答案是:&br&1.跟腾讯要钱&br&2.跟腾讯要钱,腾讯不给&br&3.苹果是垄断的&br&4.腾讯是垄断的&br&对于第二个问题“苹果和腾讯会在平台上竞争吗?”,我觉得苹果的大平台是操作系统和appstore,腾讯的大平台是社交产品,好像没有太大重叠,所以在平台上目前应该没有竞争,除非未来产生交叉。
因为苹果的基因是比较封闭的,不是那么开放,所以不会把竞争产品融进来。 简单的说,整合百度搜索/新浪微博/优酷和土豆视频是: 1:苹果自己没有搜索/微博/视频分享网站产品 2:搜索/微博/视频分享网站是互联网必须品 3:虽然有更好的选择,比如谷歌/twitte…
用了一个多月了,出来说一说感想:&br&1. 大幅提升隐私保护。iOS 6系统内建了很多个系统级触发器,无论软件用什么私有API只要访问了用户隐私数据,马上会有系统提示跳出来。这个相对于iOS 5那个做样子的限制访问要好上太多了。&br&2. 免打搅模式。新的免打搅模式就是我的救星啊!人在澳洲,常年有不知天高地厚的家伙三更半夜的叫我起床重睡……编程的时候还好,要是好不容易早睡一下……很痛苦……现在,一切夜间电话全部等到早上再处理,不被打搅的感觉真好。&br&3. 中文输入法的巨大改进。iOS 5当年叫嚣着改进中文输入,实际上输入法还是个渣。iOS 6终于允许空格键选字或者词了,泪流满面……这空格选字,是苹果输入法迈出的一小步,确实苹果的中文化迈出的一大步啊……&br&4. 方便的发推。这个真心很强大,本人虽然刷推不多,但是在关键时候还是想刷一刷的。iOS上的Twitter软件打开速度……不能忍……现在发推如果不是先看再发,基本上都是系统内置的直接法送了。可惜新浪微博不能这么玩啊&br&5. Safari全屏。这个真心福音,以前那个界面占着很不爽,现在看得舒服多了&br&6. PassBook。这个很炫,很好玩,配合我这的二维码识别器,可以做很多事情的说。&br&7. App Store。从此不用在更新的时候输密码了……泪流满面……从此不用被弹到桌面了……泪流满面……&br&========体内酒精含量:0.4%=========&br&除了上面的优点,缺点也不少……等我看到了相关问题再来说……
用了一个多月了,出来说一说感想: 1. 大幅提升隐私保护。iOS 6系统内建了很多个系统级触发器,无论软件用什么私有API只要访问了用户隐私数据,马上会有系统提示跳出来。这个相对于iOS 5那个做样子的限制访问要好上太多了。 2. 免打搅模式。新的免打搅模式…
第一个答案已经写得挺好的了,我来补充一下大家不容易注意到的一些像素级的变化吧~(因为我对界面特别敏感= =)&br&&br&&b&设置图标&/b&&br&&b&&img src=&/ed16995b45_b.jpg& data-rawwidth=&510& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&/ed16995b45_r.jpg&&&/b&iOS 6 的设置图标中的齿轮由此前的尖角变为圆角,与 OS X 的设计保持一致。Design Archieve 称这种改变叫“Back to the mac”。 &b&&br&&/b&&br&&b&时钟图标&/b&&br&&b&&img src=&/5ab4a01a64a1f_b.jpg& data-rawwidth=&510& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&/5ab4a01a64a1f_r.jpg&&&/b&时钟图标中,iOS 6 将尖锐的指针变为棱角分明的样式。Design Archieve 称这更像是布朗的手表的设计。 &b&&br&&/b&&br&&b&头部&/b&&br&&b&&img src=&/280ceec7fcbb7db73b011_b.jpg& data-rawwidth=&510& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&/280ceec7fcbb7db73b011_r.jpg&&&/b&自第一代 iPhone 起,iOS 就采用了大量高光的设计效果。iOS 6 舍弃高光采用了更加平滑的磨砂效果。由于 iPhone 5 采用金属磨砂效果,这样做或许是统一硬件和软件的设计。 &b&&br&&/b&&br&&b&按钮&/b&&br&&b&&img src=&/eedd12c1d1d05a8_b.jpg& data-rawwidth=&510& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&/eedd12c1d1d05a8_r.jpg&&&/b&iOS 6 的按钮同样去掉了高光,更加平面。 &b&&br&&/b&&br&&b&解锁界面的相机图标&/b&&br&&b&&img src=&/7cf12ab221d_b.jpg& data-rawwidth=&510& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&/7cf12ab221d_r.jpg&&&/b&解锁界面的相机图标的边角弧度由 iOS 5 的 2px 变为 4px,看起来更加圆润。 &b&&br&&/b&&br&&b&键盘边缘&/b&&br&&img src=&/b2cb7ebd7cf13cea9aa0_b.jpg& data-rawwidth=&510& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&/b2cb7ebd7cf13cea9aa0_r.jpg&&iOS 6 键盘的边角由 iOS 5 的圆角变为了直角。鉴于 iOS 6 广为应用的圆角细节,这点改变比较令人费解。 &br&&br&&b&短信文本&/b&&br&&b&&img src=&/0ec5ea3e374c_b.jpg& data-rawwidth=&510& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&/0ec5ea3e374c_r.jpg&&&/b&iOS 5 的短信文本内容的高光是 2px,iOS 6 降为 1px,立体感被削弱。 &b&&br&&/b&&br&&b&屏幕锁定按钮&/b&&br&&img src=&/68f1ee746b0ade6dee9d37_b.jpg& data-rawwidth=&510& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&/68f1ee746b0ade6dee9d37_r.jpg&&依然是舍弃了高光效果,背景与设置图标相同,更加统一,此外,中间的旋转箭头变得更大。 &br&&b&&/b&&br&&b&Spotlight 搜索&/b&&br&&b&&img src=&/d16f5d0b7d21d95dee0df6_b.jpg& data-rawwidth=&510& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&/d16f5d0b7d21d95dee0df6_r.jpg&&&/b&iOS 5 的 Spotlight 搜索栏的高度是 58px,iOS 6 降为 56px。 &b&&br&&/b&&br&&b&键盘数字符号&/b&&br&&b&&img src=&/df828fa27deae_b.jpg& data-rawwidth=&510& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&/df828fa27deae_r.jpg&&&/b&iOS 6 将键盘数字符号的高光由 iOS 5 的 2px 降为 1px,同时,键盘按钮的尺寸有所变大,按钮的间距略为缩小,如下图所示。 &b&&br&&/b&&img src=&/796ad4f795ef12c7ecd9c8_b.jpg& data-rawwidth=&510& data-rawheight=&612& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&/796ad4f795ef12c7ecd9c8_r.jpg&&&br&&b&音量滑杆的圆形按钮&/b&&br&&b&&img src=&/d513986fff0b17ea74a10f4e09dc1559_b.jpg& data-rawwidth=&383& data-rawheight=&494& class=&content_image& width=&383&&&/b&音乐应用的界面在 iOS 6 中可谓脱胎换骨,新 UI 增强了金属仿真的效果。注意音乐播放界面中音乐进度和音量调节的滑竿上的圆形的金属按钮,这个按钮的模拟出的金属光泽不是死的,当你上下左右倾斜手机的时候,会惊讶地发现它会像实体一样改变金属光泽反射的角度 。对仿真效果近乎偏执的认真啊。。&b&&br&&/b&&br&参考资料:&br&&a href=&///?target=http%3A//stam-design-stam.blogspot.jp/2012/09/ios-6.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&stam-design-stam.blogspot.jp&/span&&span class=&invisible&&/2012/09/ios-6.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& &br&&a href=&///?target=http%3A///159601& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/159601&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
第一个答案已经写得挺好的了,我来补充一下大家不容易注意到的一些像素级的变化吧~(因为我对界面特别敏感= =) 设置图标 iOS 6 的设置图标中的齿轮由此前的尖角变为圆角,与 OS X 的设计保持一致。Design Archieve 称这种改变叫“Back to the mac”。
信息量!!!&br&&br&1.不显示高速公路出入口名称信息&img src=&/c340e53f2eb432bca3f96ec_b.jpg& data-rawheight=&2048& data-rawwidth=&1536& class=&origin_image zh-lightbox-thumb& width=&1536& data-original=&/c340e53f2eb432bca3f96ec_r.jpg&&&img src=&/af337cbdeb59855bca649_b.jpg& data-rawheight=&2048& data-rawwidth=&1536& class=&origin_image zh-lightbox-thumb& width=&1536& data-original=&/af337cbdeb59855bca649_r.jpg&&&br&2.公交信息严重不足,港铁MTR作为香港最主要的交通运输系统竟然木有任何信息显示&img src=&/c9dbcf429a36_b.jpg& data-rawheight=&1536& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/c9dbcf429a36_r.jpg&&&img src=&/ec8a7ead113c736bc8b7_b.jpg& data-rawheight=&1536& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/ec8a7ead113c736bc8b7_r.jpg&&3.公交信息全无,选择出行方式为公共交通,弹出App的搜索结果&br&&img src=&/c833e7d83f6b919c8254739a_b.jpg& data-rawheight=&1536& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/c833e7d83f6b919c8254739a_r.jpg&&4.WWDC 2012和本次发布会上多次提到的Flyover原来是这个样子&img src=&/61ce12986eae2b9d0f84b_b.jpg& data-rawwidth=&800& data-rawheight=&1067& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/61ce12986eae2b9d0f84b_r.jpg&&&img src=&/6c6f7ecb3ea113de9dbd8_b.jpg& data-rawwidth=&768& data-rawheight=&1024& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&/6c6f7ecb3ea113de9dbd8_r.jpg&&&img src=&/862cdbb2d2f36099dcb9d7_b.jpg& data-rawwidth=&1500& data-rawheight=&1125& class=&origin_image zh-lightbox-thumb& width=&1500& data-original=&/862cdbb2d2f36099dcb9d7_r.jpg&&&img src=&/f98c8296cdeaf_b.jpg& data-rawwidth=&1537& data-rawheight=&995& class=&origin_image zh-lightbox-thumb& width=&1537& data-original=&/f98c8296cdeaf_r.jpg&&觉得还是Google的45°来的更实在&br&5.卫星图片虽均来自Digital Global公司,但是分辨率明显不如Google,在美国本土的清晰度约等于Google Earth在景德镇的清晰度,并且图片较旧&br&&img src=&/112a4c3d9_b.jpg& data-rawwidth=&800& data-rawheight=&1067& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/112a4c3d9_r.jpg&&&img src=&/3a2af452a682_b.jpg& data-rawwidth=&800& data-rawheight=&1067& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/3a2af452a682_r.jpg&&6.UI简陋不堪&br&除了高速公路以外的道路均为一致的白色,除了用粗细来衡量以外,很难区分&br&图形细节处理的很不好,棱角明显,&br&绿地的表示方法实在无法接受&img src=&/b25fb4f67accde_b.jpg& data-rawwidth=&1067& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&1067& data-original=&/b25fb4f67accde_r.jpg&&&img src=&/54ed24e197b45bc56474c6_b.jpg& data-rawwidth=&1067& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&1067& data-original=&/54ed24e197b45bc56474c6_r.jpg&&7.在景德镇几乎无法使用&br&&img src=&/e3519ead62f7de83e85e0bb4b21f68c0_b.jpg& data-rawwidth=&1067& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&1067& data-original=&/e3519ead62f7de83e85e0bb4b21f68c0_r.jpg&&&img src=&/37cb338bf9b1dadcf065f9_b.jpg& data-rawwidth=&1067& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&1067& data-original=&/37cb338bf9b1dadcf065f9_r.jpg&&——————————分割线——————————————————&br&吐槽&br&导航直接导航至机场跑道&img src=&/bb4d682bfcd61ce1c2b45c_b.jpg& data-rawwidth=&640& data-rawheight=&960& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/bb4d682bfcd61ce1c2b45c_r.jpg&&Flyover终于惊艳了一把,可惜为什么建筑物上标注的全是加油站&img src=&/0bf950a0dc19a11bcabec6be_b.jpg& data-rawwidth=&1280& data-rawheight=&960& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/0bf950a0dc19a11bcabec6be_r.jpg&&世界上最繁忙的火车站之一,新宿站,竟然搜不到&img src=&/c58f2875eda5ae312a3853_b.jpg& data-rawwidth=&640& data-rawheight=&960& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/c58f2875eda5ae312a3853_r.jpg&&&img src=&/d8e2eb93f48c5d_b.jpg& data-rawwidth=&1538& data-rawheight=&952& class=&origin_image zh-lightbox-thumb& width=&1538& data-original=&/d8e2eb93f48c5d_r.jpg&&就不告诉你~就不告诉你~就不~告诉你!!!&img src=&/308bbf434be3_b.jpg& data-rawwidth=&640& data-rawheight=&960& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/308bbf434be3_r.jpg&&德国首都被迫搬家到了南极&img src=&/0a8734daa5e9083a94dbc63be037219e_b.jpg& data-rawwidth=&1024& data-rawheight=&768& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&/0a8734daa5e9083a94dbc63be037219e_r.jpg&&伦敦地铁考虑的真周全哇~哈哈哈&img src=&/685b7ed70b10c05563f9dadd8644bcad_b.jpg& data-rawwidth=&1024& data-rawheight=&765& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&/685b7ed70b10c05563f9dadd8644bcad_r.jpg&& 更多吐槽 &a href=&///?target=http%3A///& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&&/span&&span class=&invisible&&/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
信息量!!! 1.不显示高速公路出入口名称信息 2.公交信息严重不足,港铁MTR作为香港最主要的交通运输系统竟然木有任何信息显示3.公交信息全无,选择出行方式为公共交通,弹出App的搜索结果 4.WWDC 2012和本次发布会上多次提到的Flyover原来是这个样子觉得还…
除了大家說的問題,也就是「基本沒法用」以外,我不知道該怎麼處理這種情況:&br&&br&&img src=&/e400de7e1e75fd2f5ea04d_b.jpg& data-rawwidth=&341& data-rawheight=&483& class=&content_image& width=&341&&&br&誰能告訴我,怎樣讓 Siri 正正常常地說話?
除了大家說的問題,也就是「基本沒法用」以外,我不知道該怎麼處理這種情況: 誰能告訴我,怎樣讓 Siri 正正常常地說話?
其实 iOS6 地图图标只是降低精度的做法。实际上这个走法是可行的。不要那么较劲嘛。 &br&转自:&a href=&///?target=http%3A////ynZtTwVbO& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&//yn&/span&&span class=&invisible&&ZtTwVbO&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&img src=&/806b2725548adfc56994c4_b.jpg& class=&content_image&&
其实 iOS6 地图图标只是降低精度的做法。实际上这个走法是可行的。不要那么较劲嘛。 转自:
问题apple地图它是真的apple做的地图么?&br&好吧,如果在中国它革掉了其他所有地图的命。。。好吧,它也也就革掉了自己的命,因为它用的图是高德的图,高德就是典型的第三方地图,详见&a href=&///?target=http%3A//& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&那么它会革掉高德(或者其他合作者)以外的第三方地图供应商的命么?更不会,相反,它会为它的供应商好好保护其竞争对手的,因为,如果apple地图只能有一个合作伙伴可以选择的话,从商业上来说,apple处在很不利的地位。&br&apple现在还不具备自己测绘,做图,收集数据等能力,也不具有GIS引擎的能力,从这点上来说,它离google还有很大很大的差距。&br&google map从引擎的角度,至少是现在GIS业界瓦片图的典范产品。google收集购买的卫片和航片(见google earth),更是业界得以分享的宝贵资源&br&&br&目前来说,苹果真的只是一个产品设计见长的公司,不是一个技术公司,更不是万能完美的神。。。。&br&&br&其实问题只是一个,apple会选谁做它的地图服务供应商而已,至于革别人的命。。。。apple根本不是这个圈里的玩家,没有这个能力,也没有这个必要
问题apple地图它是真的apple做的地图么? 好吧,如果在中国它革掉了其他所有地图的命。。。好吧,它也也就革掉了自己的命,因为它用的图是高德的图,高德就是典型的第三方地图,详见 那么它会革掉高德(或者其他合作者)以外的第三方地…
设计与交互应该服务于高效的解决问题的方式,视觉效果也服务于此。&br&除此之外多余的东西,就当是浪费CPU能效了。&br&锤子在某些“优秀”的细节方面深刻的诠释了什么叫做本末倒置。&br&拟物和扁平则是最浮于表面的东西,从这里开始去探讨产品,就和从一个人的皮肤颜色去探讨他的能力一样没有意义。&br&但是如果只是说这样的皮肤我更喜欢哪一个?&br&那么显然是锤子的,三年时间足够他们在iOS的基础上画出更好看的作品。&br&然而这并没有什么卵用。
设计与交互应该服务于高效的解决问题的方式,视觉效果也服务于此。 除此之外多余的东西,就当是浪费CPU能效了。 锤子在某些“优秀”的细节方面深刻的诠释了什么叫做本末倒置。 拟物和扁平则是最浮于表面的东西,从这里开始去探讨产品,就和从一个人的皮肤颜…
1. 一代iPad已经停产。&br&2. 3GS和iPad 1都是256内存(不是指闪存/硬盘),3GS的分辨率是320 * 480;iPad 1 的分辨率是768 * 1024。从开发的角度讲,iPad上的应用必然消耗更多的内存。再整合这么多操作系统级的服务,iPad 1肯定是吃不消的。
1. 一代iPad已经停产。 2. 3GS和iPad 1都是256内存(不是指闪存/硬盘),3GS的分辨率是320 * 480;iPad 1 的分辨率是768 * 1024。从开发的角度讲,iPad上的应用必然消耗更多的内存。再整合这么多操作系统级的服务,iPad 1肯定是吃不消的。
如何用提醒事项我不知道,但是有别的办法设置提醒,如下&br&&b&&u&先编辑联系人生日&/u&&/b&&img src=&/d949c58ce1d225d51f7fb569bed6dd33_b.jpg& data-rawwidth=&640& data-rawheight=&1136& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/d949c58ce1d225d51f7fb569bed6dd33_r.jpg&&&img src=&/9db75ddf896_b.jpg& data-rawwidth=&640& data-rawheight=&1136& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/9db75ddf896_r.jpg&&&br&&br&&br&&br&&b&&u&再在设置中设置提醒&/u&&/b&&br&&img src=&/4db70d008a41be8ebca82_b.jpg& data-rawwidth=&640& data-rawheight=&1136& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/4db70d008a41be8ebca82_r.jpg&&&img src=&/5dbec2fcb76f475e24d43cb_b.jpg& data-rawwidth=&640& data-rawheight=&1136& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/5dbec2fcb76f475e24d43cb_r.jpg&&&br&&img src=&/f619fc6ba36a9b4751d47_b.jpg& data-rawwidth=&640& data-rawheight=&1136& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/f619fc6ba36a9b4751d47_r.jpg&&
如何用提醒事项我不知道,但是有别的办法设置提醒,如下 先编辑联系人生日 再在设置中设置提醒
当微信没有打开时,后台进程也被关掉时,使用的是 Apple 的 push 体系。&br&&br&当微信打开时,建立了长连接,不再使用 Apple 的 push 体系。&br&&br&&i&当微信在后台时,我不太确定微信是怎么做的。有可能是使用 Apple 的 push 体系,也有可能是依然使用长连接(这时需要用个取巧方法保证后台代码运行时间,比如时间快到时播放一小段空白音乐之类的)。&/i&&br&&b&PS:经 &a class=&member_mention& data-hash=&f5ee79e5a1fb& href=&///people/f5ee79e5a1fb& data-hovercard=&p$b$f5ee79e5a1fb&&@Bill Cheng&/a& 证实,微信在后台时依然使用的是 Apple 的 push 体系。&/b&
当微信没有打开时,后台进程也被关掉时,使用的是 Apple 的 push 体系。 当微信打开时,建立了长连接,不再使用 Apple 的 push 体系。 当微信在后台时,我不太确定微信是怎么做的。有可能是使用 Apple 的 push 体系,也有可能是依然使用长连接(这时需要用…
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 字符串过滤特殊字符 的文章

 

随机推荐