记:ios PLCrashReporter学习一
Posted by Jimney Lee at 2012-12-18 with tags crashreporter, xcode
经过昨天今天的探索,好不容易把PLCrashReporter给跑起来。
下面分享下步骤,
1、项目主页:http://code.google.com/p/plcrashreporter
- a. git clone源码,http://code.google.com/p/plcrashreporter/source/checkout
- b. 向服务器后台发送崩溃测试demo位于工程下的
contrib
,php-crashreporter-demo
。 - c. 目前我还没能直接从源码哪里生成ios的framework,所以直接在Downloads里面下载了官方编译好的framework,
PLCrashReporter-1.1-rc2.dmg
(目前最新版本),可以用的。如果您能编译,请留言分享。
2、遇到一个诡异的问题,生成了crash,但是没有生成崩溃日志文件的问题 官方issue见此处:http://code.google.com/p/plcrashreporter/issues/detail?id=32 内容如下:
gdb will catch the mach exception before it hits PLCrashReporter’s signal handler; you have to execute the program outside of the debugger to test the crash handling behavior.
我在测试demo时,xcode中编译运行,此时gdb调试进程会在PLCrashReporter
之前捕捉,导致PL没有获取异常信息。所以请直接在模拟器或者设备中,运行崩溃捕捉测试。
客户端的崩溃报告生成了。后面我将学习配置server端,存储崩溃报告信息和使用plcrashutil
命令行工具查看客户端提交的崩溃日志信息。
记:Three20工程与非Three20工程的集成问题
Posted by Jimney Lee at 2012-12-13 with tags Three20, xcode
这两天需要把我的基于Three20
的工程打一个静态库供客户方使用。因为设计到第三方库的共用,出现了很多问题。
问题1、SBJSON
第三方库使用的冲突
由于three20
的json解析框架与客户使用版本有些差异,并且严重的问题是支付宝的静态库竟然把SBJSON一并打入静态库,同时需要用到SBJSON.h
头文件。我这心抓挠的闷。没办法,我只能把320的json静态库,重新打包,不包含.m文件,同时加入SBJSON.h
,重新生成静态库,供对方使用才解决了这个问题。
(PS:奇怪的是,支付宝官方说没打入静态库,需要使用者自己添加,但是添加了就出现duplicate symbol
错误)
问题2、客户如何调用我主控制器
开始我以为很简单,一句话的事:
[[TTNavigator navigator] openURLAction:[TTURLAction actionWithURLPath:@"mine://maintab"]];
但是我发现返回不了。看了底层才知道,由于three20基于导航url思想,默认会生成一个 TTNavigationController
,并设为rootViewController,见TTBaseNavigator.m
line242:
if (nil != _rootContainer) {
[_rootContainer navigator:self setRootViewController:_rootViewController];
} else {
[self.window addSubview:_rootViewController.view];
}
如果直接通过window来添加,效果不好。此处rootContainer的代理使用很特别,哈哈,通过它能使three20工程和其他项目工程无缝链接。代码如下:
- (void)startLibraryWithParentController:(UIViewController*)parentController
{
self.parentViewController = parentController;
// 设置容器的代理,显示320的rootViewController
[[TTNavigator navigator] setRootContainer:self];
// 此处一般在AppDelegate 调用,此处省略了Three20工程初始化初始化[AppDelegate init]
[[TTNavigator navigator] openURLAction:[TTURLAction actionWithURLPath:@"mine://maintab"]];
}
- (void)stopLibrary
{
[self.parentViewController dismissModalViewControllerAnimated:YES];
[[TTNavigator navigator] removeAllViewControllers];
[delegate applicationWillTerminate:nil];
// release all singleton class if need
}
///////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark -
#pragma mark TTNavigatorRootContainer
- (void)navigator:(TTBaseNavigator*)navigator setRootViewController:(UIViewController*)controller {
// 对方的父控制器上显示Three20的rootViewController
[self.parentViewController presentModalViewController:controller animated:YES];
}
解决可恶的Code Sign Error
Posted by Jimney Lee at 2012-11-20 with tags sign, iphone, xcode
这两天的时间都浪费搞证书上了。不知咋的,突然证书无法使用,开始是valid signing certificate not found
,同时XCode里面证书设置那边报key/certificate
不匹配。
昨天摸索一天,终于找到必杀技。revoke掉certificate,重新生成所有的证书,才没有上面的问题。
今天又遇到下面这个DT的问题:
Code Sign error: Certificate identity ‘iPhone Developer: My Name (xxx)’ appears more than once in the keychain. The codesign tool requires there only be one.
我试了如下方面,对我没有用,但是可以给遇到问题的同学一些参考。
-
1、因为反复安装证书,到
access key(钥匙串访问)
删除相同的证书。 -
2、删除掉过期的证书。
-
3、记得关闭xcode和
access key(钥匙串访问)
-
4、这个很重要。跟1有关系。就是你删除相同的证书,但是实际没有删除,这个是acces key的bug。
下面是苹果官方的解决方法,请参考: https://developer.apple.com/library/ios/#technotes/tn2250/_index.html#//apple_ref/doc/uid/DTS40009933-CH1-TNTAG3
MacOS快速安装OpenCV
Posted by Jimney Lee at 2012-10-10 with tags MacOS, OpenCV
最近想学习OpenCV,在我的MacMini上安装这个很不错的开源图像处理库。由于安装编译OpenCV,需要cmake来编译。cmake又需要make工具和gcc编译器。一连串需要安装下载的东西很多。
摸索了半天发现一条便捷的快速搭建OpenCV学习环境的方法。记录在此,日后待用。有需要的同学参考下。
当前安装环境:MacMini、Mac OS X Lion10.7.3、XCode4.3
下载安装如下几个工具:
1、XCode安装Command Line Tools
文件,包含所需的gcc和make工具,或用开发者账号登录官方下载。
2、下载安装适合当前系统的MacPorts文件,类似linux下的apt-get
命令。port
命令使用手册
3、上面安装完成后,打开Terminal
终端,运行如下:
$ sudo port selfupdate // 更新自身到最新版本
$ sudo port list opencv // 查看要下载的opencv的版本号,此步骤可忽略
$ sudo port install opencv // 等待安装,此步骤时间较长
安装路径默认位于/opt/local/include
和/opt/local/lib
建立一个command line工程,进行简单测试。
1、设置工程库文件和头文件引入目录,如下图
2、引入两个动态链接库,位于/opt/local/lib
3、编写最简单的测试代码,资源放在工程目录下
4、运行结果如下图,分别为isColor=1(原图显示)和isColor=0(黑白显示)
为ShareKit添加Sina Weibo OAuth2.0授权和分享功能
Posted by Jimney Lee at 2012-08-18 with tags oauth2, weibo, iphone
继新浪微博开发平台推出OAuth2.0认证,新注册的app只能通过新的认证授权接口来实现登录交互。我在国内大牛icyleafhttps://github.com/icyleaf/ShareKit的fork原始sharekit基础上,并参考了国外另一个大牛forkhttps://github.com/ShareKit/ShareKitfork实现国外OAuth2.0思路和代码,添加了仅针对于国内新浪微博的OAuth2.0功能(由于中国国内开放平台引入国外新技术的“创意”改造,我暂未考虑实现通用2.0接口实现方法。OAuth1.0这方面引进风范,腾讯微博做的尤为特色),同时保留原来的OAuth1.0功能。归功于原作者大师级别的架构,添加OAuth2.0功能还是很方便。
如果你之前已经用了sharekit并做了自己的修改,集成新浪微博OAuth2.0分享需要仅注意以下几点:(so simple)
1、原有代码整体改动不大,添加如下V2文件按夹
2、OAAsynchronousDataFetcher
增加一个接口- (void)startNoPrepare
,去除prepare
方法,OAuth2.0不需要通过HMAC-SHA1生成signature
3、在SHKSharers.plist
添加SHKSinaWeiboV2
,同时在SHKConfig.h
// Sina Weibo 2.0
#define SHKSinaWeiboV2ConsumerKey @"1383003023" // The consumer key
#define SHKSinaWeiboV2ConsumerSecret @"3e6c2fa689fbcf0aad7418f2dc8093ef" // The secret key
#define SHKSinaWeiboV2CallbackUrl @"https://api.weibo.com/oauth2/default.html" // You need to set this if
具体参考代码,分享如下链接,支持开源,enjoy it。 Note:目前腾讯微博仅支持文字分享,图片分享还未实现,欢迎补充!
update(12-09-05): 修改授权页面的url,需要添加&display=mobile,不然显示的是网页版的授权页面。 修改地方为SHKSinaWeiboV2.m 的 promptAuthorization方法
NSString* urlStr = [NSString stringWithFormat:@"%@?client_id=%@&response_type=code&redirect_uri=%@&display=mobile", authorizeURL, self.consumerKey, [self.authorizeCallbackURL.absoluteString URLEncodedString]];
制作一个APNS的推送证书
Posted by Jimney Lee at 2012-04-18 with tags iphone, apns, php
1、为应用创建独立的app ID和开发、发布的profile文件。同时开启push功能,完成后双击安装。
2、从钥匙串访问(Keychain Access)中,我的证书
对应APP的开发或发布证书,分别导出cert和key,命名为apns-dev-cert.p12
和apns-dev-key.p12
。
3、终端命令行运行下面的opnessl
命令,即可生存所需的pem
文件
$ openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12
$ openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12
$ openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem
$ cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem
写的很粗略,这位老外同学写的很详细,步骤备份此处,有不理解的同学可以留言!
PS:今天发现诡异的现象,之前制作development证书时,Enter PEM pass phrase:
,密码我输入4个1可以的,今天制作release的pem证书,输入4个1报错:
>unable to load Private Key 140735097526716:error:0906D06C:PEM
routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: ANY PRIVATE KEY
然后,我花费了很长时间,重新做cert和key原始的p12证书,反复核对,信息也无误。因为之前我用同样的步骤已经做成一个app的push证书。
所以我继续尝试,最后我再上面键入密码时候,输入6个1,就没问题了。我勒个去,看来是因为我对openssl
命令还不甚了解吧。
希望对看到的同学有帮助,也可能是我遇到的特例,不过成功了,心里还是有点安慰。 :)