亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

如何利用iCloud Drive同步Xcode配置詳解

2019-10-21 18:41:10
字體:
來源:轉載
供稿:網友

前言

多年以前一位老程序員告訴筆者代碼片段(code snippets)是程序員的財富,他有一個U盤,里面裝著他的財富。每當他需要切換電腦寫代碼的時候,他就會把把精心配置的字體、主題、代碼片段等部署到新電腦上,然后開始高速編碼。每次看他寫代碼都是一種享受,不過這是另一個故事了。

需求

多年之后,筆者也終于湊夠了錢買了自己的Mac,閑暇無事的時候也會寫寫代碼祭奠下逝去的青春。但是某些時候總會覺得很別扭,例如感覺字體和單位的有細小的差距,或者一個代碼片段怎么也按不出來——最后發現是沒有在這臺電腦配置這段代碼片段。這種事發生的事情多了之后,就會感覺厭煩,同樣的操作為什么得重復兩次、三次?或者拿出吃了幾年灰的U盤抽插在各地的電腦上人工同步?就不能有什么辦法可以一次更改多次應用?筆者稍微一拍腦門,想到了今天的主角——iCloud Drive

1、為什么使用iCloud Drive?

因為這是蘋果本家的網盤,嵌入系統中,只要開啟我們就無需關心上傳下載,正如OneDrive在Windows一樣,我們只需要把文件放進去,他就會自動開始上傳,并在你的每一臺蘋果設備上同步。利用這點我們就能方便的做到在不同的設備上同步Xcode配置文件,無需手動同步或者上傳下載。

2、其他的替代方案

GitHub之類的大型同性交友網站

目前想來用git應該更好更方便,不過實現起來有點復雜,有能力的朋友可以自己動手

OneDrive/堅果云等網盤

我覺得能有自帶的還是用自帶的吧

思路

總所周知Xcode的代碼片段是保存在~/Library/Developer/Xcode/UserData/CodeSnippets路徑下的,附近位置還有主題等配置信息。基于筆者的經驗我們只需要備份同級目錄下的CodeSnippets、FontAndColorThemes和KeyBindings三個子目錄就行了。每當我們修改了代碼片段、主題或者快捷鍵,把對應的文件放在iCloud Drive同步,當在其他電腦上時就使用最新的覆蓋到對應目錄即可。

腳本

雖說思路如此,但是筆者肯定不敢把這種三歲小孩子就能分析出來的東西發出來糊弄人。所以為了簡化這個繁瑣而又機械的操作,筆者編寫了這樣一個腳本:

#!/usr/bin/env bashset -euo pipefail################# variable define ##########now=`date "+%Y%m%d%H%M%S"`red=`tput setaf 1`green=`tput setaf 2`yellow=`tput setaf 3`reset=`tput sgr0`xcode_dir="${HOME}/Library/Developer/Xcode/UserData"cloud_backup_dir="${HOME}/Library/Mobile Documents/com~apple~CloudDocs/XcodeBackup"local_backup_dir="${HOME}/資源/歸檔/XcodeBackup"code_snippets="CodeSnippets"font_and_color_themes="FontAndColorThemes"key_bindings="KeyBindings"########### MAIN ################### check directory existif [ ! -d "${cloud_backup_dir}" ]; then echo "${red}iCloud Drive備份路徑不存在!${reset}" mkdir -p "${cloud_backup_dir}" echo "${green}自動創建iCloud Drive備份路徑:${reset}${cloud_backup_dir}" else echo "${green}iCloud Drive備份路徑:${reset}${cloud_backup_dir}"fiif [ ! -d "${local_backup_dir}" ]; then echo "${red}本地備份路徑不存在!${reset}" mkdir -p "${local_backup_dir}" echo "${green}自動創建本地備份路徑:${reset}${local_backup_dir}" else echo "${green}本地備份路徑:${reset}${cloud_backup_dir}"fi# zip filescd "${xcode_dir}"zip -r "${cloud_backup_dir}/XcodeBackup+${now}.zip" "${code_snippets}" "${font_and_color_themes}" "${key_bindings}" &zip -r "${local_backup_dir}/XcodeBackup+${now}.zip" "${code_snippets}" "${font_and_color_themes}" "${key_bindings}" &wait# delete unnecessary backup filesnum=`ls -l "${cloud_backup_dir}" |grep "^-"|wc -l`if [ ${num} -gt 5 ]; then num=`expr ${num} - 5` cd "${cloud_backup_dir}" ls -tr "${cloud_backup_dir}" | head -${num} | xargs rmfinum=`ls -l "${local_backup_dir}" |grep "^-"|wc -l`if [ ${num} -gt 5 ]; then num=`expr ${num} - 5` cd "${local_backup_dir}" ls -tr "${local_backup_dir}" | head -${num} | xargs rmfi

