IOS开发简介及IOS的APP测试知识2一、iOS开发基础知识二、iOS客户端测试类型及流程课程大纲3第一章iOS开发基础知识1.1objective-c、cocoa、xcode简介1.2创建一个简单的iPhone程序1.3Xcode调试1.1Objective-c、Cocoa、XcodeObjective-C:这是一种编程语言,就好像c++是一种语言,Java是一种语言,c#是一种语言。Cocoa:是一大堆函数库,就好像MFC、.NET、Swing这类玩意,苹果已经写好了一堆现成的东西,你只要知道怎么用就可以了。XCode:是一个开发环境IDE,就好像VisualStudio一样。包含很多强大的工具,比如InterfaceBuilder,它可以认为是VisualStudio中用来画界面的那部分功能单独提出来的程序。41.1Objective-c、Cocoa、XcodeObjective-c扩充C的面向对象编程语言。它主要使用于MacOSX。而在NeXTSTEP和OpenStep中它更是基本语言。Objective-C是非常实际的语言。它是一个用C写成、很小的运行库,ObjC写成的程序通常不会比其原始码大很多。51.1Objective-c、Cocoa、XcodeObjective-c1.1Objective-c、Cocoa、XcodeObjective-c语法1、减号(或者加号)减号:表示一个函数、或者方法、或者消息的开始。比如c#中,一个方法的写法可能是:privatevoidhello(boolishello){……}用Objective-C写出来就是-(void)hello:(BOOL)ishello{……}加号:其他函数可以直接调用这个类中的这个函数,而不用创建这个类的实例。71.1Objective-c、Cocoa、XcodeObjective-c的语法2、中括号比如C#里你可以这么写:this.hello(true);在Objective-C里,就要写成:[selfhello:YES];81.1Objective-c、Cocoa、XcodeObjective-c的语法3、NS****类乔布斯当年被人挤兑出苹果,自立门户的时候做了个公司叫做NextStep,里面开发了NextStep这一套函数库,很是让一些科学家们喜欢,而现在MacOS用的就是这一套函数库。开发NextStep的工程师比较自恋地把函数库里面所有的类都用NextStep的缩写打头命名,也就是NS****了。比较常见的比如:NSLogNSStringNSIntegerNSURLNSImageNSLog(@%d,myInt);91.1Objective-c、Cocoa、XcodeObjective-c的语法你还可以看到其他名字打头的一些类,比如CF、CA、CG、UI等等。CFStringTokenizer这是个分词的东东CALayer这表示CoreAnimation的层CGPoint这表示一个点UIImage这表示iPhone里面的图片101.1Objective-c、Cocoa、XcodeCocoaCocoa是苹果的面向对象开发框架,用来生成MacOSX的应用程序。Cocoa应用程序一般在Xcode和InterfaceBuilder上用Objective-C写成。Cocoa框架本身由Objective-C写成,因此Objective-C是开发Cocoa应用的首选语言。Cocoa应用有独特的外观,因为Cocoa编程环境让程序在多方面自动遵循苹果公司的人机界面守则。Cocoa是由NeXT公司开发的编程环境NeXTSTEP和OPENSTEP演变而来。111.1Objective-c、Cocoa、XcodeMVCCocoa的设计遵循了严格的MVC原则。这种模式将应用程序分为三个可以交互的对象集,即模型,视图和控制器。其中,模型类代表原始数据,例如文档、设置、内存中的对象等,视图是模型中数据的可视化表现,而控制器类则包含了将模型和其对应视图连接起来的逻辑,并保持前二者的状态同步。121.1Objective-c、Cocoa、XcodeKVC利用动态绑定,Cocoa提供了一种通用的数据管理技术,称为键-值编码。这种技术允许对象的数据或属性可以在运行时通过其键名进行查找,其中,属性的名称即为其值的键名。在静态语言中,这样的做法是不可能的。KVC大大的增加了设计的自由度:即通过KVC,无需知道对象的类型即可访问其属性或数据。131.1Objective-c、Cocoa、Xcode内存管理Cocoa可以管理动态分配的内存。Cocoa中绝大部分类的基类都是NSObject,它实现了引用计数的内存管理模型。从NSObject继承的类可以响应retain和release消息,以增减其引用计数;也可以通过发送retainCount消息来获取其引用计数。141.1Objective-c、Cocoa、XcodeCocoa包含三个核心工具包:Foundation工具包:基于CoreFoundation的。作为通用的面向对象的函数库,Foundation提供了字符串,数值的管理,容器及其枚举,分布式计算,事件循环等等功能。在MacOSX和iOS中使用。AppKit(ApplicationKit):它包含了程序与图形用户界面交互所需的代码。在MacOSX中使用。UIKit(UserInterfaceKit):是用于iOS的图形用户界面工具包。与AppKit不同,它使用“UI”的前缀。在iOS中使用。151.1Objective-c、Cocoa、XcodeXcodeXcode是苹果公司向开发人员提供的集成开发环境(非开源但免费),用于开发MacOSX,iOS的应用程序。其运行于苹果公司的Mac操作系统下。Xcode前身是继承自NeXT的ProjectBuilder。Xcode最新版本是Xcode5.1Xcode编译速度极快。每次操作都很快速和轻松。161.1Objective-c、Cocoa、XcodeXcode的面板171.1Objective-c、Cocoa、Xcode文件CMD+N:新文件;CMD+SHIFT+N:新项目;CMD+O:打开;CMD+S:保存;CMD+SHIFT+S:另存为;CMD+W:关闭窗口;CMD+SHIFT+W:关闭文件编辑CMD+[:左缩进;CMD+]:右缩进;CMD+CTRL+LEFT:折叠;CMD+CTRL+RIGHT:取消折叠;CMD+CTRL+TOP:折叠全部函数;CMD+CTRL+BOTTOM:取消全部函数折叠;CTRL+U:取消全部折叠;CMD+D:添加书签;CMD+/:注释或取消注释;CTRL+.:参数提示;ESC:自动提示列表调试CMD+\:设置或取消断点;CMD+OPT+\:允许或禁用当前断点;CMD+OPT+B:查看全部断点;CMD+RETURN:编译并运行;CMD+R:编译并运行,不触发断点;CMD+Y:编译并调试,触发断点;CMD+SHIFT+RETURN:终止运行或调试;CMD+B:编译;CMD+SHIFT+K:清理;181.2创建一个简单的iOS程序19Xcode程序基本架构创建程序编译运行启动simulator展示运行结果1.2Xcode调试启动调试设置断点查看线程信息查看对象属性201.2Xcode调试常见编译问题1Command/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOSBuildSystemSupport.xcplugin/Contents/Resources/copypngfailedwithexitcode1缺少资源文件,编译会提示Thefile“XXX”couldn’tbefound/opened或CopyxxxFileerror。通常是由于开发未上传相应的文件,可联系开发解决,如果该文件未使用可直接删除。2framework或xxx.a缺失,编译提示”XXX”frameworknotfound或Thefile“xxx.a”couldn’tbefound。可能的原因:a.framework未上传;b.子工程的编译生成路径不同,造成文件链接失败,可联系开发解决;211.2Xcode调试3targetspecifilesproducttype‘com.apple.product-type.framework.static’,butthere’snosuchtype…。该问题通常是由于工程使用real-framework插件来生成framework造成的,未安装该插件或升级xcode都可能出现此问题,可以到github下载该插件;4CodeSignerror:Theidentity'iPhoneDeveloper:YourName'doesn'tmatchanyvalidcertificate/privatekeypairinthedefaultkeychain。签名错误引起,点击对应的target在buildsetting中查看codesigning-修改对应的证书。221.2Xcode调试bug基本定位方法bug的定位应根据具体问题而定基本排查步骤:首先,排查bug产生的根源是服务端返回数据问题,还是客户端处理逻辑问题,具体可以通过调试或mock工具查看客户端与服务端的数据交互;其次,针对客户端的处理逻辑问题,定位至相关的controller,或直接寻找相关代码;然后,查看代码的实现方式,设置程序断点,重现bug的步骤,分析问题产生的根源。23