ios开发

IOS开发环境更换后重新制作Provisioning Profile证书详解

╄→гoц情女王★ 提交于 2020-03-22 05:11:17
新换了台Macbook,又折腾了一遍Provisioning Profile证书,苹果的证书繁锁复杂,每次制作都相当麻烦,而且Provisioning Profile证书是与设备绑定的,所以更换开发环境后需要重新制作。 Provisioning Profile证书这个东西是很有苹果特色的一个东西,一般称之为PP证书,该证书将AppID、开发者证书和设备绑定到一起。 删除原有Provisioning Profile: 如果原有Provisioning Profile证书在其他设备还有用,可忽略此步。 不能不吐槽XCode之难用,各种常用功能隐藏之深,差点让我去目录下手动删除。 1、点击Xcode; 2、选择菜单Preferences; 3、点击Accounts选项卡; 4、Apple IDs选择账号,点击View Details; 好了,把原有Provisioning Profile证书删除。 制作新的Provisioning Profile证书: 原有的开发者证书也快到期,我直接把原有的开发者证书Revoke了,所以从开发者证书开始。 1、开发者证书的制作:登陆到开发者中心,找到证书配置的版块,选择Certificates,点击右上角的加号: 发布证书和开发者证书需要操作两次,分别创建,开发者证书用于真机调试,发布证书用于提交到AppStore。 然后下一步,会提示创建CSR文件

iOS开发UI篇—Date Picker和UITool Bar控件简单介绍

时光总嘲笑我的痴心妄想 提交于 2020-03-22 04:22:27
iOS 开发 UI 篇 —Date Picker 和 UITool Bar 控件简单介绍 一、 Date Picker 控件 1.简单介绍: Date Picker显示时间的控件 有默认宽高,不用设置数据源和代理 如何改成中文的? (1)查看当前系统是否为中文的,把模拟器改成是中文的 (2)属性,locale选择地区 如果默认显示不符合需求。时间有四种模式可以设置,在model中进行设置 时间可以自定义(custom)。 设置最小时间和最大时间,超过就会自动回到最小时间。 最大的用途在于自定义键盘:弹出一个日期选择器出来,示例代码如下: 2.示例代码 1 #import "TXViewController.h" 2 3 4 5 @interface TXViewController () 6 7 /** 8 9 * 文本输入框 10 11 */ 12 13 @property (weak, nonatomic) IBOutlet UITextField *textfired; 14 15 16 17 @end 18 19 20 21 @implementation TXViewController 22 23 24 25 - (void)viewDidLoad 26 27 { 28 29 [super viewDidLoad]; 30 31 //添加一个时间选择器 32 33

iOS开发~CocoaPods使用详细说明

