ios测试编译
‘壹’ ios中monkey测试脚本怎么写
一、利用fontMonkey测试工具包
1、下载FoneMonkey.zip文件并解压
2、用xcode打开工程目录
3、添加一个测试用的target并重命名:
4、选取刚才创建的target并将解压好的FontMonkey倒入工程目录 也可以直接拖入到文件目录:倒入时确保你的target为刚才添加的
5、此时在你的框架中会默认添加两个文件
libFoneMonkey.5.4a.beta.a
libFoneMonkeyOCUnit.5.4a.beta.a
这两个文件在FoneMonkey的lib文件夹中,如果框架管理中没有,则可以直接拖过去;
然后再添加几个框架文件(默认有三个),libxml2.dylib、SenTestingKit.framework、QuartzCore.framework
6、修改工程的配置文件 Buile Seting->Linking->Other Linker Flags
添加选项 -all_load
7、开始编译程序 选择测试target以及模拟器(真机器还没试验),运行
二在Instrument中编写脚本进行测试(不能录制)
1、打开Instruments工具 一般路径:/Developer/Applications/instrument
2、选择Automation
3、添加测试脚本(如果有现成的,可以导入)
4、编写脚本
给出测试几个按钮点击的脚本
var target = UIATarget.localTarget(); //变量用来表示这是一个测试系统
var application = target.frontMostApp(); //确定要测试的程序
var window = application.mainWindow(); //确定要册书的窗口
window.logElementTree(); //获取要测试界面的所有元素
var bt=window.buttons()[2];
if(bt.isValid()){
bt.tap();
}
else{
UIAlogger.logMessage("some error show!");
}
5、倒入程序的xx.app 包
6、点击Record将会直接通过脚本去点击程序中的一个按钮
‘贰’ ios测试和web端测试的区别
ios测试和web端测试的区别:
一、语言
前端和终端作为面向用户端的程序,有个共同特点:需要依赖用户机器的运行环境,所以开发语言基本上是没有选择的,不像后台想用什么就用什么,iOS只能用object-c,前端只能javascript,当然iOS还可以用RubyMotion,前端还能用GWT/CoffieScript,但不是主流,用的人很少,真正用了也会多出很多麻烦。iOS还可以用苹果新出的swift语言,后面可能用于取代object-c,还处于起步阶段,先不讨论。
objc和js这两者有个有意思的对比:变量/方法命名的风格正好相反。苹果一直鼓吹用户体验,写代码也不例外,程序命名都是用英文全称并且要多详细有多详细,力求看变量和方法名就能知道是干嘛的,例如application:didFinishLaunchingWithOptions:。而js因为每次都要从网络下载,要力求减少代码体积,所以变量方法名是尽量用缩写,实际上有代码压缩工具,无论变量名写多长最终上线的效果是一样的,但大家也都习惯了用短的命名,例如上述objc的application:didFinishLaunchingWithOptions:方法在js里习惯的命名是:$()。
objc与js都是动态语言,使用起来还蛮像,但objc是编译型,速度快,很多错误也能在编译过程中被发现,js是解释型,性能依赖于解释引擎,即使在强劲的v8引擎下性能也赶不上编译型语言,语言太动态,变量完全没有类型,写起来爽,debug起来稍微费点劲。一直感觉js轻巧灵活放荡不羁充满各种奇技淫巧,objc中规中矩没c++ java那么严肃也没有js那么灵活。
二、线程
前端开发几乎不需要线程这个概念,浏览器实现上页面HTML和CSS解析渲染可能与js不在同一个线程,但所有js代码只执行在一条线程上,不会并发执行,也就不需要考虑各种并发编程的问题。在新的JS特性中可以创建worker任务,这样的任务是可以另起一条线程并行执行的,但由于并不是所有浏览器都支持,不同线程传递数据各个标准定的还不一样,使用场景也少,似乎没有大规模用起来。对于数据库操作/发送网络请求这样的任务是在不同于js代码执行线程的,不过这些都由浏览器管理,前端无需关心也无法影响这些线程,只需接收事件回调,不需要处理任何并发问题。
终端开发需要大量使用多线程,iOS有一条主线程,UI渲染都在这个线程,其他耗时长的逻辑或者数据库IO/网络请求都需要自己另开线程执行,否则会占用主线程的时间,导致界面无法响应用户交互事件,或者渲染慢导致滚动卡顿。程序逻辑分布在多个线程里跑,需要处理好各种代码并发执行可能带来的数据不一致/时序错乱之类的问题,并发也导致有些bug难以排查,一不留神就掉坑,需要适当用一些队列/锁保证程序的执行顺序。iOS提供了一套多线程管理的方法GCD,已经把线程和队列封装得非常简单易用功能强大,比其他端或后台是好很多了,但还是会花大量功夫在处理多线程问题上。
三、存储
终端开发需要大量的数据存储逻辑,手机APP不像浏览器,用户打开浏览器必定是连着网,但打开一个APP时很可能是离线,也很可能处于网络状况极差的移动GPRS,所以必须把之前请求回来的数据保存好。保存数据后又需要与服务端最新的数据同步,如果全量同步数据量太大,耗流量速度也慢,于是需要增量同步,需要与服务端一起制定实现增量数据返回的方案,需要处理好客户端与服务端数据一致性的问题。当数据存储量大结构复杂时,还需要利用好有限的内存做cache,优化各类存储查询性能。
前端在桌面端很少需要存储,除非是one page app,不存储自然就不需要数据更新的一系列工作,数据都是从后台取出拼接后直接显示到页面上,即使像微博有可以在页面内不断加载更多数据,数据也只存在于内存,不会持久化存储,因为桌面端网速稳定,不计流量,所有数据可以直接从后端拿取,客户端没必要再做一套存储。移动端那些做得很像原生APP的web应用就跟终端开发一样了,数据同样保存到SQLite,存储逻辑以及要处理的问题都差不多。
四、框架
在第三方框架上web前端和iOS开发完全相反,web原生弱小又十分开放,让大量第三方框架和类库可以施展拳脚,而iOS原生强大又十分封闭,导致第三方框架没有多少生存空间。
浏览器一开始只为内容型的网页而设计,js也只是这个网页上能加点小特效的脚本语言,在web应用时代跟不上发展,需要很多第三方库和框架辅助,再加上前端开发是完全开放的领域,导致库和框架百花齐放多如牛毛,在初期多数库的作用集中在封装dom操作,大家不断重复造dom操作基础库的轮子,在一段时间百家争鸣后独尊jQuery,在有使用库的网站中90%以上使用jq,几乎成了个标准基础库。后期大家已经不再重复造这个基础库的轮子了,多了一些代码组织和前端架构的框架,例如一些帮助项目模块化的框架require.js,MVC框架backbone/angular.js等。
iOS开发苹果已提供了完整的开发框架cocoa,而这框架在每一代系统中都在升级优化和添砖加瓦,开发模式也已经定型,第三方框架没有多少生存空间,大量流行的开源项目是一些通用组件和库,像网络请求库AFNetworking,数据库操作库FMDB。而一些大的框架像beeFramework/ReactiveCocoa较难流行起来。
五、兼容
前端开发需要兼容大——量的浏览器,桌面的chrome,safari,ie6-ie10,firefox,以及各种套壳猎豹360等浏览器,移动端iOS/Android各自的浏览器,以及无限的不同的屏幕尺寸。看起来挺可怕,实际上也没那么难搞,只是拿出来吓唬下人。桌面端chrome/safari以及各种套壳的极速模式用的都是webkit,差异很小,firefox也大体遵从标准实现,与webkit差别不大,旧的ie6/7就需要特别照顾,不过很多网站都不支持ie6了,移动端更是一家亲,全是webkit,除了新特性上的支持程度不一,其他差异不大。对于不同的屏幕尺寸,高端点的会用响应式布局,针对不同屏幕尺寸自适应到不同布局,一般点的桌面端定死宽度,移动端拉伸自适应宽度就搞定。
终端开发也需要兼容各种不同的系统版本和手机尺寸,Android不用说,iOS也有3.5/4/4.7/5.5/9.7英寸这些尺寸,不过兼容起来跟web一样挺容易,就是自适应宽度,iOS的UIKit把这些都处理好了,还有autolayout,sizeClass等高级特性可用,在尺寸上并不用花太多功夫。系统版本上iOS7为分水岭,iOS7前后版本UI上差异比较大,需要做一些功夫兼容,不过iOS用户更新换代很快,预计再过一两年iOS7以下用户就可以忽略了。
六、性能
终端和前端都是面向用户的,性能优化目的都是尽快呈现内容,以及让程序在用户操作下流畅运行。终端主要关注的是存储/渲染性能。当一个APP存储数据量大,数据关系复杂时,数据查询很容易成为性能瓶颈,需要不断优化数据存取的效率,规划数据IO线程,设计内存cache,利用好终端设备有限的内存,渲染上避免重复渲染,尽可能复用视图,寻找最高效的渲染方案。
前端关注页面加载速度,由于web页面的结构/样式/程序/资源图片都是实时请求的,要让页面更快呈现内容,就要优化这些请求,让这些资源以最快速度加载下来,包括合并图片/合并代码减少请求数,压缩代码,并行请求,根据版本号缓存代码请求,gzip压缩,模块/图片懒加载等。此外跟终端一样也关注渲染性能,遵从一些规则避免页面reflow,避免使用CSS阴影这样耗性能的特效,用CSS3动画代替js等。
七、编译
终端开发需要编译的过程,把程序编译成机器语言,再与各种库链接后生成平台对应的可执行文件,最后由操作系统调度执行。在iOS终端开发中编译和链接的规则苹果已经在xcode这个开发工具上封装好,一般开发可以不用关心,但有深层需求时还是需要跟编译打很多交道,例如用编译前端Clang自定义静态代码检测规则,写编译脚本做自动化编译和持续集成,打包生成静态库,根据链接后的可执行文件的组成优化APP体积等。
前端开发的程序则不需要编译过程,只需要把代码扔给浏览器,浏览器边解析代码边执行。虽然js/css代码写完无需做任何事情浏览器就可以解析执行,但为了上面说的性能优化,前端代码上线前会对所有代码和资源文件进行处理,这些处理包括:压缩合并js/css,合并css sprite图,处理模块依赖,处理代码资源版本号,处理资源定位等。这个过程很像传统程序的编译,把给人看的代码优化处理成给机器看的,并解决一些依赖关系,可以算是前端的编译过程。像grunt.js/fis这些工具可以帮助完成这个编译过程,通常前端编译跟上线部署结合在一起,作为上线系统的一部分。
八、安全
前端和终端的安全性问题上虽然不需要像后端考虑得那么多,但还是有些需要注意。在请求的安全上,终端和前端都一样,用户向后端发送的请求都需要经过层层路由,不知道在哪里就被截获篡改或回放了,于是需要做一些措施防御这些情况,最常见的就是身份验证,多是采用会过期的token形式代替用户名密码,防止被抓包后黑客可以永远登陆这个账号。数据安全要求高的会用加密传输,或者使用https,另外还需要看情况处理一些DNS劫持,运营商广告植入等问题。
其他安全问题终端很少考虑,在未越狱的iOS机器上系统已经帮忙保证了整个APP运行环境的安全,而在越狱的机器下恶意程序拥有root权限可以做任何事情,APP也难以防范。前端方面浏览器的特性使前端开发有几个安全隐患,一是web页面上任意位置都可以动态插入js代码,浏览器会无区别地执行这些代码,二是身份验证信息都统一保存在cookie里,三是页面上可以随意通过iframe嵌入其他网站的页面。造成XSS、CSRF、cookie劫持这些攻击手段,所以前端写代码时都需要考虑还这些安全问题,做好相应的防范,最简单和重要的防范就是对所有用户输入输出的内容做完整的过滤,避免页面内被嵌入恶意代码。
九、交互/开发
最后说下对这两个领域在交互和开发上的个人感触。以前在做web前端时,感觉web让人机交互倒退了十年,交互都是硬邦邦的点击—啪一下出来结果,滚动是一格格地刷新,很多人当时在鼓吹html5可以做出多么炫的效果时,实际上FLASH在十年前就可以做出来了,还比最现代的浏览器更流畅。iPhone流行后,人机交互终于恢复了应有的水平,体验上比web流畅太多,指尖交互/流畅的动画/便捷的滑动手势/无限制的实现,主流终于恢复或超越了十年前Flash的水平。
但人机交互提升了,开发方式却大倒退,web的开发方式非常先进,用户用到的都是最新版本,发现bug可以马上上线秒修复,特别适用于互联网环境下的快速迭代,而终端APP不行,撇开iPhone的审核不说,Android也无法做到保证用户用的是最新的程序,用的都是传统的客户端更新的方式,bug的修复版无法及时给到用户,无法一天上线几十次,需要维护很多旧版本,开发方式倒退回web时代以前。这都是因为移动网络不稳定以及流量有限造成的,移动端无法像桌面端浏览器那样完全依赖网络,所以在移动网络稳定流量免费之前,开发方式都不会有多大变化。
另外并不看好HTML5,网络上说它可以取代APP说了三四年,到现在也没什么战绩,我看不到它的优势,原生APP可以获得更多的系统资源,更流畅的人机交互体验,HTML5在这方面永远比不上,而它在移动端网络和流量的限制下也无法发挥web的开发优势,所以它不会成为主流,只适合做一些轻量的小东西。
‘叁’ 如何编译OpenCV进行IOS7
编译的Xcode项目失败,出现以下错误: “缺少必需的架构arm64在文件/用户/ * / Git/ocr/opencv2。 它运作良好,如果我改变架构(构建设置下)(ARMv7的,armv7s),而不是(ARMv7的,armv7s)。 如何更改opencv的python构建脚本,添加arm64支持opencv2。
1. micahp的回答几乎是完美的,但错过了模拟器版本。因此,修改平台/ IOS /到: targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "arm64", "i386", "x86_64"]
你需要下载行工具Xcode的5.0.1,然后运行 python opencv/platforms/ios/build_framework.py ios
2. 我修改了以下内容,使之建立,虽然我还没有得到一个arm64 iOS设备进行测试的 编辑:我也只好跟着 假设“OPENCV”是包含从Github上的opencv源文件夹: 在每个gzlib.c, gzread.c, gzwrite.c位于opencv/3rdparty/zlib/地址: #include <unistd.h>
在顶部后,原有的包括。 另外开opencv/platforms/ios/cmake/Moles/Platform/iOS.cmake并从改线88: set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_BIT)" CACHE string "Build architecture for iOS")
到: set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_INCLUDING_64_BIT)" CACHE string "Build architecture for iOS")
在另外改变buildscriptopencv/platforms/ios/build_framework.py在99线和100从: targets = ["iPhoneOS", "iPhoneOS", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "i386"]
到: targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "arm64", "i386", "x86_64"]
所得到的库将包括以下内容: $ xcrun -sdk iphoneos lipo -info opencv2
Architectures in the fat file: opencv2 are: armv7 armv7s i386 x86_64 arm64
虽然我有一个关于剩余的关注opencv/platforms/ios/cmake/Toolchain-iPhoneOS_Xcode.cmake它定义了一个数据指针的大小为4的行14和17。它应该是8的64位我想,这样我没有测试过,如果库工作arm64我会建议进一步研究在这一点上,如果它不能正常运行。
3. 尝试等待下个月。将发布新的XCode具有更强大的32/64位支持。
4. 修改“到: def build_framework(srcroot, dstroot):
"main function to do all the work"
targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "arm64", "i386"]
for i in range(len(targets)):
build_opencv(srcroot, os.path.join(dstroot, "build"), targets[i], archs[i])
put_framework_together(srcroot, dstroot)
‘肆’ ios 怎么配置编译ffmpeg
IOS上编译ffmpeg需要先下载两个程序:iFrameExractor和ffmpeg
编译步骤:
1、在终端下: cd /iFrameExtractor/ffmpeg 建议开始就执行 sudo -s (获取权限命令)
2、在终端下输入 ./configure --prefix=/iFrameExtractor/ffmpeg --libdir=iFrameExtractor/ffmpeg/lib --enable-gpl --enable-static --disable-shared --enable-swscale --enable-zlib --enable-bzlib --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-pthreads
3、执行make 这里会有一堆的编译情况。
注:最好先升级Command Line Tools,避免编译错误
4、执行make install。 (执行完后 到iFrameExtractor/ffmpeg/lib文件上去看看)
出现 libavcodec libavdevice libavformat libavutil libswscale5个.a文件
5、用xcode 打开iFrameExractor工程,确认Header Search Paths里有:"$(SRCROOT)/ffmpeg"路径。 $(SRCROOT)表示工程路径。同时可以看到iFrameExractor工程下ffmpeg文件下的.a文件都不是红色的了。
6、真机上编译(模拟器上i386,真机上是arm的,真机还分arm6 和arm7 )
以下是针对arm7的
/configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-cross-compile --arch=arm --target-os=darwin --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as='gas-preprocessor/gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' -- sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk --cpu=cortex-a8 --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk' --enable-pic
7、执行 make 和make install 就有上面的几个.a文件,至此编译结束。
‘伍’ ios打包测试我需要怎么选择打包要修改debug的状态吗
iPhone如何打包成一个通用的静态库文件(模拟器和真机都可以用)看
1.先来一个必须的命令:
~/Library目录在lion下是默认隐藏的。这样很不方便。用一下命令可以使其显示:
chflags nohidden ~/Library
如果想再让其隐藏,可以:
chflags hidden ~/Library
2.静态库工程的建立:Xcode New一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static Library。直接next去建立一个MtimeLibrary这样的工程。(里面的功能就不要关注了,简单 2个数相加)

