讀古今文學網 > iOS編程基礎:Swift、Xcode和Cocoa入門指南 > 9.13 最後的準備 >

9.13 最後的準備

隨著將應用提交到App Store日期的日益臨近,請不要讓應用的美好前景或巨大的利潤搞亂了你的節奏,導致越過了應用最後準備階段的各個重要步驟。Apple對應用有很多要求,如果不滿足這些要求會導致應用提交被拒。請花點時間做好準備,列個清單,然後仔細檢查。參見Apple的App Distribution Guide與Human Interface Guidelines的「Icon and Image Design」一章瞭解詳情。

9.13.1 應用圖標

為應用提供圖標的最簡單的方式是使用資源目錄。如果之前沒有對圖標使用資源目錄,而現在又想使用,那麼請編輯目標,在通用窗格App Icons and Launch Images下,App Icons Source旁邊單擊Use Asset Catalog按鈕。之後,Use Asset Catalog按鈕會變成一個彈出菜單,列出資源目錄名與目錄中用作圖標的圖片集的名字。

所需的圖片大小會列在資源目錄中。選中一個圖片,然後在屬性查看器中查看。令人困惑的是,「2x」與「3x」表示圖片大小應該是列出的圖標大小的2倍與3倍;比如,iPhone應用圖標顯示為「60pt」或「60×60」,不過「3x」表示你應該提供一個180×180大小的圖片。要想確定該顯示哪一個,在選中圖標集或加載圖片集時請勾選上屬性查看器中的復選框(如圖9-17所示)。要想添加圖片,請將其從Finder拖曳到恰當的位置處。

圖9-17:資源目錄中的圖標位置

圖標文件必須是個PNG文件,不能有alpha透明度。它應該是個正方形,系統會為其添加圓角。目前,Apple似乎更喜歡簡單、卡通的圖片,擁有明亮的顏色以及漸變的背景色。

在構建應用並處理資源目錄時,圖標會被寫到應用包的頂層並被賦予恰當的名字(如圖6-15所示);同時,一個恰當的條目會被寫到應用的Info.plist中,這樣系統就可以找到圖標並在設備上顯示了。具體細節很複雜,不過你不必關心這些,這也正是使用資源目錄的原因所在!

應用圖標大小隨著時間的變化也在發生著變化。如果應用要向後兼容於早期系統,那麼你還需要擁有不同尺寸的額外的圖標,以滿足這些老系統的需要。這正是資源目錄的價值所在。

此外,還可以加入更小的圖標,用於在用戶進行搜索時顯示,如果使用了設置包,那麼還會顯示在Settings應用中。不過,我從來都沒有使用過這些圖標。

9.13.2 其他圖標

在向App Store提交應用時,你需要提供一個1024×1024大小的PNG,或高質量的JPEG圖標以顯示在App Store中。Apple指南說它不應該只是應用圖標的放大版,同時也不能與應用圖標差別太大,否則應用將會被拒絕(這一點是從我的經驗得來的)。

App Store圖標不需要構建到應用中;事實上,它也不應該構建到應用中,因為這麼做只會毫無必要地增加應用的大小。另外,可能想在項目中保留該圖標(在項目目錄中),這樣就能輕鬆找到並維護它了。我建議將其導入項目中,並複製到項目目錄中,但不要將其添加到任何目標中。

如果為Ad Hoc發佈創建了iTunesArtwork圖標,那麼你現在可能需要將其從Copy Bundle Resources構建階段中刪除。

9.13.3 啟動圖片

在用戶輕拍應用圖標來啟動應用與應用開始運行並顯示初始窗口之間會有一個延遲。為了掩蓋這種延遲,使用戶覺得應用正在運行,你應該在這個時間間隔內顯示一張啟動圖片。

啟動圖片無須追求細節,它可以是應用完成啟動後界面主要元素或內容的一個簡單描繪。通過這種方式,當應用啟動完畢後,從啟動圖片到實際應用的過渡就是填充這些元素與內容的事情了。

在iOS 7與之前版本中,啟動圖片就是個圖片(一個PNG文件)。它需要添加到應用包中,也需要遵循某些命名約定。隨著iOS設備的屏幕尺寸與分辨率不斷變化,啟動圖片的數量也隨之發生了變化。iOS 7引入的資源目錄就派上了用場。不過隨著iPhone 6與iPhone 6 Plus的出現,整個情況變得難以管理了。

出於這個原因,iOS 8引入了更好的解決方案。相對於使用一組啟動圖片,你需要提供一個啟動nib文件,即一個.xib或.storyboard文件,其中包含了作為啟動圖片顯示的視圖。可以通過子視圖和自動佈局來構建這個視圖。這樣,視圖就會自動進行重新配置,匹配應用所運行的設備的屏幕尺寸與方向。

在默認情況下,新的應用項目都會帶有一個LaunchScreen.storyboard文件,這是用於設計啟動圖片的文件。Info.plist通過鍵「Launch screen interface file base name」(UILaunchStoryboardName)來指向該文件。如果必要,可以通過編輯目標並設置Launch Screen File域(位於App Icons and Launch Images下)來配置Info.plist。

你應該充分利用該特性,而不僅僅是因為這麼做很方便。Info.plist中的「Launch screen interface file base name」鍵告訴系統應用運行在更新的設備類型上,比如,iPhone 6與iPhone 6 Plus。如果沒有這個鍵,那麼應用就會縮放顯示,就好像iPhone 6只是個巨大的iPhone 5S一樣。實際上,你無法利用本可以使用的像素(顯示會有些模糊)。

