May 27, 2016

iOS 9.3 Health Data 換機備份

我完全相信,Apple對於保護使用者的隱私真的是不遺餘力。不過安全性與方便性總是難以兼得。

最近為了能夠在不同螢幕大小測試下開發中的App,用模擬器看總是不若握在手中的真實,以及其他種種理由(或藉口),購入了一支新的iPhone 6s。同樣iOS手機,除了從4吋升級為4.7吋這點需要適應,以及變順、變快等等換新機通常會有的感想之外,其實沒有太多新奇。

一如往常的在電腦做完全機備份,回復到新機之後,卻發現,奇怪... Apple是退步了唷?怎麼備份沒有恢復完全!?有些東西少了,有些卻也還在,有點莫名...

復原做了兩次,重複設定了各網站的兩步驗證,Mail、iCloud...等等密碼,折騰許久,最後竟發現,Up24與Apple Watch加起來戴了一年多累積起來的各種健康相關資料竟全都沒有還原回來... !!!??? 

原來詳查之後才知道,Apple將Health資料視為隱私資料,跟密碼、WiFi設定、網站記錄一樣,若備份時未設定備份密碼,則不會一併備份。WTF!!! 如此重大改變我怎麼會沒聽過呢?(或者聽過也忘記了... @@") 官方說明連結

但先前又已經反覆把各種安全設定設到新手機上了,並也不想貿然再重新恢復備份一次。故花了點時間尋找單純備份還原Health Data的方法。

參考了Google的到的各種文章,以及搜尋Store提供相關功能的App。試過以下幾種,幾乎完全沒有作用。

1. Health Importer:吃的是CSV檔。最先找到的文章說,使用內建的Health App即可匯出CSV,再使用Health Importer即可。但現在的9.3版匯出的是內含2個xml檔案的zip檔,Health Importer完全無法作用,是故需要QS Access搭配使用。
2. QS Access:可以讀取Health App內的資料,匯出為CSV檔,但Table很多,我想要的資料不知道屬於哪個Table。最後順利匯出了一點點無關緊要的資料,卻並也無法使用Health Importer匯入。殘念。
3. Health Backup:可匯出自有格式的zip,照說感覺這App比較靠譜,自己匯出匯入的總不會錯了吧。殊不知,大量資料的匯出也經常失敗,需要關閉自動鎖定才比較有機會匯出成功。然而,匯出成功後也無法正常匯入,就算最後僅做少量資料的匯入,都提示完成了,也仍沒有匯入成功。完全是裝心酸的。
4. Health Import:標榜自己可以匯入由Health App匯出的資料,但大量資料時也同樣無法成功匯入。會一直停在App畫面,又不能跳出離開,等待三四個小時,進度條都留在原位,最後只好放棄。

試過所有的匯出匯入App後,實在沒有一個可以解決我的問題,甚至反覆交叉使用這些App,反而把Health App某些資料寫壞。最後只好認命回頭使用iTunes的全機備份,重新加密備份還原,終於取回累積許久的資料。


結論。若非必要,使用iTunes備份還原還是最佳解。如不得已必須嘗試上述的App,請記得先將自動鎖定關閉,以提高成功機率。





April 25, 2016

Server API Security

App端開發到一個程度,最終還是得開始碰Server的部份。雖然紅極一時的Parse.com已經快要關店,但Opensource化後,可以自架Parse也是另外一種選擇。爬文查找用法之際,找到一系列關於資料安全性的設定與調控方式,可能在Server界已是慣例,但對初入門的我來說,可幫助我一探其中奧妙!

系列文章可從這裡開始參考:Parse Security I - Are you the Key Master?

以下節錄摘要給大家參考:

Part I,關於Master Key與各個Client Key的使用方式。
Master Key是一種security mechanism。擁有Master Key的人可以bypass後面提到的各種安全機制,對資料庫進行存取修改的動作。是故,需以保護Root Password的同樣程度來保護Master Key。
然而,Client Key則是一種辨別目前Client平台的方式。可能是iOS或Android終端,或者JavaScript或REST Client。這ClientKey會隨著app或source code進到user手中,便無法防止user反組譯或者用監聽網路傳輸的方式竊取ClientKey。所以,請不要把Client Key當成任何安全機制使用。

Part II,Class-level的權限設定。
在Parse後台上,可針對各別Class設定各種權限。可分別針對以下幾個API設定Public或Private(User/Role) 的read/write權限。
  • Get
  • Find
  • Update
  • Create
  • Delete
  • Add Field
其中比較特別的是AddField。該權限允許Client動態為table增加欄位。這功能在開發階段非常方便,但一旦App正式上架後則不應該經常發生。故上架後應將此權限關閉。
另外還有一個允許Client增加Class的全域權限,也應該在上架前關閉。

Part III - Access Control List
ACL允許為各別object設定不同的存取權限。此時帶入User的概念進來。若存有使用者的個人隱私資料,則應該使用ACL控制,不可允許任何人檢視。若為User Class,Parse預設不允許除了User本人以外的其他人修改,但可以查看內容。如有隱私資料如電話或email,則應另外設計PrivateData class存放,並設為其他User不可查看的權限。原文有相關範例程式碼,可以參考。

Part IV - Cloud Code
Parse允許上傳Javascript的Server side code。由Parse server執行。因若安全性檢查設在Client端則容易被bypass,失去保護作用,建議使用Cloud Code進行驗證資料內容等安全性檢查。
在Cloud Code中也可設定使用 `useMasterKey` 以略過security相關檢查。

Part V - 綜合運用以上功能,設計與朋友共享特定資料的範例。
本篇中解析了如何運用Role、ACL與Cloud Code,設定user的某些特定資料,可以與一群朋友分享。如有需要的朋友可以前往研究!

March 22, 2016

新玩具入荷 Apple TV

內心不願承認,但其實就是一個果粉。之所以為果粉,不是對賈伯斯或蘋果公司有什麼盲目的崇拜,而是因為自從開始使用Apple產品之後,所養成那種對細節的要求。若要說蘋果公司帶來的價值,必定有包含這一項,那就是,他向世人展示了何謂「完美」,以及揭示推出一項「產品」應該要以什麼樣的標準為標準。

忍耐許久,終於入手Apple TV。

其實在新一代AppleTV遲遲沒有上市之前,就已經入手使用Chromecast。對於手機/平板即遙控器的客廳生活已相當熟悉。於是新代AppleTV上市之後,除了價格上比Chromecast貴上幾倍,尚看不懂有什麼特別的地方。在加上Chromecast+iPhone的配合其實也已經可以滿足日常需要,所以才有辦法忍耐這麼久才終於入手。

話說AppleTV的主要功能大概就網路上找的到那些,目前也尚無太多特別的app可以安裝使用。對我這種不太玩遊戲的人來說,ATV最主要的用途就是看片了。配合上Netflix進入台灣,再也不需要接什麼第四台,網路上就有無盡的電影,看是要付月費訂閱,還是單片租借,世界已經悄悄進入串流影音的時代了。

底下分享一下我個人被AppleTV驚艷到的地方。

遙控器。大家應該都試過在手機/平板看片,有時候要前後拖曳進度列找到某個特定畫面,但粗大的手指在螢幕點上去,卻之後永遠都拖不到那個想要的位置。

在ATV上看片,不管是手機Airplay上來,或是直接在ATV上播放的影片,遙控器的快轉/倒轉功能真的非常流暢好用。一般人大概會覺得遙控器有什麼了不起的,小小一支還能做成怎樣。Apple就身體力行的讓你知道,遙控器就是要做到這樣!

另外一個令人讚嘆的點是。家裡客廳本來就有一套音響是接在Airport Express上。買了ATV之後,才正思考要怎樣拉線,可以再從電視把聲音輸出到音響上,這樣看電影時的臨場感應該可以更棒,爽度更高。

結果某日在隨意玩轉遙控器時,意外發現,原來看片時直接可以從ATV上設定,把聲音直接輸出到Airplay喇叭上去!

拉線?免!直接輸出去就可以了。當然切換時會有幾秒的轉換空檔,但在看片的過程完全不會發生A/V不同步的問題。

說到這裡就不得不讚嘆一下Apple做產品的細節。這些都不是什麼艱難的技術,但他就是可以考慮到你會/可以怎麼用,然後每樣都幫你照顧的好好的。於是你就會忍不住一樣一樣一直買下去。從一支iPhone到iPad,小全套到大全套,從單件產品使用者,一步一步成為忠實果粉。

所以總之若你問我,ATV值不值得入手?如果已經有好多樣Apple產品了,而且你也常常用手機看片,看到視茫茫,而髮蒼蒼,那就十分推薦拜入一台ATV,相信可以讓你把iPhone/iPad上的完美使用體驗延伸到客廳來。