那些在学习iOS开发前就应该知道的事(part 2)

英文原文:Things I wish I had known before starting iOS development—Part 2

http://www.cocoachina.com/ios/20150611/12111.html

如果你还没读这篇文章的第一部分,请先读完了再来看第二部分。

在第一部分中,我讨论了学习iOS开发的一些基本问题。第二部分将更多地讨论一些实际问题,这些问题都是你在开发iOS应用时会遇到的。

Debugging

毋庸置疑,你在开发应用的过程中一定会遇到很多错误和异常。比如,你会遇到NSInvalidArgumentException,遇到NSInternalInconsistencyException,还会遇到“0xfaded322”这种错误代码。有时候你可以在Stack Overflow或Quora上找到答案,但大部分时候你得自力更生。

Xcode具有断点、视图调试和日志的功能,是debug的不二之选。但毕竟孤掌难鸣,你仍需为它找些得力的帮手。

1.Pony Debugger

square/PonyDebugger:PonyDebugger - 使用Chrome Developer Tools,为你的native iOS应用进行远程网络和数据调试。

square开发了这个强大的开源工具。它是一个远程调试工具,类似于客户端库和网关服务器的结合体。它在web浏览器上使用Chrome Developer Tools,对应用的网络流量和数据存储进行调试。作为一个强大的网络调试器,PonyDebugger允许用户实时查看应用的网络请求。它还有另一个酷酷的功能,就是可以远程调试iOS应用的核心数据栈。

2.Cocoa Lumberjack

CocoaLumberjack:CocoaLumberjack - 快速、简单,强大、灵活。它就是CocoaLumberjack, 一款好用的Mac和iOS日志框架。

CocoaLumberjack,它快速、简单,强大、灵活,是一款好用的Mac和iOS日志框架。如果你想找一款强大的日志工具,希望它具有自定义格式化这样的炫酷功能,那CocoaLumberjack就是你的菜。

3.Reveal App

Reveal:Reveal - iOS应用的runtime视图调试。

虽然视图调试已经被引入iOS,但Reveal无疑在调试的细节方面更加强大。它是收费应用,但绝对物有所值。它有一些非常好用的功能,如Auto Layout Inspection。

4.OHHTTPStubs

AliSoftware/OHHTTPStubs:OHHTTPStubs - 轻松stub你的网络请求。以虚拟网络数据测试你的应用,可自定义响应时间……

OHHTTPStubs库可以轻松stub你的网络请求。它可以帮助你:

  • 使用伪造的网络数据(stubbed from file)测试你的应用,并模拟慢速网络以检查应用在网络不良情况下的表现。
  • 从设备中获得伪造的网络数据,用于写单元测试

数据存储

可能大多数应用都需要将各种任务的数据存储在本地。数据存储是一个复杂的话题。它有很多选择,每个选择都对应一种情况。但我很喜欢Stack Overflow上的一种法则,用它来选择数据存储方式就很不错。

  • 若数据完全匹配内存且相对非结构化,则使用plist
  • 若数据完全匹配内存且具有树状结构,则使用XML
  • 若数据与内存不匹配且具有图形结构,同时应用不需要额外的查询能力,则使用Core Data
  • 如果数据与内存不匹配且具有复杂结构,或应用需要关系数据库提供的强查询能力,则使用sqlite
  • 如果数据必须保密(例如密码),则使用keychain

下面列了一些数据存储方面的库,或许对大家有帮助。

FMDB

ccgus/fmdb:fmdb - 围绕SQLite建立的Cocoa / Objective-C的wrapper

如果你在项目中使用SQLite,此wrapper库会使你的工作变简单。

SSFKeychain

soffes/sskeychain:sskeychain - 简单的Objective-C wrapper,Mac和iOS上的keychain可以使用

要在应用中存储敏感数据,你必须时刻使用keychain。这个库可以简化使用keychain数据存储的过程。

Magical Record

MagicalRecord - 轻松管理Core Data

Core data非常难于管理。而这个库可以让你舒爽地管理Core Data。

网络

要想让应用更有趣,你免不了要接入一些API。虽然iOS在对网络的支持方面表现良好,譬如它拥有NSURLSession、NSURLConnection和NSJSONSerialization,但我还是推荐你使用下面的库。

AFNetworking

AFNetworking:AFNetworking - 令人拍案叫绝的iOS和OS X网络框架。

