iOS開發60分鐘入門

發表於2014-04-14

本文面向已有其它語言(如Java,C,PHP,Javascript)程式設計經驗的iOS開發初學者,初衷在於讓我的同事一小時內瞭解如何開始開發iOS App,學習目標包括:

  • 能使用Xcode IDE、模擬器
  • 能修改、除錯已有iOS App
  • 能在已有應用內建立新模組
  • 能建立新應用
  • 能釋出應用到App Store

本文不包含任何高階的iOS開發知識,已學會iOS開發的同學不要看,看完這篇文章學會了的同學也不用再看了。

不僅是學習一門新語言

有過指令碼開發經驗的人(如Javascript,PHP,Shell)在剛開始學習iOS開發的時候,會覺得iOS開發的學習曲線比指令碼語言要高,是的,這種感覺是對的。因為學iOS開發,不僅是學習一門新語言,它包括:

  • 一門語言:Objective-C
  • 一個框架:Cocoa Touch
  • 一個IDE:Xcode

初學指令碼語言通常不會來繪製圖形介面、與人互動,iOS如果不做圖形介面,像指令碼語言一樣處理文字運算元據庫,就沒啥意思了。 所以,過去我寫別的新手入門教程,通常都是寫《XXX入門15分鐘教程》,而iOS就要花數倍的時間來寫了。

環境準備

做iOS開發一定要有蘋果的軟體環境:Mac OS作業系統、Objective-C編譯器、裝置模擬器等,開發工具倒不一定要用Xcode,只要是個原始碼編輯工具就行(vim都行,只是沒Xcode那麼多功能)。

Mac OS

擁有Mac OS環境最簡單的方法是找一臺蘋果電腦,包括iMac, MacBook Pro, MacBook Air, Mac Mini,但不包括蘋果的移動裝置(iPod Touch, iPhone, iPad, iPad Mini,它們執行的是iOS系統,不是Mac OS),蘋果電腦在出廠的時候就會預裝Mac OS,目前最新版本是Mac OS X 10.8,主流的版本還有Mac OS X 10.6、Max OS X 10.7。 如果囊中羞澀,可以借一臺,或者上淘寶買個二手的。

黑蘋果

提到iOS開發入門,似乎沒辦法不說黑蘋果。所謂黑蘋果,就是把Mac OS改造後安裝在非蘋果的硬體上,這是違反DMCA法案的,黑蘋果的更多資料,可以在維基上找到 蘋果電腦價格高,國內軟體開發者生存壓力大,所以黑蘋果在國內也有一些真實的存在,國外當然也有啦。 黑蘋果基本可以勝任iOS開發,但有一些問題:

  • 安裝黑蘋果是非法的
  • 個人行為蘋果公司一般不會追究,但會遭同行的鄙視
  • 黑蘋果超級難裝,挑硬體。即使完全相同的型號,相同的批次,也有可能A機器裝上了,B機器裝不上
  • 黑蘋果系統多少都存在一些使用上的問題,像驅動Bug啦、待機恢復藍屏啦、上網瀏覽有問題啦
  • 黑蘋果不能隨意升級,可能升級一次safari就導致整個系統崩潰了

上面這些雖然不會直接影響Xcode寫程式碼、模擬器測試,但寫著寫著想上網查個東西的時候,safari不能翻頁,確實挺影響心情的。所以,錢包允許的前提下,還是搞個蘋果電腦省心一些。

Xcode 和 模擬器

Xcode可以在蘋果官網免費下載:Xcode下載地址 安裝Xcode時會自動安裝iOS SDK和模擬器。 這麼強大的IDE居然是免費的,還是挺讓人開心的。

從改一個現成的應用開始吧

學一門新軟體開發技能,能夠第一時間做出一個可執行的產品非常重要,有助於給自己正面激勵,我上大學的時候,有很多次想學一門新語言,往往花了半個月,還沉浸在資料型別和語法字典裡,連第一個Hello World都沒做出來。 這一次,就讓我們從改一個現成的應用開始吧。

下載