簡化了這個繁瑣的操作,僅需在開機的時候跑一下,就能達到自動備份的效果。功能也是十分的簡單:

  • 首先創建了兩個備份Xcode配置文件的路徑,一個在云端,一個在本地(本地路徑大家可以自行配置,一般也不會用上)。
  • 然后把Xcode歸檔到這兩處各一份,筆者這里選用zip包而不是更高壓縮比的7zip等是因為想做通用一點便于大家開箱即用,不需要額外安裝其他軟件。
  • 最后將多次運行后生成的老包刪除,只保留最新的5個,以便節約寶貴的空間(畢竟筆者比較窮只舍得用免費的5g版)

有了這個腳本之后,大家只需要堅持開機的時候跑一跑就行了。筆者喜歡每天開機就更新下cocoapods、brew、brew cask這類的,所以就寫了個腳本,剛好順便也就備份一下。腳本思路大致如下,因為和主題無關就不細說了。

#!/usr/bin/env bashopen 自用魔法絲襪之影waitpod repo update --verbose &更新Homebrew cask &備份各種幣錢包 &備份Xcode等IDE配置文件 &waitkillall 自用魔法絲襪之影

不過這樣其實也不是很方便,畢竟打開terminal輸入指令都很煩了,難道還要手動計算這臺電腦的配置是否是最新的?然后再考慮是不是需要把云盤里面的配置解壓到指定的位置覆蓋?而且很有可能在做這些前已經把這臺電腦的配置當最新版上傳到云盤里了。

讓所有的電腦用同一個版本的配置

筆者再次進行了思考。如果可以根據這些文件的最后修改日期和備份的文件進行比較,誰新就用哪個版本,那么不就實現了嗎?只要我們確保每次修改都跑一次腳本,每次開機都跑一次,就能達到我們想要的效果了。至于如何判斷文件的最后修改時間,筆者認為只需要一個根據文件名生成的key和一個對應的文件的最后修改時間做value的數據結構就行了(雖說也可以把備份的文件展開比較,但是因為筆者才疏學淺,尚不知如何操作,就只能通過鍵值對來判斷了)

不過實際操作起來,再次彰顯了筆者的才疏學淺,筆者也不知道如何在bash中創建一個高效并能持久化的鍵值對,如果哪位大佬知道請務必告訴筆者。

最后筆者想到Mac自帶的SQLite3,雖說這樣一個小小的功能上數據庫是有一點高射炮打蚊子,但是能跑就行吧。腳本如下;