我认为这是有史以来最好的iOS库之一,它的功能何止炫酷二字。但这些功能中最重要的或许是开发者社区,他们每天都在使用这个库,并为AFNetworking做出贡献。一些iPhone、iPad和Mac上最火的应用都是由AFNetworking提供的支持。

Restkit

RestKit/RestKit:RestKit是在iOS和OS X上使用和构建RESTful web资源的框架。

Restkit具有精心设计的API,访问和构建RESTful资源的过程如沐春风。如果你用core data进行数据存储、用rest service进行数据读取,那你的最佳选择就是它——与Core Data完美集成的Restkit。

Alamofire

Alamofire/Alamofire:Alamofire - Swift下精致的HTTP Networking。

哟哟切克闹,Swift粉们不要闹,煎饼果子来一套。下面就是为你们准备的东西了。Alamofire是一个精致的网络库,它具有一些Swift专享的强大功能。

你也可以在这里找到很多其他的库。

vsouza/awesome-ios

awesome-ios——精选的优质iOS生态系统,包括Objective-C和Swift项目。

依赖管理

我在前面的文章中提到过依赖管理,但重要的问题要说两遍!在这里我还要给它细细讲一发。在项目中,你主要有三种管理依赖的方式。

CocoaPods

CocoaPods.org:iOS和Mac项目的依赖管理器。

CocoaPods是Swift和Objective-C Cocoa项目的依赖管理器。它拥有将近一万个库,可以帮助你轻松扩大项目规模。要想管理Ruby Gems这种依赖,实践中最有效的方法就是它了。

谷歌开发者做了一个YouTube视频,解释了为什么要在你的项目中使用CocoaPods。小心笑尿。

点此观看视频:Route 85: An Introduction to CocoaPods

Github Submodules

你还可以使用git submodules,在项目中以sub repos形式管理依赖。子模块相对于Cocoapods的优势在于子模块也是sub-repos——这不仅是指git和git GUIs逐渐认可并更加支持它们,也意味着你的依赖可以将git repos和广阔的世界连接起来,而CocoaPods却不能。

但git submodules也有自己的问题:项目中没有那些你所依赖的代码的来源。它只是指向了子模块库。而大多数时间你根本不会去管这个库。

Carthage

Carthage/Carthage:Carthage - 简单、去中心化的Cocoa依赖管理器。

Carthage旨在为Cocoa应用提供最简单的框架添加方式。Carthage使用xcodebuild建立framework binaries,把整合工作留给了用户。CocoaPods的方法更简单易用,而Carthage的方法更灵活温和。

不幸的是,Carthage也有一个巨大缺陷——仅支持iOS 8及以上版本

测试

大多数人一提到应用测试就会呵欠连连。但如果没有测试的话,说不巧哪天你的应用就突然崩溃了。发布应用时,你一定得先进行深度测试,保证用户得到最佳体验。

这里有很多测试框架,它们可以简化测试工作。

XCTest

XCTest是一个单元测试框架,包含在Xcode中。它支持把单元测试作为项目编译过程的一部分。XCTest与XCode高度整合,因此提供了持续整合支持和覆盖率测试这样的功能。

KIF

kif-framework/KIF:KIF - Keep It Functional - iOS功能测试框架

KIF是Keep It Functional的缩写。它由Square开源,是一款iOS一体化测试框架。它利用其可访问性——即系统让访问不能显示的应用成为可能,轻松实现了iOS应用的自动化。

Kiwi

kiwi-bdd/Kiwi:Kiwi - BDD for iOS

Kiwi是iOS开发的Behavior Driven Development库。其目标是提供一个安装和使用都非常简单的BDD库。

Quick

Quick/Quick:Quick - Swift (以及Objective-C)的测试框架。

Quick是Swift和Objective-C的一款行为驱动的开发框架。它由RSpecSpectaGinkgo开发。与Quick并肩战斗的是Nimble——一款为测试服务的匹配框架。

我尝试在本文中讲尽量多的技术问题。跳入iOS开发的大坑之后,你就能用得到上我说的这些东西了。关于iOS开发需要说的实在太多,所以在这儿我没有谈到营销之类的话题。如果你想看的话,那就等我的下一篇文章吧!

时间: 2024-08-07 00:16:55

那些在学习iOS开发前就应该知道的事(part 2)的相关文章

那些在学习iOS开发前就应该知道的事(part 1)

