套件管理工具CocoaPods介紹

這是1/9的cocoaHeads裡,SuperBil分享的套件管理工具。
之前小岡也有和我推薦過這個工具,當時沒有去深入研究如何使用。
這次與會完後,便開始試著學習使用這個管理套件。(裝完後心得:天呀!實在太好用了!必裝~)

分享資料

投影片:做自己的可可豆夾
錄影檔:CocoaPods

CocoaPods介紹

CocoaPods是一個管理套件的工具。

過去在開發app時,如果我們想要用一些第三方的Library,通常會要到GitHub下載專案到本地端,然後把它載入專案裡。這樣如果套件有更新時,都要手動更新,若是不同版本的ios要用到不同的library,又要手動去管理,會比較麻煩。

並且如果是直接把原始碼放到專案裡,會很容易和自己寫的code混在一起,管理和瀏覽都會較為困難。

CocoaPods就是用來管理這些第三方套件,使用CocoaPods之後,專案會變這樣:

螢幕快照 2014-01-12 下午4.48.50
要改成點選GourmentGroup.xcworkspace開啟專案
螢幕快照 2014-01-12 下午4.44.44
下方會多一個Pods的套件資料,裡面放的是所有使用到的套件

 安裝方法

這篇文章有非常詳細的方法:CocoaPods

比較要注意的是,我今天在安裝時,因為Podfile檔案所使用的編碼錯誤,會出現如下錯誤

後來我雖然把檔案改成utf-8,還是一直跑出同樣的錯誤。
後來才發現,如果有錯誤,要先把終端機關掉再打開,才會再一次執行。

接下來,如果要更新Podfile,到終端機打入

就可以了!