3.工程建立以后,删除默认的.h .m 文件,然后自己创建CountNumbers..h CountNumbers..m文件。如下图:
4.OK,选择iPhone 5.1Simulator ,Command + B 编译,我们可以在Procts下面找到我们编译生成一个模拟器上可运行的libMtimeLibrary.a这个文件,然后选择真机(如下图)再编译一次,这样会生成一个可以真机运行的libMtimeLibrary.a库。

5. 在libMtimeLibrary.a 右键 Open in Finder,可以找到libMtimeLibrary.a所在路径、后面我们会新建一个项目来添加这个.a文件测试。
打开终端:输入以下命令(路径根据自己的来决定)
cd /Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/
这样就到了Procts目录下了,ls 以后可以看到:

再输入一个命令: cd Debug-iphonesimulator/
然后通过下面命令来查看libMtimeLibrary.a信息
命令:lipo -info libMtimeLibrary.a
显示:
cashmatoMacBook-Pro:Debug-iphonesimulator cash$ lipo -info libMtimeLibrary.a
input file libMtimeLibrary.a is not a fat file
Non-fat file: libMtimeLibrary.a is architecture: i386
i386是mac上的架构。
然后再输入下面命令:
cd ../
cd Debug-iphoneos/
继续通过命令来查看 lipo -info libMtimeLibrary.a,
显示:
cashmatoMacBook-Pro:Debug-iphoneos cash$ lipo -info libMtimeLibrary.a
input file libMtimeLibrary.a is not a fat file
Non-fat file: libMtimeLibrary.a is architecture: armv7
armv7是iOS上的jia'ge架构。
到这里我们也明白了,为什么一个在真机上可以使用,一个只能在模拟器上使用了吧!
最后我们要做的就是要让这个libMtimeLibrary.a文件同时有i386和armv7信息,这样就是一个通用的静态库文件了。
6. 新建一个MtimeLibraryDemo应用,然后把真机或者模拟器的libMtimeLibrary.a 和CountNumbers.h文件引入进来,如图:

