iOSアプリ開発者になりたくて積んでたXcodeではじめるSwiftプログラミングを読んだ

SwiftでiOSアプリ開発やってみたい、けどXcodeすらまともに触れないという状態だったので2年くらい前に買ったXcodeではじめるSwiftプログラミングを読みました。

XcodeではじめるSwiftプログラミング

XcodeではじめるSwiftプログラミング

TOC

  • 1章. Xcodeを始めるための予備知識
  • 2章. プロジェクトの作成から実行までの流れ
  • 3章. Swiftプログラムの基本を学ぶ
  • 4章. オブジェクトの基本操作を理解する
  • 5章. 制御構造を理解する
  • 6章. 文字列/日付時刻/コレクションの操作
  • 7章. 関数のいろいろな活用方法
  • 8章. オリジナルのクラスを活用する
  • 9章. iOSアプリケーション作成の流れ

読書メモ

各章節または自分が理解できるひとかたまりでざっくりまとめたものから、言語仕様以外の部分を。一部あとの章で紹介される内容を先にメモってる箇所もあります。

1章. Xcodeを始めるための予備知識

Swiftとはどんな言語か

Xcodeについて

  • Xcode 6からコンパイラGCCからApple LLVMに置き換わった
  • 左上にEditorグループがあり、スタンダードエディタ、アシスタントエディタ、バージョンエディタを切り替えられる
  • コードの行番号を表示するには、Xcode->Preferences->Text Editing->Editing->Show->Line numbers
  • オンラインマニュアルは、Window->Documentation and API Reference(shift+command+0)

2章. プロジェクトの作成から実行までの流れ

テンプレートからプロジェクトを作成する

  • プロジェクト名、組織名、組織ID、言語を指定する。
  • 作成されたプロジェクトファイルは.xcodeproj
  • プロジェクトをビルドして生成される成果物をターゲットと呼ぶ
    • 例えばサーバ/クライアント構成のプロジェクトでは、サーバアプリケーション、クライアントアプリケーション、共通ライブラリのように3つのターゲットを用意することができる
  • Build Settingsパネル
    • Basicで基本の設定のみ、Allですべての設定が表示される
    • Combinatedで最終的な設定、Levelsでターゲットの設定、プロジェクトの設定、デフォルトの設定が階層表示される
      • git config --local と --global みたいなものか
  • Swiftソースファイルの拡張子は.swift

ビルドとメモリ管理

  • ビルドしたらRunで実行
    • ビルド設定をまとめたものをスキームと呼ぶ(Visual Studioにおける構成管理)
    • 実行、停止ボタン右のスキーム名右クリックからEdit Schemeを選択でスキームを設定可能
  • メモリ管理はARC(Automatic Reference Counting; 自動的な参照カウンタ方式)
  • ビルドされた実行ファイルは、ホームディレクトリ->ライブラリ->Developer->Xcode->DerivedData->プロジェクト名xxxx以下に生成される
    • プロジェクトナビゲータでProducts->プロジェクトフォルダを右クリックしてShow in Folder

ターミナルでビルド

  • swiftc -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk -o hello main.swift
    • -sdkSDK指定、-oで生成するオブジェクト名
  • otool -Lでオブジェクトが使用する共有ライブラリを確認できる

3章. Swiftプログラムの基本を学ぶ

割愛。

Playgroundファイル

  • Playgroundの実態は、プロジェクトに依存しない個別のファイル
    • 内部には複数のファイルがパッケージングされている
  • Welcome to Xcode画面でGet started with a playgroundを選択するか、プロジェクトを開いてFile->New->Playgroundで開始できる

4章. オブジェクトの基本操作を理解する

割愛。

5章. 制御構造を理解する

割愛。

6章. 文字列/日付時刻/コレクションの操作

割愛。

7章. 関数のいろいろな活用方法

割愛。

8章. オリジナルのクラスを活用する

割愛。

9章. iOSアプリケーション作成の流れ

このあたりから実践しながら書いたので本書にないものも書いてる

概要

  • iOSのレイヤー
    • Cocoa Touchレイヤー
    • Mediaレイヤー
      • マルチメディア処理
    • Core Servicesレイヤー
    • Core OSレイヤー
      • OSの基本機能
  • iOSアプリにはGUIが必要
  • Xcode内蔵のGUIデザインツール「Interface Builder」を使用してGUIを作成する
    • コードで記述も可能
  • 画面は、画面定義Viewと画面制御ViewControllerのペアからなる
  • デザインしたViewはStoryboardファイルに保存される
  • Storyboardでは画面間の遷移をXcodeGUIで見たまま構成できる
  • アプリケーションのテストはiOSシミュレータで行う

