【调试工具】之IOS真机测试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/listener51/article/details/82907986

原文链接:https://blog.csdn.net/SoaringLee_fighting/article/details/82874618

   本文旨在阐述怎么通过xcode工程进行ios真机测试。

1. xcode工程建立和配置

1.1 xcode新建工程:

1.1.1 用于单元测试

   File–>new—>Project—>iOS(application)–>选择single view Application,然后根据提示选择工程路径,即可完成工程的创建。

1.1.2 用于库测试

   File—>new—>Project—>iOS(FrameWork & Library)—>选择Cocoa Touch Static Libarary,然后根据提示选择工程路径,即可完成工程的创建。

1.2 添加demo文件

   一般在写c/c++程序时,都有一个main函数(此文中main函数所在的文件,称demo文件),表示程序从此函数开始执行;
  将demo文件和库文件拷贝到刚建立的xcode工程下,且将demo文件添加到xcode工程中,添加方法:右击工程名-》add files to xxxx -》选择需要添加的文件

1.2 .1 修改原demo示例

   由于本文是需要将程序放入Ios真机中测试,因此需要将demo中的main函数更名为main_test,以便在IOS控件初始化函数中调用。

1.3 添加静态库

   demo文件可能依赖某些静态库,因此需要在xcode工程中配置静态库路径,配置方法:单击工程名-》build phases -》link binary with libraries 将需要的静态库添加进来。

1.4 添加测试码流

   单击工程名-》build phases -》copy bundle resources 将需要的码流文件添加进来。

1.5 导入码流文件

   单击itool_7工具-》选择新建的app名字-》点击文件夹符号-》documents-》导入-》选中需要导入的测试码流,此步骤之所以设置documents为码流的导入目录,是由于1.6小节中码流的读取路径为此路径。

1.6 IOS app控件初始化函数中添加代码

   具体方法: ViewController.m的viewDidLoad函数中添加如下代码

-(void) viewDidLoad{
[super viewDidLoad];
     NSArray array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);//当前报的域指向对应手机中的文件指针
     NSString strDocument = [array objectAtIndex:0];
     NSString outfilePath = [strDocument stringByAppendingPathComponent:@“test_out.yuv”];//输出路径需要在手机相应的document下!
     NSLog(@“output path is %@”,outfilePath); //用于打印数据
     NSString* InputfilePath = [[NSBundle mainBundle] pathForResource:@“h264”];//输入文件可以直接使用包的路径,这样,码流文件放在包(工程)中即可。

     NSLog(@“input mainBudle path is %@”,InputfilePath);
     main_test(0,NULL,[InputfilePath UTF8String],[outputtfilePath UTF8String]);//demo文件传入相应参数
}

2. 测试

   (1)用数据线连接苹果手机,点击运行按钮,即可完成编译和运行,注意windows下的快捷键为ctrl + f5 为快速运行,而在mac电脑上,ctrl键被替换为alt,因此快速运行快捷键为alt + f5。
   (2)生成的yuv文件或者log文件在手机的document目录下面。
   (3)在使用xcode IDE过程中,可以设置断点进行单步调试或者采用NSLog函数打印相关信息。

扫描二维码关注公众号,回复: 5295259 查看本文章

3. 关于编译架构设置

3.1 在Build Setting中确认Architectures

   ONLY_ACTIVE_ARCH:在需要编译全平台的ios可执行文件时,设置为no,此时VALID_ARCHS无效;否则单独编译某个平台的ios可执行文件时,设置为yes。指定是否只对当前连接设备所支持的指令集编译。
   当其值设置为YES,这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本,而设置为no时,会编译所有的版本。 编译出的版本是向下兼容的,连接的设备的指令集匹配是由高到低(arm64 > armv7s > armv7)依次匹配的。比如你设置此值为yes,用iphone4编译出来的是armv7版本的,iphone5也可以运行,但是armv6的设备就不能运行。 所以,一般debug的时候可以选择设置为yes,release的时候要改为no,以适应不同设备。
   VALID_ARCHS: ios32: armv7,armv7s ;ios64: arm64
   关于Architectures和VALID_ARCHS的选择,更多可参考:https://blog.csdn.net/lizhongfu2013/article/details/42387311

附录A

补充知识

A1. xcode和ios基本概念

A1.1 clang

Clang是一个C++编写、基于LLVM、发布于LLVM BSD许可证下的C/C++/Objective-C/Objective-C++编译器。它与GNU C语言规范几乎完全兼容(当然,也有部分不兼容的内容,包括编译命令选项也会有点差异),并在此基础上增加了额外的语法特性,比如C函数重载(通过__attribute__((overloadable))来修饰函数),其目标(之一)就是超越GCC。
参考:https://www.oschina.net/p/clang

A1.2 LLVM

LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。
  LLVM计划启动于2000年,最初由美国UIUC大学的Chris Lattner博士主持开展。2006年Chris Lattner加盟Apple Inc.并致力于LLVM在Apple开发体系中的应用。Apple也是LLVM计划的主要资助者。
  目前LLVM已经被苹果IOS开发工具、Xilinx Vivado、Facebook、Google等各大公司采用。
  LLVM官方参考:https://llvm.org/

A1.3 xcrun

https://developer.apple.com/library/archive/documentation/Darwin/Reference/ManPages/man1/xcrun.1.html

A1.4 xcode

Xcode 是运行在操作系统Mac OS X上的集成开发工具(IDE),由Apple Inc开发。Xcode是开发 macOS 和 iOS 应用程序的最快捷的方式。Xcode 具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。

A1.5 Objective-C

Objective-C,通常写作ObjC或OC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。
   GCC与Clang含Objective-C的编译器,Objective-C可以在GCC以及Clang运作的系统上编译。
   1980年代初布莱德·考克斯(Brad Cox)在其公司Stepstone发明Objective-C。他对软件设计和编程里的真实可用度问题十分关心。Objective-C最主要的描述是他1986年出版的书 Object Oriented Programming: An Evolutionary Approach. Addison Wesley. ISBN 0-201-54834-8.

猜你喜欢

转载自blog.csdn.net/listener51/article/details/82907986
今日推荐