首先,我們從蘋果開發者中心下載一個示例程式碼回來。我選了ToolBarSearch。 在本文件的末尾,還有一些其它的網址可以下載開源iOS產品或者程式碼段,但我試了一下,還是Apple Sample Code最容易成功。 下載回來的zip檔案最好儲存在”下載”或者”文稿”目錄裡,因為在Mac OS 10.8以前,有些目錄(例如/var/private/tmp)在Finder中是看不到的,要通過Finder的“前往 > 前往資料夾”功能才能進入。

開啟

有三種方式可以開啟一個iOS Project

雙擊project檔案

開啟Finder,進入剛剛下載解壓的ToolBarSearch目錄,找到ToolBarSearch.Xcodeproj檔案,雙擊之,Xcode會自動啟動,並開啟這個專案

在Xcode裡選擇Project開啟

  • 在Xcode沒啟動的情況下(如果Xcode已經啟動了,就先按Command Q退出),啟動Xcode,會彈出“Welcome to Xcode”的歡迎頁,點選左下角的“Open Other”按鈕,找到ToolBarSearch目錄,雙擊ToolBarSearch目錄,或者雙擊ToolBarSearch.Xcodeproj檔案都可以
  • 如果Xcode處於開啟狀態,可以點選其選單欄的File -> Open,或者File -> Open Recent,然後再選擇要開啟的專案

通過命令列開啟

在Mac OS 10.8以前,有些目錄(例如/var/private/tmp),在Finder和Xcode的File > Open對話方塊中,點選滑鼠是找不到的,這時候就要通過命令列終端來開啟了。 開啟終端,執行:

open -a是mac os的系統命令,除了iOS專案,別的專案也可以這樣開啟。

執行剛下載的應用

點選Xcode左上角的Run按鈕(或者同時按下Comman和R鍵),Xcode會編譯原始碼並在模擬器中執行這個應用。 編譯成功會在螢幕上淡淡地顯示“Build Succeeded”。反之,失敗就顯示“Build Failed”且不啟動模擬器。

修改

在模擬器上看到“Performed search using…”了吧,下面我們改掉它。

  • 在Xcode左上角的Run按鈕下方,有一排小按鈕,從左到右第三個是一個放大鏡圖示,滑鼠移上去會顯示“Show the Search Navigator”,點一下它,開啟搜尋介面,在它下方出現的Find輸入框中輸入“performed”
  • 搜尋結果只有一條:ToolbarSearchViewController.m,點檔名下方被高亮的“Performed”字串,右側程式碼編輯區會自動開啟這個檔案,並滾動螢幕,使包含“Performed”的這一行出現在編輯區的中間。
  • 修改雙引號裡的字串,隨便改成啥,然後按“Command S”儲存。

當然,這些操作,你也可以在終端下通過grep和vim完成。

執行修改後的應用

按Command R執行,看看,是不是看到效果啦? 是的,修改一個應用就這麼簡單。

Objective-C

Objective-C是蘋果應用軟體(包括蘋果電腦上的Mac OS App和移動裝置上的iOS App)的開發語言。它是一種物件導向的程式語言。 蘋果公司還提供了一個軟體,叫Interface Builder,簡稱IB,用於視覺化的介面製作,就像用Dreamweaver做網頁,或者像Visual Basic做桌面軟體一樣。後來IB就整合進了Xcode,成了Xcode的一部分。這篇文件不講IB,只講Objective-C,因為:

  • 基本上,每一本講iOS開發的書(紙質書、電子書),都有大量的截圖一步一步教如何用IB開發iOS應用,而講Objective-C開發應用的書卻沒有那麼多。
  • IB可以用來直觀方便地畫介面、設定控制元件屬性、建立程式碼與控制元件的聯絡,但後臺的業務邏輯和資料處理仍然要靠Objective-C,可見,不管用不用IB,Objective-C都是繞不過去的。

C的超集

Objective-C擴充套件了ANSI C,是C的超集,也就是說:

  • 任何C源程式,不經修改,即可通過Objective-C編譯器成功編譯
  • Objective-C源程式中可以直接使用任何C語言程式碼

除了物件導向有語法是SmallTalk風格的(下面會講到),其它非物件導向的語法、資料型別,與C完全相同,所以本文就不再贅述。 來看一個經典的Hello World示例吧:

是不是彷彿穿越回了大一學習C語言的時代,看起來和C幾乎沒有區別,是吧?是的,因為還沒用到它的物件導向特性,哈哈!

SmallTalk的訊息傳遞語法風格