プロジェクトの作成

  • 新しいプロジェクトを開き、iOS->Applicationから適当なテンプレートを選択
  • プロジェクト名、組織IDを入力し、言語にSwiftを選択して次へ
  • 保存先フォルダを選択してCreateを押すと、選択したフォルダにプロジェクト名のサブフォルダができ、そこにプロジェクトが作成される

プロジェクトの構成

  • .xcodeproj
    • プロジェクトファイル
  • アプリ/AppDelegate.swift
    • @UIApplicationMainがアプリ起動時に呼び出される。その他アプリの状態変化イベントで呼び出されるデリゲートメソッドが定義してある。
  • アプリ/Main.storyboard
    • Viewと画面遷移の定義
  • アプリ/LaunchScreen.storyboard
    • スプラッシュ画面の定義?
    • 中に定義されているViewのInterface Builder DocumentにあるUse as Launch Screenにチェックが入っているとスプラッシュ画面として呼び出されるのだろうか
    • Xcode 9.2時点ではLaunchScreen.xibファイルはなく、.storyboardに統一されたようだ
  • アプリ/Assets.xcassets
    • アプリ内で使用する画像などのアセットファイルを登録する
    • Xcode 9.2時点ではImages.xcassetsではなく、Assets.xcassetsという名前に変更されているようだ
  • アプリ/ViewController.swift
    • Viewと紐付けれれたController. viewDidLoadに読み込み完了時の処理を記述する。didReceiveMemoryWarningはメモリ不足時に呼び出されるので、ここにメモリ解放等の処理を記述する
  • アプリ/Info.plist
    • 本書には記載なし。なにかハマったときにいじくるファイルという理解
  • アプリTests,アプリUITests
    • テストの雛形
  • Products
    • おそらく成果物が生成される

Interface BuilderでMain.storyboardを開く

  • 画面の説明。Storyboardでは各画面のことをシーン(Scene)と呼ぶ
    • Sceneがあり、ViewControllerがあり、Viewがある
    • First ResponderとExitはなるほどわからんとおもった
  • 左下にドキュメントアウトラインを開く/閉じる、右下にミニツールバーがある

プロジェクトをビルドして実行する

  • 画面上部ツールバーの「Scheme」から実行対象を選び、Runボタンで選んだ実行対象上でアプリが動作する。シミュレータのiPad 9.7inchで試した
  • シミュレータの初期言語は英語なので、Homeボタンで実行中のアプリをバックグラウンドへ送り、設定から言語を日本語にする

StoryboardにGUI部品をレイアウトする

  • 右下のライブラリペインから、オブジェクトライブラリを開き、GUIオブジェクトをViewにドラッグ&ドロップ
  • 配置したオブジェクトのアトリビュートインスペクタ(右上のアイコン並んているところからボリュームみたいなやつを選択)でいろいろ設定できる

アウトレットの設定

  • Outlet; ViewControllerからGUI部品をインスタンス変数として参照する仕組み
  • 1章の「Xcodeについて」で触れたアシスタントエディタを開き、GUIオブジェクトを選択してcontrolを押しながらコードにドラッグ&ドロップ。必要なプロパティを設定してConnectを選択するとインスタンスを参照するためのコードが挿入される
    • Storage: ARCのメモリ管理の属性設定。デザインファイルに配置したGUI部品なら基本的にWeak(弱い参照)

ボタンにアクションを設定

  • ボタンを配置し、アシスタントエディタにcontrolを押しながらドラッグ&ドロップ
  • ConnectionにActionを選択し、Eventに指定したイベント発生時に呼び出すメソッド名をNameに指定してConnectを選択する

ここまでの内容で作ったアプリ

f:id:Cormorant:20171209084657g:plain
(ボタンクリックで現在日付を取得して表示)

iPhone用カレンダーアプリを作成する

割愛

SwiftでiOSアプリ作れるようになった

Xcodeの使い方を含め解説してくれるおかげでサクッとできました。Swiftはともかく、Xcodeの使い方がいまいち分からず雰囲気でやっていたところがあったので、この本を読んで非常に助けられました。

8章まで9月30日に読み切ったのに、そこから放置して実際にiOSアプリ作る9章を読み始めたのが12月9日になってから、というのがほんとうに残念ですね。どうしてあきらめるんだそこで!最後まで読め!

いま困ってることリストとやっていく解決策

日記

やっていくぞ!って気持ちになってから150日くらい経ったみたいでちょっとびっくりしました。

やっていくにあたって

自分がコードを書いたりシステムを構成するときはほぼ自分のインターネットライフで困っていることをDIYで解決したいときなので、 まずはいま困っていることを挙げていきます。

いま困ってること

