我们从编写到发布应用会经历3个阶段:模拟器上运行调试、设备上运行调试和发布编译,苹果为了防止非法设备和非开发人员调试和发布应用,使用配置概要文件(Provisioning Profiles)控制在设备上运行调试和发布编译阶段,配置概要文件分为两种:开发配置概要文件和发布配置概要文件
1、创建发布配置概要文件
创建过程是先登录iOS开发中心的配置门户网站(iOS Provisioning Portal),通过左边的导航菜单Provisioning进入。选择Distribution标签就是管理发布配置概要文件的
点击New Profile可以进入创建页面。其中Distribution Method有两个选项:App Store和Ad Hoc。其中Ad Hoc是生成与设备关联的应用测试版本,供测试人员测试,因此它还属于测试。App Store是为发布创建的。
在Distribution Method中勾选App Store,Profile Name输入hello,在App ID中选择我们创建的hello。输入完成可以点击Submit提交表单。我们会看到添加的hello,刷新一些页面会看到hello处于活动状态,我们可以点击download按钮下载发布配置概要文件到本地。
2、发布编译
找到下载配置概要文件,文件名为“hello.mobileprovision”,双击会进入Xcode设备管理工具打开该文件,在这里可以管理配置概要文件。
然后使用Xcode打开需要编译的工程或工作空间,选择工程的TARGETS,选择Build Settings→Code Signing→ Code Signing Identity,这是选择代码签名标识(Code Signing Identity),把Release的代码签名标识选择为hello。
然后选择工具栏的Edit Scheme,打开编辑Scheme的对话框,选择左小角的“Duplicate Scheme”按钮,复制一份新的Scheme为HelloWorld 2。
复制完成后,在左上角的选择下拉框Scheme中选择HelloWorld2,然后在左边列表中Run HelloWorld.app,在右边选择Info标签,在Build Configuration中的下拉框中Release。操作点击顺序编号①~④所示。
配置完成之后我们选择Scheme HelloWorld 2中的iOS Deviec。选择好Scheme后选择菜单Product→Building for→Running,然后就可以编译了。
注意编译结果,如果有错误或警告必须要解决,忽略警告往往也会导致发布的失败,因此我们只有全部解决这些问题之后才能发布应用。
在发布编译成功后打开显示日志导航面板,我们会看到刚刚执行的Build HelloWorld 2 Scheme已经成功了
From http://iosbook1.com/?p=269
一、键盘风格
UIKit框架支持8种风格键盘。
用法用例:
textView.keyboardtype = UIKeyboardTypeNumberPad;
二、键盘外观
用法用例:
textView.keyboardAppearance=UIKeyboardAppearanceDefault;
三、回车键
用法用例:
textView.returnKeyType=UIReturnKeyGo;
四、自动大写
用法用例:
textField.autocapitalizationType = UITextAutocapitalizationTypeWords;
五、自动更正
用法用例:
textField.autocorrectionType = UITextAutocorrectionTypeYes;
六、安全文本输入
textView.secureTextEntry=YES;
开启安全输入主要是用于密码或一些私人数据的输入,此时会禁用自动更正和自此缓存。
统计字符和响应RETURN键
统计字符:
1、UITextView
- (void)textViewDidChange:(UITextView *)textView { int count = [textView.text length]; //这里的count就是字符个数了}
2、UITextField
方法一:
自己先为UITextField的Editing Changed事件添加一个响应方法
-(IBAction)valuechange//m_TextField是UITextField的一个IBOutlet{ int count = [m_TextField.text length]; //count就是当前的字符个数 //下边是将字符限制在140以内 if ([m_TextField.text length]>140) { [m_TextField setText:[m_TextField.text substringToIndex:140]];//多出140时,只取前140个字符 } }
方法二:
在代理方法:- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string,判断range.length的值来判断输入的是回格还是其它字符
响应Return键:
1、UITextView
//代理方法
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if (1 == range.length) {//按下回格键 return YES; } if ([text isEqualToString:@"\n"]) {//按下return键 //这里隐藏键盘,不做任何处理 [textView resignFirstResponder]; return NO; }else { if ([textView.text length] < 140) {//判断字符个数 return YES; } } return NO; }
2、UITextField
这个直接有代理方法哈
- (BOOL)textFieldShouldReturn:(UITextField *)textField
UITextField进入编辑状态 获得焦点 becomeFirstResponder
关闭键盘 resignFirstResponder
http://blog.sina.com.cn/s/blog_7018d3820101djut.html
最近项目中服务器方返回了zip文件类型的文件,在网上搜了好多资料做成一个Demo,这里用来详解一下。
ZipArchive类来源于网络。还望多多交流。
1、首先添加libz.dylib框架
2、前往http://code.google.com/p/ziparchive/downloads/list下载所需要的第三方文件,并将其导入到项目中。
3、代码:
ZipArchive* zip = [[ZipArchive alloc] init];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dcoumentpath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
//获取解压缩文件
NSString* l_zipfile = [dcoumentpath stringByAppendingString:[NSString stringWithFormat:@"/%@",ZipName]] ;
//获取路径 aaa.zip 压缩包解压缩后会出现 aaa 文件夹 去aaa文件夹中取文档和子文件夹里面的文档
NSArray *arr = [ZipName componentsSeparatedByString:@"."];
NSString* unzipto = [dcoumentpath stringByAppendingString:[NSString stringWithFormat:@"/%@",[arr objectAtIndex:0]]] ;
NSString *str = [[NSString alloc] init];
str = unzipto;
if( [zip UnzipOpenFile:l_zipfile] ) {
BOOL ret = [zip UnzipFileTo:unzipto overWrite:YES];
if( NO==ret ) { }
[zip UnzipCloseFile];
}
[zip release];
//解压缩后或多处一个 __MACOSX 文件夹 做删除操作
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *strpath = [unzipto stringByAppendingFormat:@"/__MACOSX"];
[fileManager removeItemAtPath:strpath error:nil];
NSFileManager *myFileManager=[NSFileManager defaultManager];
NSDirectoryEnumerator *myDirectoryEnumerator = [myFileManager enumeratorAtPath:unzipto];
//列举目录内容
while((unzipto=[myDirectoryEnumerator nextObject])!=nil)
{
NSLog(@"%@",unzipto);
//获取子文件夹路径
NSString *str_path = [str stringByAppendingFormat:@"/%@",unzipto];
if ([self isPathorFile:str_path]) {
NSLog(@"目录");
}else{
NSLog(@"文件");
}
}
[str release];
/**
* @brief 判断一个路径是文件还是文件夹
*
* @param path 路径
*
* @return 返回BOOL值
*/
-(BOOL)isPathorFile:(NSString *)path
{
BOOL isDir;
NSString *documentsDir = path;
if ([[NSFileManager defaultManager] fileExistsAtPath:documentsDir isDirectory:&isDir] && isDir) {
NSLog(@"directory");
isDir = YES;
}else{
NSLog(@"file");
isDir = NO;
}
return isDir;
}
Demo下载地址:http://download.csdn.net/detail/zgcrichard/6234705。