Objective-C的物件導向語法源自SmallTalk,訊息傳遞(Message Passing)風格。在原始碼風格方面,這是它與C Family語言(包括C/C++、Java、PHP)差別最大的地方。 在Java、C++世界,我們呼叫一個物件的某方法,在Objective-C裡,這稱作給型別傳送一個訊息,這可不僅僅是文字遊戲,他們的技術細節也是不同的。 在Java裡,物件和方法關係非常嚴格,一個方法必須屬於一個類/物件,否則編譯是要報錯的。而在Objective-C裡,型別和訊息的關係比較鬆散,訊息處理到執行時(runtime)才會動態決定,給型別傳送一個它無法處理的訊息,也只會丟擲一個異常,而不會掛掉。

在程式碼裡呼叫沒定義的方法(這是Java世界的習慣說法啊,專業的叫法是,給obj物件傳遞它無法處理的訊息),Xcode會警告,但編譯能成功,執行的時候會出錯。它會輸出這樣一個錯誤:

類似Java的OOP概念

Objective-C中一些物件導向的概念,也可以在Java中找到類似的實現(只能說是類似,不是完全相同),我的讀者基本都是Java和PHP程式設計師,我會在下文中儘量用Java的概念來類比。 GoogleCode上有人整理了Java和Objective-C的概念、資料型別對應表,參見這裡

字串

Objective-C裡有字串是由雙引號包裹,並在引號前加一個@符號,例如:

PHP程式設計師要注意,在這裡不能用單引號,即使只有一個字元也不能用。Objective-C與Java、C一樣,雙引號表示字串。

函式呼叫

前文述及,不涉及物件導向時,它和C是完全一樣的。以下是幾個函式呼叫的示例:

不帶引數

帶引數

傳遞訊息給類/例項方法

不帶引數

對應的Java版本

帶一個引數:

對應的Java版本

帶多個引數

對C Family程式設計師來說,這是最難接受的,最反人類的:

對應的Java版

訊息巢狀

對應的Java版

介面和實現

Objective-C的類分為介面定義和實現兩個部分。介面定義(Interface)放在標頭檔案中,副檔名是.h,實現(implementation)放在實現檔案中,副檔名是.m(也有.mm的副檔名,表示Objective-C和C++混編的程式碼)。 介面定義也可以寫在.m檔案中,但最好不要這麼幹 需要注意的是,與Objective-C的interface概念最接近的是C和C++裡的標頭檔案,它與implementation是成雙成對出現的,作用是宣告類的成員變數和方法。它與Java的interface概念完全不同:

  • Objective-C裡,interface有且只有一個實現,Java的interface可以有0-N個實現
  • Objective-C裡,interface可以定義成員屬性,Java裡不可以

在Objective-C裡,和Java的Interface概念相似的是Protocol,下文會講到。 請看示例: Interface

Implementation

介面和實現以@interface、@implementation開頭,都以@end結束。“@”符號在Objective-C中是個很神奇的符號。 冒號也是方法名的一部分,method和method:是兩個不同的方法名,不是overload,第二個帶引數。 上述程式碼對應的Java版:

私有方法和公開方法

寫在.h標頭檔案裡的方法都是公開的,Objective-C裡沒有私有方法的概念(沒有你說個蛋啊,哈哈哈哈)。 官方並沒有提到Objective-C怎麼實現私有方法,我查閱了stackoverflow,統一的答案是,要實現私有方法的效果只能藉助Category,不過,根據我的測試,即使採用了Category,也不能阻止外部的程式碼呼叫這個“私有方法”,只是Xcode不支援“私有方法”的自動完成,並會有警告提示,執行的時候,還是會成功的。各位看官知道有這麼回事就可以了,這裡不深講。

變數和屬性

類方法和例項方法

類方法

類方法就是Java、PHP裡的Static Method,不用例項化就能調。類方法有一個加號字首。 示例: 類定義

使用

例項方法

例項方法就是Java、PHP裡的普通方法,必須例項化才能調。例項方法有一個減號字首。 示例: 類定義

使用

Selector

selector就是一個方法指標,類似PHP裡的動態方法名:

在Objective-C裡,selector主要用來做兩類事情:

繫結控制元件觸發的動作

延時非同步執行