#!/usr/bin/env bashset -euo pipefail################# variable define ##########now=`date "+%Y%m%d%H%M%S"`red=`tput setaf 1`green=`tput setaf 2`yellow=`tput setaf 3`reset=`tput sgr0`xcode_dir="${HOME}/Library/Developer/Xcode/UserData"cloud_backup_dir="${HOME}/Library/Mobile Documents/com~apple~CloudDocs/XcodeBackup"local_backup_dir="${HOME}/資源/歸檔/XcodeBackup"xcode_backup_database="${HOME}/Library/Mobile Documents/com~apple~CloudDocs/.BackupDatabase"code_snippets="CodeSnippets"font_and_color_themes="FontAndColorThemes"key_bindings="KeyBindings"temp="DoNotModify"database="${xcode_backup_database}/${temp}"########### MAIN ################### check directory existif [ ! -d "${cloud_backup_dir}" ]; then echo "${red}iCloud Drive備份路徑不存在!${reset}" mkdir -p "${cloud_backup_dir}" echo "${green}自動創建iCloud Drive備份路徑:${reset}${cloud_backup_dir}"else echo "${green}iCloud Drive備份路徑:${reset}${cloud_backup_dir}"fiif [ ! -d "${local_backup_dir}" ]; then echo "${red}本地備份路徑不存在!${reset}" mkdir -p "${local_backup_dir}" echo "${green}自動創建本地備份路徑:${reset}${local_backup_dir}"else echo "${green}本地備份路徑:${reset}${cloud_backup_dir}"fiif [ ! -d "${xcode_backup_database}" ]; then echo "${red}同步數據庫路徑不存在!${reset}" mkdir -p "${xcode_backup_database}" echo "${green}自動創建數據庫路徑:${reset}${local_backup_dir}"else echo "${green}數據庫路徑:${reset}${cloud_backup_dir}"fisqlite3 "${database}" 'create table if not exists backupXcode(id integer primary key not NULL,key integer unique not NULL,value integer not NULL);'#獲取最后修改時間cd "${xcode_dir}"find "./${code_snippets}" "./${font_and_color_themes}" "./${key_bindings}" -type f >> ${temp}while read path; do key=`md5 -q -s "${path}"` value=`stat -f "%m" "${path}"` isModify=`sqlite3 "${database}" "select value from backupXcode where key == '${key}';"` if [ -z ${isModify} ]; then  echo "${yellow}本地Xcode配置尚未同步${reset}!"  num=`ls -l "${cloud_backup_dir}" |grep "^-"|wc -l`  if [ ${num} -ge 1 ]; then   echo "${green}找到最新的Xcode配置,開始自動替換${reset}!"      cd "${xcode_dir}"   ## backup before   zip -r "XcodeBackup.zip" "${code_snippets}" "${font_and_color_themes}" "${key_bindings}" &   wait      cd "${cloud_backup_dir}"   newBackup=`ls -t | head -1`      unzip -u "${newBackup}" -d "${xcode_dir}" &   wait      cd "${xcode_dir}"   rm ${temp}   find "./${code_snippets}" "./${font_and_color_themes}" "./${key_bindings}" -type f >> ${temp}   echo 更新數據庫...   while read path; do    key=`md5 -q -s "${path}"`    value=`stat -f "%m" "${path}"`    sqlite3 "${database}" "insert or replace into backupXcode values(NULL,'${key}',${value});" &   done < ${temp}  fi  break fi if [ ${isModify} != ${value} ]; then  if [ ${isModify} -lt ${value} ]; then   echo "${yellow}本地Xcode配置超前${reset}!"  else   echo "${yellow}本地Xcode配置已經過期${reset}!"      num=`ls -l "${cloud_backup_dir}" |grep "^-"|wc -l`   if [ ${num} -ge 1 ]; then    echo "${green}找到最新的Xcode配置,開始自動替換${reset}!"        cd "${xcode_dir}"    ## backup before    zip -r "XcodeBackup.zip" "${code_snippets}" "${font_and_color_themes}" "${key_bindings}" &    wait        cd "${cloud_backup_dir}"    newBackup=`ls -t | head -1`        unzip -o "${newBackup}" -d "${xcode_dir}" &    wait   fi  fi  cd "${xcode_dir}"  rm ${temp}  find "./${code_snippets}" "./${font_and_color_themes}" "./${key_bindings}" -type f >> ${temp}  echo 更新數據庫...  while read path; do   key=`md5 -q -s "${path}"`   value=`stat -f "%m" "${path}"`   sqlite3 "${database}" "insert or replace into backupXcode values(NULL,'${key}',${value});"  done < ${temp}  break fidone < ${temp}waitrm ${temp}# zip filescd "${xcode_dir}"zip -r "${cloud_backup_dir}/XcodeBackup+${now}.zip" "${code_snippets}" "${font_and_color_themes}" "${key_bindings}" &zip -r "${local_backup_dir}/XcodeBackup+${now}.zip" "${code_snippets}" "${font_and_color_themes}" "${key_bindings}" &wait# delete unnecessary backup filesnum=`ls -l "${cloud_backup_dir}" |grep "^-"|wc -l`if [ ${num} -gt 5 ]; then num=`expr ${num} - 5` cd "${cloud_backup_dir}" ls -tr "${cloud_backup_dir}" | head -${num} | xargs rmfinum=`ls -l "${local_backup_dir}" |grep "^-"|wc -l`if [ ${num} -gt 5 ]; then num=`expr ${num} - 5` cd "${local_backup_dir}" ls -tr "${local_backup_dir}" | head -${num} | xargs rmfi

后記

