Nelson 寫些 iOS 開發的東東

Posts match “ Xcode ” tag:

學習 iOS App 開發的一些心得

| Comments

事前準備

進入這個世界,有些東西是你需要事先準備好的,說穿了,就是你的設備跟知識。

一台蘋果電腦

開發蘋果的東西,沒有蘋果電腦怎麼行呢?如果你手頭拮据的話,買台 Mac Mini 就能動工了,但如果預算足夠的話,建議買台 MacBook Air 或 MacBook Pro,方便你能隨時移動,走到哪就寫到哪。至於要買 Pro 或是 Air,那就看你需求跟預算了,反正若只是要開發程式,這兩者都綽綽有餘。

熟悉 C 語言以及物件導向

開發 iOS App 用的程式語言是 Objective-C,它是 C 語言的 superset,支援所有 C 語言的功能,並且加上物件導向的能力。所以你只要熟悉 C 語言以及物件導向的觀念,就可以快速上手 Objective-C,剩下的就只是習慣 Objective-C 的語法及特性而已。

英文能力不能太差

Objective-C 有個特色就是它寫出來的程式碼「就像在閱讀一段句子、一篇文章」,你怎麼說話的,就怎麼寫程式 - 當然,指的是用英文說話。所以你英文能力不能太差,否則你將無法寫出順暢的程式碼,也無法輕易看懂別人的程式碼。這是它跟其他常見的程式語言最大的不同點,一開始可能會不太適應,但久了之後你會愛上它的。另外你會需要看大量的文件,這些幾乎都是英文,所以需要有一定的英文底子。


如何正確設定 AFNetworking 的安全連線

| Comments

TL;DR

前一陣子 AFNetworking 被爆出存在安全性漏洞,它們也針對這件事情發出聲明稿

簡單的說,就是建議開發者使用最新版的 AFNetworking,並且啟用安全連線。不過它們也承認這一部份的說明文件沒有寫得很齊全,所以困擾了不少開發者。

今天花了一點時間研究,順手把它記錄下來。安全相關的東西不是我的專長,所以如果有任何錯誤的地方,請留言告訴我。

解決 Xcode 無法任意設定字型的問題

| Comments

最近灌了一台全新的電腦,用的是最新的 OS X El Capitan + Xcode 7.1,身為一位開發者,裝好 Xcode 要做的第一件事當然是把佈景主題的字型換成看得順眼的等寬字型(我個人偏好使用 Adobe Source Code Pro)。只是不知道為什麼,當我要調整字型的時候,卻發現字型挑選器無法讓我看到更多的字型:

問了一下社群的朋友,發現有不少安裝「全新的電腦 + Xcode」的人都有遇到這個問題,還好解決方法很簡單:

  1. 切到「~/Library/Developer/Xcode/UserData/FontAndColorThemes」目錄,這裡存放使用者自訂的佈景主題
  2. 用你喜歡的文字編輯器(例如 Sublime Text 或 Atom)開啟你要修改的主題檔
  3. 搜尋 <key>DVTSourceTextSyntaxFonts</key>
  4. 它底下的 dict 就是字型設定了,把這裡的字型名稱取代為你要的字型就可以了
  5. 要注意的是,這裡的字型名稱是「PostScript 名稱」,你可以在「字體簿」裡頭看到這項資訊

字體簿

改好之後存檔再重開 Xcode,世界又和平了 :D

自動解決 Xcode project file 的合併衝突

| Comments

之前寫過一篇文章,分享如何 讓 Xcode 專案易於版本控制的方法,最近又看到另外一個小技巧,跟我原本的方法結合起來的話,基本上就萬無一失了!

這個方法的步驟如下:

  1. 建立一個 .gitattributes
  2. 輸入 *.pbxproj merge=union
  3. commit 這個 .gitattributes

這些動作告訴 Git 「針對 .pbxproj 檔要使用 union 的 merge 策略」,翻成白話就是「要包含對方的修改跟自己的修改」。