這個例子中,獲取資料來源是通過ASIHTTP元件非同步呼叫服務端HTTP介面,refreshTable要用到資料來源返回回來的資料,如果不延遲0.5秒,就會立刻執行,執行的時候資料還在路上呢,頁面就要變空白了。

繼承

繼承是寫在Interface定義裡面的。語法為:子類名在左,父類名在右,中間用冒號分隔。 示例:

對應的Java版本是:

協議(Protocol)

就是Java、PHP裡的Interface。

協議的定義

協議的定義用@protocol關鍵字:

對應的Java版本是:

協議的繼承

協議本身也可以繼承別的協議:

對應的Java版本:

可選方法

協議可以包含可選方法,顧名思義,可選方法可以不被類實現:

加了@optional關鍵字,一個類在implements這個協議時,便可以不實現print:方法。 Java裡沒有類似的實現,除了Collection裡會有一些方法帶有optional的註釋,但Collection是個特例。

協議的實現

一個類實現某些協議是寫在Interface定義裡面的。語法為:協議名用尖括號包裹,多個協議名用逗號隔開,協議寫在父類的右邊(如果沒有父類就直接寫在子類右邊)。 示例:

Printable, Drawablw就是兩個協議。 對應的Java版本是:

分類(Category)

分類可以給一個已經存在的類增加方法,而不用去改它的原始碼。Java和PHP中都沒有類似的特性。 比如說,NSObject是一個Objective-C內建的系統類,我們想給它增加toJson方法,就像這樣: 標頭檔案:NSObject+Json.h

實現檔案:NSObject+Json.m

使用的時候,只要包含NSObject+Json.h,例項化NSObject類,就可以使用toJson方法了:

當然了,NSObject本來的那些方法依然還是可以用的,什麼都沒變,只是多了個toJson方法。看起來是不是和繼承沒太多差別呢(除了使用的時候例項化的是NSObject,而不是JsonObject)?再看一個繼承實現不了的例子: 標頭檔案:NSObject+Json+XML.h

實現檔案:NSObject+Json+XML.m

使用:

Cocoa Touch

Cocoa是Mac OS App的開發框架,Cocoa Touch是iOS開發用的框架,Cocoa Touch和Cocoa大部分是一樣的,只是Cocoa Touch多了一些移動裝置特有的東西,如:觸控式螢幕、加速度感測器、GPS定位。Cocoa中多工、多視窗的特性,在Cocoa Touch中也是沒有的(或者跟Cocoa不完全一樣的)。 就像學了Java語言還要再學一些Spring、Hibernate、Struts(或者其它類似的Java類庫)才能開始做J2EE應用一樣,學過Objective-C語言之後,也要再學習Cocoa Touch框架才能順利地開發iOS應用。

最常用設計模式之Delegate

Cocoa Touch大量使用Delegate(委派)設計模式。

常用控制元件:按鈕、文字塊、圖片、輸入框

TableView

WebView

導航條

Xcode

執行

快捷鍵:Comman R

搜尋

搜尋文字

搜尋檔案

新建檔案/目錄

推薦在Finder中新建好的再新增進來

斷點

模擬器和真機測試

模擬器測試

在Xcode中開啟你的專案,在Xcode頂部工具欄的Stop按鈕(Run按鈕右邊那個黑色正方形按鈕)右邊,有個下拉選單,顯示著 “ToolBarSearch > iPhone 5.0 Simulator” (即 你的應用英文名 > 當前選中的除錯 ),點選這個下拉選單,選中iPhone 5.0 Simulator(這裡的5.0是指iOS版本,不是iPhone5的意思,如果你的專案是iPad應用,請選iPad 5.0 Simulator),再按“Run”按鈕,Xcode就會自動把當前正在編輯開發的應用編譯並安裝到模擬器上。 在模擬器上操作時,如果執行過程中遇到了你在Xcode裡設定的斷點,模擬器會暫停執行,並將當前活動視窗切換回Xcode,供你除錯。 在Xcode裡增加或者取消了斷點,不需要重新編譯和安裝應用即可生效。

切換被模擬的裝置

模擬器的“硬體”選單,可以選擇想要模擬什麼裝置,有iPad、iPhone可選。

  • Retina:表示視網膜屏,iPhone(Retina)代表iPhone4,iPhone4S
  • 4-Inch:表示4英寸的iPhone,iPhone(Retina 4-Inch)就是iPhone 5

