LoginSignup
13
9

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-09-17

開発環境

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

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

他のサイトや記事などの情報数自体が少なく、古い。
ボタン追加もソースコードで追加なんてしているところも…:fearful:
この記事では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にボタンを配置し、ボタンのラベルは任意に入力する。

Xcode_mainstoryboard_button.png

  • ラベルの配置

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

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

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

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

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

xcode_btn_event1.png

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

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

ViewController.swift
import Cocoa

class ViewController: NSViewController {

    // viewDidLoad()、representedObjectを省略

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

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

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

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

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

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

ラベルのバインド

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

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

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のラベルを横に伸ばす。
macosx_label_helloworld.png

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

13
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
9