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 ...
随机推荐
- 绿色版的Linux.NET——“Jws.Mono”(续)
在前一篇文章中,我们简略的介绍了jws.mono的安装使用,以及我们如何自己动手做一个jws.mono出来. 在文章发表之后的几天里,我一直觉得有点不妥之处,直到后来猛然的意识到:我们自己动手做的jw ...
- .Net中的AOP系列之《单元测试切面》
返回<.Net中的AOP>系列学习总目录 本篇目录 使用NUnit编写测试 编写和运行NUnit测试 切面的测试策略 Castle DynamicProxy测试 测试一个拦截器 注入依赖 ...
- [计算机网络]简易http server程序
好久没输出了,知识还是要写下总结才能让思路更加清晰.最近在学习计算机网络相关的知识,来聊聊如何编写一个建议的HTTP服务器. 这个http server的实现源代码我放在了我的github上,有兴趣的 ...
- 简述 OAuth 2.0 的运作流程
本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...
- MVVM大比拼小结
目前完成4篇源码分析文章: MVVM大比拼之knockout.js源码精析 MVVM大比拼之avalon.js源码精析 MVVM大比拼之vue.js源码精析 MVVM大比拼之AngularJS源码精析 ...
- .NET深入实战系列--EF到底怎么写过滤条件
本文唯一访问地址:http://www.cnblogs.com/yubaolee/p/DynamicLinq.html 对于系统开发来说,按不同字段进行过滤查询是一种常见的需求.在EF中通常的做法是: ...
- SQL:插入指定标识列的数据时候的小错误
异常处理汇总-数据库系列 http://www.cnblogs.com/dunitian/p/4522990.html 后期会在博客首发更新:http://dnt.dkill.net 好久没写标识系 ...
- SQL Server 批量主分区备份(Multiple Jobs)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 案例分析(Case) 方案一(Solution One) 方案二(Solution Two) ...
- 【Win 10 应用开发】导入.pfx证书
这个功能其实并不常用,一般开发较少涉及到证书,不过,简单了解一下还是有必要的. 先来说说制作测试证书的方法,这里老周讲两种方法,可以生成用于测试的.pfx文件. 产生证书,大家都知道有个makecer ...
- AutoMapper对internal访问级别属性的映射
最近在使用DDD重新搭建公司内部OA的架构,具体情况搭好了应该会写一下,这里说的是今天遇到的问题. 先简单说一下相关的几个部分: 1.聚合.聚合分成了两个模块:一个包含审批单据等估计至少今年不会怎么变 ...