英文原文:Things I wish I had known before starting iOS development—Part 1 http://www.cocoachina.com/ios/20150608/12052.html 设计师设计出来了一个不错的引导界面,然而当我看到设计稿的时候,我们的app也没几天就要上线了.这个界面模仿了Evernote iOS app的风格. 我以迅雷不及掩耳盗铃之势开始在Xcode上编程,用了page view controller和scroll v

在你决定从事iOS开发前需要清楚的几个问题

作者:David McGraw  翻译:丁丁(jackiehoo) 原文:http://www.xmcgraw.com/what-you-need-to-know-to-start-learning-how-to-code/ 译者注:这篇文章是我在一个月前看到的,文章的内容基本表达我转行从事iOS开发时候的思考.觉得这篇文章会对那些想做iOS开发和刚开始做的朋友有一些帮助,因此翻译出来并分享给大家,对我而言则温故知新.不忘初心,方得始终,新的一年再次出发. 每个人的都有独特的经历,因此会有特别的

【零基础学习iOS开发】【01-前言】01-开篇

本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开发 四.学习iOS开发的目的 五.学习iOS开发的前提 从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂.若遇到不明白的地方或者对此文有异议,望及时评论. 回到顶部 一.什么是iOS 要想学习iOS开发,首先要搞清楚什么是iOS.iOS其实是一款操作系统,就像平时我们在电脑上用的

奔五的人,准备学习iOS开发

这些年一直在java/web/android方面折腾,去年最终换成了apple的设备,本想就開始折腾iOS,却始终没能进入状态. 从今天開始,本人宣布:正式进入iOS/xcode 5的编程学习中,也希望大家共同进步. 补充一下:环顾四周,到我这个年龄还能在coding中找到快乐的人好像已经不多了,你呢?当年进入android时,我是由于领了一台android的mt620合约机,记忆中也是国庆前拿到了,用了一个假期的时间学习android,边学边用,开发了第一个安卓应用:百度音乐下载播放器,在接着

零基础学习IOS开发(二)- 使用cocos2d-x3.0 执行Hello world

关于开发框架,依据网上检索来的信息,感觉cocos2d-x的ios游戏开发框架非常不错,并且有非常强的可移植性,因此打算尝试一下. 截止写下此文章,最新的cocos2d-x的版本号为v3.0稳定版(几天前刚刚公布),下载地址为:http://www.cocos2d-x.org/filedown/cocos2d-x-3.0-cn 安装方式例如以下: 1.解压程序压缩包(所在路径不能有中文哦,由于是python,你懂的...) 2.sudo python setup.py 安装cocos2d-x,依

【零基础学习iOS开发】【转载】

原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开发 四.学习iOS开发的目的 五.学习iOS开发的前提 从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂.若遇到不明白的地方或者对此文有异议,望及时

李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇

从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂.若遇到不明白的地方或者对此文有异议,望及时评论. 一.什么是iOS 要想学习iOS开发,首先要搞清楚什么是iOS.iOS其实是一款操作系统,就像平时我们在电脑上用的XP.Win7,都是操作系统. 那什么是操作系统呢?操作系统其实是一种软件,是直接运行在硬件(电脑.手机等)上的最基本的系统软件,任何

【零基础学习iOS开发】【02-C语言】01-概述

本文目录 一.计算机常识 二.程序设计语言发展史 三.C语言简史 四.C语言的特点 五.C语言的作用 六.C语言的版本问题 前面已经给大家介绍了iOS开发相关的一些基础知识,比如学习iOS开发需要什么准备.iOS开发的前景等等.在<开篇>这讲中说过:其实iOS开发就是开发iPhone\iPad上的软件,而要想开发一款软件,首先要学习程序设计语言.iOS开发需要学习的主要程序设计语言有:C语言.C++.Objective-C,其中C++.Objective-C都是以C语言为基础,从C语言衍生出来

Objective-C专题,是学习iOS开发的前奏(转)

第一个OC的类 来源:http://www.cnblogs.com/mjios/archive/2013/04/06/3002814.html 本文目录 一.语法简介 二.用Xcode创建第一个OC的类 三.第一个类的代码解析 四.添加成员变量 五.添加方法 六.跟Java的比较 七.创建对象 八.访问公共成员变量和方法 说明:这个Objective-C专题,是学习iOS开发的前奏,也为了让有面向对象语言开发经验的程序员,能够快速上手Objective-C.如果你还没有编程经验,或者对Objec