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 ...
随机推荐
- Linux3 在VMware中搭建CentOS6.5虚拟机
前言: 本文主要是我在大家hadoop集群之前 ,需啊先安装CentOS虚拟机,记录在此,作为参考.如果能帮助到其他人,自然是更好啦. =========================== ...
- 浅谈跨域以及WebService对跨域的支持
跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问.也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源. 在 ...
- struts debug 标签
< s:debug> 引起下面的错误 org.apache.jasper.JasperException: Caught an exception while getting the pr ...
- salesforce 零基础学习(五十七)Test 类中创建TestUser帮助类
我们写Test Class的时候往往都需要指定一个uesr去run test method. TestUserHelper类如下: public class TestUserHelper { publ ...
- iOS 之UITextFiled/UITextView小结
一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...
- 【WPF】闲着没事,写了个支持数据列表分页的帮助类
支持分页的MVVM组件大家可以网上找,老周这个类只是没事写来娱乐一下的,主要是功能简单,轻量级,至少它满足了我的需求,也许还有未知的 bug . 这个类支持对数据列表进行分页处理,原理是利用 Skip ...
- 前端开发工具vue.js开发实践总结
最近有很长时间没有更新博客了,换了公司,全部的心思都放在项目上了.通过这次项目的上线,让我感受最深的是前后端分离后,前端页面的模块化管理,以及前端页面的数据邦定.在接触vue.js之前,我之前端要用到 ...
- .NET Core 使用Dapper 操作MySQL
MySQL官方驱动:http://www.cnblogs.com/linezero/p/5806814.html .NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使 ...
- docker4dotnet #5 使用VSTS/TFS搭建基于容器的持续交付管道
在过去的几篇d4d系列中,我给大家介绍了如何使用docker来支持asp.net core的应用开发,打包的场景.Asp.net core的跨平台开发能力为.net开发人员提供了使用容器进行应用开发的 ...
- 利用rebase来压缩多次提交
我们可以用Git merge –squash来将分支中多次提交合并到master后,只保留一次提交历史.但是有些提交到github远程仓库中的commit信息如何合并呢? 历史记录 首先我们查看一下m ...