位元詩人 [Objective-C] 程式設計教學:在 macOS 以 Cocoa 建立 Objective-C 開發環境

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

如果要在 macOS 上學 Objective-C,大部分的程式人都會使用 Xcode,這是正規的方式;不過,如果有跨平台的選擇,GNUstep 是一個替代的方案。本文兩者皆會介紹。

正規的方法,使用 Xcode

學 Objective-C 最正統的方法是在 Mac 平台上透過 Xcode 來撰寫 Objective-C 程式,至於本系列文章介紹的其他工具或平台,都算是替代性的方法。Xcode 包括

  • 編譯器 (C、C++、Objective-C、Swift 等)
  • Cocoa 框架 (framework)
  • IDE
  • iOS 模擬器 (simulator)

如果只要寫 C 或 C++ 程式,命令列工具的部分可獨立安裝,其他的部分則要安裝整個 Xcode。

接下來,我們展示一下用 Xcode 建立新 Objective-C 專案的流程。一開啟 Xcode 時會進入歡迎畫面:

啟動 Xcode

接著選擇專案類型:

選擇 Xcode 專案模板

一開始我們的目標是練習語法,還用不到 UI 的部分,選擇 Command Line Tool 即可。

接著,選擇專案相關的選項:

設置 Xcode 專案

一開始預設的語言 (language) 是 Swift,但我們的目標是練習 Objective-C,所以要更改語言。Organization Identifier 的部分一般是用自己所在的開發團隊所擁有的網域的反向來命名,由於我們只是要練語法,用 com.example 也無妨。

再來要選擇專案所在的位置:

選擇 Xcode 專案位置

最後會進入 Xcode 的編輯器畫面:

Xcode 的編輯器

這時候就可以開始用 Xcode 來寫程式。

使用其他的編輯器或 IDE

即使使用其他的編輯器或 IDE,仍然要安裝 Xcode,因為 Cocoa 和 Xcode 是包在一起的。只是 Xcode 比較肥大,我們有時候會想用其他的工具。

AppCode 是 JetBrains 所出品的 Objective-C 和 Swift 商業 IDE,有著不錯的評價,提供 30 天的試用期。EditRocket 則是一個多程式語言商業編輯器,包括 Objective-C 在內,同樣提供 30 天試用期;但 EditRocket 沒那麼知名,有興趣的讀者可自行試用。另外,AtomVSCode 皆對 Objecitve-C 提供語法高亮 (synatx highlighting) 等基本的支援。

Hello World 程式

Hello World 程式是用來確認開發環境可正常運作的微型程式,本節建立一個 Objective-C 的版本。開啟編輯器或 IDE,撰寫以下的程式:

#import <Foundation/Foundation.h>

int main(int argc, const char *argv[])
{
    @autoreleasepool {
        NSLog(@"Hello World");
    }

    return 0;
}

如果讀者有按照我們先前建立專案的流程的話,可以利用 IDE 的「Build」或「Run」按鈕就可以編譯程式。

如果使用編輯器的讀者,可在終端機輸入以下指令:

$ clang -o hello hello.m -framework Foundation

-framework 參數會同時呼叫相對應的頭文字檔和二進位檔,這是 Mac 上的 Clang 特有的參數。

如何在 macOS 上使用 GNUstep

目前 macOS 無法編譯及安裝 GNUstep 函式庫,主要的原因是 ABI 不相容,至少筆者試了幾個不同的編譯器 (GCC 和 Clang) 和編譯參數皆如此。不過,還是可以搭配 GNUstep Make 的部分來編譯 GNUstep 專案。

筆者其實不是很鼓勵這樣做,因為 Cocoa 和 GNUstep 雖然語言 (Objective-C) 相同,API 部分相容,但 ABI 其實不相容,變成要處理異質的編譯環境所帶來的問題。如果仍然想用 GNUstep 的話,Homebrew 有 gnustep-make 的套件,使用以下指令安裝:

$ brew install gnustep-make

GNUstep Make 是一個以 Makefile 為基礎的小型框架,用來簡化編譯 Objective-C 程式的工作。我們在後文會介紹如何以 GNUstep Make 建立 Objecitve-C 專案。由於 GNU Make 是跨平台的,GNUstep 專案可在不同平台間流通,但由於不同 Objective-C 編譯器間 ABI 不完全相容,無法單憑 GNUstep 專案通吃所有的平台。我們會集中在後文介紹 GNUstep Make 的用法。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。