MacOS X デスクトップアプリのHelloWorld


開発環境

  • MacOSX HighSierra(10.13.6)
  • Xcode Version 9.4.1 (9F2000)
  • Swift4.2
  • Cocoa

MacOS Xのアプリケーション開発について

他のサイトや記事などの情報数自体が少なく、古い。
ボタン追加もソースコードで追加なんてしているところも…
この記事ではMain.storyboardを利用する。
古い記事によるとLabel変更は「label.text = "HellloWorld"」で変更しているが、現在のXcodeだとプロパティがないのでエラーが出る。
最新のSwift4.2は「label.stringValue = "HelloWorld"」になる。

Xcodeは不安定で操作しづらいところがある。Apple製のIDEはイマイチ。
Dash CodeというAppleのIDEがあったが、command+ZでUndoするとソースコードが消えるバグがあった。
Appleのアプリケーション開発は他の開発よりも多めに期間、工数をもらうこと。

HelloWorldの作成

ボタンを押下するとラベルが「HelloWorld」へ変化するアプリケーションを作成する。
WindowsアプリケーションをVisual Studioでやったことある人なら難なくできる。
プロジェクト作成方法は「MacOS X デスクトップアプリのプロジェクト作成」

Main.storyboardの編集

  • ボタンの配置

① Main.storyboardをクリックし、中央にGUI編集画面を表示させる。
② 右下にある「丸の中にある四角が入っている」アイコンをクリックし、GUI部品を表示させる。
③ フィルターに「button」を入力する。
④ 「Push Button」をドラッグ&ドロップでView Controllerにボタンを配置し、ボタンのラベルは任意に入力する。

  • ラベルの配置

似た手順でラベルも配置する。

ボタンとラベルを配置ができたら、左上の「再生」ボタンでビルドが成功するか確認する。
まだボタンを押下しても反応はない。
確認が終了したら「停止」ボタンでプロセスをkillする。

ボタンのイベントハンドラー追加

ボタンのイベントハンドラーを追加させるためXcodeを操作する。

右上にある「重なってる丸」アイコンをクリックし、中央にMain.storyboardとViewController.swiftを表示させる。(たまに違うソースファイルが表示されるので注意する。)

ボタン部品をクリックし、右上にある「丸の中に→がある」アイコンをクリックする。
「action」にある+をViewControllerソースコードの最後にドラッグ&ドロップする。
ポップアップされたウインドウにNameを任意に入力し、イベントハンドラーメソッドを追加する。(今回はonButtonを入力した。)

追加したonButtonメソッドにprintでログを出力するようにする。

ViewController.swift
import Cocoa

class ViewController: NSViewController {

    // viewDidLoad()、representedObjectを省略

    @IBAction func onButton(_ sender: Any) {
        print("ボタンが押されました。")
    }
}

注意として、エディタのonButton横にある二重丸はバインド設定をしているという意味になる。

アンバインドした場合は違う色になる。

アンバインド方法はボタン部品の「Sent Actions」の「ばつ」ボタンをクリックすればできる。
またバインドしたい場合は「+」から「onButtonメソッド」にドラッグ&ドロップして登録できる。

ここでアプリケーションが正常動作するか確認する。
「再生」ボタンでデバッグ、ウインドウにあるボタンをクリックし、ログがコンソールに流れる。
確認が終わったら「停止」ボタンをクリックして終了させる。

ここでログに例外発生している場合は多重にアプリケーションが起動していたり、手順が間違えている。
実際にHelloWorldを作成し、確認しながらこの記事を書いているからだ。
前のプロセスをkillさせずに「再生」ボタンをクリックしたら例外発生した。

ラベルのバインド

ボタンのイベントハンドラーと同じ要領でできる。
右クリック押し続け、またはCtrlキーを押し続けながらラベル部品からメンバ変数のところにドラッグ&ドロップで追加できる。
Nameは変数名で任意(今回はmyLblと入力)、「Connect」ボタンを押下すると「@IBOutlet weak var myLbl: NSTextField!」が追加される。

ラベルのタイトル変更するコードを追加する。

ViewController.swift
import Cocoa

class ViewController: NSViewController {
    @IBOutlet weak var myLbl: NSTextField! // Main.storyboardで追加とバインドした

    // viewDidLoad()、representedObjectを省略

    @IBAction func onButton(_ sender: Any) {
        print("ボタンが押されました。")
        myLbl.stringValue = "HelloWorld"   // LabelからHelloWorldへ変更する
    }
}

ボタンをクリックすると「Label」から「HelloWorld」へ変更する。
「HelloWorld」の表示が欠ける場合はMain.storyboardのラベルを横に伸ばす。

以上、フォローといいねをよろしくお願いします。