筆者簡單測試了一下,基本上能用。以此思路,應該也可用在Alfred、vimrc等配置文件。不過依舊不是很方便,不過筆者才疏學淺,目前也就這個水平了,希望能對大家有所幫助,不知道大家有沒有什么好的建議?筆者認為可以在Xcode關閉時自動運行本腳本,但是尚未找到好的胡克點(:」∠)_,如果大家有什么好的建議,歡迎PR

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本欧美中文字幕| 日韩有码在线电影| 国产一区二区三区欧美| 色婷婷久久一区二区| 欧美大胆在线视频| 欧美激情乱人伦一区| 欧美日韩另类字幕中文| 精品一区二区三区四区在线| www国产精品com| 欧美激情亚洲综合一区| 精品久久久久久中文字幕一区奶水| 欧美裸体xxxx极品少妇软件| 亚洲天堂网站在线观看视频| 亚洲另类欧美自拍| 不卡av电影院| 国产亚洲xxx| 欧美激情视频网站| 精品高清美女精品国产区| 性欧美办公室18xxxxhd| 国产狼人综合免费视频| 日韩在线观看你懂的| 久久天天躁狠狠躁夜夜躁| 日韩欧美国产中文字幕| 成人h猎奇视频网站| 亚洲女在线观看| 亚洲国产精品视频在线观看| 毛片精品免费在线观看| 成人在线观看视频网站| 国产精品久久综合av爱欲tv| 深夜成人在线观看| 国产精品视频专区| 亚洲黄色成人网| 91视频国产高清| 国产精品一久久香蕉国产线看观看| 日韩成人在线电影网| 一道本无吗dⅴd在线播放一区| 亚洲美女在线观看| 国产va免费精品高清在线| 国产精品久久久久久超碰| 91麻豆桃色免费看| 国产精品偷伦一区二区| 国产精品高清免费在线观看| 国产精品一区久久| 欧美一级bbbbb性bbbb喷潮片| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩免费高清在线观看| 神马国产精品影院av| 91久久精品美女| 欧美日韩亚洲成人| 在线视频日本亚洲性| 欧美成人精品在线观看| 国产91精品视频在线观看| 九九热最新视频//这里只有精品| 国产精品老女人精品视频| 国产亚洲成av人片在线观看桃| 亚洲桃花岛网站| 亚洲美女视频网| 国产成人一区三区| 欧美一区第一页| 久热精品视频在线观看一区| 97精品国产97久久久久久| 少妇激情综合网| 精品成人69xx.xyz| 97超碰色婷婷| 亚洲欧美一区二区精品久久久| 成人免费淫片视频软件| 亚洲 日韩 国产第一| 欧美精品videossex性护士| 一区二区三区视频免费在线观看| 91精品久久久久久综合乱菊| 欧美国产日韩一区二区三区| 欧美日韩视频在线| 九九热最新视频//这里只有精品| 亚洲电影免费观看高清完整版在线| 精品女同一区二区三区在线播放| 美日韩在线视频| 久久99青青精品免费观看| 色婷婷av一区二区三区在线观看| 亚洲乱码一区av黑人高潮| 国产日韩换脸av一区在线观看| 国产一区视频在线播放| 欧美日韩在线视频一区二区| 一区三区二区视频| 亚洲欧美国产精品| 95av在线视频| 亚洲综合色激情五月| 国产欧美日韩免费看aⅴ视频| 成人444kkkk在线观看| 日韩免费观看在线观看| 黑人极品videos精品欧美裸| 中文字幕亚洲精品| 亚洲精品自拍视频| 亚洲成人网在线观看| 亚洲精品电影久久久| 亚洲精品成人久久| 国产美女扒开尿口久久久| 日本在线观看天堂男亚洲| 亚洲欧美色婷婷| 在线电影欧美日韩一区二区私密| 久热在线中文字幕色999舞| 成年人精品视频| 欧美放荡办公室videos4k| 国产精品午夜一区二区欲梦| 国产亚洲精品一区二555| 久久精品国产99国产精品澳门| 欧美一区二区三区艳史| 国产中文字幕亚洲| 成人久久久久爱| 免费91在线视频| 日韩成人在线免费观看| 97高清免费视频| 亚洲一区二区三区四区视频| 日韩精品中文在线观看| 九九热99久久久国产盗摄| 国产日产久久高清欧美一区| 91精品啪aⅴ在线观看国产| 久久久久久91香蕉国产| 精品亚洲一区二区| 亚洲国产成人精品久久久国产成人一区| 91在线视频一区| 亚洲网站在线观看| 国产精品一区二区av影院萌芽| 欧美亚洲另类激情另类| 欧美夜福利tv在线| 九九久久久久久久久激情| 国产噜噜噜噜噜久久久久久久久| 黑人巨大精品欧美一区免费视频| 国产女人18毛片水18精品| 国产精品免费在线免费| 日韩欧美aⅴ综合网站发布| 亚洲人午夜色婷婷| 日韩成人在线免费观看| 久久久亚洲成人| 国产精品视频免费观看www| 欧美午夜视频一区二区| 亚洲综合社区网| 日韩经典一区二区三区| 中文字幕精品在线视频| 国产成人精品国内自产拍免费看| 国产精品aaa| 欧美国产视频一区二区| 亚洲成人激情在线观看| 国产精品三级在线| 国产一区二区在线播放| 国内精品400部情侣激情| 日韩国产欧美区| 色噜噜狠狠狠综合曰曰曰88av| 中文字幕在线观看日韩| 中文字幕欧美专区| 久久精品亚洲94久久精品| 91chinesevideo永久地址| 国产一区私人高清影院| 国产免费一区二区三区在线能观看| 亚洲成人精品久久| 色樱桃影院亚洲精品影院| 国产ts人妖一区二区三区| 日韩电影免费在线观看| 国产精品久久9| 亚洲丝袜一区在线| 日韩在线观看你懂的| 亚洲国产精品高清久久久| 91精品国产高清久久久久久久久| 全亚洲最色的网站在线观看| 亚洲精品视频久久|