導航:首頁 > 源碼編譯 > 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腳本編譯相關的資料

熱點內容
怎麼知道dns伺服器是多少 瀏覽:976
5995用什麼簡便演算法脫式計算 瀏覽:918
電腦上如何上小米雲伺服器地址 瀏覽:919
手機資料解壓密碼 瀏覽:444
44引腳貼片單片機有哪些 瀏覽:692
阿里程序員腦圖 瀏覽:189
廣東編程貓學習班 瀏覽:708
上海數控編程培訓學校 瀏覽:313
怎麼下載我的解壓神器 瀏覽:634
lib文件無用代碼會編譯嗎 瀏覽:28
我的世界嗨皮咳嗽伺服器怎麼下 瀏覽:1002
mvn命令順序 瀏覽:978
車貸還完多少時間解壓 瀏覽:964
java頁面開發 瀏覽:820
學編程的小發明 瀏覽:25
為什麼說程序員喜歡格子 瀏覽:253
代碼編譯後叫什麼 瀏覽:969
電腦文件夾做了保護怎麼刪除 瀏覽:678
php資料庫連接全局 瀏覽:528
葫蘆島有程序員嗎 瀏覽:986