在之前的文章裡頭,我們已經將檔案照檔名排序了,所以當遇到合併衝突的時候,可以安心的包含對方的修改跟自己的修改。

參考來源

更方便的在 Xcode 插入顏色代碼

| Comments

在開發 App 的過程中,時常需要插入顏色的代碼,通常就是請設計師給我們 RGB 值,然後我們再寫成 [UIColor colorWith...] 來產生顏色。這樣的方式沒什麼不好,只是對我來說會遇到兩個麻煩。

1.不知道那是什麼顏色

當然我們在寫程式的當下會知道我們要插入什麼顏色,可是過一陣子再回來看到那一行 [UIColor colorWith...],我相信沒有人可以在腦海中想出它對應到的顏色是什麼。

所以我會安裝 ColorSense-for-Xcode 這個 plugin,安裝之後只要將游標移動到程式碼,就會顯示對應的顏色,非常方便。

更方便的是,你還可以點擊那一塊顏色標籤,它就會跳出系統內建的 Color Picker,讓你馬上調整顏色,而且還會自動更新你的程式碼!

2.要轉換不同格式的色碼

每個設計師的習慣不同,不同的平台(Web、Android、iOS)習慣的色碼格式也不同,所以你有可能會拿到或看到 RGBA、HSBA、CMYK、Hex 等等不同格式。有的工程師會認命的自己轉換,有的會請設計師認命一點轉好再給他們,難道就沒有更方便的作法嗎?

我強力推薦使用 Skala Color,它支援輸入與轉換多種色碼格式,無論是 App 還是 Web 工程師都應該安裝,因為它實在是太方便了。

更棒的是,你絕對不會在需要它的時候忘記要開啟哪個 App,因為它就整合到系統內建的 Color Picker。也因為它跟系統整合,所以它可以跟 ColorSense-for-Xcode 搭配使用!

在 Release 時才上傳檔案到 Crashlytics

| Comments

我們的 iOS 專案是用 Crashlytics 來收集當機記錄,但根據官方的教學,它會在你每次 build 之後就把檔案上傳。但這對我來說是很不必要的,因為大部份開發階段遇到的當機,大概都知道是怎麼產生的,所以我只需要在 Release 時上傳到 Crashlytics 就好。

爬了一下文,找到一個做法可以滿足我的需求,只要在「Build Phase」把「Run Script」改成如下即可。

releaseConfig="Release"

if [ "$releaseConfig" = "${CONFIGURATION}" ]; then
./Crashlytics.framework/run [your_crashlytics_key]
fi

其中 [your_crashlytics_key] 就是你申請的那一串 API KEY。

2

讓 Xcode 更聰明的自動補完程式碼

| Comments

Xcode 是 MAC 開發者每天都得面對的工具,工欲善其事必先利其器,既然得每天面對,那當然要把它調教地人性化一點,好讓自己生產力++

現在絕大多數的 IDE 都有內建「程式碼自動補完」的功能,開發者只要輸入開頭幾個字,IDE 就會聰明的幫你補完變數或函式名稱。雖然 Xcode 這一方面一直做的不是很好,但它的進步是有目共睹的,在 Xcode 5 裡頭已經變得很不錯了。

但,科技始終來自於惰性!最近有人開發出一個名叫「FuzzyAutocompletePlugin」的 Xcode 外掛,讓自動補完的功能大大升級。裝了它之後,你只要輸入幾個字母 (甚至不用從開頭輸入,只要順序對就好),它就會幫你列出含有這些字母的變數或函式。

Xcode 底下如何統一程式碼風格

| Comments

在網路上已經有很多人分享各種 Objective-C 的程式碼風格,例如 NYTimesGitHubRay Wenderlich,我相信各位讀者公司應該也有一套自己的規範(如果沒有,那請趕快制定一套吧!),所以今天我不是要分享我們的程式碼規範,而是要來說說要怎麼將不符合規範的程式碼轉成合乎規範。

