Archive

Archive for the ‘语言编程’ Category

iOS开发之APP进入后台禁止自动截图

August 26th, 2014 Comments off

iOS在7.0以后,APP进入后台后会把当前APP的Window状态记录,并对Window进行截图操作,会在APP的Sandbox的Library\Caches\Snapshots\xxxx.xxx.xxx文件夹中增加以下几个文件。这有可能会造成用户敏感数据的泄密。
UIApplicationAutomaticSnapshotDefault-LandscapeLeft.png
UIApplicationAutomaticSnapshotDefault-LandscapeRight.png
UIApplicationAutomaticSnapshotDefault-LandscapeLeft@2x.png
UIApplicationAutomaticSnapshotDefault-LandscapeRight@2x.png

Read more…

iOS开发之Objective-c的AES加密和解密算法的实现

August 26th, 2014 6 comments

高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法。
以下实现代码中分别为NSData和NSString增加了一个Category。使用时直接调用即可。

需要注意的是,AES并不能作为HASH算法,加密并解密后的结果,并不一定与原文相同,使用时请注意进行结果验算。例如解密原文的长度,格式规则等。
NG实例

原文:170987350
密码:170

Read more…

iOS开发之Objective-c的SHA224/SHA256/SHA384/SHA512加密算法的实现

August 26th, 2014 No comments

之前在博文中实现的SHA1的安全性已经满足不了用户需求,今天把SHA224/SHA256/SHA384/SHA512的实现一并附上。
SHA即Secure Hash Algorithm(安全散列算法)有多种不同位数的实现,常见的有SHA224/SHA256/SHA384/SHA512等

SHA224:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- (NSString*) sha224
{
    const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:self.length];
 
    uint8_t digest[CC_SHA224_DIGEST_LENGTH];
 
    CC_SHA224(data.bytes, data.length, digest);
 
    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA224_DIGEST_LENGTH * 2];
 
    for(int i = 0; i < CC_SHA224_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];
 
    return output;
}

Read more…

[iOS]UIWebView禁止前进和后退

May 6th, 2014 No comments

使用HTML5+Native方式开发APP时,需要禁用掉UIWebView前进和后退功能,可以使用以下三种方式实现,三种方法同时使用亦可。
1.APP内使用native代码修改UIWebView功能禁止。
直接覆盖UIWebView返回判断功能,前进亦可在此处禁止

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@interface UIWebView(no_back_forward)
- (BOOL) canGoBack;
- (BOOL) canGoForward;
@end
 
@implementation UIWebView(no_back_forward)
- (BOOL) canGoBack
{ 
    return NO;
}
- (BOOL) canGoForward
{
    return NO;
}
@end

Read more…

Categories: 语言编程 Tags: , ,

[iOS]UILabel取消自动Trim空格和换行等空白字符

April 16th, 2014 No comments

iOS7.0以后的UILabel会自动将Text行尾的空白字符全部去除,除了常见的半角空格(\0x20)和制表符(\t)之外,全角空格(\u3000)也被计算在内,甚至连多余的换行符(\r,\n)也被自动去除了。这一点虽然方便直接将控件赋值和无需取值后再trim,但是太过智能化了之后,往往不能满足一些本可以简单实现的需求。

Read more…

Categories: 语言编程 Tags: ,

[Android]使用Emma进行单体测试代码覆盖率分析

April 16th, 2014 3 comments

使用Eclipse或Google的ADT Bundle集成开发环境进行android单体测试时,受开发工具的局限,目前暂时无法直接使用常规的插件(例如:eclemma,Clover Eclipse Plugin等)来获取单体测试代码覆盖率。一般来说使用以下方法来实现代码覆盖率的查看。

方法1:改变测试代码继承父类为TestCase而非AndroidTestCase。这种方法只能解决不依赖于Android SDK源代码的单体测试。
方法2:使用Android SDK中集成的Emma功能,使用ant进行命令行编译与单体测试。通过以下脚本实现。
这里假设Eclipse的项目名称为MyProject,文件路径如下
./ #项目主目录
./src #APP项目主目录
./test #APP测试项目主目录

Read more…

Categories: 语言编程 Tags: , , ,

[iOS]CoreGraph在64位模式下与NSString drawInRect冲突

April 15th, 2014 No comments

iOS SDK支持64bit后,大部分代码可以直接无缝转换并通过编译,但是这些代码在运行时可能会有所差异,所以开发时需要特别注意,Cocoa-Charts在开发过程中就发现了这类问题。
问题现象:
CoreGraph绘图方法与NSString的drawInRect方法在64Bit下存在着冲突,64Bit下调用drawInRect之后会导致CGContext中的path被清空从而使CGContextStrokePath不进行任何绘图操作,而32Bit下没有任何问题。

Read more…