K-Res

iOS的UDID废用以及UUID配合keychain的替换方案实现

首先,简单介绍一下UDID这个东西:

UDIDUnique Device Identifier的简称,也就是唯一设备标识的意思。于iOS SDK中取得的方法是UIDevice的一个叫uniqueIdentifier的NSString*,由于这个ID字符串是基于设备的,应用开发人员可以通过获取此ID来用于记录区分设备。正是由于这个特性,可能会导致一些隐私等等相关的问题,Apple于iOS5中将这个UDID废掉了,SDK中被标记为了Deprecated,虽然为了兼容低版本的源代码而继续存在,但并不会再返回任何有实际意义的东西。

最近在做Flurry的统计功能时,发现还是需要用到可以识别设备的东西的,好方便分析数据,经过一段时间的研究、试验,发现了这个应该还算是比较靠谱的方法……

Continue reading…

[译]如何指定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上的信息和应用描述信息之间似乎却有不一,而系统则应该尽量避免发生此类问题。

Continue reading…

在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的命令行工具应该没什么痛苦。

Continue reading…

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,不知什么时候能修正……

i酷加速器导致windows系统启动时explorer.exe进程出现0xc0000409未知软件异常

最近不知为何XP一启动就会显示 Explorer.exe 未知软件异常 0xc0000409 位置为:0x????????,确定后桌面任务栏消失,explorer进程重启,然后错误依旧,但位置出现变化,如此陷入错误的循环。或者取消了后,弹出JIT调试选项,挂VS,看不到任何信息,进程直接结束。这个错误倒是不影响其他操作,放着不管该干啥干啥也没问题,就是这框实在是碍眼,本着系统裸奔,有病毒木马XX等等一概手动追查到底的精神,我开始行动!
Continue reading…

iOS程序开发引用的第三方库之间出现duplicate symbol时的处理方法

iOS程序集成的第三方库过多时,很容易出现某几个库同时用到了一样的函数库,也就是在你的程序link时会提示duplicate symbol,而重复的符号又不是由你自己程序的代码造成的,也就说没法通过直接修改代码把重复的符号去掉!这样呢,要不就要求第三方库提供方该代码,要不就自己修改第三方库的库文件。第一种方法多少有点无理要求,所以还是直接用第二种方法自己解决了吧,也就是直接修改.a文件或framework里的库二进制文件:

Continue reading…

又是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…

给Eclipse PDT加入codeigniter框架的自动完成支持

1.给你的WEB项目加入:右键项目->Configure->Add PHP Support…

2.给CI_Model基类和CI_Controller基类加入以下代码,这两个文件的位置在2.1.0版本里是在system/core下,注意,注释部分不可无视!

//Put this code right before: class CI_Model { ...
/**
  * @var CI_Config
  */
 var $config;
 /**
  * @var CI_DB_active_record
  */
 var $db;
 /**
  * @var CI_Email
  */
 var $email;
 /**
  * @var CI_Form_validation
  */
 var $form_validation;
 /**
  * @var CI_Input
  */
 var $input;
 /**
  * @var CI_Loader
  */
 var $load;
 /**
  * @var CI_Router
  */
 var $router;
 /**
  * @var CI_Session
  */
 var $session;
 /**
  * @var CI_Table
  */
 var $table;
 /**
  * @var CI_Unit_test
  */
 var $unit;
 /**
  * @var CI_URI
  */
 var $uri;
 /**
  * @var CI_Pagination
  */
 var $pagination;

3.一切OK,试一下->应该有反应了。