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的更多相关文章

  1. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  2. IOS开发基础知识--碎片33

    1:AFNetworking状态栏网络请求效果 直接在AppDelegate里面didFinishLaunchingWithOptions进行设置 [[AFNetworkActivityIndicat ...

  3. IOS开发基础知识--碎片42

    1:报thread 1:exc_bad_access(code=1,address=0x70********) 闪退 这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象( ...

  4. IOS开发基础知识--碎片50

      1:Masonry 2个或2个以上的控件等间隔排序 /** * 多个控件固定间隔的等间隔排列,变化的是控件的长度或者宽度值 * * @param axisType 轴线方向 * @param fi ...

  5. IOS开发基础知识--碎片3

    十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice cur ...

  6. IOS开发基础知识--碎片11

    1:AFNetwork判断网络状态 #import “AFNetworkActivityIndicatorManager.h" - (BOOL)application:(UIApplicat ...

  7. IOS开发基础知识--碎片14

    1:ZIP文件压缩跟解压,使用ZipArchive 创建/添加一个zip包 ZipArchive* zipFile = [[ZipArchive alloc] init]; //次数得zipfilen ...

  8. IOS开发基础知识--碎片16

    1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断对象类型 -(BOO ...

  9. IOS开发基础知识--碎片19

    1:键盘事件顺序 UIKeyboardWillShowNotification // 键盘显示之前 UIKeyboardDidShowNotification // 键盘显示完成后 UIKeyboar ...

随机推荐

  1. 【Win10】UAP/UWP/通用 开发之 x:Bind

    [Some information relates to pre-released product which may be substantially modified before it's co ...

  2. Vue.js——vue-resource全攻略

    概述 上一篇我们介绍了如何将$.ajax和Vue.js结合在一起使用,并实现了一个简单的跨域CURD示例.Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的D ...

  3. Python 黑帽编程大纲(变化中)

    Python 黑帽编程大纲(预览版) 教程说明: 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and Defense with Pytho ...

  4. ASP.NET MVC Model绑定(六)

    ASP.NET MVC Model绑定(六) 前言 前面的篇幅对于IValueProvider的使用做个基础的示例讲解,但是没并没有对 IValueProvider类型的实现做详细的介绍,然而MVC框 ...

  5. (实例篇)PHP实现HTTP断点续传的方法

    PHP实现HTTP断点续传的方法. <?php /** * PHP-HTTP断点续传实现 * @param string $path: 文件所在路径 * @param string $file: ...

  6. Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)

    Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...

  7. 初学者--bootstrap(六)组件中的下拉菜单----在路上(10)

    组件---下拉菜单 用于显示链接列表的可切换.有上下文的菜单.下拉菜单的 JavaScript 插件让它具有了交互性. 将下拉菜单触发器和下拉菜单都包裹在 .dropdown 里,或者另一个声明了 p ...

  8. python学习 异常

    #===========================常见异常 ===================== #print(a);#NameError: name 'a' is not defined ...

  9. 4、DES和RSA简介

    DES是分组加密算法,速度快,使用单一密钥,加密解密都使用同一个密钥,一般用于大量数据加密,目前处于半淘汰状态. RSA算法是流式加密算法,速度慢,但是使用成对的密钥,加密解密使用不同的密钥,有利于保 ...

  10. Python标准模块--concurrent.futures

    1 模块简介 concurrent.futures模块是在Python3.2中添加的.根据Python的官方文档,concurrent.futures模块提供给开发者一个执行异步调用的高级接口.con ...