使用啟動nib文件的另一個原因在於它是可以本地化的!與任何.xib和.storyboard文件一樣,顯示在基礎本地化啟動界面.xib或.storyboard文件中的字符串可以通過.strings文件進行本地化。

據我所知,應用包中的自定義字體是無法顯示在啟動nib文件中的。這是因為在啟動界面顯示時,它們尚未加載進來。

壞消息是如果應用要向後兼容於早期系統,那除了啟動nib文件,你還需要提供老式的啟動圖片。iOS 7及之前的系統對於啟動圖片的要求是非常複雜的,而且隨著時間的流逝規則還發生了一些變化,這又加劇了複雜性,結果就是要兼容的系統越多,需要滿足的條件就越多。我已經在本書的前一版中介紹過這些條件,這裡就不再贅述了。

Apple提供了一個名為Application Icons and Launch Images for iOS的非常有價值的示例代碼項目。該項目提供了各種尺寸的圖標與啟動圖片,同時還介紹了恰當的命名約定。

9.13.4 屏幕截圖與視頻預覽

在向App Store提交應用時,你需要提供應用的一個或多個截圖以顯示在App Store上。你應該事先就準備好屏幕截圖並在應用提交過程中提供它們。你至少需要根據應用所運行的設備的屏幕尺寸提供一張屏幕截圖,並且使用相應的分辨率。

可以通過模擬器或與電腦連接的設備來創建屏幕截圖:

模擬器

在模擬器中運行應用,首先設置目標以獲得所需的設備類型。選擇File→Save Screen Shot。

設備

在Xcode的設備窗口中,在Devices下找到連接的設備,然後單擊Take Screenshot。此外,還可以選擇Debug→View Debugging→Take Screenshot of[Device]。

在這兩種情況下,屏幕截圖文件都會保存到電腦上通常用來保存屏幕截圖的位置處(一般在桌面上)。

還可以同時按下鎖屏按鈕與Home按鈕在設備上進行屏幕截圖。這樣,屏幕截圖就會保存到照片應用的相機膠卷中,你可以通過任何方便的方式將其發送到電腦上(比如,給自己發郵件)。

你還可以向App Store提交用於介紹應用的視頻預覽。視頻最多可以是30秒的時長,格式為H.264或Apple ProRes。如果電腦使用的是OS X 10.10(「Yosemite」)或更新的版本,那麼它可以捕獲到設備的視頻。設備要新一些,擁有雷電連接器才行:

1.將設備連接到電腦上並打開QuickTime Player。選擇Choose File→New Movie Recording。

2.如果必要,當鼠標懸浮在QuickTime Player窗口上時,使用Record按鈕旁邊向下的v形按鈕打開彈出菜單,將相機與麥克風設為設備。

3.開始錄製,在設備上使用應用。錄製完畢後,停止然後保存。

可以通過iMovie或Final Cut Pro編輯生成的影片文件,然後提交到App Store。比如,在iMovie中:

1.在導入影片文件後,選擇File→New App Preview。

2.編輯!完成後,選擇File→Share→App Preview,確保得到的是正確的分辨率與格式。

要想瞭解更多信息,請參閱Apple iTunes Connect Developer Guide「First Steps」一章中的「App Preview」一節。

9.13.5 屬性列表設置

Info.plist中的很多設置對於應用的行為都是至關重要的。你應該仔細閱讀Apple的Information Property List Key Reference以瞭解全面的信息。大多數所需的鍵都是作為模板的一部分而創建的,並且賦予了合理的默認值,但你還是應該檢查一下。下面這些鍵尤其值得你注意:

Bundle display name(CFBundleDisplayName)

位於設備屏幕上應用圖標下方的名字;這個名字要短一些,以免被截斷。本章之前曾介紹過如何本地化顯示名。

Supported interface orientations(UISupportedInterfaceOrientations)

這個鍵指定了應用可以顯示的方向。你可以通過目標編輯器General頁簽的復選框進行設置。不過可能還需要手工編輯Info.plist以重新排列可能的方向順序,因為在iPhone上,列出的第一個方向是應用實際啟動的方向。

Required device capabilities(UIRequiredDeviceCapabilities)

如果應用所需的能力並不是所有設備都具備,那麼你就應該設置該鍵。對於應用來說,如果運行在缺乏特定能力的設備上是無意義的,那就不要使用該鍵。

Bundle version(CFBundleVersion)

應用需要一個版本號。最好在目標編輯器General頁簽中設置它。這裡可能會讓你有些迷惑,因為它有兩個域:

Version

對應於Info.plist中的「Bundle versions string,short」(CFBundleShortVers-ionString)。

Build

對應於Info.plist中的「Bundle version」(CFBundleVersion)。

據我所知,如果設置了前者,那麼Apple就會使用它,否則會使用後者。一般來說,在提交到App Store時,安全起見,請將這兩個域設為相同的值。這個值是個版本字符串,如\"1.0\"。版本字符串會顯示在App Store中,用於區分各個版本的發佈。提交更新時如果沒有增加版本字符串會導致更新被拒。不過,增加Build號但沒有增加Version號是可以的,如果提交了相同發佈的幾個連續構建,那就需要這麼做了(在TestFlight測試過程中,或發現了Bug,導致不得不在App Store上架前撤回提交的二進制文件)。