添加CountNumbers.h文件到需要调用的类里面,然后就可以调用libMtimeLibrary.a里面的方法了。
//
// AppDelegate.m
// MtimeLibraryDemo
//
// Created by cash on 12-3-23.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import "AppDelegate.h"
#import "CountNumbers.h"
@implementation AppDelegate
@synthesize window = _window;
- (void)dealloc
{
[_window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
CountNumbers *cn = [[CountNumbers alloc] init];
int count = [cn addTwoNumbers:10 :20];
NSLog(@"count:%d",count);
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
7. OK,编译运行这个应用程序。 错误了。。这个就是这篇文档的关键了.

我们找到刚才生成真机和模拟器的libMtimeLibrary.a目录。
debug-iphoneos里面的是基于arm6 arm7编译出来的库文件。debug-iphonesimulator文件夹下面的是基于i386编译出来的文件。

10. 最后是关键步骤:
通过lipo -create 命令来合并2个静态库文件。(-output 后面的/Users/cash/Desktop/test/libMtimeLibrary.a 是合并后的路径和文件名字)
lipo -create "/Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/Debug-iphonesimulator/libMtimeLibrary.a" "/Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/Debug-iphoneos/libMtimeLibrary.a" -output "/Users/cash/Desktop/test/libMtimeLibrary.a"
成功!
最后通过命令 lipo -info libMtimeLibrary.a 可以知道这个文件已经有i386和armv7信息了。
cashmatoMacBook-Pro:test cash$ lipo -info libMtimeLibrary.a
Architectures in the fat file: libMtimeLibrary.a are: i386 armv7
cashmatoMacBook-Pro:test cash$
‘陆’ appium ios 02怎么编译
因为是Python版,所以就去Selenium官网下载Python的WebDriver(selenium-2.39.0.tar.gz)
https://pypi.python.org/pypi/selenium
解压:
#gzip -dc selenium-2.39.0.tar.gz | tar xvf -
安装:
#cd selenium-2.39.0
#sudo python setup.py install //sudo依旧是解决Permission的问题
-----------
这样,WebDriver就安装成功了
我照着操作了一遍,版本不同了而已,很顺利:
selenium-2.41.0.tar.gz
Installed /Library/Python/2.7/site-packages/selenium-2.41.0-py2.7.egg
Processing dependencies for selenium==2.41.0
Finished processing dependencies for selenium==2.41.0
admins-Mac:selenium-2.41.0 admin$ which python
/usr/bin/python
admins-Mac:selenium-2.41.0 admin$ python -V
Python 2.7.2
编译例子:
三,要测试的app
测试的是appium提供的TestApp
首先,我们需要用xcode编译这个app
#cd appium
#cd sample-code/apps/TestApp
#xcodebuild -sdk iphonesimulator //为了防止iphonesimulator和设置的冲突,没有注明iphonesimulator的版本
-----------
如果看到** BUILD SUCCEEDED **,这个TestApp就build成功了。
操作的时候,留心先进入到项目目录下:
admins-Mac:testDemo admin$ cd test
admins-Mac:test admin$ ls -l
total 0
drwxr-xr-x 14 admin staff 476 Apr 22 2013 test
drwxr-xr-x@ 5 admin staff 170 Apr 22 2013 test.xcodeproj
admins-Mac:test admin$ xcodebuild -sdk iphonesimulator
Build settings from command line:
SDKROOT = iphonesimulator7.0
=== BUILD TARGET test OF PROJECT test WITH THE DEFAULT CONFIGURATION (Release) ===
…..
我后来运行的时候老是不能指定某个模拟器加载,而老是加载ios7.0,估计就是这个环节的相关配置引起的,以后有空再研究吧。不过也有群友说文档上说会自动启动最高版本的模拟器,这是不可以修改的。算了,反正以后多半使用真机做。
看到:** BUILD SUCCEEDED ** 就是编译成功了,在当前目录下就会生成一个build目录,顺带找找app文件在哪里。
admins-Mac:test admin$ pwd
/Users/admin/Documents/demo/testDemo/test
admins-Mac:test admin$ ls -l
total 0
drwxr-xr-x@ 4 admin staff 136 Apr 15 16:02 build
drwxr-xr-x 14 admin staff 476 Apr 22 2013 test
drwxr-xr-x@ 5 admin staff 170 Apr 22 2013 test.xcodeproj
admins-Mac:test admin$ find build|grep test.app$
build/Release-iphonesimulator/test.app
‘柒’ 如何提高ios 静态库的编译速度
iPhone何打包通用静态库文件(模拟器真机都用)
1.先必须命令:
~/Library目录lion默认隐藏便用命令使其显示:
chflags nohidden ~/Library
想再让其隐藏:
chflags hidden ~/Library
2.静态库工程建立:Xcode New新project选择IOS面Framework&Library面Cocoa Touch Static Library直接next建立MtimeLibrary工程(面功能要关注简单 2数相加)
?
3.工程建立删除默认.h .m 文件自创建CountNumbers..h CountNumbers..m文件图:
4.OK选择iPhone 5.1Simulator ,Command + B 编译我Procts面找我编译模拟器运行libMtimeLibrary.a文件,选择真机(图)再编译真机运行libMtimeLibrary.a库
?
5. libMtimeLibrary.a 右键 Open in Finder找libMtimeLibrary.a所路径、面我新建项目添加.a文件测试
打终端:输入命令(路径根据自决定)
cd /Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/
Procts目录ls 看:
?
再输入命令: cd Debug-iphonesimulator/
通面命令查看libMtimeLibrary.a信息
命令:lipo -info libMtimeLibrary.a
显示:
cashmatoMacBook-Pro:Debug-iphonesimulator cash$ lipo -info libMtimeLibrary.a
input file libMtimeLibrary.a is not a fat file
Non-fat file: libMtimeLibrary.a is architecture: i386
i386mac架构
再输入面命令:
cd ../
cd Debug-iphoneos/
继续通命令查看 lipo -info libMtimeLibrary.a
显示:
cashmatoMacBook-Pro:Debug-iphoneos cash$ lipo -info libMtimeLibrary.a
input file libMtimeLibrary.a is not a fat file
Non-fat file: libMtimeLibrary.a is architecture: armv7
armv7iOSjia'ge架构
我明白真机使用能模拟器使用吧
我要做要让libMtimeLibrary.a文件同i386armv7信息通用静态库文件
6. 新建MtimeLibraryDemo应用真机或者模拟器libMtimeLibrary.a CountNumbers.h文件引入进图:
?
添加CountNumbers.h文件需要调用类面调用libMtimeLibrary.a面
//
// AppDelegate.m
// MtimeLibraryDemo
//
// Created by cash on 12-3-23.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import "AppDelegate.h"
#import "CountNumbers.h"
@implementation AppDelegate
@synthesize window = _window;
- (void)dealloc
{
[_window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
CountNumbers *cn = [[CountNumbers alloc] init];
int count = [cn addTwoNumbers:10 :20];
NSLog(@"count:%d",count);
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
7. OK编译运行应用程序 错误篇文档关键.
?
我找刚才真机模拟器libMtimeLibrary.a目录
debug-iphoneos面基于arm6 arm7编译库文件debug-iphonesimulator文件夹面基于i386编译文件
?
10. 关键步骤:
通lipo -create 命令合并2静态库文件(-output 面/Users/cash/Desktop/test/libMtimeLibrary.a 合并路径文件名字)
lipo -create "/Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/Debug-iphonesimulator/libMtimeLibrary.a" "/Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/Debug-iphoneos/libMtimeLibrary.a" -output "/Users/cash/Desktop/test/libMtimeLibrary.a"
功
通命令 lipo -info libMtimeLibrary.a 知道文件已经i386armv7信息
cashmatoMacBook-Pro:test cash$ lipo -info libMtimeLibrary.a
Architectures in the fat file: libMtimeLibrary.a are: i386 armv7
cashmatoMacBook-Pro:test cash$
w
‘捌’ ios 真机测试生成的文件夹怎么什么地方
1、授权设备:
进入Apple Developer会员中心,点击图中的iOS Provisioning Portal,进入开发者授权设置系统:
在设置界面中,可以选择点击页面下方的助手来运行向导:
点击左侧导航的Device,进入授权设备的页面,点击右上方的Add Device按钮可以添加一个设备:
添加设备的时候可以指定设备的名字(随便写),以及设备的UDID。每一个Apple的设备都有一个唯一的标识符,获得这个标识符的方法很简单,有两种方式:
(1)将你的设备连接到电脑,然后在iTunes里找到你的设备信息(如下图),点击图中红色方框的位置,设备UDID就会显示出来。右击UDID会提示拷贝,将拷贝的结果复制到框内即可;
(2)打开xcode,window→organizer→devices,在里面可以看到identifier信息
2、添加App ID:
点击左侧导航的App IDs按钮可以进入应用程序ID的配置页面,可以点击页面右方的New App ID按钮添加一个新的应用。这个ID对应的是即将开发和测试的应用程序。如下图,在description里添加一个单一应用的名称(不支持特殊字符),然后在最下面的Bundle Seed ID里面填入一个含有domain格式的字符串(如com.bo.test)。Bundle Seed ID是一个集合了开发商与应用程序的信息,格式为(com.[开发商].[应用]),这里可以指定为单一应用,也可以指定为全部应用。如果是单一应用,建议刚才填写的description与Bundle Seed ID的最后一项相同(如test和com.bo.test),如果是全部应用,可以使用这样的Bundle Seed ID: com.bo.
3、添加证书:
(1)首先在mac电脑上生成开发者证书:
在Applications->Utilities里手动打开Keychain Access。按照下图操作最终点击“从证书颁发机构请求证书”
正确填写自己的邮箱和姓名即可,选择“存储到磁盘”,点击继续。最终会生成一个名为“CertificateSigningRequest.certSigningRequest”的文件。
这时候返回刚才的iOS Provisioning Portal网页界面,点击左侧的“Certificate”,点击页面右方的Request Certificate申请一个证书,然后点击页面下方的按钮上传生成的certSigningRequest文件,这样就完成了证书的申请流程。申请成功后,Certificate页面里就有了一条证书,刷新几次页面后证书的状态就变成Issued,点击download按钮可以下载一个cer文件。
4、使用开发者授权:
(1)回到iOS Provisioning Portal网页界面,点击左侧的“provisioning”,点击右侧的New Profile按钮创建一个新的授权文件:
填写profile Name;在Certificates中选择刚刚创建好的证书(一劳永逸的一步,之后只需勾选该证书即可,不必再手动添加);APP ID选择刚刚建的那个;Devices 选择刚刚添加的设备;Submit(绑定设备到应用程序);刷新页面,会看到刚刚建的那个后边有个Download,点击Download,下载了一个.mobileprovision文件。
(2)打开xcode→window→organizer,将下载的.mobileprovision文件拖到Provisioning中(此步骤绑定设备到应用程序,并生成证书)
(3)项目中的plist 文件,将Bundle Identifier 这一项的内容改成Bundle Seed ID(格式:com.[开发商].[应用])即可
将run按钮右边的设备选为对应的真机设备,接下来就编译运行看看吧!
‘玖’ 如何使用xcodebuild在命令行编译iOS工程
、准备工作 1、jenkins环境。搭建jenkins环境可以参考jenkins平台搭建和配置一节。需要注意的是,虽然涉及iOS开发,但是jenkins平台却不必搭建在mac机器上,只要在jenkins上添加mac节点就可以了。 2、iOS开发环境。iOS开发环境主要是指Xcode开发环境,Xcode是免费的,只要在苹果应用商店里下载一个就可以了。当然,还有重要的一点儿---开发者证书,现在个人也已经有免费的证书了,没有证书的话,只能打模拟器用的包了。 3、git项目。强烈建议把代码放在git上,这样便于团队开发。当然,不放git上也可以。 4、jenkins Xcode持续集成插件。常用的插件Xcode integration,这个插件能够快速的帮助我们进行Xcode打包配置,当然,只用纯shell脚本也是可以的。 在jenkins上打包之前,我们最好手工测试一下可以打包成功,首先用Xcode图形界面进行测试,然后用命令行测试,如果都能打包成功就可以挂在jenkins上运行了,毕竟jenkins的原理也是通过执行一系列命令来完成的。 三、jenkins配置 1、创建一个任务,创建任务的时候最好选自由风格的软件项目,这样配置起来比较方便,如果有需要,也可以选择其他的风格。 2、描述
‘拾’ ios 怎么选择podfie进行编译
iPhone何打包通用静态库文件(模拟器真机都用)1.先必须命令:~/Library目录lion默认隐藏便用命令使其显示:chflagsnohidden~/Library想再让其隐藏:chflagshidden~/Library2.静态库工程建立:XcodeNew新project选择IOS面Framework&Library面CocoaTouchStaticLibrary直接next建立MtimeLibrary工程(面功能要关注简单2数相加)?3.工程建立删除默认.h.m文件自创建CountNumbers..hCountNumbers..m文件图:4.OK选择iPhone5.1Simulator,Command+B编译我Procts面找我编译模拟器运行libMtimeLibrary.a文件,选择真机(图)再编译真机运行libMtimeLibrary.a库?5.libMtimeLibrary.a右键OpeninFinder找libMtimeLibrary.a所路径、面我新建项目添加.a文件测试打终端:输入命令(路径根据自决定)cd/Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/Procts目录ls看:?再输入命令:cdDebug-iphonesimulator/通面命令查看libMtimeLibrary.a信息命令:lipo-infolibMtimeLibrary.a显示:cashmatoMacBook-Pro:Debug-iphonesimulatorcash$lipo-infolibMtimeLibrary.ainputfilelibMtimeLibrary.aisnotafatfileNon-fatfile:libMtimeLibrary.aisarchitecture:i386i386mac架构再输入面命令:cd../cdDebug-iphoneos/继续通命令查看lipo-infolibMtimeLibrary.a显示:cashmatoMacBook-Pro:Debug-iphoneoscash$lipo-infolibMtimeLibrary.ainputfilelibMtimeLibrary.aisnotafatfileNon-fatfile:libMtimeLibrary.aisarchitecture:armv7armv7iOSjia'ge架构我明白真机使用能模拟器使用吧我要做要让libMtimeLibrary.a文件同i386armv7信息通用静态库文件6.新建MtimeLibraryDemo应用真机或者模拟器libMtimeLibrary.aCountNumbers.h文件引入进图:?添加CountNumbers.h文件需要调用类面调用libMtimeLibrary.a面////AppDelegate.m//MtimeLibraryDemo////Createdbycashon12-3-23.//Copyright(c)2012__MyCompanyName__.Allrightsreserved.//#import"AppDelegate.h"#import"CountNumbers.h"@implementationAppDelegate@synthesizewindow=_window;-(void)dealloc{[_windowrelease];[superdealloc];}-(BOOL)application:(UIApplication*):(NSDictionary*)launchOptions{self.window=[[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]]autorelease];//.CountNumbers*cn=[[CountNumbersalloc]init];intcount=[cnaddTwoNumbers:10:20];NSLog(@"count:%d",count);self.window.backgroundColor=[UIColorwhiteColor];[self.windowmakeKeyAndVisible];returnYES;}7.OK编译运行应用程序错误篇文档关键.?我找刚才真机模拟器libMtimeLibrary.a目录debug-iphoneos面基于arm6arm7编译库文件debug-iphonesimulator文件夹面基于i386编译文件?10.关键步骤:通lipo-create命令合并2静态库文件(-output面/Users/cash/Desktop/test/libMtimeLibrary.a合并路径文件名字)lipo-create"/Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/Debug-iphonesimulator/libMtimeLibrary.a""/Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/Debug-iphoneos/libMtimeLibrary.a"-output"/Users/cash/Desktop/test/libMtimeLibrary.a"功通命令lipo-infolibMtimeLibrary.a知道文件已经i386armv7信息cashmatoMacBook-Pro:testcash$lipo-infolibMtimeLibrary.aArchitecturesinthefatfile:libMtimeLibrary.aare:i386armv7cashmatoMacBook-Pro:testcash$w