1. (自分にとって)いいかんじのTwitterクライアントがない

  • 昔オレオレTwitter IRC Gateway作ったけど壊れてる
  • 欲しいのは以下の機能
    • 発言のログをNASにためとく
    • 発言とライクの統計をとる
    • リストベースの表示
    • コマンドベースの操作
    • 通知が来たら喋る

2. なろうビューワ壊れた

  • ラノベルをずっとつかってる
  • 小説データがダウンロードできなくなった(9/28)
  • 寝る前になろう小説読んでそのまま寝落ちするのが日課になっていて、昨日読めずにそのまま寝ようとしたら全然寝付けなかった
  • なろう小説が読めないことで健康に害が出るとは思ってなかった

3. ニコ動プレーヤー壊れた

  • nFinder2を昔から使っていて、だんだんと動かない部分が出てきたけどごまかしごまかしやってきたのが、数か月前からいよいよ再生できなくなってしまった
  • 死んでいくアプリケーションを見つめながら生活するのは悲しい

4. Amazonのおすすめになろう小説となろう原作漫画しか出てこなくなった

  • Kindleでなろうでなった小説をいくつか買ったらレコメンドが埋め尽くされてしまってつらい
  • Amazonのレコメンドは体感としてすぐ極端に走る傾向がある、続巻が出たら通知くらいでいいんですよ

5. LDR終わった

6. エアコン切り忘れる

  • 寒くなってきたので寝るときエアコン消し忘れると体調崩すようになった
  • 部屋備え付けのエアコンの予約機能が貧弱なので予約の定期実行ができない

7. 電気消し忘れる

  • トイレとキッチンと洗面所の電気をしょっちゅう切り忘れててノットエコ

いまやりたいこと

A. Xamarin

B. Apache Cordova

  • Xamarinとの違いを体感しておきたい

C. Unity

  • VRアプリケーションを作ってみたい

D. Webアプリケーション開発

  • TypeScript
  • Angular2
  • Vue.js
  • 自動E2Eテスト
  • Node.js + Yarn + Webpackでいい感じのモダン開発

E. Go

  • 同僚がgolangで便利CUIツール量産していて羨ましいので

F. Swift

  • Objective-Cを読んでたら頭おかしくなってきたので

G. Kotlin

  • AndroidやるうえでXamarinとどっちがいけそうか見ておきたい

H. IoT

  • 諸般の事情によりbluetoothモジュールかzigbeeモジュールで開発しなきゃならなくなったので無線通信でなんかのデバイスを動かす装置を作ってみたい

I. データ分析

  • レコメンダシステムの作り方を勉強したい

解決策

1×(B or D): 自作クライアントの復活とクライアントフロントエンドを開発

自作クライアント復活させて、それとWebRTCでつながるフロントエンドを開発してどこでもオレオレクライアントでツイッター出来るようにしたい。

これはめっちゃ道のり遠そうですね。。

2×F: なろうビューワ作成

SwiftでiOSアプリケーションの作り方勉強しながらとりあえず作ってみる。これはすぐやろう。

3×A: Xamarinでニコ動プレーヤー作る

部屋においてあるどの端末からも過去保存したニコ動みたいというワガママを叶えたいんだけどきつそう。

4×I: Amazonとは別のサービスからデータ抽出していい感じのレコメンドにする

やってみたい感じはあるけどターゲットとなるサービスすら定まってないのがアレだ。

6×H: エアコン設定アプリとIR発信で操作

わからん。

7×(E,H): 光センサとラズパイをbluetoothで繋いでgolangのツールで監視

できそう。

やっていくマトリクス

- A B C D E F G H I
1
2
3
4
5
6
7

5.LDRの代替はfastladderを自前で立てるしかなさそうで、LDR復活を祈ることにします。

C.UnityとG.Kotlinやる場がないのでつくらないと。

GPartedを使ってパーティションを別のドライブへ移動する記事を書いた

容量が残り僅かです

以前M.2ポートのSSDを購入する際にケチって120GB1のを買ったら、Cドライブが残り10Gの所まで来てしまった。VRアプリケーション作りたいので開発環境入れるとなると確実に足りない。

ので

250GB2SSDを買ってきてパーティションまるごと移動しました。

qiita.com

しましたと言いつつまだしてない。力尽きたのでつくりかけ記事です。あとで書く。

VR沼にはまりつつある。


  1. SSDの容量ってなんで割り切れない数字多いんだろう

  2. 同上

HTC Viveを購入して1週間が経った

まえがき

VRといえば、去年はVR元年と呼ばれるくらいには身近にVRコンテンツが現れ始めた年だった。関連記事も多く見かけるようになり、そうやってVRの話題を目にするたび実物が気になっていた。