投影片另外有講到podSpec,如果有在cocoaPods裡面沒有包含的Library
(現有的Library可到http://cocoapods.org/去輸入函式庫的名稱找有沒有現有的)
如果沒有的話(或者是自己製作的Library),就可以自己去寫spec
這邊有教學:Specs and the Specs Repo

參考資料

AutoLayout介紹

投影片分享

過去的作法…

  1. 使⽤用frame和bounds去決定物件的位置和⼤小。
  2. 使用autosizing masks
    1. 設定當畫⾯面⼤大⼩小變動時,要固定 那些值(struts)。
    2. 在view的⼤大⼩小改變時,可以偵測 super view的⼤大⼩小改變去改變物 件的寬和⾼高的值(springs)。

AUTOLAYOUT和AUTORESIZING MASK的區別

Autoresizing Mask是AutoLayout的⼦子集。 AutoLayout更多的功能

    1. 指定任意兩個view的相對位置
    2. 可指定⾮非相等約束(⼤大於或者⼩小於等)
    3. 可以設定約束的優先級

WHAT IS AUTO LAYOUT

一種基於約束的,描述性的佈局系統。 
 Auto Layout Is a Constraint-Based, Descriptive Layout System.

      • 基於約束 – 以所謂相對位置的約束來定義的
      • 描述性 – 使⽤用接近⾃自然語⾔言的⽅方法來進⾏行描 述
      • 佈局系統 – 設計界⾯面的各個元素的位置。

使⽤用約束條件來描述佈局,view的frame會依據這 些約束來進⾏行計算。
Describe the layout with constraints, and frames are calculated automatically.

影片分享

UITableView的小問題

紀錄一下今天開發我的APP時遇到的小問題,
因為要使用UITableView,發現UITableView放在UIView裡時,
若要使用static cells是不能直接使用的。

當我們要用UIView,裡面有放一些自己的東西,再加上一個Static cells的UITableView時,
會發現雖然在storyboard裡能夠正常的顯示表格的樣子,如下圖
螢幕快照 2013-12-11 下午6.28.52
但是當執行出來卻無法顯示已設定好的static cells,而會顯示為一片空白,如下圖
螢幕快照 2013-12-11 下午6.31.55
查問Google大神後,在這邊有看到文章有相關的建議,也就是要我們不要實作下面這三個方法

不過,我檢查過後,我並沒有設定這三種方法,但是還是一樣無法正常顯示定義好的static cells,
最後這篇文章解決了我的疑問:How do I put a UITableView into a UIView
原來,我們不能夠直接在UITableView裡直接使用static cells,
如果必需在static cells的畫面裡加上其他元素,則應該要在該位置放入Container,然後Container連接至UITableViewController畫面,
如下圖:
螢幕快照 2013-12-11 下午6.41.42

這樣子便能夠正常的顯示在storyboard裡設定的static cells的樣式了!
螢幕快照 2013-12-11 下午8.15.14
PS:這邊有Container View與母容器互動的範例文章與範例專案

iOS6以上控制螢幕旋轉

一般的設定方式

TabBarController設定方式

假使今天要控制所有畫面中,某些可支援旋轉,某些不行,
在有使用Navigation Controller和TabBarController的狀況時,
則需要這樣設定:

  1. 勾選支援畫面旋轉
    螢幕快照 2013-12-11 下午3.36.26
  2. 在AppDelegate加上這段程式碼
  3. 在tabBarController裡加上
  4. 支援旋轉的子畫面加上
  5. 要支援旋轉的子畫面加上

Navigation Controller設定方式

若要控制在Navigation Controller之下的單獨畫面是否支援旋轉,則需要在Controller裡加上這段

What’s New in Xcode 5

Asset catalogs (圖片結構)

  1. 在XCode5,因為要支援在不同設備使用不同解析度的圖片,我們可能有很多種不同版本且不同檔名的圖片。這時便可以使用Xcode5的新功能Asset catalogs,它會提供一個介面,讓我們可以將一組圖片設定為一個群組,以及要使用的裝置對象。
    如下圖
    2013-11-22_173500
    然後在程式裡使用

    來使用圖檔。
  2. 這個功能最大的好處就是,圖片不再需要強制要用名稱來代表針對的裝置,如@2x, ~iphone,~ipad或-568h,而可以由使用者來定義那些圖是針對那種裝置的。
  3. 假使將發佈目標設定為IOS7,Xcode會將asset catalogs編成二進位檔案,這將可以讓APP的下載時間縮短。

Image slicing

  1. 現在XCode新增對圖片的”九宮格縮放”設定,這是為了讓同一張圖片可以針對不同的裝置、不同解析度的狀況下做縮放,而不致讓圖片變型。
    2013-11-22_174607
    下圖是選擇Stretches和Tiles的差異,可以看出,是中間的圖片的拉長方式有所差異。
    2013-11-22_175913
  2. 這個功能可以使圖片可以輕易縮放至任意大小,只需設定center mode以及把素材使用至專案裡就好。

Auto Layout improvements

  1. 在iOS7的autoLayout有很大的改變,幾乎所有的設定都可以在storybaord上面來做。差異點大置有:
    1. Interface Builder不再會在移動物件後,自動改變constraints,但可以選擇是使用原本設定或是接受新的條件
    2. 可以輕易的設定兩個UIView之間的constraints(按control+拖曳)
    3. There are new controls to solve common Auto Layout problems, such as the Pin
      and Resolve Auto layout Issues buttons in interface builder, which let you
      clear constraints, reset to the suggested constraints in Interface Builder, add
      missing constraints, updates constraints, update frames, and more
    4. 有更直觀的設定constraints介面
      2013-11-22_181904

Preview window

XCode5可以預覽APP在ios6及ios7的顯示差異,首先點Assistant Editor(右上方)
2013-11-22_182338
然後點下圖紅圈處
2013-11-22_182353

再點右下的控制項來選擇要預覽的版本
2013-11-22_182138

Language improvements

  1. @import允許只單一import一個類別,如:
  2. instancetype:和id相同功能,但只能用在傳回的參數上。它代表著是自己的類別或自己的子類別,當若是在alloc init時,沒有傳回自己類別或自己的子函數類別時,編譯器會提示錯誤。如:

    此時若NSString * car = [Car car];
    會出現Incompatiable pointer types initializing 'NSString *' with an expression of type 'Car *'的警告訊息

Documentation improvements

  1. 右邊頁籤有quick help(點option+alt也可以跳窗方試顯示help)
    螢幕快照 2013-11-21 下午5.56.33
  2. 可在自定函數上面使用//增加註解,或用/*! — */增加更詳細的註解,如:

Debugging improvements

  1. Data Tips: 下中斷點時,游標移到變數上,可以看到此時變數的值。
    Debugging1
  2. Quick Look:讓變數的內容以圖形化的方式呈現,例如
    2013-11-22_1839162013-11-22_183930
  3. 在Debug介面裡新増了CPU和memory的使用量。也可以自己增加要監控的屬性,如用電量、iCloud 活躍度、OpenGL使用的frame rates。
  4. 點選Product > Perform Action > Analyze file name可分析單一檔案的效能

Source control improvements

Performance improvements