熟悉黑莓开发的同学们都知道发布黑莓应用需要对所开发的黑莓应用进行签名,之前的BlackBerry 7之前的应用需要签名,PlayBook应用也需要签名,现在的BB10应用同样也需要签名。
有关应用签名申请和安装的文章写了好多篇了,现在为了BB10 Casacdes开发者的方便,再专门写一篇BB10 Cascades应用签名申请和安装的过程。
首先明确一点,如果你只使用模拟器进行BB10开发是不需要申请安装签名的。如果你需要使用真机进行开发,或者需要发布你的应用,就需要申请安装应用签名了。
第一步是访问下面的地址申请应用签名:
https://www.blackberry.com/SignedKeys/codesigning.html
现在申请签名比以前方便多了,需要填写的东西很少,网页显示如下:
在申请表中勾选你需要的签名,现在是申请BB10的签名,所以选:
For BlackBerry PlayBook OS and BlackBerry 10 and Higher
如果你同时希望申请BB7之前的应用签名,也可以同时选中下面的选择项
For BlackBerry OS 7.x and Lower
接着是申请人姓名,公司名,邮件地址和国家。
其中邮件地址很重要,申请成功后签名以邮件形式发送到你填写的邮箱地址上,国家好像没有什么关系,担心屏蔽的话可以选择Hong Kong.
接着是PIN,注意这个PIN不是机器的PIN,而是你自己设置的一个类似于密码的东西,设置一个6到10位的PIN,记住它,一定记住,一会安装的时候要使用。
然后同意协议,一步一步往下就可以成功申请签名了。申请之后签名会在两个小时内发送到你填写的邮箱中。
邮件会有两封,各带一个附件,名为
client-RDK-xxxxxxx.csj
client-PBDT-xxxxxx.csj
将这两个文件下载到本地就可以开始安装签名了。
打开BB10 Cascades 开发环境,选择“Windows -> Preference”打开配置界面,在该界面中选择“BlackBerry -> Signing”,就会看到下面的界面:
点击“register”按钮开始安装,注意这时需要连接到网络上,应用安装过程需要连接到RIM的服务器区注册上。点击按钮后会出现以下界面:
在RDK CSJ Path一栏中选择刚下载的“client-RDK-xxxxxxx.csj”文件
在PBDT CSJ Path 一栏中选择刚下载的“client-PBDT-xxxxxx.csj”文件
在CSJ PIN一栏中填写你申请签名时填写的PIN码
在CSK Password和Confirm CSK Password中填写你希望为这个签名文件设置的密码,以后每次签名都需要输入的,设置后记好这个密码。
最后点击OK开始安装签名。
在安装过程中系统会要求你创建一个证书,如果系统没有提示你创建证书,也可以手工点击“BlackBerry -> Signing”界面中的“Create certificate”按钮进行创建。
创建界面如下:
在Certificate Path中指定你希望保持证书的路径,或者使用系统缺省值。
在Author一栏中填写你的名字或者公司名字
在Keystore Password和Confirm Keystore Password中设置你需要为证书文件设置的密码,这个密码在以后需要对应用进行签名是也需要输入,所以也需要好好记住。
以上步骤完成后就成功安装了应用签名,可以创建调试令牌或者是对应用进行签名了。
最后提醒大家在安装完签名后点击“BlackBerry -> Signing”界面中的“Backup”按钮对应用签名进行备份,然后好好保存该备份文件。如果没有做好备份工作,以后机器出现问题需要重新安装签名时就麻烦了,因为上面使用的csj文件只能使用一次,注册完就不能再使用了。这时你就只能重新申请一个签名了,到时对应用维护,升级都会带来很大麻烦。
今天一早6点50分左右,有网友致电新浪科技报料称方正宽带首页http://www.bnchina.com被黑。
新浪科技随即打开方正宽带首页,发现情况果然如报料者所言,页面显示一条“腾龙”,表明网站被黑。值得注意的是该黑客还留下了自己的QQ号和网名“风吹夜落”,并且在网页低部甩下了走马灯形式的滚动留言。
以下是黑客留言:“做为大名鼎鼎的方正宽带,其网络与编程之技术乃佼佼者也!今日之见,可见一斑。中国之大,可见汝之网络技术甚差,大失所望。今晚生于第2次进入贵站游玩,不想还是敞开门待吾之~希望贵公司整顿员工水平及素质观念,技术极其差之。By风吹夜落 QQ:32068601”。
另外,新浪科技在查询该网站的相关情况时,发现同是出自该网站的页面“了解方宽”“业务介绍”等却可以完好显示,这说明被黑的只是方宽首页。
新浪科技按该黑客留下的QQ号,通过查看用户信息显示,其人QQ呢称为“风吹夜落”,性别:男,真实姓名:Mao,省份:北京,职业:网络安全,毕业院校:Engineer,个人主页:http://www.winmao.com,该用户信息还显示了其邮箱。
新浪科技曾试图通过QQ号联系上“风吹夜落”这个自称的始作俑者了解相关情况,但QQ却显示对方不在线;同时新浪科技也试图联系上方正宽带问其是否知道网站首页被黑的情况,但由于时间是早晨刚过7点,方正宽带电话并无人接听。
据公开资料显示,北京北大方正宽带网络科技有限公司隶属北大方正集团,注册资金6000万元,是首批获得宽带 驻地网试验许可证、国家信息产业部的电信与信息服务业经营许可证和文化部的网络文化经营许可证的高科技企业。
该公司已在全国建立了天津、长春、大连、 苏州、江门5个分支机构,并在十多个大中城市、数百个社区开展了宽带接入、内容提供及运营服务。
最新消息:到9点左右,页面恢复正常,方正宽带的客服人员表示,此次事件并不影响用户。
据方正宽带的人员称,此次被黑的是只是官方网站服务器的首页,网站的各个栏目以及数据库内容并没有受到影响,使用方正宽带的用户也不会受到波及,他说,这是方正宽带首次遇到网站被黑。他介绍说,方正宽带网站服务器的系统为linux,目前公司正在寻找和解决问题。
Objective-C是IOS开发的基本语言,用过OC的同学都知道,OC的方法名很长,但是表达的意思非常明确,估计设计者也是站在见名知意的角度上去考虑,这种语法风格特别适合母语是英语的人学习,上手会很快,因为写程序就和用英语说话一样。但是对与母语非英语的人来说,过长的方法名在理解上和记忆上就有点吃力了,相信开发IOS的朋友都有一种感觉,当要使用一个方法时,一下记不住方法名,然后去网上搜或查官方文档,但是熟悉之后,还是觉得OC在表达程序意思上还是有不错的地方的。
好了,言归正传,今天主要是利用OC中的类别来扩展NSString的方法,使其使用上比较接近Java的方法,由于我之前做过J2EE和Android,所以对Java是最熟悉的,面对OC中NSString过长的方法名,我自己为它扩展了一个类别,用Java中String的方法名来代替OC中NSString中常用方法,关于什么是类别,简单的说就是在保持原有类不变的情况下,为其增加扩展的方法,这样的目的是可以在保持源文件不变的情况下,动态为其扩展功能。下面来看看具体实现:
首先说明的是,这里没有实现所有Java中String类的方法,只实现了一些常用的,比如equals、subString、split等等...
新建一个文件,选择类别,然后输入类别的名字以及所扩展的类:
输入类别扩展名:
上代码:(需要使用的直接新建一个类别,然后将h和m文件代码考到新建类别中即可)
NSString+NSStringForJava.h
// // NSString+NSStringForJava.h // NSStringCategory // // Created by Ryan Tang on 12-10-17. // Copyright (c) 2012年 Ericsson Labs. All rights reserved. // #import <Foundation/Foundation.h> @interface NSString (NSStringForJava) //对比两个字符串内容是否一致 - (BOOL) equals:(NSString*) string; //判断字符串是否以指定的前缀开头 - (BOOL) startsWith:(NSString*)prefix; //判断字符串是否以指定的后缀结束 - (BOOL) endsWith:(NSString*)suffix; //转换成大写 - (NSString *) toLowerCase; //转换成小写 - (NSString *) toUpperCase; //截取字符串前后空格 - (NSString *) trim; //用指定分隔符将字符串分割成数组 - (NSArray *) split:(NSString*) separator; //用指定字符串替换原字符串 - (NSString *) replaceAll:(NSString*)oldStr with:(NSString*)newStr; //从指定的开始位置和结束位置开始截取字符串 - (NSString *) substringFromIndex:(int)begin toIndex:(int)end; @end
// // NSString+NSStringForJava.m // NSStringCategory // // Created by Ryan Tang on 12-10-17. // Copyright (c) 2012年 Ericsson Labs. All rights reserved. // #import "NSString+NSStringForJava.h" @implementation NSString (NSStringForJava) //对比两个字符串内容是否一致 - (BOOL) equals:(NSString*) string { return [self isEqualToString:string]; } //判断字符串是否以指定的前缀开头 - (BOOL) startsWith:(NSString*)prefix { return [self hasPrefix:prefix]; } //判断字符串是否以指定的后缀结束 - (BOOL) endsWith:(NSString*)suffix { return [self hasSuffix:suffix]; } //转换成大写 - (NSString *) toLowerCase { return [self lowercaseString]; } //转换成小写 - (NSString *) toUpperCase { return [self uppercaseString]; } //截取字符串前后空格 - (NSString *) trim { return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; } //用指定分隔符将字符串分割成数组 - (NSArray *) split:(NSString*) separator { return [self componentsSeparatedByString:separator]; } //用指定字符串替换原字符串 - (NSString *) replaceAll:(NSString*)oldStr with:(NSString*)newStr { return [self stringByReplacingOccurrencesOfString:oldStr withString:newStr]; } //从指定的开始位置和结束位置开始截取字符串 - (NSString *) substringFromIndex:(int)begin toIndex:(int)end { if (end <= begin) { return @""; } NSRange range = NSMakeRange(begin, end - begin); return [self substringWithRange:range]; } @end
使用方法:
NSLog(@"Test equals:%@",[@"aaa" equals:@"aaa"] ? @"YES" : @"NO"); NSLog(@"Test startWith:%@",[@"abc" startsWith:@"a"] ? @"YES":@"NO"); NSLog(@"Test endWith:%@",[@"abc" endsWith:@"c"] ? @"YES":@"NO"); NSLog(@"Test toLowerCase:%@",[@"ABC" toLowerCase]); NSLog(@"Test toUpperCase:%@",[@"abc" toUpperCase]); NSLog(@"Test trim:%@",[@" abc " trim]); NSLog(@"Test replaceAll:%@",[@"abcd" replaceAll:@"bc" with:@"cd"]); NSLog(@"Test subString:%@",[@"abcdef" substringFromIndex:1 toIndex:4]); NSArray *strArgs = [@"a|b|c" split:@"|"]; NSLog(@"Test split%d",[strArgs count]);
输出结果:
对Android&IOS感兴趣的朋友可以加入我们的讨论QQ群,在这里,我们只讨论干货:220223507
欢迎关注我的新浪微博和我交流:@唐韧_Ryan