拥有回忆 提交于 2020-03-21 21:53:08
一、概要 iOS开发时,项目中会引用许多第三方库,CocoaPods( https://github.com/CocoaPods/CocoaPods )可以用来方便的统一管理这些第三方库。 二、安装 由于网上的教程基本都大同小异,但细节之处还不是很完善,所以借机会在这里补充下: 注:要使用CocoaPods,那就要下载安装它,而下载安装CocoaPods需要Ruby环境 1、Ruby环境搭建 当前安装环境为Mac mini 10.8.5。Mac OS本身自带Ruby,但还是更新一下保险,因为我第一次安装在没有更新Ruby的情况下就失败了。 a 查看下当前ruby版本:打开终端输入 ruby -v(确实安装了,不过用这个版本接下来工作失败了,所以更新下ruby) [objc] view plain copy print ? ritekiMac-mini:PodTest lucky$ ruby -v ruby 1 .8 .7 ( 2 0 1 2- 0 2- 0 8 patchlevel 3 5 8) [universal-darwin 1 2 .0] ritekiMac-mini:PodTest lucky$ b 更新ruby 终端输入如下命令(把Ruby镜像指向taobao,避免被墙,你懂得) gem sources --remove https://rubygems.org/

iOS日常开发常用组件

做~自己de王妃 提交于 2020-03-20 20:04:47
3 月,跳不动了?>>> 网络&数据 AFNetworking 常用的网络库 [ https://github.com/AFNetworking/AFNetworking ] FMDB SQLite的第三方库 [ https://github.com/ccgus/fmdb ] PINCache kv的数据缓存类库 https://github.com/pinterest/PINCache UICKeyChainStore Keychain操作库 [ https://github.com/kishikawakatsumi/UICKeyChainStore ] MIHCrypto 数据加密库 [ https://github.com/hohl/MIHCrypto ] Base64 Base64库 [ https://github.com/ekscrypto/Base64 ] 视图&动画 VCTransitionsLibrary 视图切换库 https://github.com/ColinEberhardt/VCTransitionsLibrary MBProgressHUD 提示框第三方库 https://github.com/jdg/MBProgressHUD SDWebImage 图片加载/缓存库 [ https://github.com/rs/SDWebImage ]

IOS开发之多线程NSThread

倾然丶 夕夏残阳落幕 提交于 2020-03-20 01:57:17
一、什么是多线程 NSThread是轻量级的多线程开发,使用并不复杂,但使用NSThread需要自己管理线程的生命周期,这篇文章主要讲NSThread的使用 了解进程与线程 1. 线程是CPU执行任务的基本单位,一个进程能有多个线程,但同时只能执行一个任务 2. 进程就是运行中的软件,是动态的 3. 一个操作系统可以对应多个进程,一个进程可以有多条线程,但至少有一个线程 4. 同一个进程内的线程共享进程里的资源 2. 主线程 1. 进程一启动就自动创建 2. 显示和刷新UI界面 3. 处理UI事件 3. 子线程 1. 处理耗时的操作 2. 子线程不能用来刷新UI NSThread常用方法 使用NSThread开辟线程的两种方式: 创建并手动开启线程 NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(compete) object:nil]; [thread start]; 创建并自动开启线程 [NSThread detachNewThreadSelector:@selector(compete) toTarget:self withObject:nil]; 判断当前进程是否是多线程 BOOL isMultiThread = [NSThread isMultiThreaded];

iOS开发UI篇—Date Picker和UITool Bar控件简单介绍

馋奶兔 提交于 2020-03-19 09:40:54
iOS开发UI篇—Date Picker和UITool Bar控件简单介绍 一、Date Picker控件 1.简单介绍: Date Picker显示时间的控件 有默认宽高,不用设置数据源和代理 如何改成中文的? (1)查看当前系统是否为中文的,把模拟器改成是中文的 (2)属性,locale选择地区 如果默认显示不符合需求。时间有四种模式可以设置,在model中进行设置 时间可以自定义(custom)。 设置最小时间和最大时间,超过就会自动回到最小时间。 最大的用途在于自定义键盘:弹出一个日期选择器出来,示例代码如下: 2.示例代码 1 // 2 // YYViewController.m 3 // datepicker 4 // 5 // Created by apple on 14-6-3. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYViewController.h" 10 11 @interface YYViewController () 12 /** 13 * 文本输入框 14 */ 15 @property (strong, nonatomic) IBOutlet UITextField *textfield; 16 17 @end 18 19

IOS开发之UIPickerView

二次信任 提交于 2020-03-19 04:13:32
前言: UIPickerView 是一个选择器控件, 它可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活。UIPickerView 直接继承了 UIView ,没有继承 UIControl ,因此,它不能像 UIControl 那样绑定事件处理方法, UIPickerView 的事件处理由其委托对象完成。 UIPickerView 控件常用的属性和方法如下: numberOfComponents: 获取UIPickerView指定列中包含的列表项的数量。该属性是一个只读属性。 showsSelectionIndicator: 该属性控制是否显示UIPickerView中的选中标记(以高亮背景作为选中标记)。 numberOfRowsInComponent: 获取UIPickerView包含的列数量。 rowSizeForComponent: 获取UIPickerView包含的指定列中列表项的大小。该方法返回一个CGSize对象。 selectRow:inComponent:animated:: 该方法设置选中该UIPickerView中指定列的特定列表项。最后一个参数控制是否使用动画。 selectedRowInComponent:: 该方法返回该UIPickerView指定列中被选中的列表项。 viewForRow

iOS开发之第三方框架Masonry

南楼画角 提交于 2020-03-18 19:10:26
3 月,跳不动了?>>> 第三方框架Masonry 该框架可以大大简化AutoLayout使用过程中对控件添加约束的代码。 框架地址: https://github.com/SnapKit/Masonry 使用步骤 添加Masonry文件夹的所有源代码到项目中 添加2个宏、导入主头文件 // 只要添加了这个宏,就不用带mas_前缀 #define MAS_SHORTHAND // 只要添加了这个宏,equalTo就等价于mas_equalTo #define MAS_SHORTHAND_GLOBALS // 这个头文件一定要放在上面两个宏的后面 #import "Masonry.h" mas_equalTo和equalTo的区别: 默认情况下,mas_equalTo有自动包装功能,比如自动将20包装为@20,equalTo没有自动包装功能,如果添加了下面的宏,那么mas_equalTo和equalTo就没有区别 #define MAS_SHORTHAND_GLOBALS 添加约束的方法 // 这个方法只会添加新的约束 [view makeConstraints:^(MASConstraintMaker *make) { }]; // 这个方法会将以前的所有约束删掉,添加新的约束 [view remakeConstraints:^(MASConstraintMaker *make)

iOS开发之深复制和浅复制

Deadly 提交于 2020-03-17 01:44:55
某厂面试归来,发现自己落伍了!>>> 非盈利无广告开发者专用网址导航:www.dev666.com 1 、概述 对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的 指针 ;深复制是直接拷贝 整个对象 内存到另一块内存中。 如下图: 再简单些说: 浅复制就是指针拷贝;深复制就是内容拷贝。 2 、集合的浅复制 (shallow copy) 集合的浅复制有非常多种方法。当你进行浅复制时,会向原始的集合发送retain消息,引用计数加1,同时指针被拷贝到新的集合。 现在让我们看三个浅复制的例子: NSArray *shallowCopyArray = [someArray copyWithZone:nil]; NSSet *shallowCopySet = [NSSet mutableCopyWithZone:nil]; NSDictionary *shallowCopyDict = [[NSDictionary alloc] initWithDictionary:someDictionary copyItems:NO]; 2 、集合的深复制 (deep copy) 集合的深复制有两种方法。 方法一: 可以用 initWithArray:copyItems: 将第二个参数设置为YES即可深复制,如 NSDictionary

iOS开发数据库篇—SQLite常用的函数

我的未来我决定 提交于 2020-03-16 08:10:31
一、简单说明 1.打开数据库 int sqlite3_open( const char *filename, // 数据库的文件路径 sqlite3 **ppDb // 数据库实例 ); 2.执行任何SQL语句 int sqlite3_exec( sqlite3*, // 一个打开的数据库实例 const char *sql, // 需要执行的SQL语句 int (*callback)(void*,int,char**,char**), // SQL语句执行完毕后的回调 void *, // 回调函数的第1个参数 char **errmsg // 错误信息 ); 3.检查SQL语句的合法性(查询前的准备) int sqlite3_prepare_v2( sqlite3 *db, // 数据库实例 const char *zSql, // 需要检查的SQL语句 int nByte, // SQL语句的最大字节长度 sqlite3_stmt **ppStmt, // sqlite3_stmt实例,用来获得数据库数据 const char **pzTail ); 4.查询一行数据 int sqlite3_step(sqlite3_stmt*); // 如果查询到一行数据,就会返回SQLITE_ROW 5.利用stmt获得某一字段的值(字段的下标从0开始) double sqlite3