重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
学习iOS软件开发的步骤:
创新互联建站服务项目包括长清网站建设、长清网站制作、长清网页制作以及长清网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,长清网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到长清省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
1、开发环境及工具。首先要学习开发环境配置和开发工具;这是基础。
2、开发语言。这是学习iOS的重点,IOS应用就需要使用这种语言来开发App,重要性不言而喻。学习的过程就是多看书,多练习。
3、iPhone/iPad 开发基础。在这一阶段需要了解iPhone/iPad开发中常用控件,多做Demo,下一些别人的code,多参考研究。
4、代码的优化及复用。这一阶段就需要有更高的追求,不只是要完成功能,还有让自己写的代码更优化,复用性更强。
5.另外为了吸引、帮助更多的人成为苹果iOSapp应用开发者,苹果上线了一个iOSapp应用开发官方教程。想成为一名iOS应用开发者的朋友,苹果官方将会推出iosapp开发教程来告诉如何开发iosapp应用,需要什么工具、哪方面的知识等等。
6.开发iosapp,除了需要必备的软件,比如Xcode、iOSSDK,还有硬件,比如一部Mac电脑、一部iOS设备用作测试。此外,最好还是参加苹果的iOS开发者计划,这样,才可以更好地测试的app应用软件,甚至让自己开发的app在iTunesAppStore上架。
蓝牙开发说简单也简单,说不简单也有点难,开发人员在首次开发蓝牙前首先需要搞清楚蓝牙开发的概念,还要了解掌握蓝牙开发的一整套流程,这样才能快速上手开发蓝牙。
蓝牙开发分为两种模式:管理者模式和中心者模式。管理者模式基本很少用到,相当于iPhone手机作为外设,自己创建服务和特性,然后用其他设备连接iPhone手机;中心者模式一般是大部分情况下都会使用的,使用中心者模式开发相当于iPhone手机作为主机,连接蓝牙外设,下面介绍蓝牙开发的例子就是使用的中心者模式来讲解的。
在这里我还是要推荐下我自己建的iOS开发学习群:680565220,群里都是学ios开发的,如果你正在学习ios ,我欢迎你加入,今天分享的这个案例已经上传到群文件,大家都是软件开发党,不定期分享干货(只有iOS软件开发相关的),包括我自己整理的一份2018最新的iOS进阶资料和高级开发教程
一、关于蓝牙开发的一些重要的理论概念:
1、服务(services):蓝牙外设对外广播的时候一定会有一个服务,有些时候也可以是有多个服务,服务下面包含一些特性,服务可以理解成一个模块的窗口;
2、特征(characteristic):特征存在于服务下面的,一个服务下面可以有多个特征,特征可以理解成具体实现功能的窗口,一般的特性都会有value,也就是特征值,是特征和外界交互的最小单位;
3、UUID:蓝牙上的唯一标示符,为了区分不同服务和特征,就用UUID来表示。
二、蓝牙连接的主要步骤
1、创建一个CBCentralManager实例来进行蓝牙管理;
2、搜索扫描外围设备;
3、连接外围设备;
4、获得外围设备的服务;
5、获得服务的特征;
6、从外围设备读取数据;
7、给外围设备发送(写入)数据。
三、蓝牙连接和数据读写的具体步骤
1、导入苹果系统蓝牙框架
#import
2、遵循两个蓝牙框架相关的协议
3、新建两个实例属性,一个特征属性
@property (nonatomic, strong) CBCentralManager *centralManager; //中心管理者
@property (nonatomic, strong) CBPeripheral *peripheral; //连接到的外设
@property (nonatomic, strong) CBCharacteristic *characteristic; //特征
4、初始化CBCentralManager,进行蓝牙管理
- (void)viewDidLoad {
[super viewDidLoad];
self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()]; //创建实例进行蓝牙管理
}
//若中心管理者初始化之后 就会触发下面这个代理方法 该代理方法是用来判断手机蓝牙的状态的
- (void)centralManagerDidUpdateState:(CBCentralManager *)central {
// 蓝牙可用,开始扫描外设
if (central.state == CBManagerStatePoweredOn) {
NSLog(@"蓝牙可用");
//在中心管理者成功开启之后再进行一些操作
//搜索扫描外设
// 根据SERVICE_UUID来扫描外设,如果不设置SERVICE_UUID,则扫描所有蓝牙设备
// [self.centralManager startAdvertising:@{CBAdvertisementDataServiceUUIDsKey:@[[CBUUID UUIDWithString:SERVICE_UUID]]}];
[central scanForPeripheralsWithServices:nil options:nil];
}
if(central.state == CBManagerStateUnsupported) {
NSLog(@"该设备不支持蓝牙");
}
if (central.state == CBManagerStatePoweredOff) {
NSLog(@"蓝牙已关闭");
}
if (central.state == CBManagerStateUnknown) {
NSLog(@"蓝牙当前状态不明确");
}
if (central.state == CBManagerStateUnauthorized) {
NSLog(@"蓝牙未被授权");
}
}
5、搜索外围设备
//执行扫描动作之后,如果扫描到外设了,就会自动回调下面的协议方法
/** 发现符合要求的外设,回调 */
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
NSLog(@"%@====",peripheral.name);
//根据外设名字有选择性的筛选连接蓝牙设备
if ([peripheral.name hasPrefix:@"TEAMOSA"]) {
//在这里对外设携带的广播数据进行进一步的处理
if ([self.peripheraNames containsObject:peripheral.name]) {
//如果数组中包含了就不再添加
return;
}
//添加到外设名字数组中
[self.peripheraNames addObject:peripheral.name];
//标记外设,让它的生命周期与控制器的一致
self.peripheral = peripheral;
// 可以根据外设名字来过滤外设
// [central connectPeripheral:peripheral options:nil];
}
// 连接外设
// [central connectPeripheral:peripheral options:nil];
}
6、连接外围设备
//连接外围设备,中心管理者连接外设成功,如果连接成功就会回调这个协议方法
/** 连接成功 */
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{
//连接成功之后,可以进行服务和特性的发现。 停止中心管理设备的扫描动作,要不然在你和已经连接好的外设进行数据沟通时,如果又有一个外设进行广播且符合你的连接条件,那么你的iOS设备也会去连接这个设备(因为iOS BLE4.0是支持一对多连接的),导致数据的混乱。
//停止扫描动作
[self.centralManager stopScan];
// 设置外设的代理
peripheral.delegate = self;
// 根据UUID来寻找服务
// [peripheral discoverServices:@[[CBUUID UUIDWithString:SERVICE_UUID]]];
//外设发现服务,传nil代表不过滤,一次性读出外设的所有服务
[peripheral discoverServices:nil];
NSLog(@"%s, line = %d, %@=连接成功", __FUNCTION__, __LINE__, peripheral.name);
}
//外设连接失败
/** 连接失败的回调 */
- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error {
NSLog(@"%s, line = %d, %@=连接失败", __FUNCTION__, __LINE__, peripheral.name);
}
//丢失连接 掉线
/** 断开连接 */
- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(nullable NSError *)error {
NSLog(@"%s, line = %d, %@=断开连接", __FUNCTION__, __LINE__, peripheral.name);
// 断开连接可以设置重新连接
[central connectPeripheral:peripheral options:nil];
}
7、获取外围设备服务和特征
/** 发现服务 */
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error {
// 遍历出外设中所有的服务
for (CBService *service in peripheral.services) {
// NSLog(@"所有的服务:%@",service);
}
// 这里仅有一个服务,所以直接获取
CBService *service = peripheral.services.lastObject;
// 根据UUID寻找服务中的特征
// [peripheral discoverCharacteristics:@[[CBUUID UUIDWithString:CHARACTERISTIC_UUID]] forService:service];
// [peripheral discoverCharacteristics:@[service.UUID] forService:service];
[peripheral discoverCharacteristics:nil forService:service];
}
8、从外围设备读取数据
// 更新特征的value的时候会调用 (凡是从蓝牙传过来的数据都要经过这个回调,简单的说这个方法就是你拿数据的唯一方法) 你可以判断是否 从外围设备读数据
/** 接收到数据回调 */
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error {
// if (characteristic == @"你要的特征的UUID或者是你已经找到的特征") {
// //characteristic.value就是你要的数据
// }
if ([peripheral.name hasPrefix:@"TEAMOSA"]){
NSData *data = characteristic.value;
NSString *value = [self hexadecimalString:data];
// NSLog(@"characteristic(读取到的): %@, data : %@, value : %@", characteristic, data, value);
}
// 拿到外设发送过来的数据
// NSData *data = characteristic.value;
// self.textFild.text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
9、向外围设备发送(写入)数据
//这个方法你可以放在button的响应里面,也可以在找到特征的时候就写入,具体看你业务需求怎么用
//[self.peripherale writeValue:_batteryData forCharacteristic:self.characteristic type:CBCharacteristicWriteWithResponse];//第一个参数是已连接的蓝牙设备; 第二个参数是要写入到哪个特征; 第三个参数是通过此响应记录是否成功写入 需要注意的是特征的属性是否支持写数据
/** 写入数据回调 */
- (void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(nonnull CBCharacteristic *)characteristic error:(nullable NSError *)error {
/*
typedef NS_OPTIONS(NSUInteger, CBCharacteristicProperties) {
CBCharacteristicPropertyBroadcast = 0x01,
CBCharacteristicPropertyRead = 0x02,
CBCharacteristicPropertyWriteWithoutResponse = 0x04,
CBCharacteristicPropertyWrite = 0x08,
CBCharacteristicPropertyNotify = 0x10,
CBCharacteristicPropertyIndicate = 0x20,
CBCharacteristicPropertyAuthenticatedSignedWrites = 0x40,
CBCharacteristicPropertyExtendedProperties = 0x80,
CBCharacteristicPropertyNotifyEncryptionRequired NS_ENUM_AVAILABLE(NA, 6_0) = 0x100,
CBCharacteristicPropertyIndicateEncryptionRequired NS_ENUM_AVAILABLE(NA, 6_0) = 0x200
};
打印出特征的权限(characteristic.properties),可以看到有很多种,这是一个NS_OPTIONS的枚举,可以是多个值
常见的又read,write,noitfy,indicate.知道这几个基本够用了,前俩是读写权限,后俩都是通知,俩不同的通知方式
*/
// NSLog(@"%s, line = %d, char.pro = %d", __FUNCTION__, __LINE__, characteristic.properties);
// 此时由于枚举属性是NS_OPTIONS,所以一个枚举可能对应多个类型,所以判断不能用 = ,而应该用包含
NSLog(@"write value success(写入成功) : %@", characteristic);
}
10、具体调用给蓝牙外设写入数据方法,这里的例子是以按钮点击事件里面来调用处理
//发送按钮点击事件
- (void)sendClick {
if (!self.characteristic) {
return;
}
_tempValue = [NSString stringWithFormat:@"%.0f", progressView.centigradeDegree];
_timeValue = [NSString stringWithFormat:@"%.0ld", (long)progressView1.timeDegree];
NSString *ttData = [NSString stringWithFormat:@"%@,%@U", _tempValue, _timeValue];
// NSString *aaa = [DataCoverTool coverFromStringToHexStr:ttData];
// 用NSData类型来写入
// NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arry];
NSData *data = [ttData dataUsingEncoding:NSUTF8StringEncoding];
// NSData *data = [self dataWithString:ttData];
// 根据上面的特征self.characteristic来写入数据
[self.peripheral writeValue:data forCharacteristic:self.characteristic type:CBCharacteristicWriteWithResponse];
1、在动手写代码之前,你得做出若干极其重要的决定
2、决定应用的用户界面风格
3、先熟悉 Cocoa Touch 框架
4、把你的应用发布到 App Store
5、要让应用出彩,就必须在开发过程中将应用放到真实设备上进行测试
6、经过测试和完善之后,你需要通过 iTunes Connect 来提交应用??
作者:匿名用户
链接:
另一本是Big Nerd Ranch出的《Objective-C编程(第2版)》。(推荐华中师大出的版本)
img src="" data-rawwidth="333" data-rawheight="413" class="content_image" width="333"
——————————————————————
2、视频教程的话,只推荐我赢职场出的iOS移动开发课程。
教程链接如下:
iOS9实战开发教程
img src="" data-rawwidth="398" data-rawheight="202" class="content_image" width="398"
讲的细致是这门课程最大的特点。因此,这款教程尤其适合那些零基础学习iOS的学员。我赢职场知名度不够,但是做的课程不错,可惜没人听说过这个品牌。这款教程是从Objc一直讲到iOS高编。所以跟着这款教程走,iOS开发基本也可以学的差不多。
——————————————————————
二、其次,你要学习API,了解iOS UI控件
Objc阶段的学习只是带你入门,如果你想进阶,API和UI控件是必须需要学的。一门语言可能会有成千上百的API和UI控件。你不需要把他们全都记住,只需要记住一些常用的即可。
例如:Objc中的UITableView的dataSouce和delegate;NSDictionary、NSArray相关的增删查改方法;JSON数组转换方法;文件操作方法等。
UI控件的话,常用的有UIView、UITableView、UIScrollView、UIButton、UILable等。你要熟悉这些控件的属性和相关的操作方法。
记忆这些东西,只靠死记硬背是不行的。多去写代码,多去实践,这样才能逐渐掌握。
学完这个阶段,基本上就可以做出来一个简单的APP了。由于没有进一步学习高深的东西,咱们暂且不说流畅性和内存。
UI控件部分的知识点如图:
img src="" data-rawwidth="607" data-rawheight="531" class="origin_image zh-lightbox-thumb" width="607" data-original=""
——————————————————————
三、最后,你还需要了解iOS开发的底层原理。
能学到这一部分已经很不错了。所谓专业的iOS开发工程师和一个业余的iOS开发爱好者基本也差在这最后一步了。这一部分的知识点也是在面试的时会经常问道的。如果你想找一份iOS开发工程师的职位,这一部分是非学不可的。
这一部分的需要掌握的知识点包括:
iOS内存管理、iOS运行时机制、RunLoop、多线程等
每一块都需要掌握的很详细。
你还要熟练使用类库并阅读类库源码,例如AFNetWorking、SDWeblmage等,这两个是初学者必看的。
——————————————————————
这一阶段的学习可以多去github上下载源代码去阅读。
推荐一些完整的源码下载:
1、懒人笔记iOS客户端
GitHub - liaojinxing/Voice2Note: Voice2Note iOS client source codes.
2、《猿已阅》码农周刊iOS客户端
GitHub - icepy/manong-reading: 《猿已阅》码农周刊 iOS App(放弃维护,推荐大家下载《开发者头条》App)
3、火狐浏览器iOS客户端
GitHub - mozilla/firefox-ios: Firefox for iOS
4、某位大神做的高仿网易新闻项目源码
GitHub - dsxNiubility/SXNews: High imitation Neteasy News. (include list,detail,photoset,weather,feedback)
5、维基百科iOS客户端
GitHub - wikimedia/wikipedia-ios: The official Wikipedia iOS app.
6、品趣iOS客户端
GitHub - ltebean/novel-design: PinQu ios client
7、YoCelsius——一款天气预报的应用
GitHub - YouXianMing/YoCelsius: A weather app that uses animation to give you an at-a-glance look at the weather.
8、密记iOS版——款简单的笔记应用
GitHub - iHTCboy/SecurityNote: 密记iOS版:本应用主要功能是简单笔记。【已经开源,AppStroe可下载】The application of the main function is a simple notes.
——————————————————————
四、关于swift语言的学习。
学习iOS开发分为Objc和swift两个路线,以上介绍的是最经典的Objc路线。如果你想靠学习iOS开发找到一份工作,就要选择从Objc开始学起。因为绝大多数公司都是以Objc为开发语言的。
然而swift作为一门现代语言,集合了很多编程语言的优点,并且比Objc也更加简单易学,近几年swift语言的发展势头十分不错,大有取代Objc而代之的迹象。所以在这里建议题主把两个语言都学习一下。并且Swift语言是在Objc的基础上发明的,学完Objc,再学习swift也会更加容易。
关于swift路线的学习,可以看看我赢职场的iOS开发教程,有大篇幅的章节去介绍swift语言,并且讲得细致入微,十分适合新手学习。
教程链接:iOS9实战移动开发(swift加强版)
img src="" data-rawwidth="860" data-rawheight="589" class="origin_image zh-lightbox-thumb" width="860" data-original=""
五、下面把自己多年来私藏的一些学习iOS开发的网站推荐给大家。当然这只是部分,赞数过百还会把这些资料再放出来一部分。所以,你们快点赞吧!
——————————————————————
iOS开发相关的网站:
1、我赢职场
上文已经介绍过了,他们家的课程质量算是很赞的了,教程最大的特点是特别适合新手学习。
2、tutsplus
不定时更新一些 iOS 教程
3、WWDC
苹果官方每年一度的 WWDC 视频, 可以了解历年有关 iOS 发布的内容。
4、asciiwwdc
WWDC 的文字版
5、Swift by Robin Eggenkamp
该网站收集了很多关于 Swift 的学习资料, 新闻。
——————————————————————
邮件订阅:
1、iOS Dev Weekly
每周一期,内容多为这一星期里值得关注的 GitHub 项目、文章、工具等。
2、iOS Design Weekly
每周一期,会提供一些iOS开发的建议,新闻资讯以及创意方面的内容。
如何制作一个简单的 iOS app?
如今,不少企业都想拥有属于自己企业或产品的手机APP,但其中最困扰企业主的问题就是:开发一款手机APP到底需要多少钱?
简单点来说,要视手机APP的需求及质量而言,价位一般在几千到十几万左右,更高端的价格更高。
今天,我们就来详细分析一下这个问题,请继续往下看吧。
一、APP开发款式分为固定款和定制款,两者的价格均不相同
固定款:是指直接套用已有的、现成的APP固定模板,报价是固定的,所需要的功能也是固定的,缺点就是客户拿不到源代码,也不能根据企业需求进行定制,由于源代码是封装的,如果企业以后想进行功能升级或系统维护的话,也不能够实现,只能重新开发一个新的软件。
固定款的APP开发时间短,约2~3日的时间即可完成,费用大约在几千到几万之间。
定制款:定制款是指APP的功能全部重新开发,过程比较繁琐,需要美工、策划、APP开发(前台/客户端/手机端)、后台程序员等工种协同完成,大型的、功能复杂的APP甚至需要数十人的团队。
由于APP的功能和设计都是定制的,因此价格会高些。定制款的开发时间与开发价格是成正比的,开发时间长,大约在两三个月甚至不定的周期里才能完成,而费用大概在几万甚至十几万左右。
因此,想要知道开发一款手机APP需要花费多少钱,企业主首先必须把APP的详细需求和功能告知APP开发公司,开发公司才能报出一个合理的价格。
二、手机APP平台不同,制作成本也不一样
现在市面上流行的手机APP制作平台主要有两种一般包括两种系统:安卓系统(Android)和苹果系统(IOS)。
一般来说,制作苹果系统的手机APP软件费用要比安卓平台的贵一些,因为苹果公司对苹果平台的封闭性和手机APP开发语言Objective-C的难度,都让APP开发者加大了苹果系统手机APP开发的难度。
三、APP制作成本包含参与人员的工资
通常情况下,开发一款APP需要产品经理、客户端工程师、后端工程师和UI设计师各一名,这已经是制作手机APP应用软件比较精简的配置了,所以这些参与人员的工资也是包含在APP制作成本当中的。这些工作人员的月薪加起来可能都会超过4、5万元。
四、APP开发公司的所在地
需要注意的是,同样实力的APP开发公司,在不同的城市也会导致APP的成本费用高一些
如果你入门了iOS开发并且有一定的英文功底,我是非常推荐你去看的,尤其官方文档,应该经常翻阅。但是我认为保持学习的热情是最重要的。本着这个理念,我推荐的学习方法难度非常低,希望你们能满意。 第一阶段: RayWenderlich网站中的 The iOS Apprentice教程 这个教程截止目前已经不更新OC语言的版本了,但是如果你是抱着求职为目的的学习还是请看OC版本的(两年前的版本)。The iOS Apprentice的教程针对完全没有编程经验的人设计。这个教程是外国人写的并且有免费试读版,感兴趣的人要看看。里面说的东西都非常非常基本,里面一个共讲解了4个不同类型app,强烈建议一步一步按照上面所写的步骤敲一遍代码。其中你会遇到很多复杂的语句和长的可怕的函数,你不用感到恐慌,照着敲,知道它干嘛用完全OK了,随着你编程时间以及经验的增加,你都会懂得。。如果看完了这个免费的教程觉得还挺想继续学的请参王寒老师也做了swift版本的The iOS Apprentice教程翻译,自己去找)
第二阶段:培训班的网络课程及入门书籍 经过第一个阶段你应该已经大致掌握IOS开发流程,能编写一个非常简单的应用了。这时候相信你的热情应该会很高涨,但接下来的学习可能会很枯燥,做好准备
建议首先要恶补基础知识。经过第一个阶段你可能觉得你懂不少了,但是只是表面,尤其是没学过编程的应该好好学习一下视频前面的课程,主要看看语法。等你看恶心了看烦了就去看视频里UI部分,这里相对于来说比较轻松,一定要把视频里写的语句打一遍,相信这样你理解会更深刻。里面说的不清楚的地方上网可以百度,可以查书(如果你有书的话)。