切換模擬的iOS版本

在模擬器的“版本”選單,可以選擇要模擬什麼版本的iOS。裝置和版本是彼此獨立的,iPhone 4S可以有5.0,5.1,6.1幾種iOS版本,當然了,iPhone 5不可能有4.3的iOS版本。

觸控式螢幕

用滑鼠點選(不區分左右鍵)模擬器上的iPhone、iPad螢幕,就是在模擬用手指觸控iPhone,iPad的螢幕,可以實現一些觸控效果比如:

  • 滑鼠單擊 等於 手指輕觸
  • 滑鼠長按 等於 手指長按(例如你可以在模擬器上長按應用icon調出刪除應用的確認框)
  • 滑鼠按住拖動 等於 手指拖動
  • 雙擊和單擊模擬器的Home鍵也等於雙擊和單擊真機的Home鍵
多指手勢

多指手勢比較複雜,在白蘋果筆記本上可以模擬簡單的雙指手勢,白蘋果的觸控板天然支援多指觸控,但要定位到模擬器的區域再響應多指手勢就需要藉助一些額外的鍵啦:

  • 按住Option鍵,再用兩個手指去操作觸控板,可模擬雙指拖動、旋轉
  • 按住Option+Shift,可模擬雙指合攏

輸入法和鍵盤

輸入中文

手機上特有的輸入法(比如九宮格輸入法)不能模擬。模擬器預設的iOS軟鍵盤只有英文輸入,在測試應用的時候,我們要用到中文,有兩個辦法:

  • 使用剪貼簿,在Mac OS裡複製,再到模擬器執行的應用中的輸入框上長按滑鼠(模擬手指長按)3秒以上,等彈出“貼上”的時候選擇之,即可。
  • 在模擬器裡,按Home鍵,找到Setting那個App icon(不是Mac OS頂部的模擬器選單啊,那裡沒有Setting的),開啟被模擬iOS裝置的設定,依次點選”General – Keyboard – International Keyboards – Add New Keyboard…”,加個中文鍵盤,以後就可以使用被模擬iOS裝置軟體盤輸入中文了,跟在iPhone/iPad真機上一樣。

使用Mac電腦的鍵盤

如果要輸入大量文字,使用模擬器裡的軟鍵盤效率太低,這時候可以使用物理鍵盤,方法是:在Mac OS頂部的模擬器選單欄,點選”硬體”選單,勾選下拉選單中的“模擬硬體鍵盤”。以後再用模擬器執行iOS應用時,點選iOS應用中的輸入框,軟鍵盤就不彈出來了,可直接使用Mac電腦的物理鍵盤輸入。 注意

  • 模擬器中的iOS接管了物理鍵盤輸入,所以,呼叫的是模擬器iOS的輸入法,不是你的Mac電腦的輸入法。打個比方,你的Mac OS裝的是搜狗五筆,模擬器中iOS加了個拼音輸入法(Add New Keyboard),那麼,在iOS應用中輸入中文會呼叫拼音輸入法。
  • 要切換模擬器中iOS的中英文輸入法,也只能按iOS裝置軟鍵盤上的小地球圖示,按Mac電腦上的Command+空格鍵是不行的。

地理位置

但Mac電腦沒有定位用的硬體(GPS)和軟體基礎,因此模擬器不能自動獲得當前的地理位置,不能用模擬器測試定位功能。(注意,雖然WiFi也可以獨立定位——iPad WiFi版沒有GPS也可以定位,但Mac電腦的WiFi不具備定位相關的軟體) 要在模擬器裡測試依賴地理位置的功能(如”我附近的xx”),可以手工指定一個經緯度給模擬器,方法:在Mac電腦頂部的模擬器選單,點選”除錯 – 位置 – 自定位置”,會彈出一個對話方塊,在彈出的框內填入經緯度即可。 如何獲得經緯度? 上谷歌地圖(ditu.google.cn),在地圖上找到你想要的位置(比如你想知道杭州大廈的位置,就在通過搜尋框找到杭州大廈),點選右鍵,選擇“這兒是什麼”,搜尋框中就會出現這個位置的經緯度了,前面是緯度,後面是經度。我們們天朝的版圖,都是北緯和東經。

