导航:首页 > 源码编译 > ios脚本编译

ios脚本编译

发布时间:2023-01-31 02:39:08

A. iOS项目添加shell脚本,就这么简单

1.在target -->build Phases 左侧点击 +

2.选中Run Script

4.将.sh文件路径添加到Run Script里

当然此时如果直接编译,可以还会报以下错误:

chmod 修改权限
a 所有用户

收工~

B. iOS一键自动编译打包提交

在开始之前先唠叨两句自己对iOS自动化打包的接触,觉得没啥看头滴老铁可以略过直接从第二部分开始。项目自动打包提交的优势不用说了,很高效便捷的东西,很早就接触到了,但是一直没有用到项目中,分析一下主要有以下几个原因:

总结以上原因,一直没有用到自动打包技术。而现在的情况是,

基于以上的情况,所以想自己写一个自动打包的脚本,能够实现 只运行一句命令就自动编译打包发布 ,啥都不要做,挂着就行,打包完自动打开页面提醒。

打包所需要的文件已经挂在 Github 上了。只需要把 BuildTool 文件夹 复制 到 项目主目录 ,注意是复制!不是拖入项目主目录,因为苹果审核有屏蔽fir关键词。然后打开终端, cd 到 BuildTool 文件夹,输入 sh build.sh 命令,回车,开始执行此打包脚本。

具体的使用方法和参数配置 shell脚本 里面已经有非常详细的注释。

有 AppStoreExportOptions.plist 和 AdHocExportOptions.plist 两个plist文件,分别对应发布到AppStore和AdHoc(蒲公英、fir)。简单说一下里面的属性:

写完脚本后,发现已经有老铁对打包脚本做了很详细的分析了: 详解Shell脚本实现iOS自动化编译打包提交 。也有老铁早就写了iOS自动打包的脚本: xcode_shell 。

看了一下,功能也比较全,比如上传包到自己的服务器、上传完成发邮件测试人员。但是现在已经有第三方平台也做到了比这更多的功能,比如蒲公英,还可以手机短信通知测试人员,有专门的页面外链,支持持续集成等。

老铁们如果还有什么建议,欢迎在下面给我留言或私信。🤗 🤗 🤗

问题一(更新于2018年11月14日):

升级 Xcode 10 以上版本,苹果采用新的构建系统,之前的 xcodebuild clean 命令已经无法使用,如果用这个命令的话会报错,苹果给的建议是删除根目录下的 build 目录文件夹,删除就可以完整打包了。但是每次打包都需要再删除一遍,由于这个目录的主要作用就是存储 该项目的历史构建包(Archive归档文件和iPA包) ,所以解决办法是:

参考资料: build_system_release_notes_for_xcode_10

C. 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 源码。不需要记忆,简单看下就可以。

D. Exception: Error building Player because scripts has compiler errors 希望做IOS开发的朋友帮我分析下

这段代码是你在PC下用的,并没有定义到你所用的版本中去,能在PC编过,但是到了IOS里面没有定义这些东西,就会出现脚本编译错误的问题;在你所发的IOS中去定义,让他能找到你需要打包编译的文件,就好了

E. 如何在mac程序代码中调用AppleScript脚本

关于AppleScript
说到AppleScript,可能涉及到三个含义:
1.AppleScript语言:就是苹果脚本的语言,用来编写运行于Mac系统的脚本。
2.AppleScript脚本:就是使用AppleScript语言编写的一系列指令。以后简称脚本。
3.AppleScript脚本解释程序:用于解释和执行AppleScript脚本中指令的程序。是Mac系统的原生程序和重要组成部分。下面简称AppleScript脚本程序。
AppleScript Editor
要编写AppleScript脚本,当然就需要编辑工具了,首先打开AppleScript编辑器:
貌似可以使用Xcode编写Cocoa - AppleScript Application,这个暂时还没尝试。我们先从AppleScript编辑器开始。
界面很简单,主要分为工具栏、编辑区和运行结果区。编辑区用来编写脚本,工具栏用来编译和运行脚本等,运行结果区呈现运行结果,这个不用多说了吧。

say和beep
首先来玩两件很好玩的事:让Mac发音和说话。
在编辑区输入以下脚本:

view sourceprint?
1.say "How are you?" using "Zarvox"
2.say "Fine, thank you." using "Victoria"
3.say "Ha Ha"
4.beep

