<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Automator 體驗(yàn):快速符號(hào)化 Crash 文件

          共 1823字,需瀏覽 4分鐘

           ·

          2021-11-30 17:32

          29ac96d1b27b6e18448b335d45139313.webp

          背景

          起因是最近有接到一個(gè)臨時(shí)協(xié)助任務(wù),其中有幾個(gè)重要的流程:

          • QA 方導(dǎo)出 .crash 文件(必要的)
          • 我方要根據(jù)測(cè)試提供的 crash 文件的build number,去下載對(duì)應(yīng)的 xx.app.dSYM
          • 把下載的dSYM給合作方
          • 合作方解析crash文件

          從上的步驟可以看出第一步不可省略。第二、三步完全可以干掉,流程越多越浪費(fèi)時(shí)間。第四步也可以我們自己做,就可以優(yōu)化成 QA 直接解析好 crash 文件然后給合作方。

          那么就提效了提效50%是不是,兩個(gè)人的事情一個(gè)人搞定 (那么就可以卷點(diǎn)別的)

          9c0721818a1bc25002cc377403dda0bb.webp

          初版方案

          小插曲

          一開(kāi)始第一周我寫了個(gè)Shell,調(diào)試通過(guò)之后就沒(méi)繼續(xù),就干其他大活了(這里有個(gè)有悲?。?...... 第二周的時(shí)候,不知怎的崩潰出奇的多(應(yīng)該是合作方更新SDK之后導(dǎo)致的) 當(dāng)時(shí)我正Coding熱火朝天,QA和合作方奪命的Call我就去找那個(gè)當(dāng)時(shí)寫好的shell腳本,一通翻箱倒柜之后,我悟了,悲劇來(lái)了,找不到了 呵呵,被自己強(qiáng)迫癥日常清理垃行為給清理了(自己有個(gè)日常清理的垃圾的行為,無(wú)奈Mac配置就這樣)70a9267440e6b87aab4c79a724d9e7f9.webp打工人不得不含著淚重新寫了一份 (源碼在下面),快速應(yīng)付下那邊的奪命Call然后我就在想這個(gè)事,為啥要我來(lái)做,也沒(méi)啥技術(shù)含量,為啥不可自動(dòng)化?Bingo~ 說(shuō)來(lái)就來(lái)

          Shell 源碼

          crash_txt=$1
          crash_log=${crash_txt%%.*}.log
          #?find?/Applications/Xcode.app?-name?symbolicatecrash?-type?f
          #?cp?/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash?symbolicatecrash
          export?DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
          ./symbolicatecrash?$1?$2?>?$crash_log
          open?$crash_log?-a?sublime

          具體如何符號(hào)化解析這里就不再嘮叨了,網(wǎng)上一大堆:附一個(gè)參考鏈接[1]

          使用 Automator 的自動(dòng)化方案

          要使用 Automator 還需要編寫 AppleScript 代碼。

          工具 & 語(yǔ)言

          • 工具:Automator Service, 腳本編輯器
          • 語(yǔ)言:AppleScript,Shell
          e85cd2d00e67b662a346466aa2ceb3e5.webpautomatorfb4c26c8b80b481df9eb6f468bd4f430.webpautomator script editor

          腳本編輯器,AppleScript調(diào)試用。

          好玩的 AppleScript

          下面是一些好玩的 AppleScript 代碼,喚起你的好奇心:

          display?dialog?"你說(shuō)假如地球沒(méi)有了空氣,我們會(huì)怎樣...
          那么沒(méi)有工程目錄,后面該怎么辦?"
          ?default?answer?"會(huì)死"?buttons?{"我知道了"}??
          ?default?button?"我知道了"?with?title?"Handsome?ERROR"
          set?theInput?to?text?returned?of?the?result
          --display?dialog?text?returned?of?the?result
          if?theInput?is?equal?to?"會(huì)死"?then
          ?display?dialog?"沒(méi)救了"?with?title?"ERROR"?buttons?{"我知道了"}??
          ??default?button?"我知道了"
          end?if
          --忽略下面部分
          say?"Hello?world"

          display?dialog?"Hello?World"?with?title?"Alert"

          display?notification?"Hello?World"?with?title?"Notification"

          或者直接在終端里面跑

          osascript?-e?"display?notification?\"Hello?World\"?with?title?\"Notification\""

          -- single comment# single comment 是單行注釋

          (* this mutli comment *) 是多行注釋

          Markdown問(wèn)題AppleScript腳本里意外出現(xiàn)

          這種代碼忽略

          AppleScript 需要注意的問(wèn)題

          主要還是路徑問(wèn)題 ApeleScript 獲取的路徑如下:

          Macintosh?HD:Users:xxxxxxx:Documents:xxxxx.app_副本_2.dSYM:

          這種冒號(hào)的路徑在shell命令行根本沒(méi)法用,所以下面代碼成了常客:

          冒號(hào)字符串 打包成數(shù)組 set my_array to split(input as string, ":")

          on?split(the_string,?the_delimiter)
          ?set?old_delimiters?to?AppleScript's?text?item?delimiters
          ?set?AppleScript'
          s?text?item?delimiters?to?the_delimiter
          ?set?the_array?to?every?text?item?of?the_string
          ?set?AppleScript's?text?item?delimiters?to?old_delimiters
          ?return?the_array
          end?split

          字符串 set target_path to join(my_array, "/"),這里要注意拼接文件與文件夾用的index下標(biāo)不同:

          on?join(the_array,?the_delimiter)
          ?set?split_str?to?the_delimiter
          ?set?target?to?"?"
          ?set?list_length?to?the?length?of?the_array
          ?set?list_length?to?list_length?-?1
          ?set?short_list?to?items?2?through?list_length?of?the_array
          ?
          ?repeat?with?dir?in?short_list
          ??set?target?to?target?&?split_str?&?dir
          ?end?repeat
          ?return?target
          end?join

          實(shí)現(xiàn)過(guò)程

          思路分析

          1、定位dSYM路徑

          2、定位xx.crash件路徑

          3、喚起終端,切入指定路徑

          4、symbolicatecrash解析并重定向輸入結(jié)果

          5、自動(dòng)打開(kāi)展示結(jié)果

          其實(shí)這前兩步有個(gè)大坑:重復(fù)下載 dSYM 文件以及導(dǎo)出的 xxx.crash 文件路徑會(huì)存在空格。在AppleScript調(diào)用Shell的時(shí)候路徑有空格,會(huì)報(bào)錯(cuò)找不到對(duì)應(yīng)的文件。

          解決辦法

          • 利用 AppleScript 給文件重命名
          • 借助Automator 現(xiàn)有的快捷操作修改

          期間有周報(bào)群群主指點(diǎn)使用 AppleScript 借助 quoted 這個(gè) API 來(lái)轉(zhuǎn)義引用空格。結(jié)果是終端識(shí)別了,但是symbolicatecrash還是不識(shí)別,雖然結(jié)果不盡人意,但是學(xué)到了新技能。

          如果你看過(guò)AppleScript API,除了想哭就沒(méi)別的,上面說(shuō)的很清楚干啥用,但是不知道語(yǔ)法該咋寫。因?yàn)闆](méi)寫過(guò)這種自然語(yǔ)法,每次都是不停的嘗試、失敗,嘗試、失敗,嘗試、失敗。AppleScript小眾到谷歌都沒(méi)有,大部分都是查閱Stack Overflow。

          我這邊選擇是第二種

          xxx.crash 文件名有空格的解決辦法是直接重命名,查找之后直接把空格替換成下劃線。dSYM 父目錄路徑空格,這邊多次導(dǎo)出之后會(huì)導(dǎo)致父目錄存在空格,這個(gè)相對(duì)上面就比較復(fù)雜。這里有幾點(diǎn)思考:

          在事物本身很難解決問(wèn)題時(shí),我們就需要放開(kāi)視野,跳出事物本身,提升更高的角度去思考 當(dāng)你這么想了,你思考問(wèn)題的維度和角度就變了 在我們這個(gè)問(wèn)題上,既然它的路徑上存在空格,我給它換個(gè)不存在的路徑不就好了 是不是一個(gè)很簡(jiǎn)單的解決辦法,所以有時(shí)候不要太局限一點(diǎn)一面

          一點(diǎn)瞎扯淡

          其實(shí)日常編碼或者修復(fù) BUG 的過(guò)程中也會(huì)遇到類似情況,我們?cè)谝粋€(gè)問(wèn)題上糾結(jié)好久好久到快死了吧!但是問(wèn)題還沒(méi)能解決,這個(gè)時(shí)候就可以嘗試:

          • 冷靜下來(lái)
          • 刻意放慢節(jié)奏
          • 全身心放松下來(lái)
          • 想點(diǎn)別的換換腦子或者睡一覺(jué)(我通常就是睡覺(jué))
          • 冥想(這個(gè)相對(duì)高級(jí) 需要練習(xí))

          不去想這個(gè)問(wèn)題一段時(shí)間之后,慢慢就會(huì)發(fā)現(xiàn)腦子開(kāi)始活絡(luò)起來(lái),之前的問(wèn)題解決辦法好像一下子思路如泉涌,睡一覺(jué)精神也恢復(fù)了,思路也有了,簡(jiǎn)直兩全其美是不是,比死磕一天啥都沒(méi)有強(qiáng)千百倍吧,最后還得被噴延誤工期,拉胯身體,最后無(wú)奈身不由己加入996.icu 這個(gè) Big Party。

          工程創(chuàng)建

          1、選中dSYM文件 -> 右鍵 -> 服務(wù) -> 創(chuàng)建服務(wù)

          2、彈出一個(gè)快捷操作的模板空工程,可以配置參數(shù)入口(因?yàn)榈谝徊竭x中了,參數(shù)就不需要配置了)

          3、然后就可以拖拽你要的操作(類似于storyboard,xib操作)

          4、保存 -> 命名,就會(huì)自動(dòng)存儲(chǔ)到本機(jī)的~/Libray/Services目錄

          所有的快捷操作,工作流都會(huì)在這個(gè)目錄,就是說(shuō)你想用別人寫好的最后安裝的也是這個(gè)目錄

          示例圖:

          47f06cd4c5b68fca5734cc2c27f353a2.webp3454e74e29995dfa7a74732c018d2bf3.webp

          完整的操作步驟

          73e829480b8cc40cb63c2d6f3bea142d.webp

          腳本交互

          • Shell 調(diào)用 AppleScript可以用osascript -e
          • AppleScript調(diào)用Shell可以用do shell script & do script
          • do script需要配合終端

          示例:

          tell?application?"Terminal"
          ?activate
          ?--set?new_tab?to?do?script?"echo?fire"
          ?delay?1
          ?do?script?"pwd"?in?front?window
          ?do?script?"ls"?in?front?window
          end?tell

          演示

          14f71e46f170297dedee8727926af76a.webp模糊了點(diǎn),為了加載快,壓縮的有點(diǎn)狠,但是也能看大概流程就OK了

          有兩種使用方式啟動(dòng) dSYM 自動(dòng)化服務(wù):

          • 首先選中 dSYM 文件,然后右鍵 -> 快捷操作 -> dSYM
          • 首先選中 dSYM文件,快捷鍵即可(這里需要到 Finder -> Service 偏好設(shè)置里面配置好按鍵)
          c872db3c2e9de2c787efcf20c000717b.webpautomator rightkey

          執(zhí)行流程如下:

          1、啟動(dòng)之后就自動(dòng)去/Users/$(whoami)/Downloads/目錄文件下搜索.carsh文件

          這里寫死Downloads目錄的原因是想提高搜索速度,所有導(dǎo)出的時(shí)候選擇的就是Downloads目錄。如果你想要全局搜索也不是不是可以, 但是你得等等Spotlight

          2、搜索完畢之后會(huì)列出該目錄下所有的 .crash 文件。

          3、選擇對(duì)應(yīng)的文件(build number 一致),就會(huì)打開(kāi)一個(gè)終端進(jìn)入解析流程。

          4、解析完畢之后會(huì)通過(guò) sublime 打開(kāi)。沒(méi)有sublime會(huì)怎樣? 就去掉 -a sublime

          ApplesScript 代碼負(fù)責(zé)的部分:

          • 冒號(hào):轉(zhuǎn)斜杠/
          • 調(diào)用了剪切板做緩存
          • display dialog 顯示.crash文件的搜索結(jié)果
          • 喚起終端,執(zhí)行解析

          總結(jié)

          這里本來(lái)想在Automator里面加一個(gè)調(diào)用Shell腳本的的服務(wù),這樣就可以靜默解析不用喚起終端,調(diào)試過(guò)程中解析一直失敗,因?yàn)檫\(yùn)行解析的 symbolicatecrash 需要的環(huán)境變量報(bào)錯(cuò),也在對(duì)應(yīng)的目錄進(jìn)行了export,但是最終還是不行,最后還是選擇喚起終端來(lái)執(zhí)行操作,或許看起來(lái)更酷一點(diǎn)吧 哈哈哈。

          其他文件讀取/拷貝/搜索/重命名都是Automator提供現(xiàn)成服務(wù)。Automator真的很強(qiáng)大,但是你要發(fā)現(xiàn)它的美,學(xué)會(huì)使用它。

          最后就是要告誡自己:該做的事還得及時(shí)做出來(lái), 不然就是午飯沒(méi)吃 午休沒(méi)睡。

          5e506706df28e04d624245d63ed5f20d.webp

          引用資料

          [1]

          iOS Crash文件獲取及符號(hào)化: https://gsl201600.github.io/2020/04/29/iOSCrash%E6%96%87%E4%BB%B6%E8%8E%B7%E5%8F%96%E5%8F%8A%E7%AC%A6%E5%8F%B7%E5%8C%96/


          瀏覽 91
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大香蕉伊人在线视频免费看 | 免费在线黄片视频 | 最新成人美女视频 | 国产午夜精品无码理伦片 | 亚洲国产视频中文字幕日不卡在线观看高清无码 |