攝像頭

Mac電腦有攝像頭,但Mac OS沒有設計API給iOS模擬器呼叫,所以,不能用模擬器測試對焦閃光燈等功能。 要在模擬器上測試依賴照片的功能,可以在程式碼裡做一個workaround,即當程式碼檢測到攝像頭不可用時,彈出一個照片選擇器,讓測試人員從相簿裡選擇一幅照片,來進行後續的操作(如照片美化、人臉識別、條碼掃描)。

真機測試

模擬器能驗證你開發的iOS應用的大部分功能,但有些Mac裝置上不具備的硬體,模擬器是不能模擬的。前文提到了一個繞過這些限制的辦法,但獲取當前位置、拍照、加速度感應這些是模擬不了的,一款應用釋出給消費者之前,必須要在真實裝置上驗證過。 將未提交App Store稽核通過的應用安裝到iOS裝置上測試,有三種辦法:

  • 加入蘋果的Developer Program,成為付費會員,有了這個付費會員資格,就可以直接在Xcode中點選”Run”將剛剛改過的程式碼編譯打包安裝到開發測試用的iOS裝置上。在iOS真機上操作被測試的程式能啟用Xcode中設定的斷點。
  • 越獄iOS裝置。將iPhone和iPad越獄後,可以通過SSH直接上傳Xcode編譯好的ipa包(一個iOS App本質上就是一個ipa包)。
  • 越獄的iOS裝置,配合破解過的Xcode,甚至可以實現和付費開發者計劃一樣的功能:在Xcode上點選”Run”,就自動編譯安裝到iOS裝置上去執行了
  • 企業部署方案。就像阿里巴巴的軒轅劍一樣,用iPhone/iPad訪問這個網址,點選裡面的軒轅劍連結就可以安裝軒轅劍這個應用了。

破解Xcode是違法行為(越獄是合法的),而且挑版本挑得厲害,不是所有Xcode版本都能破解,也不是所有Xcode的破解版都能和越獄的iOS配合好。越獄+SSH上傳跟企業部署一樣效率低(部署效率低,無法啟用Xcode中的斷點),只能用於QA驗收,不適合開發自測。綜上所述,最適合開發實時測試的就是第一個正規途徑了。下面重點講這個:

擁有一個開發者賬號

蘋果的Developer Program分為個人開發者和公司開發者,分別是每年99美元和每年299美元,分別可以註冊100臺和500臺蘋果測試裝置。這個臺數限制在一個付費年度內不會清空,比如說,2013年4月1日付費成功的,付費會員資格在2014年3月31日之前有效,這期間,註冊一臺就少一個名額,哪怕這個裝置註冊進來用了之後一分鐘馬上又刪掉了,減少的這個名額也不會回來。 在交錢之前,最好問一下,周圍的同事,有沒有已經交了錢的。如果有,你只需要註冊一個免費的Apple ID(就是你在App Store安裝軟體用的Apple ID),請他發個邀請郵件給你,把你的Apple ID加入他的團隊就可以了,蘋果會認為你們兩個人是一個團隊的,你們分別用自己的賬號,共享100臺裝置的限額,這是合法的。

安裝證照和私鑰

證照

不想看下面各種點選各種頁面跳轉的直接用瀏覽器訪問證照管理,你要登入你就用Apple ID登入(前提是交過錢,或者找交了錢的人把你加入團隊了)。

不嫌煩,或者想知道下次沒我這個文件的時候怎麼進證照管理嗎?按這個步驟操作:

頁面上有一個“Your Certificate”區域,下方有個Download圓角按鈕,這是你的個人證照,下載下來。再下面一行,有一句“If you do not have the WWDR intermediate certificate installed, click here to download now”,這個是蘋果的公共證照,也下下來。 雙擊下載回來的證照,裝證照時,會提示你輸入密碼,這是【鑰匙串訪問工具】在問你要你的Mac OS賬號開機密碼(相當於linux裡面的sudo),不是Apple ID的密碼,不要搞錯了。

安裝私鑰

如果你是和其它同事公用的賬號,讓他給你一個私鑰即可,就是一個副檔名為p12的檔案,雙擊之,鑰匙串訪問會自動出來,需要你輸入一個密碼,這個密碼問給你p12檔案的人要,不是你的Mac OS系統開機密碼,也不是你的Apple ID密碼。

