Swiftに於ける変数の文字列化の評価の違い

プログラムをしていれば思わぬ結果に右往左往するのも多くあります。 其れはiPhoneアプリ開発に於いても例外ではありません。 以前では其の開発言語は Objective-C の一択であり自らもアプリを幾つか当該言語で以て記述してリリースしました。 今は多くアップル社から提供された新開発言語 Swift で書かれるアプリも多くなってきました。

開発アプリのヘックス画面
開発アプリのヘックス画面

Swiftは型に厳格な言語で更には思わぬバグを防ぐために 何の値をも持たない nil (null)を許す際には当該事項も型として用意されるものです。 optional (オプショナル)型と称すものですが なかなか理解が難しく正直自身も恥ずかしながら正確な部分迄把握は出来ておらず 都度都度対処療法を施している様な状況です。

さて今回落とし穴に陥ったのは変数の文字列化に於いてでした。 既にリリースのなっているアプリをバージョンアップしようと機能追加するに於いては 変数の宣言も形や場所を変えざるを得なくなります。 従来は変数の宣言を3次元配列から一義に代入していました。 以下の如くです。

NTT西日本のポイント交換サービスでAppleIDのクレジット残額を増やしてみた

今や電話と聞けば恐らく一般にはスマートフォンが想起されるが如く携帯電話が普通となり 固定電話などは事務所のものにて個人で所有するのは珍しい部類になるのかも知れません。 従ってNTTよりは移動体通信会社、NTT系なら其の傘下のNTTドコモとの付き合いの方が多くあります。 NTTの事務所にも最早出向くこともなくなり 大凡は電話に関しては携帯ショップを訪れるようになれば 偶に用事が生じてNTTに連絡を取ろうと思うと往生するようになりました。 ただインターネット回線はNTTに依る所も大きければ 毎月の請求もあり偶に連絡が寄せられることもあります。

NTT西日本から届いたポイント失効予告メール

App Store 現状クレジット残額
App Store 現状クレジット残額

さて日頃の喧しさにかまけて NTTから届くメールも打ち捨ててあれば 何時いつかのデジャビュ、 契約のNTT西日本から何度も催促のメールが来ています。 其の題目は お客さまのポイントが失効します とあり勿論何に損失を被るのかとの思いもありますが 其れよりは過去にもこんな光景があったのを思い出した訳です。 当該案件はブログ記事にして配信もしてありました。 其れが以下の記事です。

NTT西日本のポイント交換サービスでiPod nanoを申し込んでみた

「CLUB NTT-West インフォメーション」画面の告知「2017年4月末にお客さまのポイントが失効します。」
「CLUB NTT-West インフォメーション」画面の告知「2017年4月末にお客さまのポイントが失効します。」

情けは人の為ならず、ブログ記事にはしておくものです。 読めばただ失効してしまうのも惜しい、と言う くだりも 会員サイトにログインする必要があるのが腰を重くしていた、と言う くだりも 今の既視感を強くするものでした。

NTT西日本会員サイトにログインする

Spritekitのタッチイベントの検出と長押し及びタップ継続の検出

風船を膨らませているゲーム画面
風船を膨らませているゲーム画面

ファミコン以来ゲームはコントローラーを以て操作するのが常道でしたが iPhoneに代表されるスマートフォンの普及に連れタップやスワイプ、フリックなどで操作する必要が出来しゅったいしました。 ゲーム開発に限りませんがiPhoneに於ける開発では従って 其れ等操作の検出が必須となります。

タッチの検出

先ずタップではタッチを検出し、其の位置を検出し、 タッチの時間が閾値内であるならタップとするためタッチしている時間を検出する必要があるでしょう。 当該案件に関する有用な情報を昨日2017年3月27日配信した記事 -(void)update:(CFTimeInterval)currentTimeメソッドに於ける任意時間のコールバックメソッド でも参考にしたiPhone及びiOSゲームアプリ開発のチュートリアルサイト RAYWENDERLICH TUTORIALS FOR DEVELOPERS & GAMERS を参考にします。 現在Swiftをメインに SpriteKit Swift 3 Tutorial for Beginners が配信されていますが本稿では2014年4月12日の試行に於いて現在アーカイブされている Objective-Cで書かれた情報ページを参考にします。

Sprite Kit Tutorial for Beginners

-(void)update:(CFTimeInterval)currentTimeメソッドに於ける任意時間のコールバックメソッド

ゲーム開発に時間の処理が欠かせぬものとしてiPhoneアプリ内で 時間は如何様に扱われるのかの検証記事として本ブログに2017年2月19日に配信したのが -(void)update:(CFTimeInterval)currentTimeメソッドに於けるシステム時間の参考出力と考察 でしたが此のメソッドは任意の単位時間毎にコールバックメソッドを呼び出すにも応用が効きます。 其の様な応用を用いればこそ此のメソッド及び呼び出されるコールバックメソッドにて キャラクターのリアルタイム移動、 アイテムの一定時間毎の出現、 イベント起動、 等のゲームならではの機能を実現せしめ得ます。