点击工具栏的编译(或Command + K),可以看到脚本变了颜色,具体颜色的含义,可以在偏好设置中查看并设置:

接着点击运行(Command + R运行,Command + .停止运行)。可以看到运行结果区的回复栏中的显示如下:

更加好玩的是Mac系统在自然自语了,还有最后的一声咚。
下面来解释下脚本和运行结果的意思:

view sourceprint?
1.say "说话的内容" using "指定人的嗓音"

这句脚本的意思就是让Mac系统按照指定人的嗓音说出我们指定的说话内容。当然using "..."是可以缺省的。

view sourceprint?
1.beep 发声次数

这句脚本的意思是让Mac系统发出咚的声音,发声次数决定了咚出现的次数,例如beep 2那么Mac会咚两次。发声次数缺省为1。

在运行时回复输出的意思是:
tell表明将以上say和beep的任务交付给current application去完成,也就是AppleScript脚本程序。
tell模块
同样道理,我们可以用tell模块将特定的任务交付给Mac中特定的程序去执行。
tell模块的语法为:

view sourceprint?
1.tell application "Application Name"
2.do your job here
3.end tell

例如我们想让Finder程序清空垃圾篓然后打开磁盘,可以这样写:

view sourceprint?
1.tell application "Finder"
2.empty the trash
3.beep
4.open the startup disk
5.end tell

注意"Finder"的双引号必不可少。

回复输出为:

view sourceprint?
01.tell application "Finder"
02.empty trash
03.--> current application
04.--> error number 0
05.beep
06.--> error number -10004
07.end tell
08.tell current application
09.beep
10.end tell
11.tell application "Finder"
12.open startup disk
13.end tell

可以看到empty the trash任务是交给Finder程序去完成的,而beep任务是交给current application程序去完成,接下来的open the startup disk任务还是交回给Finder程序完成。

在tell模块中的任意位置可以插入beep,say等由current application程序解释执行的语句。
注意,交付给某个程序执行的语句必须在tell模块之内。
错误写法:

view sourceprint?
1.tell application "Finder"
2.empty the trash
3.beep
4.end tell
5.open the startup disk

编译时可以看到没有报错,运行起来看看:

运行结果区的回复输出如下:

view sourceprint?
01.tell application "Finder"
02.empty trash
03.--> current application
04.--> error number 0
05.beep
06.--> error number -10004
07.end tell
08.tell current application
09.beep
10.end tell
11.tell application "AppleScript Editor"
12.open startup disk
13.--> missing value
14.end tell
15.结果:
16.missing value

boot应该由Finder程序去打开,但是由于超出了tell applicaiton "Finder"模块,所以给语句将交由AppleScript Editor程序解释执行,很可惜,AppleScript编辑器无法打开boot,报错。
AppleScript Editor的小技巧

1.使用esc键呼出代码补全菜单

在写te时按下esc键,此时出现代码补全菜单:

2.在编辑区点击右键(或按住control键再点击左键)呼出上下文菜单

在上下文菜单中我们可以将AppleScript语句快速地插入到编辑区中,例如:

也可以将一段语句插入到Tell语句块中,方法是先选中这段语句,再插入到Tell Blocks中:

3.编辑程序的补全和修正功能
你可以输入:

view sourceprint?
1.tell app "Finder"
2.end

在编译后将被替换为:

view sourceprint?
1.tell application "Finder"
2.end tell
在编写AppleScript脚本时,是不区分大小写的,当然在编译过后也会被替换成正确的大小写形式。
这些小技巧都非常有利于快速编写脚本。

保存脚本
写好了程序,当然是保存了。可以在菜单中点击文件 —— 存储(或按快捷键Command + S)。
在保存时有多种文件格式:

保存为脚本格式
如果保存为脚本,那么下次打开文件时还是用AppleScript编辑程序来打开。桌面图标如下:

保存为应用程序格式
如果保存为应用程序,那么最好保留个脚本的,否则将不能用AppleScript Editor来打开编辑。
保存时的对话框如下:

如果选中“显示启动屏幕”,那么以后运行程序前会弹出一个对话框提示:

如果选中“运行处理程序后保持打开”选项,那么在程序运行完毕后会停留在Dock中。
保存的图标和脚本格式不同,如下(少了个纸张背景):

F. 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将会直接通过脚本去点击程序中的一个按钮

