‘壹’ macos开发,在程序里面执行shell脚本
上一篇 我写了在xcode里面添加 run script 来执行脚本,可是打包之后发现,只有用 xcode 运行的时候才会执行这个 shell 命令,查了很多资料,最后我觉得应该是我理解错了,这里的 run script 很可能只是为了方便自动化打包之类的场景适用,而并不是真正的运行时执行脚本。那该怎么实现呢?
参阅博客一
参阅博客二
参阅博客三
但是有一个问题,因为脚本是:
adb需要管理员权限,所以一直提示没有权限执行脚本。
查了一下资料,可以用 with administrator privileges ,这时候又报"用户名密码不正确",不知道为啥,最终抛弃了 NSTask ,找到了 这个库 ,它自动帮我们处理权限问题,最终:
按理说这样应该就没啥问题了,可是这是由又报 someting went wrong:6005 ,又是一顿google, 最终发现 :
‘贰’ Xcode使用Run Script脚本
由于某次上线,忘记修改Display Name,铸成大错。
Xcode可以使用脚本,在打包时修改Display Name、Bundle Id等信息。
一、在Build Phases添加脚本
1.2 自增长Build Number
二、在Scheme里添加脚本
在这里写可以不用写判断Debug或Release模式
三、错误
可能会出现错误:
编译前clean一下,就可以解决了。
这是由于PRODUCT_BUNDLE_IDENTIFIER并没有改过来导致的。
所以在打包上传之前,需要clean一下。
参考资料:
‘叁’ Xcodebuild & xcuitest
充分利用Xcodebuild来完善、掌控、加速你的iOS UI自动化测试吧!
Xcode8之前,想要运行单元测试和UI测试,都需要进行编译。事实上集成到自动化环境中,在Jenkins节点等服务机上编译整个项目(就像打包app)是十分耗时且依赖配置的。
Xcode8的发布,带来了iOS测试和开发的xcodebuild的一些新特性:
build-for-testing & test-without-building
就是把UITest的编译和运行测试环节可以分开,不仅如此,编译的结果可以带到其它机器上直接执行测试流程哦。
当你的UITest脚本趋于稳定的时候,就可以考虑并发测试啦。build once,test anywhere!
2.1编译(创建xctestrun文件)
该命令会编译app并在DerivedPath文件夹中生成xctestrun文件。
可以在DerivedPath这个文件夹中找到xctestrun文件
2.2直接执行UI自动化测试
destination 参数可以指定多个
类似:
执行该命令会看到命令行终端给出提示:
默认是并发地使用多个目标来展开测试。
增加-disable-concurrent-destination-testing参数可以是测试在这些目标上串行进行。
最大的真机并发数量并没有限制。
真机和模拟器的最大并发测试数量都可以通过对应的参数来指定。
-maximum-concurrent-test-device-destinations
-maximum-concurrent-test-simulator-destinations
那么resultBundlePath指定的路径就是测试结果数据所在的文件夹啦。
结合 xchtmlreport 命令可以产生多设备测试结果报告。(点击可以打开项目地址)
在执行xcodebuild test或者test-without-building命令的时候,修改默认的-resultBundlePath 参数,将测试记录指定到自己想要的目录yourDir(上文中就是/Users/lipeng/Desktop/TestResult/GuijinshuDev)
安装:
使用:
就可以得到更加适合非专业人士阅读的UI自动化测试报告了:
极力推荐这个测试报告生成工具,可以查看多个机型的汇总报告。(相对于 xcpretty 更适合生成xcuitest报告)
‘肆’ xcode使用方法
xcode使用方法:(以xcode5为例)
1,下载安装好xcode5后,就可以开始ios开发之旅了。首先打开xcode。选择新建一个xcode项目。
‘伍’ iOS开发-需要了解的Shell脚本语法
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 脚本(shell script),是一种为 shell 编写的脚本程序。在iOS开发中,我们通常编写一些自动化的脚本文件,来提高我们的生产效率,其本质就是通过Shell脚本对一些 xcodebuild , xcode-select , xcpretty , xcrun 等指令的封装。本篇文章,我们就针对 Shell 脚本的语法,做一些罗列,以辅助我们去完成一些自动化封装。
执行脚本
.sh 文件为 Shell 脚本文件格式,通过 sh 指令执行脚本文件
执行结果:
1.通过 echo 输出变量时,需要使用 $ 或者 ${} 修饰
2. (重点)定义变量时,等号之间不能有空格,不然会误认为变量为一个指令
3.可以直接修改 name 变量的值,即当前 name 默认为 readwrite 权限
4.我们给 _var 用 readonly 修饰后,再修改值会抛出异常
执行结果:
执行结果:
执行结果:
执行结果:
$@ 和 $* 都是输出所有参数,前者是 "$1" "$2" "$3" "$4" ,后者是 "$1 $2 $3 $4"
执行结果:
注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ] 。
关于文件检测运算符,这里还是都罗列一下吧,比较重要:
执行结果:
执行结果:
执行结果:
执行结果:
2.有参数
执行结果:
注意: $10 不能获取第十个参数,获取第十个参数需要 ${10} .
使用 man 查询 指令文档
比如我们想查看 xcodebuild 指令下都有哪些操作,直接在终端执行:
当我们不清楚某一个指令下的操作时,就可以通过 man 查询,然后辅助我们来编写 Shell 指令。
在iOS下,了解下这些 Shell 语法就足够了,已经可以帮助我们完成大部分的 Shell脚本 的编写或者阅读别人的 Shell 源码。不需要记忆,简单看下就可以。
‘陆’ Xcode编译时执行sh脚本报”权限被拒绝“怎么办
这是sh脚本没有加权限导致的。
1、开终端进入脚本文件所在的目录
2、输入命令:
chmod 755 scriptname.sh
scriptname.sh就是你加权限的sh脚本文件名。
‘柒’ xcode 怎样运行开发的程序
iPhone的开发现在大家还是在摸索的阶段,当然不排除有人已经进阶。
现在就简单得介绍一下默认创建的工程的分析。 开发环境:Mac OS X10.5, XCode 实例代码:默认项目 创建默认项目后,就可以进行 build,然后就可以在模拟器上运行,那么,这个最基本的程序的启动与执行流程 是什么样子的呢,
那么现在来分析一下
1、程序入口点 创建的项目中,在XCode 的 Other Classes中,有一个 main.m的文件,入口点就在这里, 方法: int main(int argc, char * argv[]) 就是整个程序的入口,和 C语言一样
2、主程序设置 main方法中有一个 UIApplicationMain(xx, xx, xx, xx,); 这个方法调用,关键就在这里,其中最后一个 参数的意义就是 DelegateClass,这个就是指定的代理类的名称,代理的意思就是,执行这个方法后, 系统会装载指定的类,并且执行相应的方法,进入循环中。
3、代理类 Delegate 代理类 基本上名称是 XXXAppDelegate,其中需要定义 - (void) *)application 方法,该方法的含义是,当系统装载完成 程序时,执行该方法操作
4、applicationDidFinishLaunching 装载 显示界面 创建 Window, 装载 MyView,创建并显示
5、MyView 自定义 View,如果使用 Interface Builder 进行设计的话该默认文件几乎无用,以下介绍自定义View -(void)init 方法,重载该方法,可以进行各种属性设置 -(void)drawRectCGRect)rect 方法,这个类似于 J2ME 中 Canvas的 paint方法,在该方法内部可以进行绘制操作
6、完毕
‘捌’ Xcode打开终端(Terminal)进行git 相关操作
iOS 开发,新电脑,新环境。用Xcode,git,但是不喜欢Xcode自带的source tree,又但是每次git pull 、push相关操作都得把项目文件拖进终端,这样就麻烦了很多。
所以记录了Xcode迅速打开终端(Terminal)
1.新建个.sh文件 ,执行一下脚本
#!/bin/sh
if [ -n "$XcodeProjectPath" ]; then
open -a Terminal "$XcodeProjectPath"/..
else
open -a Terminal "$XcodeWorkspacePath"/..
fi
2.打开 Xcode 的 Behavior 界面, 如下所示:
然后点击如上图的加号, 出现新建的 Behavior:
选择你刚刚新建的.sh文件,如果文件是灰色的,不可选择点击,打开终端,执行chmod 777 你的.sh文件
chmod +x your_script_name.sh 这玩意好像不起作用,大家注意下
然后添加 勾选run,前面设置个快捷键 command+T,就完成了
‘玖’ 怎么查看 xcode build phase 脚本执行
你要确认下www用户,是否有权限执行这个脚本
我给你明确一点,我在之前公司,用php做过安卓自动打包系统,是没任何问题的
但具体代码因为已经离开公司了,所以也就没有了
你需要把安卓源文件整个文件夹权限都改为777
然后sh、php文件都要有777权限
然后如果还不行 要输出报错信息
才能进一步分析
‘拾’ iOS专项测试杂谈
最近稍微尝试了一些iOS专项测试:压力测试、CPU、内存、流量、耗电量测试等等,本文就简单聊聊iOS专项测试。
一、压力测试
iOS压力测试推荐github上的ui-auto-monkey。使用简介如下:
1. 安装:xcode打开你的ios项目 — Proct — Profile — UI Automation,然后导入UIAutoMonkey.js这个脚本。
2. 修改配置信息:
3. 执行该脚本即可;
4. 它还具有一些额外功能包括:UI holes、application not responding等等。
二、CPU、内存、流量、耗电量测试
方法1:采用第三方framework,比如GT.framework,嵌入到应用中。
该方法的优点是:数据可以导出分析、可以图表化展示、而且功能强大,CPU、内存、流量、耗电量、平滑度等等都能分析;缺点是需要源码、并且重新打包app。因此该方法不能用来做竞品分析。
方法2:instruments
Xcode自带的instruments功能强大,可以检查内存、内存泄漏、time profile、耗电量、流量、CPU等等;另外,开发者模式可以用来模拟弱网络、录制耗电量和流量数据。
该方法的缺点就是很多数据不能导出分析,采样得到的数据只能通过instruments自身进行分析;耗电量数据只是energy usage level,精确度数据不直观。也很不方便用来做竞品分析。
方法3:摄像+分析
iOS竞品测试,主要是通过摄像然后进行时间分析的方法来进行。
方法3:通过tcpmp进行流量分析,可以用于竞品分析。
欢迎访问我的博客: www.dzwanli.com.cn