関してはiPhone及びiOSゲームアプリ開発のチュートリアルサイト RAYWENDERLICH TUTORIALS FOR DEVELOPERS & GAMERS では以前日本語で有益な情報を提供してくれていましたが今は当該記事は残念ながら削除されている様です。 但し英語版が当時のObjective-Cでのコード記述から装いも新たにSwiftのコード記述に変えて 現在でも用意されていますので下にリンクを貼り置きます。

SpriteKit Swift 3 Tutorial for Beginners

またObjective-Cでの記述もアーカイブされているので其方も下にリンクを貼り置きましょう。 本記事に記載されるコードは単位時間毎の処理を実装した当時 2014年4月12日の試行錯誤に習い最後のコードを除き基本的には以下のページから引用するものです。

MacBook Pro 2016にSassとCompassを導入する

トラブルは繰り返されるものとて 己れの遭遇した不都合のブログへの配信は己が身にも都合良く機能し 延いては少しは他者のお役にも立とうかと言うものにて 以前は2016年8月5日に本ブログに投稿した記事 Windows10機へのCompassの導入とDEPRECATION WARNING問題 再び と言う訳で情けは人の為ならずと言った趣がある本記事は 今や手元の環境に必須となりし Sass 及び Compass を先日入手した新機 MacBook Pro にも導入しようとした際の顛末です。

スターバックス珈琲店で開いたMacBook Pro 2016
スターバックス珈琲店で開いたMacBook Pro 2016

尚Rubyで書かれた Sass、Compassを導入するには事前に Rubyの走る環境を整えねばならない のは言う迄もありません。事前の環境が整った後ターミナルを起動し 先ずはRubyGemでインストールされているプログラムリストを確認します。

投稿日:
カテゴリー: Mac

MacBook Pro 2016にHomebrew、rbenvを導入してシステムと別バージョンのRubyを使用する

FreeBSD に由来する MacOS Sierra には初めからプログラム言語 Ruby が備わっています。 ただ少しばかりバージョンが古いものなので新しいバージョンに置き換えたいものですが 何もごっそり丸さら置き換えなくとも新しい別バージョンを導入して並立出来得るものならばさせたい処です。 Macには固より此の様な場合に rbenv なるRubyのバージョン管理システムを利用するという確立された方法が用意されています。 此のrbenvを導入するには更にまた Homebrew なるMacのパッケージ管理システムが用意されています。 Rubyのバージョンを幾つか並立させる為には此れ等を逆から導入していく段取りとなります。

従って先ず手元の MacBook Pro 2016 にHomebrewを導入します。 インストールにはネットに繋がった状態でMacのターミナルを起動し Homebrewの公式サイト に用意される一行 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" をコピペして実行するだけで宜しいとされています。 手元の環境で以下の如く入力、実行しました。

Last login: Sat Mar 4 11:45:42 on ttys000
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然る後要求されたMacBook Pro 2016のパスワードを入力すると以下の如く出力されました。

==> Installation successful!

==> Homebrew has enabled anonymous aggregate user behaviour analytics.
Read the analytics documentation (and how to opt-out) here:
http://docs.brew.sh/Analytics.html

==> Next steps:
- Run `brew help` to get started
- Further documentation:
http://docs.brew.sh
Run `brew doctor` before you install anything
Run `brew help` to get started

インストール成功の表示の後に上に赤字で記した様に出力にされるインストール診断とヘルプ表示を実行し、 バージョンを確認してみればどうやら首尾良く運んだのが分かります。

$ brew doctor
Your system is ready to brew.