G. iOS编译加速-CCache

CCache是一个编译工具,可以将xcode编译文件缓存起来,从而达到编译提速。

优点
能大幅度地提升编译速度,起码要减少掉 50% 的编译时间
不需要对项目作出重大调整
不需要改变开发工具链

缺点
不支持clang的moles,需要手动引入链接库
不支持oc++
不支持swift

brew install ccache

需要两个脚本,需要对c++和oc分别处理

修改两个文件的权限
$ chmod 777 ccache-clang

cache directory /Users/frank/.ccache
primary config /Users/frank/.ccache/ccache.conf
secondary config (readonly) /usr/local/Cellar/ccache/3.6/etc/ccache.conf
stats updated Thu Apr 25 17:20:42 2019
cache hit (direct) 0
cache hit (preprocessed) 1
cache miss 855
cache hit rate 0.12 %
called for link 1
compile failed 4
unsupported compiler option 487
no input file 2
cleanups performed 0
files in cache 4134
cache size 133.5 MB
max cache size 10.0 GB

移除PCH,CCache是通过md4进行缓存查找,因此当你修改了 PCH 或者 PCH 引用到的头文件的内容时,会造成全部缓存失效,只能全体重新编译。

H. iOS开发知识体系之《脚本自动化打包--xcodebuild》

iOS脚本自动化打包方案--xcodebuild

本文主要xcodebuild脚本自动化打包并上传到蒲公英或者AppStore,废话不多说,直接上干货!

先了解一下xcodebuild打包需要的一些指令

-workspace XXX.xcworkspace

XXX.xcworkspace需要编译工程的工作空间名称,如果工程不是.xcworkspace的,可以不需要-workspace XXX.xcworkspace这段话

-scheme XXX

XXX是工程名称,-scheme XXX是指定构建工程的名称

-configuration Release

填入打包的方式是Debug或Release,就跟在Xcode中编译前需要在Edit scheme的Build configuration中选择打出来的包是Debug还是Release包一样,-configuration就是配置编译的Build configuration

-archivePath ./myArchivePath

配置生成.xcarchive的路径, ./表示生成在当前目录下,myArchivePath是生成的.Archive文件名称

ODE_SIGN_IDENTITY=证书

配置打包的指定证书,如果该工程的Xcode已经配置好了证书,那么不加入这段话也可以,打包出来的证书就是Xcode中配置好的。

PROVISIONING_PROFILE=描述文件UUID

配置打包的描述文件,同上,Xcode已经配置好了就不用在填入这段话了

CONFIGURATION_BUILD_DIR

配置编译文件的输出路径,如果需要用到.xcarchive文件内部的dSYM等文件,可以使用改字段指定输出路径。

如果工程是勾选了Automatically manage signing,那么就不用在配置ODE_SIGN_IDENTITY和PROVISIONING_PROFILE,今天这里讲到的Automatically manage signing自动配置证书,手动配置的就不多说了,有兴趣的话可以自己研究。

xcode工程配置自动获取证书,如下图:

打包所需要文件

配置打包的ExportOptions.plist文件,可以在任意一个Xcode工程中新建一个ExportOptions.plist文件。dev和adHoc和AppStore的配置文件内容不一样,可以先手动打包后看下plist文件的样式,这里提供一个样例:

这里method对应的value为打包对应的环境,有development、ad-hoc、app-store、enterprise根据打包环境来配置不同的值

编译脚本命令

xcodebuild archive -workspace XXX.xcworkspace -scheme XXX -configuration Release -archivePath ./myArchivePath CONFIGURATION_BUILD_DIR ./dir ODE_SIGN_IDENTITY=证书 PROVISIONING_PROFILE=描述文件UUID

导出ipa包命令

xcodebuild -exportArchive -archivePath ./myArchivePath.xcarchive -exportOptionsPlist ./ExportOptions.plist -exportPath ./out

-archivePath ./myArchivePath.xcarchive指定需要打包的.xcarchive路径,./myArchivePath.xcarchive表示在当前终端路径下的myArchivePath.xcarchive文件

-exportOptionsPlist ./ExportOptions.plist指定打包需要的ExportOptions.plist配置文件路径

-exportPath ./out指定打包输出的路径, ./out表示打包结果输出在终端的当前路径下的out文件家中。如果没有out文件夹会自动创建一个

