最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年05月11日 11:06:01   作者:0x11901  
這篇文章主要給大家介紹了關(guān)于如何利用iCloud Drive同步Xcode配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

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

需求

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

1、為什么使用iCloud Drive?

因?yàn)檫@是蘋果本家的網(wǎng)盤,嵌入系統(tǒng)中,只要開啟我們就無需關(guān)心上傳下載,正如OneDrive在Windows一樣,我們只需要把文件放進(jìn)去,他就會自動開始上傳,并在你的每一臺蘋果設(shè)備上同步。利用這點(diǎn)我們就能方便的做到在不同的設(shè)備上同步Xcode配置文件,無需手動同步或者上傳下載。

2、其他的替代方案

GitHub之類的大型同性交友網(wǎng)站

目前想來用git應(yīng)該更好更方便,不過實(shí)現(xiàn)起來有點(diǎn)復(fù)雜,有能力的朋友可以自己動手

OneDrive/堅(jiān)果云等網(wǎng)盤

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

思路

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

腳本

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

#!/usr/bin/env bash

set -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 exist
if [ ! -d "${cloud_backup_dir}" ]; then
 echo "${red}iCloud Drive備份路徑不存在!${reset}"
 mkdir -p "${cloud_backup_dir}"
 echo "${green}自動創(chuàng)建iCloud Drive備份路徑:${reset}${cloud_backup_dir}"
 else
 echo "${green}iCloud Drive備份路徑:${reset}${cloud_backup_dir}"
fi

if [ ! -d "${local_backup_dir}" ]; then
 echo "${red}本地備份路徑不存在!${reset}"
 mkdir -p "${local_backup_dir}"
 echo "${green}自動創(chuàng)建本地備份路徑:${reset}${local_backup_dir}"
 else
 echo "${green}本地備份路徑:${reset}${cloud_backup_dir}"
fi

# zip files
cd "${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 files
num=`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 rm
fi

num=`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 rm
fi

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

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

有了這個腳本之后,大家只需要堅(jiān)持開機(jī)的時候跑一跑就行了。筆者喜歡每天開機(jī)就更新下cocoapods、brew、brew cask這類的,所以就寫了個腳本,剛好順便也就備份一下。腳本思路大致如下,因?yàn)楹椭黝}無關(guān)就不細(xì)說了。

#!/usr/bin/env bash

open 自用魔法絲襪之影

wait

pod repo update --verbose &
更新Homebrew cask &
備份各種幣錢包 &

備份Xcode等IDE配置文件 &

wait

killall 自用魔法絲襪之影

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

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

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

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

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

#!/usr/bin/env bash

set -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 exist
if [ ! -d "${cloud_backup_dir}" ]; then
 echo "${red}iCloud Drive備份路徑不存在!${reset}"
 mkdir -p "${cloud_backup_dir}"
 echo "${green}自動創(chuàng)建iCloud Drive備份路徑:${reset}${cloud_backup_dir}"
else
 echo "${green}iCloud Drive備份路徑:${reset}${cloud_backup_dir}"
fi

if [ ! -d "${local_backup_dir}" ]; then
 echo "${red}本地備份路徑不存在!${reset}"
 mkdir -p "${local_backup_dir}"
 echo "${green}自動創(chuàng)建本地備份路徑:${reset}${local_backup_dir}"
else
 echo "${green}本地備份路徑:${reset}${cloud_backup_dir}"
fi

if [ ! -d "${xcode_backup_database}" ]; then
 echo "${red}同步數(shù)據(jù)庫路徑不存在!${reset}"
 mkdir -p "${xcode_backup_database}"
 echo "${green}自動創(chuàng)建數(shù)據(jù)庫路徑:${reset}${local_backup_dir}"
else
 echo "${green}數(shù)據(jù)庫路徑:${reset}${cloud_backup_dir}"
fi

