Keychain Sharing

1、前言

在iOS開發(fā)中黍氮,我們或多或少會使用Keychain服務來存儲用戶的賬號密碼抹腿、證書或其他重要的信息。

根據(jù)蘋果的介紹松却,iOS設備中的Keychain是一個安全的的存儲容器(加密的數(shù)據(jù)庫)暴浦,可以用來為不同的App保存賬戶密碼溅话、證書或認證令牌等等。

Keychain是系統(tǒng)級的服務歌焦,即使App被卸載掉飞几,之前App保存在Keychain中的項目也不會被清除,除非設備進行刷機独撇。所以特別使用于identifierForVendor+Keychain來代替設備ID的解決方案屑墨。另外Keychain也支持App間共享保存在Keychain中的項目,不過共享僅限于同一開發(fā)者賬號下App之間進行共享券勺。而本文將介紹我對Keychian共享相關的經(jīng)驗绪钥。

2、Keychain基本使用

對于Keychain的基本使用我就不再多做介紹关炼,網(wǎng)上的教程很多程腹。可以結(jié)合官方的GenericKeychain示例項目進行學習儒拂。
由于原生的KeychainAPI使用起來比較復雜寸潦,所以我推薦結(jié)合第三方框架來簡化使用Keychain的流程。
推薦Keychain框架:

另外社痛,附上官方關于Keychain的一些Demo见转,方便學習:

3、Keychain共享

3.1蒜哀、了解Keychain的數(shù)據(jù)組織形式

首先需要了解斩箫,Keychain中的Item都是按照Keychain Access Group(訪問組)進行分組存取,不同組之間彼此隔離撵儿。如圖3-1所示乘客,兩個的App:AppOne和AppTwo,AppOne的只有一個訪問組為$(teamID).com.example.AppOne淀歇,而AppTwo也只有一個訪問組$(teamID).com.example.AppTwo易核,它們屬于不同的訪問組,所以彼此隔離浪默。

圖3-1

3.2牡直、Keychain Access Group規(guī)范

訪問組的格式為:$(teamID).$(組名),組名最好以反向DNS的寫法形式
例如:
假設團隊ID為:S5VDKE9N8V纳决,組名為:com.example.AppOne
則訪問組寫法為:S5VDKE9N8V.com.example.AppOne

問題:團隊ID在哪里看到碰逸?

  1. 打開https://developer.apple.com
  2. 選擇Account并登陸賬號
  3. 選擇Membership標簽查看賬號信息,如圖3-2阔加,其中的Team ID就是團隊ID
    圖3-2

3.3花竞、App默認的訪問組

每個App可以有多個訪問組,且默認都有自己的訪問組。
在應用分發(fā)期間對應用程序進行代碼簽名之前约急,Xcode會自動將您的團隊ID作為前綴并組合應用的Bundle Identifier(例如: com.example.AppOne)字符串存儲為app ID。系統(tǒng)會將此app ID當做應用程序私有訪問組的名稱并包含在應用程序的訪問組數(shù)組中苗分。如下形式:

[$(teamID).com.example.AppOne]

由于應用ID在所有應用中都是唯一的厌蔽,并且因為應用ID存儲在受代碼簽名保護的entitlement中,因此沒有其他應用可以使用它摔癣,因此該群組中沒有其他應用奴饮。與此訪問組一起存儲的任何keychain items都是AppOne專用的。同樣择浊,如果您有第二個應用程序戴卜,其Bundle Identifiercom.example.AppTwo,則它自動擁有自己的私有組琢岩。

[$(teamID).com.example.AppTwo]

因此投剥,默認情況下,每個應用的keychain items仍與其他應用彼此隔離担孔。如上述的圖3-1江锨。

3.3、開啟Keychain共享