脚本操作

首先:cd到需要自动打包的工程下

然后:在终端中输入touch xcodebuild.sh创建xcodebuild.sh脚本文件

然后:双击打开脚本写入下面 脚本内容(请确保所有版本的plist配置文件都写好了)

最后:在终端中输入./xcodebuild.sh运行脚本,按照步骤完成打包选择(如果运行的时候出现Permission denied,请先在终端中执行chmod a+x *.文件的后缀名后,在运行,相当于提高脚本文件的权限)

脚本内容

此脚本包含了自动上传蒲公英的选择操作,根据输入指令来执行具体操作

脚本实现

具体详细脚本见GitHub地址: https://github.com/Luck-666/xcodebuild.sh.git 如果好用记得给star,谢谢!

如脚本打包执行遇到问题可留言沟通!

I. iOS 自定义pod库插入shell脚本

在开发私有pod库时,我们可能会有这样的需求,当目标工程安装我们的pod库之后,我们需要执行响应的操作,比如说在编译之后上传dsym文件、在运行之前修改项目资源等等,如果平时项目开发中有这种需求,我们会通过shell或者ruby脚本去执行,但是我们自定义的pod库该怎样去让target工程去执行这些脚本文件呢,下面上demo教程

这个脚本是作为pod的编译的一部分,但是与prepare command不同,script是作为xcodebuild的一部分执行的,脚本可以利用编译器的一切环境变量,脚本的执行顺序是按照声明顺序执行的。

像上面Demo中,我配置了一个script_phase,其中, :script=> 表示所需要执行的脚本,我们通过引用,并采用CMD可以书写多行执行脚本,
:execution_position => 表示是在编译前执行还是编译之后执行, :shell_path => 表示脚本运行环境路径

上面Demo中script1执行后会写入一个字符串在tst.txt文件中,pod install->run运行结果

可以看到这里两个script都执行了

J. 【iOS开发】打包成ipa的方法

<blockquote>
一、Xcode-archive(苹果推荐方式) --- (推荐)
二、iTunes拖入
三、全自动编译脚本 --- (推荐)
四、通过已有.app,编译脚本自动生成ipa包
五、通过已有.app,手动压缩改后缀方式
</blockquote>

</br>

<blockquote>
** 一、Xcode-archive(苹果推荐方式)(推荐)**
</blockquote>

<blockquote>
** 二、iTunes拖入**
</blockquote>

<blockquote>
三、全自动编译脚本
</blockquote>

<blockquote>
四、通过已有.app,编译脚本自动生成ipa包
</blockquote>

5.将要转化的.app文件放到distribute/文件夹下
这时的文件夹目录结构是这样的:(注意,脚本中所有appName请先替换成你的真正app名称)

6: 运行distribute.sh脚本
打开Terminal,cd到distribute文件夹下,把distribute.sh拉到terminal中执行。如果提示permission denied,则用“chmod 777 distribute.sh”命令赋予权限后,再执行一次distribute.sh。

7: 大约若干秒后,会在distribute/文件夹下生成appName/文件夹,里面的appName.ipa就是我们想要的包。

<blockquote>
** 五、通过已有.app,手动压缩改后缀方式**
</blockquote>

<br />
参考资料:
http://jingyan..com/article/ceb9fb10f4dffb8cad2ba03e.html
http://www.cnblogs.com/wengzilin/p/4601684.html

——————————— 【 MadeBy 纪宝宝 】 ———————————

阅读全文

与ios脚本编译相关的资料

热点内容
编程猫拔萝卜文字评价模板 浏览:246
cmdjava命令 浏览:237
扫描版pdf转文字版 浏览:532
单片机专用寄存器 浏览:495
学习python的手册 浏览:676
vue编译成js文件 浏览:90
给单片机供电的电池 浏览:341
什么app是分享教育的 浏览:899
可视化编程java 浏览:83
人工智能温控器算法 浏览:376
大号文件夹多少钱一个 浏览:572
pdf阅读器打开文件 浏览:98
winrar解压日文文件 浏览:38
什么app可以看广东珠江电视台 浏览:75
linux移动文件位置 浏览:144
循环码与卷积码编译原理 浏览:808
进化算法和启发式算法的区别 浏览:602
android组件是什么 浏览:973
安卓手机微信怎么同步信息 浏览:183
小人pdf 浏览:806