我研究了一些程式碼美化的工具,最後選用的是 BBUncrustifyPlugin-Xcode 這個 Xcode plugin,它最早只有支援 Uncrustify,最近也開始支援 ClangFormat 了,我個人是比較偏好 Uncrustify,因為它可以調整的選項比較多。

如何在 Debug mode 自動停用 ATS

| Comments

蘋果在 WWDC 2015 上發表了 App Transport Security (ATS),大力推廣網路安全連線。對於這樣的發展,我個人是樂見其成的,也相信在蘋果的影響力之下,安全連線也會進一步的普及。

不過對工程師來說,這代表你又要修改程式,以便符合蘋果規範了。在修改的過程中,我就遇到了一個問題:Release 版的 app 是會走安全連線的,但在 Debug 的時候它是連到本機(localhost),這不是安全連線。該怎麼讓它在 Release / Debug 都能正常連線呢?

讓 Xcode 8 再度支援 plugins

| Comments

眾所皆知的,Xcode 8 把之前的 plugins 都擋掉了,然後推出了 Source Editor Extension,但 Source Editor Extension 的能力還很有限,基本上只能對「文字」操作。

所以就有人提出了一個解法,把 Xcode 8 app unsign,這樣就能讓 plugins 再度作用了。具體作法如下:

  1. 下載 MakeXcodePluginsWork
  2. chmod 755 makeXcodePluginsWork 然後執行它
  3. 啟動 Xcode,原有的 plugins 都回來了

這樣會把 Xcode.app 的 signing 關掉,會變得比較不安全(其實就算跟之前一樣而已),所以請自己小心,後果自負。附帶一提,Xcode 8 開始內建一些功能,有些 plugins 可以退休了,例如:

  • 可以高亮度當前列,從【Preferences -> Fonts & Colors】設定「Current Line」顏色
  • 可以產生註解文件,熱鍵是【Command + Option + /】

讓 Xcode 自動去除行尾空白

| Comments

為了達到程式碼風格一致,在寫程式之前,我一定會在我的 Xcode 設定至少以下兩個設定:

  1. 固定 Tab 寬度,並將 Tab 轉成 Space。
  2. 自動刪除行尾空白。

我發現第一點很多人都會記得設定,但是第二點卻有不少人會忘記,甚至有些人不知道如何設定。以下一張圖教你怎麼做,如果你還沒設定過的話,就趁這個機會設定一下吧,對你只有好處沒有壞處的!

Text_Editing-6

必備的 Xcode plugins

| Comments

不得不說 Xcode 的功能跟其他 IDE 相比,真的挺陽春的,多虧網路上一堆熱心的開發者,幫忙開發了不少 plugins,稍稍補強了 Xcode 的功能。底下就列出我目前有用到的 plugins,當作一個備忘,也歡迎大家跟我分享好用的 plugins。

因為 plugins 是會綁定 Xcode 版號的(其實是綁 UUID),所以只要有新版 Xcode 出現,原有的 plugins 就會無法載入,建議安裝 DVTPlugInCompatibilityUUIDifier 來解決這個問題。另外我也強烈推薦使用 Alcatraz 管理這些 plugins!

讓 Xcode 專案易於版本控制的方法

| Comments

若是你有多人協同開發 Mac/iOS 專案,並且有使用版本控制系統的話,一定會在合併 Xcode 專案檔時吃到不少苦頭,一個不小心就會誤刪某些檔案的參照,或是重複某些檔案的參照。

最近發現一個好用的 script,可以用它來幫忙「根據檔名排序」專案檔裡頭的檔案。原本你的專案可能是混雜了檔案與群組資料夾,但經過這個 script 排序之後,專案會變成所有的群組資料夾排在最前面,接著才是檔案,而且群組資料夾裡頭的內容也會被排序。

因為被排序過,所以在合併不同版本的時候,就可以容易看出哪些項目是新增或刪除,若是不小心重複參照了某些檔案,也比較容易找出來。