本来以为这月最后一天了,应该可以相安无事,结果Mountain Lion发布,强迫症患者更新系统后接着更新了Xcode到Version 4.4 (4F250),然后就发现很多项目build都报下面这个链接错误:
ld: In section __TEXT,__text reloc 5: sectionForAddress(0x394) address not in any section for architecture armv7
不知道这次更新又对build tool做了什么改动,导致了上个版本build没问题的项目现在ld报错…查了一下,发现是相关target的build settings->Apple LLVM compiler 4.0 – Code Generation中Generate Position-Dependent Code这个选项的问题,换成No就可以正常link了!
设计开发
iOS的UDID废用以及UUID配合keychain的替换方案实现
首先,简单介绍一下UDID这个东西:
UDID是Unique Device Identifier的简称,也就是唯一设备标识的意思。于iOS SDK中取得的方法是UIDevice的一个叫uniqueIdentifier的NSString*,由于这个ID字符串是基于设备的,应用开发人员可以通过获取此ID来用于记录区分设备。正是由于这个特性,可能会导致一些隐私等等相关的问题,Apple于iOS5中将这个UDID废掉了,SDK中被标记为了Deprecated,虽然为了兼容低版本的源代码而继续存在,但并不会再返回任何有实际意义的东西。
最近在做Flurry的统计功能时,发现还是需要用到可以识别设备的东西的,好方便分析数据,经过一段时间的研究、试验,发现了这个应该还算是比较靠谱的方法……
在Mac OSX下编译用于iOS的FreeType静态库
记得上学的时候自己研究DirectDraw的文字绘制时,曾经用过FreeType开源库做过一些简单的TTF字库文字绘制操作,那时没什么强力CPU、GPU,而且又是用的DirectDraw,Alpha混合这种操作都是CPU计算,量稍微大一些的时候FPS是相当的不尽人意,就算做了MMX、SSE等的SIMD优化,感觉也不是很理想,而FreeType画文字没有半透明的抗锯齿的话效果也不是很好,所以当时就留下个印象:FreeType的确是非常强力的文字绘图解决方案。现在在像iOS、Android等移动设备的硬件都已经相当强大了(相对而言),所以我又忍不住想要继续一下当年的小研究了!
首先,先做好准备工作。因为是在Mac下编译,所以Xcode是必不可少的,这里需要注意一点,最近的某个版本(好像是4.3)开始Xcode被变成了独立app的形式发布,而这个默认是不带command line tools,而我们要做的FreeType编译是需要用到make等命令行工具的,所以进入Preferences->Downloads里把它下载下来吧,相对1.6G的Xcode来说,180M的命令行工具应该没什么痛苦。
[译]如何指定iOS应用程序所支持的设备
免责申明:本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!原文链接:How to Indicate What Devices Are Supported by Your iOS App – http://blog.manbolo.com/2012/05/02/how-to-indicate-what-devices-are-supported-by-your-ios-app,由于本人水平有限,翻译不当之处欢迎留言指出!
在Hypercritical n°64 “You Will Die Instantly!”这里,John Siracusa讨论了一个由于应用程序设备兼容性和iTunes信息之间不符导致的iOS问题。这个问题的具体是说有用户抱怨其所下载的游戏不能在iPhone 3G上运行,而iTunes上却声明这个游戏支持包括3G在内的全部设备。用户抱怨的同时,游戏开发人员却争执说应用介绍信息中明确指出了这个游戏不支持iPhone 3G,但是iTunes标签信息中却给出了相反的信息。这么看来,iTunes上的信息和应用描述信息之间似乎却有不一,而系统则应该尽量避免发生此类问题。
[ZT]关于VS2010的调试信息即.pdb文件3DS MAX FBX SDK Samples
在运行FBX的sample程序时发现提示:debug information of xxx.exe cannot be found or not match ,于是首先在网上找了下相关资料,得到如下建议:
Xcode 4.3.2 (4E2002)错误提示Storyboards are unavailable on iOS 4.3 and prior的解决方法
今天尝试用Xcode建立基于5.0+的Storyboards的项目时发现了一个小bug:尝试将项目Deployment Target切换回4.3编译,然后提示Storyboards are unavailable on iOS 4.3 and prior错误,ok,没问题,5.0的新东西,可以理解,切换target回5.0,编译,错误依旧??!!开始以为是某些涉及版本的设置没有成功修改回来,找了半天,没有发现!详细编译log中提示iPhone和iPad对应的两个storyboard文件编译失败。clean, cmd+q退出重开等方法均无效。最后发现需要清除~/Library/Developer/Xcode/DerivedData中对应当前项目的文件夹,然后重新编译就没问题了,这应该是当前版本Xcode的一个bug,不知什么时候能修正……
又是wchar_t的问题,这次是Apple LLVM compiler 3.0的bug!
之前发现过Android上NDK对wchar_t以及相关函数的支持不足问题,后来又发现过iOS上类似的setlocale问题。最近在更新了Xcode 4.2以后,发现之前用的wchar_t相关的东西都不对了,wcslen函数返回的字符串长度不对,而且在gdb中用p查看const wchar_t*变量时,显示的是const void*,貌似就没有wchar_t相关的东西。
这个问题如果切换编译器为之前的LLVM GCC编译器则一切正常,浪费了很多时间排查错误,最后发现更新了最近的Xcode 4.3(4E109)带的Apple LLVM compiler 3.1就没问题了。啊!原来是3.0的BUG。
Eclipse+PDT+Apatana Studio 3的jQuery智能感知设置
以前总用PhpED做一些Web方面的东西,逐渐发现其实IDE还是少而精比较好,毕竟总在各种IDE或者是编辑器直接来回切换是一件很烦人的事,各种界面布局,快捷键之类的差异等会无意义的加大我本来就不怎么高的脑容量的存储鸭梨(比如Debug单步操作Borland的F8流和M$的F10流*_*)。于是开始迁移Web开发功能到常用Eclipse上,总体来说环境设置还算顺利,这次记录下jQuery只能感知相关的问题:
作业环境:
Eclipse Indigo Version: 3.7.1
PDT: 3.0.0
Apatana Studio 3: 3.0.8
jQuery: 1.7.1
Apatana和PDT的安装用Eclipse的Update Site还是比较省心的,PDT直接在Indigo的功能列表里找到,Apatana Studio 3的是:aptana – http://download.aptana.com/studio3/plugin/install,PS:这里好像看到有人提说要先装Apatana再装PDT,不过我觉得顺序应该不会影响功能。
Apatana 2的开启jQuery支持方式和3有所不同,3.0.5以后和以前也略有不同,2是用手动添加vsdoc等文件的方式,不太方便,3.0.5以后基本可以说是完整整合了这部分功能,还是比较方便的,具体操作:
Continue reading…
VS2010代码编辑窗口第一次编辑操作导致报错的问题
用VS2010打开一个C/C++项目,随便选个源代码文件,编辑,报错提示遇到异常,可能由于某Add-in导致等blah blah blah…,确定无视提示后继续编辑,写完一个函数的proto后IDE卡死,稍候直接大红叉异常,只能强制结束进程。
开始按照提示信息,怀疑是VM Ware的Virtual Debugger插件导致,于是花了一会时间把插件以正常添加/删除方式卸载掉,重启IDE,错误依旧,发现被M$的提示信息误导了!
用VS的命令行方式挂log参数启动,devenv /log,触发错误提示后查看ActivityLog.xml日志,xsl顺利的解析出了2条大红色的错误信息:
System.InvalidCastException: Unable to cast COM object of type ‘System.__ComObject’ to interface type ‘Microsoft.VisualStudio.TextManager.Interop.IVsTextReplaceEvents’. This operation failed because the QueryInterface call on the COM component for the interface with IID ‘{CF9928D9-65AE-4319-A446-94ED5C45ECDE}’ failed due to the following error: 不支持此接口 (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)). at System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, Boolean& pfNeedsRelease) at Microsoft.VisualStudio.TextManager.Interop.IVsTextReplaceEvents.OnReplace(ChangeInput[] pCI) at Microsoft.VisualStudio.Editor.Implementation.VsTextBufferAdapter.OnTextBufferChangedHighPriority(Object sender, TextContentChangedEventArgs e) at Microsoft.VisualStudio.Text.Utilities.GuardedOperations.RaiseEvent[TArgs](Object sender, EventHandler`1 eventHandlers, TArgs args)
System.InvalidCastException: Unable to cast COM object of type ‘System.__ComObject’ to interface type ‘Microsoft.VisualStudio.Editor.Implementation.IVsTextStreamEvents_Private’. This operation failed because the QueryInterface call on the COM component for the interface with IID ‘{96FC7D44-BCDD-4F00-AE4D-07E26B2C0E52}’ failed due to the following error: 不支持此接口 (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)). at System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, Boolean& pfNeedsRelease) at Microsoft.VisualStudio.Editor.Implementation.IVsTextStreamEvents_Private.OnChangeStreamText(Int32 iPos, Int32 iOldLen, Int32 iNewLen, Int32 fLast) at Microsoft.VisualStudio.Editor.Implementation.VsTextBufferAdapter.OnTextBufferChanged(Object sender, TextContentChangedEventArgs e) at Microsoft.VisualStudio.Text.Utilities.GuardedOperations.RaiseEvent[TArgs](Object sender, EventHandler`1 eventHandlers, TArgs args)
有了具体错误信息,发现是某个VS编辑COM控件的注册信息丢失导致,最后还算轻松的找到了解决方法:
Xcode4中code sign identity选项值不出下拉选择框的解决方法
问题出现时的系统、软件版本:
Mac OS X 10.6.8 (10K549)
Xcode Version 4.0.2 Build 4A2002a
出问题时的现象:
如上两图所示:选签证的选项不显示下拉选择框反而是个普通的文本编辑框,上面的SDK架构什么的也是一样,发现这个问题其实是由于一个provision profile过期,要更换一下而已…
Continue reading…

