激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - IOS - 如何利用iCloud Drive同步Xcode配置詳解

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

2021-04-25 19:500x11901 IOS

這篇文章主要給大家介紹了關(guān)于如何利用iCloud Drive同步Xcode配置的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

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

需求

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

1、為什么使用iCloud Drive?

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

2、其他的替代方案

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

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

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

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

思路

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

腳本

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/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}自動(dòng)創(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}自動(dòng)創(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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env bash
 
open 自用魔法絲襪之影
 
wait
 
pod repo update --verbose &
更新Homebrew cask &
備份各種幣錢包 &
 
備份Xcode等IDE配置文件 &
 
wait
 
killall 自用魔法絲襪之影

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

讓所有的電腦用同一個(gè)版本的配置

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#!/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}自動(dòng)創(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}自動(dòng)創(chuàng)建本地備份路徑:${reset}${local_backup_dir}"
else
 echo "${green}本地備份路徑:${reset}${cloud_backup_dir}"
fi
 
if [ ! -d "${xcode_backup_database}" ]; then
 echo "${red}同步數(shù)據(jù)庫(kù)路徑不存在!${reset}"
 mkdir -p "${xcode_backup_database}"
 echo "${green}自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)路徑:${reset}${local_backup_dir}"
else
 echo "${green}數(shù)據(jù)庫(kù)路徑:${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);'
 
#獲取最后修改時(shí)間
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配置,開始自動(dòng)替換${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ù)庫(kù)...
   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)過(guò)期${reset}!"
   
   num=`ls -l "${cloud_backup_dir}" |grep "^-"|wc -l`
   if [ ${num} -ge 1 ]; then
    echo "${green}找到最新的Xcode配置,開始自動(dòng)替換${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ù)庫(kù)...
  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

后記

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

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

原文鏈接:https://www.jianshu.com/p/c34e0754a9c9

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 在线免费黄色网 | 色综合视频 | 亚洲国产超高清a毛毛片 | 国产精品久久久久无码av | 日韩在线欧美在线 | 国产午夜亚洲精品午夜鲁丝片 | 国产91在线播放九色 | 在线天堂资源 | 一级电影免费在线观看 | 最新国产毛片 | 久久性生活免费视频 | 日韩欧美精品中文字幕 | 国产精品久久久久久久久久久久午夜 | 久久亚洲国产精品 | 国产精品一区在线免费观看 | 91精品国产777在线观看 | 激情网站免费观看 | 欧美精选一区二区 | 国产成人网 | 久久久久久久久久久高潮一区二区 | 日韩美香港a一级毛片 | 精品成人在线观看 | 欧美一级一区二区三区 | 九九热免费在线观看 | 一区二区三区欧洲 | videos真实高潮xxxx | 欧美日韩亚洲另类 | 久久精品视频3 | 一区二区久久久久草草 | sesee99| 天天天干夜夜夜操 | 成人性视频免费网站下载软件 | 成人在线观看免费高清 | 日本a∨精品中文字幕在线 欧美1—12sexvideos | 日本黄色免费播放 | 一本一本久久a久久精品综合小说 | 欧美日本亚洲视频 | 噜噜在线视频 | 成人午夜精品 | 水多视频在线观看 | 亚洲天堂在线电影 |