怎么在Xcode获取Core Data的调试日志?

Posted by Kimziv at 2013-11-07 with tags Core Data, Debug, log, 日志

不多说了,mark一下,按照一下步骤:

1.在Xcode左上角找到Product-> Edit Scheme;
2.选择左边的`Run...`菜单项;
3.选择右边的`Arguments`选项卡;
4.在下边的`Arguments Passed On Launch`处添加参数`-com.apple.CoreData.SQLDebug 1`;
5.运行工程,即可在xcode的Consle里看到Core Data的查询日志等。

如下图:

ScreenShot

ScreenShot

ScreenShot

Top

如何清除ios消息中心的消息[翻译]?

Posted by Kimziv at 2013-10-15 with tags clear, cancel, notification, center, ios

  在做ios项目过程中,ios通知中心有很多通知,我想点击其中一条,其他通知从消息中心消失掉,但是很多应用程序都不这么做。 我用Google搜索,发现了一些线索,但是都不奏效,我也做了一些研究,其实很简单。

1.如果你的app使用了applicationIconBadgeNumber,你可以把它设置为0

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

2.如果你的badge已经是0,你可以先把它设置为非零整数,然后再设置为0既可

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

3.若上面两个方法都不奏效,可以设置一个本地通知列表,并且对这些本地通知列表不做任何操作,然后删除本地通知就行

UIApplication* application = [UIApplication sharedApplication];
NSArray* scheduledNotifications = [NSArray arrayWithArray:application.scheduledLocalNotifications];
application.scheduledLocalNotifications = scheduledNotifications;
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

iOS Development: Remove Old Notifications From Notification Center

Top

Google图片搜索如何指定大小搜索图片?

Posted by Kimziv at 2013-10-03 with tags google, image, size

问题

之前Google的图片搜索还可以自己定义尺寸,比起一般的搜索引擎只能选择小,中和大等选择可要高级多了,不知道最近怎么去掉了,这么好的更能竟然去掉了,不知道Google是如何考量的。

解决方法

经过仔细研究,发现Google并没有去掉这个功能,只是隐藏掉了,在输入搜索内容的同时加入imagesize:xxy即可,其中x, y为横纵像素值。 比如搜索壁纸1280×800像素的图片,使用:壁纸 imagesize:1280x800 即可。

(PS:imagesize之间不能有空格。1280x800,不能是1280*800。中间的乘号是字母x)

这样便方便搜索桌面背景等资源了,当然写blog时插入的图片也可以按自己模板的大小来指定搜索选择。

ScreenShot

点击切换到标准版,之前隐藏的功能又出来了

ScreenShot

Top

怎样在xcode5中使用低版本sdk,解决兼容ios7ui问题

Posted by Kimziv at 2013-09-22 with tags xcode5, base sdk, older, ios7

问题

令人头疼的是,xcode每次升级都会使用最新版本的sdk,而且只有最新版本的sdk,对之前老版本的sdk都没有默认安装,这搞的最近我很头疼, 最近我升级到Xcode5.0版本,编译后运行后,在ios7.0上显示ui非常乱,我不可能自己重新换一套正对ios7.0的ui,即使换也需要时间,这个版本不可能换,需要设计师重新设计一套,汗,只能自己折腾,果然Google是好帮手,可以在新版本Xcode中添加老版本的sdk:

解决方法

首先得有老版本的sdk,如果你已经安装了Xcode5.0,那么老版本的sdk iPhoneOS6.1.sdk已经被删除了,你可以从同事电脑里拷贝一份,路径是:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs,我从同事电脑考了一份,汗,又编译出错,找不到头文件,只好重写下载Xcode4.6.3,打开dmg镜像文件,从路径/Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer拷贝iPhoneOS6.1.sdk到路径 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs目录即可

附iPhoneOS6.1.sdk下载链接:iPhoneOS6.1.sdk

提示

对于还没有安装Xcode5.0的童鞋,在安装之前最好备份一下iPhoneOS6.1.sdk目录,在安装Xcode5.0之后拷贝到相关目录/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs即可以使用sdk6.1了,在项目中设置,如下图:

