2014年11月24日 星期一

透過Ad Hoc將App安裝至其他測試裝置

iOS App學習筆記




Q:最近寫了一支App想給朋友測試,但是他的平台未安裝Xcode,也沒有對應的開發者憑證以及Provision Profile,若按照我自己的測試流程,必須取得對方的iPhone並且連接上我的Mac,如此一來手機中所有的資料都會同步至我的電腦中,非常麻煩。有沒有什麼辦法可以在不取得對方裝置的情況下將App安裝上去呢?
A:透過學習筆記第一篇介紹的Ad Hoc。該怎麼使用?看看底下的介紹吧!
1.   創建憑證要求檔(CSR
進入Key Chain,從上方欄中選擇「鑰匙圈存取 / 憑證輔助程式 / 從憑證授權要求憑證」。


電子郵件的部分隨意輸入,選擇「儲存到磁碟」。

儲存後會在指定路徑產生一個CertificatesSigningRequest.certSigningReqest檔案,稍後我們將用它產生憑證。
2.   產生Distribution Certificate
進入Apple Developer / Certificates, Identifiers & Profiles的網頁,左方側邊欄中選擇Certificates / Production


透過右上角的「+」新增憑證,選擇App Store and Ad Hoc,按下Continue


此處是步驟1的英文版,按下Continue略過。


選擇Choose File,載入步驟1產生的CSR檔,按下Continue並產生憑證,然後將產生的憑證下載下來,雙擊憑證檔將憑證安裝至你的Mac上。


3.   產生Provision Profiles
憑證一旦安裝在Mac上,需要有一個相對應的Provision Profile安裝在行動裝置上,在這之前,我們要將受測裝置的UUID加入Device清單中,在左方側邊欄中選擇Device / All,點擊右上角的「+」加入裝置(裝置的UUID可以在iTunes上看到)。


加完裝置後,左方側邊欄選擇Provisioning Profiles / Distribution,種類選擇Ad Hoc,按下Continue


這裡可以選擇特定的App ID,也可以選擇Wildcard App ID(通用ID)。


選擇憑證。


選擇裝置(可多選),接下來就是產生並下載。


4.   產生App安裝檔(.ipa
現在我們已經取得了Provision Profile,接著要將App打包成一個安裝檔,為了不改動原本的Release / Debug設定,我們需要特別為Ad Hoc創造一組設定,打開專案的Project Setting,選擇Info / Configurations,新增一組Release設定名為Adhoc(此處可以隨意命名)。


接著至Build Settings / Code Signing,將剛才加入的Adhoc設定底下的Any iOS SDK屬性改為iOS Distribution


從上方欄中選擇Product / Scheme / Edit Scheme


進入Archive,將Build Configuration改為方才加入的Adhoc


從上方欄中選擇Product / Archive


等待Archive結束後,選擇Export


選擇Save for Ad Hoc Deployment


選擇開發者帳號。


Export後會產生一個ipa檔,將ipa檔及步驟3產生出來的Provision Profile透過各種方法給予測試人員,測試人員雙擊ipa檔後就能透過iTunes安裝App了。



2014年11月6日 星期四

使用UIAlertController實作AlertView及ActionSheet

iOS App學習筆記



Windows中常常會需要使用彈跳視窗提示使用者某些事情,iOS上提供了兩種形式的表單來達到這樣的效果,一種是AlertView(圖一),另一種是ActionSheet(圖二),前者會彈跳至畫面中央,後者則是由下自上滑出,表單底部貼齊畫面下方。

圖一

圖二

iOS 8之前,開發者必須使用UIAlertView UIActionSheet 分別實作,以UIAlertView 為例,首先要創造它的實體—

上面這段程式碼設定UIAlertView 標題及內容;將Delegate指向產生它的Controller;預設會有一個Cancel按鈕,倘若不需要的話可以將它設為nil,這裡是將它的標題設為OK;設置其他按鈕的標題,會自動產生出和標題數量一樣的按鈕。


接著我們必須讓Controller實作UIAlertViewDelegate 這個Protocol


覆寫alertView:clickedButtonAtIndex: 這個Delegate方法,每次使用者按下其中一個按鈕時系統就會呼叫此方法,透過傳入的buttonIndex 參數來判斷使用者按下的是哪一個按鈕,並且執行對應的程式碼。


最後讓表單出現在螢幕中。
ActionSheet也是使用近乎一樣的方式運作(只需要把上述所有程式碼中AlertView的部分換成ActionSheet即可)。在iOS 8後,Apple終於把兩者合而為一,統一由UIAlertController 來管理,接下來就讓我們看看該如何使用這個全新的Controller吧!同樣地、首先我們得創建一個實體—

其中preferredStyle 必須傳入UIAlertControllerStyle,這個Enumerate包含兩種值:UIAlertControllerStyleActionSheet UIAlertControllerStyleAlert,分別對應上述提到的兩種表單,這個範例中產生的是後者。


大家應該能夠注意到在創建實體時並沒有定義任何按鈕,我們必須透過新的類別UIAlertAction 來定義,初始化過程中style傳入的是UIAlertActionStyle,這個Enumerate包含三種值:UIAlertActionStyleDefaultUIAlertActionStyleCancel UIAlertActionStyleDestructive,這三種按鈕的樣貌可以參照圖三;handler 則傳入一個Block,裏頭定義了使用者按下這個按鈕所對應的行為。
圖三


將這些按鈕加入UIAlertController 中。


最後透過Modal的方式將表單彈出,iOS提供了幾種View的顯示方式,Modal是其中一種,而其對應的方法就是presentViewController

看完上述的介紹,相信你已經學會了iOS的提示表單了,是不是非常簡單呢?