初音ミクやUnityちゃんのコンテンツが話題になってるなーと思って眺めているうちに、ゲーム実況動画の中にちらほらVRゲーム実況が上がるようになったり、ゆかりごっこ(VRで結月ゆかりになりきって生放送を行う)などぶっ飛んだことをやってる方が出てきて、そういうのを見ているうちにVRやるぞという気持ちが高まってしまい、先週末仕事帰りに秋葉原ツクモに寄って買ってきてしまった。

ということなのでVRの感想日記かきます。

PCスペック

項目 内容
CPU Intel Core i5-6600
GPU ELSA GeForce GTX 1060 6G
メモリ 16GB
電源 550W
マザーボード Mini-ITX

HMDに映像を出力する際は左右両方の目にそれぞれフルHD映像を60~90fpsで流さないと違和感がひどくてVR酔いするらしいので、グラボとそれが入るPCケースを新調している。

セットアップ

HTC Viveの箱にはセットアップの手順が詳しく乗った説明書は入っていないので、配線やステーションの設定など最初の導入に結構時間がかかった。とりあえず繋いで出たエラーをメッセージ見て解消する、HMD・PCを再起動すると言ったことを繰り返してるうちにルームセットアップまで進めた。

動作確認だけして翌日

プレイしたもの

The LabとGoogle Earth VRばっかりやってまだ他のゲームができていない…

Steam VR チュートリアル

VALVEおなじみの世界観でVR操作をレクチャーしてくれる。たのしい。

The Lab(VALVEのVRデモ)

旅行者となってAperture Science内のポケットユニバース(ちっちゃい別宇宙)を旅するミニゲーム集。たのしい。

Google Earth VR

Google Earthが発表されたときの感動をスケールアップしてもっかい体験できる。たのしい。

Valkyrie Blade VR

金髪ミニスカのお姉さんになってチャンバラゴッコするゲーム。

移動が思うように行かなかったりガードの判定が難しくてすぐ死ぬ。いろいろバギーな感じでVRゲーム黎明期だなーと思える。

VRの感想

「VRの世界ではGTX10xx番台になって初めて最低ラインの人権が与えられる。ミドルレンジ未満のグラボでは存在することを許されない」と脅されていたため、GTX1060で大丈夫だろうかと心配だったのだけど、いまのところプレイ中に酔うことはない。映像がわずかに網目状にぼやっと見えるが、これはグラボの性能と現在のHMDの表現力の限界だろうか。でももともと目が悪いせいか裸眼よりはっきり見えるので気にならない(プレイ中はメガネしてない)。ただ結構目が疲れます。

すぐ思いつきそうなことはThe Labの中でだいたいやってしまっていて(それも割と高品質に)、開発元のVALVEがやっちゃうのかよとは思った。よく見かける弓のゲームもThe Lab内の一コンテンツ。

それから、普段全く体を動かしていないので30分もしないうちに腕が上がらなくなってくる。楽しいVR体験には健康な肉体が必要。

あとはへやがきれいになりました。

お金の話

本体とステーション、コントローラーのセットだけで10万するので手軽に始めることは難しい。要求スペックが高いので、PCの更新にも同じ額くらいは見ておいたほうがいい。ステーションの配置にライトスタンドも買うことになるだろうし、コントローラの保護ケースもほしい。プレイエリアを確保するために部屋の模様替えも必要だろうから、金額的な負担は相当なものになる。私はグラボを買い換えたが金銭的な面と電力的な面でGTX1060が限界だった。実際にいくら使ったかは考えたくない。ソシャゲにじゃぶじゃぶ金をつぎ込んでる廃課金者を笑っていたが、これではやってることはそんなに変わらない気がする。

今後

ゲームに限らずなにかVRのソフトウェア作ってみたいですね。

あとがき

ブログを書くのは実に3年ぶり。就職してから一切アウトプットらしいことはしてこなかったのだけど、いいかげん何か私的な活動をしたいなとおもい、とりあえずURLだけ取っておいたこのブログを始めてみることにしました。

都内でSIerとして消耗しているエンジニアです。普段はTwitterで毒にも薬にもならないことをつぶやいてます。技術的なことはQiitaに書くつもりだし、その日の出来事はダイアリーを再開させようと思ってるので、ここは特にテーマの決まってない雑記帳みたいになるのではと思っています。雑なのでですます・である調もあやふやです。あとひとが怖い。

ブログ速攻飽きそうなんですけどよろしくお願いします。

買ったもの

ELSA GeForce GTX 1060 6GB S.A.C グラフィックスボード VD6174 GD1060-6GERS

ELSA GeForce GTX 1060 6GB S.A.C グラフィックスボード VD6174 GD1060-6GERS

HAKUBA 自由雲台 BH-1

HAKUBA 自由雲台 BH-1