由于默認情況下糕篇,每個應用的keychain items與其他應用彼此隔離啄育,因此如果您希望兩個應用程序能夠共享鑰匙串項目,則可以將兩者都添加到同一個Keychain訪問組中拌消。通過在每個應用程序的Xcode中啟用Keychain Sharing功能挑豌,并在每種情況下將一個公共的訪問組名添加到鑰匙串組列表中來執(zhí)行此操作。比如使用共同的訪問組名:com.example.SharedItems墩崩。如圖3-3:

圖3-3

如上啟用AppOne功能后氓英,其應用程序的訪問組數(shù)組將變?yōu)椋?p>

[$(teamID).com.example.SharedItems,
 $(teamID).com.example.AppOne]

如果您還將相同的訪問組添加到AppTwo,其應用程序的訪問組數(shù)組將變?yōu)椋?/p>

[$(teamID).com.example.SharedItems,
 $(teamID).com.example.AppTwo]

如此泰鸡,AppOne和AppTwo將獲得重疊區(qū)域以共享項目债蓝,如圖3-4


圖3-4

注意:

  • AppOne和AppTwo必須屬于同一個開發(fā)者,否則無法如何都不能共享

  • AppOne不用顯式地在Keychain Sharing的訪問組列表中添加com.example.AppOne盛龄,因為即使不開啟Keychain Sharing功能饰迹,Xcode簽名打包之前也是會自動添加,AppTwo也是如此余舶。(每個應用程序都有自己默認的私有訪問組)

  • 若AppTwo在Keychain Sharing的訪問組列表中添加了com.example.AppOne啊鸭,即使AppOne沒有在Xcode中開啟Keychain Sharing功能,AppTwo也照樣可以讀取AppOne使用默認私有組(com.example.AppOne)存儲的鑰匙串項目匿值,反過來也是一樣赠制。因此在Keychain Sharing下沒有絕對的私有鑰匙串的概念

  • 不要特意去修改entitlements文件中訪問組的$(AppIdentifierPrefix)為自己的團隊ID,因為Xcode會在簽名打包前自動處理


    圖3-5
  • 另外钟些,使用Keychain必須在真機環(huán)境下烟号,在模擬器環(huán)境中會出現(xiàn)莫名其妙的問題。

順便附上自己的KeychainSharing Demo政恍,僅供學習參考汪拥。

問:$(AppIdentifierPrefix)是什么?
答:其實$(AppIdentifierPrefix)就是團隊ID篙耗,比如在注冊一個App ID的時候就會發(fā)現(xiàn)App ID Prefix就是團隊ID迫筑,如下圖所示


圖3-6

4、參考資料

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宗弯,一起剝皮案震驚了整個濱河市脯燃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蒙保,老刑警劉巖辕棚,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異追他,居然都是意外死亡坟募,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門邑狸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懈糯,“玉大人,你說我怎么就攤上這事单雾∽” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵硅堆,是天一觀的道長屿储。 經(jīng)常有香客問我,道長渐逃,這世上最難降的妖魔是什么够掠? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮茄菊,結(jié)果婚禮上疯潭,老公的妹妹穿的比我還像新娘。我一直安慰自己面殖,他們只是感情好竖哩,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脊僚,像睡著了一般相叁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天增淹,我揣著相機與錄音椿访,去河邊找鬼。 笑死埠通,一個胖子當著我的面吹牛赎离,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播端辱,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼虽画!你這毒婦竟也來了舞蔽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤码撰,失蹤者是張志新(化名)和其女友劉穎渗柿,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脖岛,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡朵栖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了柴梆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陨溅。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绍在,靈堂內(nèi)的尸體忽然破棺而出门扇,到底是詐尸還是另有隱情,我是刑警寧澤偿渡,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布臼寄,位于F島的核電站,受9級特大地震影響溜宽,放射性物質(zhì)發(fā)生泄漏吉拳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一适揉、第九天 我趴在偏房一處隱蔽的房頂上張望留攒。 院中可真熱鬧,春花似錦涡扼、人聲如沸稼跳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汤善。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間红淡,已是汗流浹背不狮。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留在旱,地道東北人摇零。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像桶蝎,于是被迫代替她去往敵國和親驻仅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容