$ brew help
Example usage:
…(ry

$ brew -v
Homebrew 1.1.10
Homebrew/homebrew-core (git revision 8f25; last commit 2017-03-04)

Homebrewの準備が整えば次はrbenvの導入です。 以下ではRubyのバージョンを確認した後、 Homebrewを用いてrbenvをインストールしています。

投稿日:
カテゴリー: Mac

MacBook Pro 2016のターミナル.appで履歴を保存する

未だ MacBook Air 2013 は現役で活躍してくれていますから MacBook Pro 2016 ではそれほど ターミナル.app を使用する頻度も高くなく作業環境改善の必要性も感じていませんでしたが履歴が保存されない問題がありました。 しかし使用頻度が上がれば困る事態も屡々惹起される処となり 購入から数ヶ月にして漸く問題解決に重い腰を上げたものです。

結論から書けば原因は以下の2ファイルが存在しなかったからでした。

  • .bashrc
  • .bash_profile

此れで合点が行く向きは以下は読む必要がないでしょう。 然るべき記述をした2ファイルを作成すれば望む結果が得られるものと思います。 合点が行けば GitHub に以下の記事が纏めて書かれてあるため其方を参照すれば 態々本記事を読む迄もありません。

Mac(OSX)で.bashrcを編集する

因みに MacBook Air 2013では標準で2ファイルは備わっていたかに記憶しますので必要ありませんでしたが MacBook Pro 2016のターミナル.appに於いては標準では用意されておらず自ら用意する必要があるようです。 孰れ ユーザー辞書 の様にOSアップデートなどに伴い改善されるだろうとのんびり構えていても 一向に状況は変わらない筈なのでした。

投稿日:
カテゴリー: Mac

-(void)update:(CFTimeInterval)currentTimeメソッドに於けるシステム時間の参考出力と考察

iPhoneゲームアプリのアニメーション表示

iPhoneアプリを開発するにあたって開発環境である Xcode は勿論、 アップル社からは様々な純正のフレームワークが無料で提供されています。 中にも SpriteKit なるフレームワークは2Dゲーム開発用に提供されているもので iPhone専用にネイティブでゲームを開発するにはとても便利で有用です。

処でゲーム開発には時間の処理が欠かせません。 キャラクターの移動をリアルタイム処理したり 一定時間毎にアイテムを出現させたりイベントを起動させたり様々な要請が考えられるでしょう。 手元の開発ゲーム うさ犬が行く などでも其の開発初期にはアニメーションの表示タイミングを測るのに覚束ない面がありました。 SpriteKitではルートのViewとして用意されるクラス SKScene には initWithSize メソッドが用意され通例此処にゲームの初期設定などを記述しますが 此処にアニメーション表示タイミングを記述すると基本的に一定時間の繰り返し処理となり柔軟性に欠けます。 ゲーム内で要求されるフレキシブルな時間処理を把握するための取っ掛かりとして システム時間をログに出力させてみようと考えました。

なおゲームアプリ うさ犬が行く はリリース時には開発言語に Swift を採用していますが本記事に記述する内容の実行時期、開発当初に於いては Objective-C で記述していたものです。

UIButtonを画像が変化しないように無効化する

開発アプリはどのようなものであれ状態は様々遷移するに違いなく 遷移した状態に依ってはユーザーインターフェースの機能も変化するのは往往にして要請される処です。 其の代表がボタンでしょう。 タップ可能であるからこそのボタンですが 場合に依ってはこのタップを制限したいのも屡々です。 手元の開発アプリはゲームですので ゲームの勝敗が着けば例えばゲームを進める機能を有するボタンは押されて欲しくなくなると言った塩梅です。

iPhoneアプリ作成で利用する XcodeSwift ではボタン機能を有する機能は UIButton クラスで提供されています。 其のような言って見ればボタンクラスですので UIView を継承した UIControl クラスを継承しており此処でボタン足る様々な属性が提供されています。 アップル社の公式開発者用サイトの API ReferenceUIControl - UIKit を見れば様々な機能が用意されているのが分かります。

機能に先立って先ずはボタンが実装されていなければなりません。 手元の開発アプリに於いては以下の如く Asset Catalogで登録した画像 を利用して実装しました。

如何にMacBook ProのiCloudユーザー辞書は同期したか

アップル社のエコシステムは1社によりハードウェア及びソフトウェアが提供されるに依って至極便利な環境となっています。 少し前からは AirDrop なる機能が追加され同じApple ID端末では ドラッグ&ドロップでファイルの共有がとても便利になりましたし、 最近では iOS10及びmacOS Sierraに依ってクリップボードが共有されるのも便利に使い始めています。 其れ等便利な機能がアップル社のクラウドシステムに先鞭を告げたのが iCloud にて此れを通じて実現される 写真、連絡先、カレンダー、リマインダー、メール、メモ、iCloudドライブ、などの中にも 例えばメモでは取材などで手に入れた情報はその場でiPhoneに記録して 後から同期したPC端末のMacで加工し活用しますし 写真の扱いは最早此れ無くしては撮り貯まったものの整理整頓は難しく iPhoneをカメラとして活用するにエコシステム内での共有の簡単さは利用者に欠くべからざる環境としてあるでしょう。

MacBook Airのユーザー辞書設定
MacBook Airのユーザー辞書設定

就中なかんずく 便利に利用していたのがユーザー辞書の同期です。 IT環境のコアは現在残念ながらなかなかに日本で開発されるものではありませんからおよそ日本語環境の充実は進まないのですが 遅々としながらも最近では随分システム所与の辞書も語彙が整って来はしました。 しかし手元の活用法に於いては現在 歴史、郷土史について調べたデータが多く必然的に 関連する言葉を使用するに其れ等は残念ながらお仕着せの辞書に於いてはお世辞にも充実しているとは言えませんし 地方特有の地名などが見られないのは無理からぬ処で どうしても自らユーザー辞書に必要に応じて登録せざるを得ないのですが 此れがPC端末でユーザー辞書登録した語彙がiCloudを通して同期され 其の儘iPhoneの変換候補に挙がるのは実に便利に感じられるものなのでした。

投稿日:
カテゴリー: Mac