IOS开发基础知识--碎片49
1:iOS项目配置文件info.plist文件解析
Localization native development region本地化 Executable file可执行文件路径 Bundle identifier应用的唯一标识 InfoDictionary version plist文件的版本号 Bundle name安装的时候创建的文件夹的名称 Bundle display name程序安装到手机上的时候,桌面的显示名称 Bundle versions string, short iTunes上展示的版本号 Bundle version上传到APP Sore需要用的版本号 Application requires iPhone environment应用运行的环境 Launch screen interface file base name启动界面的配置 Main storyboard file base name主storyboard Required device capabilities cup的架构 Supported interface orientations横竖屏的支持 View controller-based status bar appearance是否取消控制器管理状态栏
2:iOS最新的权限设置
<!-- 相册 -->
<key>NSPhotoLibraryUsageDescription</key>
<string>App需要您的同意,才能访问相册</string>
<!-- 相机 -->
<key>NSCameraUsageDescription</key>
<string>App需要您的同意,才能访问相机</string>
<!-- 麦克风 -->
<key>NSMicrophoneUsageDescription</key>
<string>App需要您的同意,才能访问麦克风</string>
<!-- 位置 -->
<key>NSLocationUsageDescription</key>
<string>App需要您的同意,才能访问位置</string>
<!-- 在使用期间访问位置 -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>App需要您的同意,才能在使用期间访问位置</string>
<!-- 始终访问位置 -->
<key>NSLocationAlwaysUsageDescription</key>
<string>App需要您的同意,才能始终访问位置</string>
<!-- 日历 -->
<key>NSCalendarsUsageDescription</key>
<string>App需要您的同意,才能访问日历</string>
<!-- 提醒事项 -->
<key>NSRemindersUsageDescription</key>
<string>App需要您的同意,才能访问提醒事项</string>
<!-- 运动与健身 -->
<key>NSMotionUsageDescription</key> <string>App需要您的同意,才能访问运动与健身</string>
<!-- 健康更新 -->
<key>NSHealthUpdateUsageDescription</key>
<string>App需要您的同意,才能访问健康更新 </string>
<!-- 健康分享 -->
<key>NSHealthShareUsageDescription</key>
<string>App需要您的同意,才能访问健康分享</string>
<!-- 蓝牙 -->
<key>NSBluetoothPeripheralUsageDescription</key>
<string>App需要您的同意,才能访问蓝牙</string>
<!-- 媒体资料库 -->
<key>NSAppleMusicUsageDescription</key>
<string>App需要您的同意,才能访问媒体资料库</string>
3:关于openURL
苹果在iOS 2中引入了openURL:方法来进行APP间的跳转。不过在iOS 9中,相关的canOpenURL在iOS 10中,苹果已弃用了openURL,转而用openURL:options:completionHandler:替代,IOS10 已经无法打开系统设置等,所以下面的方法只有在其它跳转可以用,并且要用到后面的方法必须在XCODE8上面运行;
旧:
- (BOOL)openURL:(NSURL*)url
新:
- (void)openURL:(NSURL*)url options:(NSDictionary *)options
completionHandler:(void (^ __nullable)(BOOL success))completion
兼容方法:
- (void)openScheme:(NSString *)scheme {
UIApplication *application = [UIApplication sharedApplication];
NSURL *URL = [NSURL URLWithString:scheme];
if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) {
[application openURL:URL options:@{}
completionHandler:^(BOOL success) {
NSLog(@"Open %@: %d",scheme,success);
}];
} else {
BOOL success = [application openURL:URL];
NSLog(@"Open %@: %d",scheme,success);
}
}
4:关于XCode 7的下载地址
(需要登录苹果开发者帐号) 7.2.:https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_7.2.1/Xcode_7.2.1.dmg 7.2 : https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_7.2/Xcode_7.2.dmg 7.1.: https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_7.1.1/Xcode_7.1.1.dmg 7.1 : https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_7.1/Xcode_7.1.dmg 7.0 : https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_7/Xcode_7.dmg
5:iCloud相关知识点
iCloud是IOS5以后一个比较重要的内容;每个Apple ID用户都有一个免费的iCloud账户,但是用户可能禁用某个设备的iCloud。iCloud支持两种应用存储分别为:
1.1 document storage:存储用户文档和应用数据到用户的iCloud账户;使用Document Storage来管理应用的关键数据。与应用直接相关的文件和数据,总是应该使用Document Storage。如用户文档、私有的app数据文件、以及应用或用户生成的数据文件;只受用户iCloud账户的空间限制;设备端发生变化时,iCloud总是会拉取文件元数据和数据;设备总是会拉取文件元数据,但是直到应用试图使用文件时才会拉取文件数据;大部分我们都是结合这种进行存储;
1.2 key-value data storage:分享小量的非关键配置数据到应用的多个实例;参数或其它配置数据,如果需要在多个app实例之间共享,并且不是关键数据,就可以使用key-vlaue storage。只能存储property list数据,并且容量有限,限制为64KB;定期在设备和iCloud之间传输key-value数据;
关于document storage存储文件的实例git上已经有一个不错的例子,可以实现上传文件 多台设备共享的效果;地址:https://github.com/iRareMedia/iCloudDocumentSync
如果想查看iCloud上保存的这些文件可以安装一个软件:http://cookingrobot.de/posts/plain-cloud
iCloud 的所有文件同步操作都是用过驻留在系统的一个进程进行的。 也就是说你的 App 所对应的 iCloud 目录,除了你的 App 进程会操作它, iCloud Daemon 也会操作它。在 iOS 系统中, iCloud Daemon 因为手机耗电以及网络流量等考虑, 是不会自动下载其他设备新添加到容器中的文件的;会将这些新文件的元信息(MetaData)传输过来,比如文件名,文件尺寸,修改时间等等。也就是说我们需要查询文件元信息的列表,就可以得到和服务端同步的文件列表了。 只有你请求打开某个文件的时候才会去下载它的内容。但在 Mac 笔记本上,那么其他设备只要向 iCloud 容器中添加新的文件,你的 iCloud Daemon 进程就会自动的将它们下载下来。
iCloud 最简单的存在形式其实就是一个特定的文件夹,它位于 iOS 设备的/private/var/mobile/Library/Mobile Documents/目录下。该目录中保存有各应用共享至云端的所有应用数据。 应用程序对该目录有部分读写权限,该权限是开发人员特有的。对于密码钥匙串,开发人员可以在各应用间共享云端数据。比如,X 公司开发的所有应用可以共享、查看以及更新相同的文件集。你无法共享你开发者账户以外的数据,所以我的应用无法看到 X 公司的文件,反之亦然。 iOS 系统监控着 Mobile Documents 文件夹。当文件被更改,设备会自动的将这些更改上传至云端。从而这些更改就可以传输至同一账号绑定的所有设备上。这些操作都由本地操作系统服务进行处理,应用程序不直接参与其中。 相反,应用程序通过订阅不同种类的通知来让应用知道最新发生的更改。然后,它们可以通过对比本地和 iCloud 端的数据差异从而来处理数据版本冲突。 至于开发者如何做就是他们的事了。他们可以选择“最近更改有效”策略。或者他们可以结合一些其他方式的更改。应用程序的职责就在于确保不同硬件设备单元上的数据保持一致,同时也需要可用的网络连接来处理这种一致性。 当用户失去网络连接的时候,麻烦事就来了。比如,你也许在没有网络连接的航班上编辑待办事项,与此同时你的伴侣在他或她所在的城市正在更新同一份待办事项。开发者们为此工作了数月,研究如何在同时接受双方修改的前提下结合这些更改并更新目标文件的策略。 最后,iCloud API 接口方式或许会很少。它实际上就只是一个异地同步的存储文件夹。正是因为可以在多台的苹果设备上对iCloud的同一个文件进行操作,所以会导致冲突,解决这种冲突也是很麻烦;
WWDC 2015 中提到,CloudKit 已经不仅可以在 iOS 和 OS X 上使用,可以在你的网站上集成CloudKit JS,以便 iCloud 用户可以在浏览器中也能使用相应的功能,或者是使用CloudKit web service对 CloudKit 服务端直接进行 HTTP 请求。这方面可能得其它平台进行验证;
6:Homebrew简介及安装
Homebrew是神马
linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的两大发行版本都自带了解决方案,Red hat有yum,Ubuntu有apt-get
神马,你用mac os,不好意Mac os木有类似的东东,泪奔中几经折腾总算找到了第三方支持:Homebrew,Homebrew简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,可以说Homebrew就是mac下的apt-get、yum神器
Homebrew安装
Homebrew的安装非常简单,打开终端复制、粘贴以下命令,回车,搞定(请放心使用,原汁原味的官方安装方法搬运)
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
ps:不知道为什么执行这个命令有时会返回400,估计可能被墙了,过几分钟重试下一般就ok了,有图有真相
Homebrew使用
Homebrew使用没啥好说的了,常用的
搜索软件:brew search 软件名,如brew search wget
安装软件:brew install 软件名,如brew install wget
卸载软件:brew remove 软件名,如brew remove wget
7:在MBProgressHUD增加一个动作效果
UIWindow *window = [UIApplication sharedApplication].keyWindow;
UIImageView *imageV = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 60, 60)];
UIImage *image1 = [UIImage imageNamed:@"bls_loading_1"];
UIImage *image2 = [UIImage imageNamed:@"bls_loading_2"];
imageV.animationImages = @[image1,image2];
imageV.animationDuration = 0.5;
[imageV startAnimating];
self.MBHUD = [MBProgressHUD showHUDAddedTo:window animated:YES];
self.MBHUD.mode = MBProgressHUDModeCustomView;
self.MBHUD.customView = imageV;
self.MBHUD.labelText = string;
self.MBHUD.color = [UIColor colorWithWhite:1 alpha:0.8];
self.MBHUD.labelColor = HEXCOLOR(0xffae00);
self.MBHUD.labelFont = CHINESE_SYSTEM(14);
self.MBHUD.userInteractionEnabled = NO;
self.MBHUD.square = YES;
8:BabyBluetooth获得MAC地址
//设置扫描到设备的委托
[self.baby setBlockOnDiscoverToPeripherals:^(CBCentralManager *central, CBPeripheral *peripheral, NSDictionary *advertisementData, NSNumber *RSSI) {
MPStrongSelf(self); NSData *data = [advertisementData objectForKey:@"kCBAdvDataManufacturerData"];
NSString *mac = [self convertToNSStringWithNSData:data];
mac = [mac stringByReplacingOccurrencesOfString:@" " withString:@""]; [self.babyMutableArray addObject:peripheral];
[self.badyTableView reloadData];
}];
- (NSString *)convertToNSStringWithNSData:(NSData *)data
{
NSMutableString *strTemp = [NSMutableString stringWithCapacity:[data length]*2]; const unsigned char *szBuffer = [data bytes]; for (NSInteger i=0; i < [data length]; ++i) { [strTemp appendFormat:@"%02lx",(unsigned long)szBuffer[i]]; } return strTemp;
}
IOS开发基础知识--碎片49的更多相关文章
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
- IOS开发基础知识--碎片33
1:AFNetworking状态栏网络请求效果 直接在AppDelegate里面didFinishLaunchingWithOptions进行设置 [[AFNetworkActivityIndicat ...
- IOS开发基础知识--碎片42
1:报thread 1:exc_bad_access(code=1,address=0x70********) 闪退 这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象( ...
- IOS开发基础知识--碎片50
1:Masonry 2个或2个以上的控件等间隔排序 /** * 多个控件固定间隔的等间隔排列,变化的是控件的长度或者宽度值 * * @param axisType 轴线方向 * @param fi ...
- IOS开发基础知识--碎片3
十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice cur ...
- IOS开发基础知识--碎片11
1:AFNetwork判断网络状态 #import “AFNetworkActivityIndicatorManager.h" - (BOOL)application:(UIApplicat ...
- IOS开发基础知识--碎片14
1:ZIP文件压缩跟解压,使用ZipArchive 创建/添加一个zip包 ZipArchive* zipFile = [[ZipArchive alloc] init]; //次数得zipfilen ...
- IOS开发基础知识--碎片16
1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断对象类型 -(BOO ...
- IOS开发基础知识--碎片19
1:键盘事件顺序 UIKeyboardWillShowNotification // 键盘显示之前 UIKeyboardDidShowNotification // 键盘显示完成后 UIKeyboar ...
随机推荐
- ECMAScript 6 扫盲
ECMAScript 6 目前基本成为业界标准,它的普及速度比 ES5 要快很多,主要原因是现代浏览器对 ES6 的支持相当迅速,尤其是 Chrome 和 Firefox 浏览器,已经支持 ES6 中 ...
- 匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置
0x00 前言: 匹夫在日常和别人交流的时候,常常会发现一旦讨论涉及到“类型”,话题的热度就会立马升温,因为很多似是而非.或者片面的概念常常被人们当做是全面和正确的答案.加之最近在园子看到有人翻译的& ...
- Linux 系统中发博客必备的五大图片处理神器
发博客时,总免不了要用图片说话.经过长时间的磨合,在 Linux 桌面系统下有几款图片处理软件我已经用得比较顺手了.这几款软件在 Linux 世界使用广泛,各个 Linux 发行版的软件仓库中都有自带 ...
- C#经典笔试题-获取字符串中相同的字符以及其个数
public Dictionary<char,int> GetStrSameAs(string str){ //将字符串转换成一个字符数组. char[] charArray=str.To ...
- HTML5移动开发学习笔记之Canvas基础
1.第一个Canvas程序 看的是HTML5移动开发即学即用这本书,首先学习Canvas基础,废话不多说,直接看第一个例子. 效果图为: 代码如下: <!DOCTYPE html> < ...
- SQL Server 进制转换函数
一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下 ...
- 【Win 10应用开发】响应系统回退键的导航事件
按例,老周今天要讲一个故事,这个故事之前老周在微博上分享过.大伙知道在8.1的时候,有一个扩展类库——NotificationExtensions,可以真TMD轻松生成通知XML模板,其实,这个类库也 ...
- 微软Power BI技术文章与资源目录
下面是本博客原创的微软Power BI技术相关文章,对于部分转载文章和资源,会注明出处. 本博客将发布基于微软Power BI相关的基础入门文章,视频教程等资源,敬请关注. 个人建立的Power BI ...
- SQL Server-外部联接基础回顾(十三)
前言 本节我们继续讲讲联接类型中的外部联接,本节之后我们将讲述有关联接性能以及更深入的知识,简短内容,深入的理解,Always to review the basics. 外部联接 外部联接又分为左外 ...
- [.Net] 手把手带你将自己打造的类库丢到 NuGet 上
手把手带你将自己打造的类库丢到 NuGet 上 序 我们习惯了对项目右键点击“引用”,选择“管理NuGet 程序包”来下载第三方的类库,可曾想过有一天将自己的打造的类库放到 NuGet 上,让第三者下 ...