ScreenShot

Top

怎样分析苹果Crash日志文件

Posted by Kimziv at 2013-09-21 with tags crash, reports, dSYM, symbolicatecrash, symbolicate

问题

最近在修复项目bug过程中,需要分析ios device里crash日志文件,但是日志文件中只有函数的地址,不能看到函数名称,查资料才知道苹果这样做起到了一定的加密作用,程序真机上崩溃以后通常会留下一个.crash的日志文件,可以通过这个crash文件迅速查找到哪里崩溃了,但是这个文件中没有平时调试时候那样可以看到的函数名和函数具体调用行数,因为这里的这些信息都被转换成了16进制的地址,即使别人拿到你程序的crash日志文件也不知道哪个函数崩溃了,如下面的crash日志:

Thread 0 Crashed:
0 libobjc.A.dylib 0×300c87ec 0×300bb000 + 55276
1 MobileLines 0×00006434 0×1000 + 21556
2 MobileLines 0×000064c2 0×1000 + 21698
3 UIKit 0×30a740ac 0×30a54000 + 131244

解决办法

在xcode build项目之后,在.app文件旁边看见一个同名的dSYM文件,这个文件有debug和函数和函数地址等相关信息,在发不到App Store之前一定要保留这个文件,以便后面的crash日志的分析,xcode里有一个叫symbolicatecrash的工具,Xcode4.3之后的路径是: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash,你可以拷贝到/usr/local/bin/目录独立执行:

sudo cp /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash /usr/local/bin/

然后执行symbolicatecrash命论,可以得到完整崩溃日志记录,可以根据改日志找到crash发生在那个函数中:

symbolicatecrash MyApp.crash MyApp.app.dSYM > MyApp.log

解析后的崩溃日志如下:

Thread 0 Crashed:
0 libobjc.A.dylib 0×300c87ec objc_msgSend + 20
1 MobileLines 0×00006434 -[CustomView setSelectedPiece:] (CustomView.m:321)
2 MobileLines 0×000064c2 -[CustomView touchesBegan:withEvent:] (CustomView.m:349)
3 UIKit 0×30a740ac -[UIWindow sendEvent:] + 264

注意每个.dSYM文件与产生crash日志app版本要一致的,所以如果每次编译后的dsym文件都要手动保存一次,就很麻烦,有好心人写了一个脚本,自动在编译后保存该文件.请参考:http://www.cimgf.com/2009/12/23/automatically-save-the-dsym-files/

参考文献

Top

A Popular Objc Library Chinese To Yinyin

Posted by Kimziv at 2013-09-17 with tags pinyin, chinese, hanzi, objc, convert

特性

之前做android开发时,感觉pinyin4j这个库用作汉字转拼音很不错,最近就写了一个objc版本的,有以下特性:

  • 效率高,使用数据缓存,第一次初始化以后,拼音数据存入文件缓存和内存缓存,后面转换效率大大提高;
  • 支持自定义格式化,拼音大小写等等;
  • 拼音数据完整,支持中文简体和繁体,与网络上流行的相关项目比,数据很全,几乎没有出现转换错误的问题。

    PinYin4Objc is a popular objective-c library supporting convertion between Chinese(both Simplified and Tranditional) characters and most popular Pinyin systems, it's performance is very efficient, data cached at first time. The output format of pinyin could be customized.

性能比较:

与之前的pinyin,POAPinyin和PYMethod等项目比较,PinYin4Objc的速度是非常快的,差不多为:0.20145秒/1000字, 如下图

使用

NSString *sourceText=@"我爱中文";
HanyuPinyinOutputFormat *outputFormat=[[HanyuPinyinOutputFormat alloc] init];
[outputFormat setToneType:ToneTypeWithoutTone];
[outputFormat setVCharType:VCharTypeWithV];
[outputFormat setCaseType:CaseTypeLowercase];
NSString *outputPinyin=[PinyinHelper toHanyuPinyinStringWithNSString:sourceText withHanyuPinyinOutputFormat:outputFormat withNSString:@" "];

接图

ScreenShot

项目地址

https://github.com/kimziv/PinYin4Objc

Top