sqlite3 "${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 更新數(shù)據(jù)庫...
   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配置已經(jīng)過期${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 更新數(shù)據(jù)庫...
  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
 fi
done < ${temp}

wait
rm ${temp}

# zip files
cd "${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 files
num=`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 rm
fi

num=`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 rm
fi

后記

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

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • IOS 中UITextField和UITextView中字符串為空和空格的解決辦法

    IOS 中UITextField和UITextView中字符串為空和空格的解決辦法

    這篇文章主要介紹了IOS 中UITextField和UITextView中字符串為空和空格的解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • IOS 緩存文件的清除實(shí)現(xiàn)代碼

    IOS 緩存文件的清除實(shí)現(xiàn)代碼

    這篇文章主要介紹了IOS 緩存文件的清除的相關(guān)資料,詳細(xì)說明了如何獲取緩存文件,及緩存文件的清除步驟,需要的朋友可以參考下
    2016-10-10
  • iOS實(shí)現(xiàn)微信分享多張圖片功能

    iOS實(shí)現(xiàn)微信分享多張圖片功能

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)微信分享多張圖片功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • IOS 開發(fā)之?dāng)?shù)據(jù)存儲writeToFile的應(yīng)用實(shí)例

    IOS 開發(fā)之?dāng)?shù)據(jù)存儲writeToFile的應(yīng)用實(shí)例

    這篇文章主要介紹了IOS 開發(fā)之?dāng)?shù)據(jù)存儲writeToFile的應(yīng)用實(shí)例的相關(guān)資料,這里提供實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-09-09
  • IOS觀察者設(shè)計(jì)模式

    IOS觀察者設(shè)計(jì)模式

    什么是觀察者模式 什么是觀察者模式?你曾經(jīng)訂閱過報(bào)紙嗎?在訂閱報(bào)紙的時候,你不用去任何地方,只需要將你的個人地址信息以及訂閱信息告訴出版社,出版社就知道如何將相關(guān)報(bào)紙傳遞,本文給大家介紹ios觀察者模式,感興趣的朋友一起看看吧
    2015-12-12
  • IOS給圖片添加水?。▋煞N方式)

    IOS給圖片添加水?。▋煞N方式)

    為了防止自己辛苦做的項(xiàng)目被別人盜走,采取把圖片添加水印,在此表示圖片的獨(dú)一無二。加水印不是要在上面添加上幾個Label,而是我們要把字畫到圖片上成為一個整體,下面這篇文章主要介紹IOS給圖片添加水印,有需要的小伙伴可以來參考下
    2015-08-08
  • Apple?Watch?App?Lifecycle應(yīng)用開發(fā)

    Apple?Watch?App?Lifecycle應(yīng)用開發(fā)

    這篇文章主要為大家介紹了Apple?Watch?App?Lifecycle應(yīng)用開發(fā)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • iOS實(shí)現(xiàn)列表折疊效果

    iOS實(shí)現(xiàn)列表折疊效果

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)列表折疊效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • iOS下一鍵調(diào)試Push的方法詳解

    iOS下一鍵調(diào)試Push的方法詳解

    這篇文章主要給大家介紹了關(guān)于iOS下如何一鍵調(diào)試Push的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • iOS實(shí)現(xiàn)一個簡易日歷代碼

    iOS實(shí)現(xiàn)一個簡易日歷代碼

    本篇文章主要介紹了iOS實(shí)現(xiàn)一個簡易日歷代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03

最新評論

彩票| 宾川县| 弥勒县| 富川| 确山县| 清水县| 陆河县| 神池县| 馆陶县| 大冶市| 色达县| 勐海县| 松潘县| 兴隆县| 宁安市| 南和县| 大宁县| 韶山市| 鄄城县| 建宁县| 桑日县| 全州县| 邵东县| 阿拉善左旗| 高碑店市| 云梦县| 内乡县| 白山市| 桓仁| 贡觉县| 浦江县| 崇礼县| 雅安市| 高淳县| 湘西| 上杭县| 乌兰县| 从江县| 资源县| 裕民县| 大丰市|