將裝置註冊到Provisioning Portal

  • 開啟Xcode,從Xcode的Window選單中找到Organizer,開啟之(Shift Command 2)。
  • 把iOS裝置連上電腦,Organizer會自動識別出你的裝置,並顯示在左側邊欄。
  • 在Organizer左側邊欄找到你的裝置,右鍵,點選“Add Device to Provisioning Portal”,然後等Organizer提示你操作成功即可。(選中裝置後,右邊裝置詳情區域會顯示一個按鈕“Use for Development”,點它也可以)。

到iOS真機上執行測試版程式

回到Xcode主介面,在Stop按鈕(Run按鈕右邊那個黑色正方形按鈕)右邊,有個下拉選單,顯示著 “ToolBarSearch > iPhone 5.0 Simulator” (即 你的應用英文名 > 當前選中的除錯 ),點選這個下拉選單,選中你的真機裝置名,再按“Run”按鈕,Xcode就會自動把當前正在編輯開發的應用編譯並安裝到真機上測試啦!

釋出到App Store

打IPA包

IPA包本質上是一個ZIP壓縮包,只不過它有著特殊的目錄結構,副檔名是ipa,製作方法如下:

  • 在Xcode中Build專案,快捷鍵Command B
  • 在左側專案導航器中,展開Products資料夾,找到你要打包的應用,你的應用名.app,右鍵,選擇show in finder
  • 到Finder中Copy這個.app目錄(選中,按Command C),複製到一個你新建的名為Payload(區分大小寫)的資料夾中
  • 找到你的應用Logo,即一個512 * 512畫素的PNG檔案,copy到與Payload一起(與Payload並列,不要放進Payload了),並重新命名為iTunesArtwork(區分大小寫,沒有副檔名)
  • 將Payload目錄、ItunesArtwork檔案打成一個zip包,並更改副檔名為ipa
  • 雙擊這個ipa檔案,會用iTunes開啟,如果開啟成功,且在iTunes裡有應用Logo顯示,就成功了

批量自動打包

除App Store外,還有許多其它的iOS應用市場(如91助手,同步推等等),如果一個應用需要釋出到很多個應用市場,且他們的程式碼略有不同(比如說,統計程式碼不同),按上述方法手工修改原始碼再打包,再還原,比較容易出錯。好訊息是,Xcode是有命令列的,我們可以寫一個shell指令碼,先用se自動修改原始碼,再呼叫Xcode的命令列來編譯以得到your——app.app目錄,最後呼叫zip、mv等命令把上一個章節講的ipa打包動作自動執行。

閱讀應用程式碼

從頭新建一個應用:Hello World

其它

程式碼裡的控制元件尺寸

iOS App裡的控制元件尺寸和字型大小都是指Point,Retina裝置(iPhone 4,4S,5;the new Pad)和非Retina裝置(iPhone 3GS,iPad,iPad 2)的Point數是一樣的,儘管iPhone 4的解析度是3GS的2倍。比如說,10point在Retina裝置裡是20 pixel,在非Retina裝置(iPhone 3G)上則是10 pixel。 專案成員間交流時,應使用Point,不要使用pixel。

SVN操作含有@符號的檔案

iOS應用中經常出現xxxx@2x.png這樣的檔名,它們是給retina裝置用的高解析度大圖,用svn命令列操作它們的時候會被@符號干擾,解決方案是在svn命令末尾加上一個@符號,如:

如果一次移動了幾十個png檔案再svn commit的,可以用shell批處理:

上面這個命令是將檔名不包含@符號的,且已經不在硬碟上的檔案從svn version controll中刪掉

上面這個命令是將檔名包含@符號的,且已經不在硬碟上的檔案從svn version controll中刪掉 svn add同上, 如法炮製即可.

Xcode中的程式碼結構與作業系統上的檔案系統並不一致

推薦在Finder裡建好目錄再到Xcode的Project Navigator中點選“Add Files to”新增到專案中

iPhone 5適配

iPhone 5與之前的iPhone不一樣,採用了4寸Retina屏,所以它的Point數變成了320 * 568 points

開原始碼

Objective-C教程

相關文章